Name: series-workflowx26vb Phase: Succeeded StartedAt: 2026-08-13 13:36:54 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[0] Phase: Succeeded StartedAt: 2026-08-13 13:36:54 +0000 UTC FinishedAt: 2026-08-13 14:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:36:54 +0000 UTC FinishedAt: 2026-08-13 14:02:48 +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": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "e0deb464-9865-4255-afb7-075e1eb09752" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_strp_check_rcv", "tls_sw_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cblxuQnkgYWRkaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCBiZWZvcmUgcGFyc2luZyB0aGUgaGVhZGVyLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGRldGVjdHMgdGhlc2UgZWRnZSBjYXNlcyBhbmQgZmFsbHMgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YCwgd2hpY2ggdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcHJvcGVybHkgcmVhc3NlbWJsZSB0aGUgVENQIHN0cmVhbSBpbnRvIGEgbGluZWFyIGJ1ZmZlciBiZWZvcmUgcGFyc2luZy5cblxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc3RyZWFtIHBhcnNlciByZWNlaXZlIHBhdGggKGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgKSB0byBjb3JyZWN0bHkgY2hlY2sgdGhlIHF1ZXVlIGxlbmd0aCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVExTIHJlY2VpdmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRMUyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuY1xuaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3RycC5jXG5AQCAtNDMwLDkgJiM0Mzs0MzAsMTAgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuJiM0MztzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGxlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbGVuID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICYjNDM7IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgJiM0MzsgbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiO1xuIFx0dTMyIHNlcTtcbiBcbkBAIC00NDMsOSAmIzQzOzQ0NCw5IEBAIHN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuIFx0LyogTWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcbiBcdCAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLlxuIFx0ICovXG4tXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuKSB7XG4mIzQzO1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuIFx0XHRzZXEgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4tXHRcdGxlbiAtPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0cmVtYWluaW5nIC09IHNrYi1cdTAwM2VsZW47XG4gXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuIFxuIFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAhPSBzZXEpXG5AQCAtNTI1LDYgJiM0Mzs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXG4gXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4mIzQzO1x0XHRpZiAoaW5xIFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXG4mIzQzO1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4mIzQzO1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuJiM0MztcbiBcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xuIFx0XHRpZiAoc3ogXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHN6O1xuQEAgLTUzNSw3ICYjNDM7NTQxLDcgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbiBcdH1cbiBcbi1cdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCkpXG4mIzQzO1x0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbikpXG4gXHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuIFxuIFx0V1JJVEVfT05DRShzdHJwLVx1MDAzZW1zZ19yZWFkeSwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzMGQ2OGU1ZWZiNWY4OTIwNTJjMTEyZDA3YmQxYTY0MDEwZDI1MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuYwppbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3RycC5jCkBAIC00MzAsOSAmIzQzOzQzMCwxMCBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQomIzQzO3N0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc3RycC0mZ3Q7c3RtLm9mZnNldCAmIzQzOyBzdHJwLSZndDtzdG0uZnVsbF9sZW47CiYjNDM7CXVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLSZndDtzdG0ub2Zmc2V0ICYjNDM7IGxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7CiAJdTMyIHNlcTsKIApAQCAtNDQzLDkgJiM0Mzs0NDQsOSBAQCBzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAkvKiBNYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gZHVwbGljYXRlIGRhdGEgaW4gdGhlIHF1ZXVlLAogCSAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLgogCSAqLwotCXdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IGxlbikgewomIzQzOwl3aGlsZSAoc2tiLSZndDtsZW4gJmx0OyByZW1haW5pbmcpIHsKIAkJc2VxICYjNDM7PSBza2ItJmd0O2xlbjsKLQkJbGVuIC09IHNrYi0mZ3Q7bGVuOwomIzQzOwkJcmVtYWluaW5nIC09IHNrYi0mZ3Q7bGVuOwogCQlza2IgPSBza2ItJmd0O25leHQ7CiAKIAkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxICE9IHNlcSkKQEAgLTUyNSw2ICYjNDM7NTI2LDExIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQogCiAJdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpOwogCWlmICghc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuKSB7CiYjNDM7CQlpZiAoaW5xICZsdDsgVExTX0hFQURFUl9TSVpFKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7CiYjNDM7CQlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpCiYjNDM7CQkJcmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7CiYjNDM7CiAJCXN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtJmd0O2FuY2hvcik7CiAJCWlmIChzeiAmbHQ7IDApCiAJCQlyZXR1cm4gc3o7CkBAIC01MzUsNyAmIzQzOzU0MSw3IEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQogCQkJcmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTsKIAl9CiAKLQlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnApKQomIzQzOwlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtJmd0O3N0bS5mdWxsX2xlbikpCiAJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwogCiAJV1JJVEVfT05DRShzdHJwLSZndDttc2dfcmVhZHksIDEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3Rscy90bHNfc3RycC5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBzb21lIHRoaW5ncyBhcm91bmQgdGhlIHN0cmVhbSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIGBzdHJwLSZndDtzdG0uZnVsbF9sZW5gLCB3ZSYjMzk7cmUgbm93IHBhc3NpbmcgaW4gYSBgbGVuYCBhcmd1bWVudCBkaXJlY3RseS4gVGhhdOKAmXMgYSBnb29kIG1vdmUsIG1ha2VzIHRoZSBmdW5jdGlvbiBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IGF2b2lkcyByZWR1bmRhbnQgY2FsY3VsYXRpb25zIGlmIGBmdWxsX2xlbmAgaXNuJiMzOTt0IGFsd2F5cyBjdXJyZW50LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBhZGRpdGlvbiBpbiBgdGxzX3N0cnBfcmVhZF9zb2NrYC4gV2XigJlyZSBwcmVlbXB0aXZlbHkgY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgICpiZWZvcmUqIGhpdHRpbmcgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpYC4gVGhpcyBpcyBrZXkuIEl0IGltcGxpZXMgd2UmIzM5O3JlIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICpiZWZvcmUqIHdlIGF0dGVtcHQgdG8gcGFyc2UgYW55IGhlYWRlcnMuIFRoYXQmIzM5O3MgYSBzb2xpZCBkZWZlbnNlLWluLWRlcHRoIGFwcHJvYWNoLiBXZSYjMzk7cmUgbG9va2luZyB0byBhdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBhIGJpdCBkZWVwZXIgbm93IGFuZCBzZWUgdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIGNoZWNrIGlzIHVzaW5nIGBUTFNfSEVBREVSX1NJWkVgIGhlcmUsIHdoaWNoIHN1Z2dlc3RzIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSBzaXplIG9mIHRoZSBUTFMgaGVhZGVyIGZpcnN0LgoKVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgVExTX0hFQURFUl9TSVpFYCBhY3R1YWxseSByZXByZXNlbnRzIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdXIgbWVzc2FnZSBwYXJzaW5nIHN0cmF0ZWd5LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgd2UgYXJlIGNhbGN1bGF0aW5nIGFuZCB2ZXJpZnlpbmcgdGhlIGFjdHVhbCBpbmNvbWluZyBtZXNzYWdlIHNpemUgYWZ0ZXIgdGhpcyBpbml0aWFsIGNoZWNrLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSB1c2Ugb2YgdGhlIGBhbmNob3JgLiBJIGFtIGFsc28ga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgZ2l2ZW4gdGhpcyBwcmUtZW1wdGl2ZSB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX3JlYWRfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MTItLyogQ2FsbGVkIHdpdGggbG9jayBoZWxkIG9uIGxvd2VyIHNvY2tldCAqL1xubmV0L3Rscy90bHNfc3RycC5jOjUxMzpzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy01MTQte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU2MS1cbm5ldC90bHMvdGxzX3N0cnAuYzo1NjI6XHRpZiAodGxzX3N0cnBfcmVhZF9zb2NrKHN0cnApID09IC1FTk9NRU0pXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTYzLVx0XHRxdWV1ZV93b3JrKHRsc19zdHJwX3dxLCBcdTAwMjZzdHJwLVx1MDAzZXdvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgcHJvdG9jb2xzOgoKKipUcmFjaW5nIGEgRGF0YSBGbG93IGluIHRoZSBUTFMgU3RhY2sqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlYWRzIGRhdGEgZnJvbSB0aGUgc29ja2V0LCBhbmQgYHRsc19zdHJwX2NoZWNrX3JjdmAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBgdGxzX3N0cnBfY2hlY2tfcmN2YCBpcyBnZXR0aW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB0bHNfc3RycF9jaGVja19yY3ZgLiBXaGVyZSYjMzk7cyBpdHMgY2FsbHNpdGU/IFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgVExTIGltcGxlbWVudGF0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgd2lsbCBwcm92aWRlIHRoZSB2aXRhbCBjb250ZXh0IHRvIG15IGFuYWx5c2lzLiBUaW1lIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk0PXZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmgtMTk3LXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcdFx0dGxzX3N0cnBfY2hlY2tfcmN2KFx1MDAyNnJ4X2N0eC1cdTAwM2VzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01ODItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xubmV0L3Rscy90bHNfc3RycC5jLTU4NC19XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVx0bG9ja19zb2NrKHN0cnAtXHUwMDNlc2spO1xubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01OTMtXHRyZWxlYXNlX3NvY2soc3RycC1cdTAwM2Vzayk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxubmV0L3Rscy90bHNfc3RycC5jLTU5OC0gKiByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrLCBvciBxdWV1ZWQgZGF0YSB3aWxsIHN0YWxsIHVudGlsIHRoZVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVx0XHRcdCAqL1xubmV0L3Rscy90bHNfc3cuYzoxMTI1Olx0XHRcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xMTI2LVx0XHRcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTYyNi1cdHRsc19zdHJwX21zZ19jb25zdW1lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBUTFMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhIHBhdGNoIG1vZGlmeWluZyB0aGUgY29yZSBUTFMgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC90bHMvYCBkaXJlY3Rvcnkg4oCTIHRoZSBoZWFydCBvZiB0aGUgVExTIGltcGxlbWVudGF0aW9uIGFjY2Vzc2libGUgdmlhIFRMUyBzb2NrZXRzLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBmdW5jdGlvbnMgdGFyZ2V0ZWQ6IGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdGxzX3J4X21zZ19zaXplYCBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgcmVjZWl2ZSBwYXRoLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoaXMgYXJlYSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGludGVuc2l2ZSBmdXp6aW5nLiBJIG5lZWQgdG8gZ2V0IHRoaXMgaW50byBteSBmdXp6aW5nIHBpcGVsaW5lIEFTQVAuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBUTFMgdG8gZW5zdXJlIEkmIzM5O20gZnV6emluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byB0YXJnZXQgdGhpcyBtb2RpZmljYXRpb24gY29tcHJlaGVuc2l2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFNjb3BlKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBUTFNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhbmQgZnJhbmtseSwgbXkgc3RhbmRhcmQgcHJvY2VkdXJlLCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggc3dlZXAgb2YgdGhlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYFRMU2AgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZS4gQXJlIHRoZXJlIGFueSBsZWdhY3kgY29uZmlncyBsdXJraW5nIGFyb3VuZD8gTWF5YmUgc29tZSBoaWRkZW4gb3ZlcnJpZGVzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIGV2ZW4gZGlmZmVyZW50IGNvbXBvbmVudHMgdGhhdCAqc2hvdWxkKiBiZSBhbGlnbmVkIGJ1dCBhcmVuJiMzOTt0PyBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoaXMgYFRMU2Agc2V0dGluZyBoYXMgYSBmdWxseSBlbmNvbXBhc3Npbmcgc2NvcGUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgb3RoZXJ3aXNlLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzZXR1cC4gR290dGEgYmUgc3lzdGVtYXRpYyBhbmQgZWxpbWluYXRlIGFueSBibGluZCBzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG5uZXQvdGxzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVFxubmV0L3Rscy9LY29uZmlnLTgtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG5uZXQvdGxzL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIFRMU1xubmV0L3Rscy9LY29uZmlnLTIyLVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVExTYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyBzb2NrZXQgcmVhZHMuIEkgc2VlIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgYWxzbyBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgb3V0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cywgYXMgdGhhdCB3b3VsZCBzdWdnZXN0IGhvdyB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLCBnaXZlbiBpdHMgbGltaXRlZCBzY29wZS4KCkkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBgdGxzX3N0cnBfY2hlY2tfcmN2YCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudC4gTm93IEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgc2ltaWxhciBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IG1heSBleGlzdC4gSSBhbSBsb29raW5nIGZvciBvdGhlciBjYWxsaW5nIGZ1bmN0aW9ucyB0byBnYWluIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk0PXZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmgtMTk3LXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcdFx0dGxzX3N0cnBfY2hlY2tfcmN2KFx1MDAyNnJ4X2N0eC1cdTAwM2VzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01ODItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xubmV0L3Rscy90bHNfc3RycC5jLTU4NC19XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVx0bG9ja19zb2NrKHN0cnAtXHUwMDNlc2spO1xubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01OTMtXHRyZWxlYXNlX3NvY2soc3RycC1cdTAwM2Vzayk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxubmV0L3Rscy90bHNfc3RycC5jLTU5OC0gKiByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrLCBvciBxdWV1ZWQgZGF0YSB3aWxsIHN0YWxsIHVudGlsIHRoZVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVx0XHRcdCAqL1xubmV0L3Rscy90bHNfc3cuYzoxMTI1Olx0XHRcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xMTI2LVx0XHRcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTYyNi1cdHRsc19zdHJwX21zZ19jb25zdW1lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSZWFkaW5lc3MqKgoKQWxyaWdodCwgc28gYHRsc19zdHJwX2NoZWNrX3JjdmAgY2F1Z2h0IG15IGV5ZSBhcyBhIGxpa2VseSBrZXkgZm9jdXMgc3ltYm9sLiBHb29kIGNob2ljZS4gQnV0IHdhaXQsIGB0bHNfc3RycF9kYXRhX3JlYWR5YCBhbHNvIGxvb2tzIGludGVyZXN0aW5nLCBhbmQgaXQgaXNuJiMzOTt0IHN0YXRpYyB3aGljaCBpcyB1bnVzdWFsLiBUaGUgZmFjdCB0aGF0IGl0ICpjYWxscyogYHRsc19zdHJwX2NoZWNrX3JjdmAgcmFpc2VzIHNvbWUgaW1tZWRpYXRlIHF1ZXN0aW9ucy4gU2VlbXMgbGlrZSB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGB0bHNfc3RycF9kYXRhX3JlYWR5YCBpcyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgZmlndXJlIG91dCB3aGF0IGRhdGEgcmVhZGluZXNzIHRydWx5IG1lYW5zIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N0cnBfZGF0YV9yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTkzPWludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxOTQ6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmgtMTk1LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU2OC0vKiBMb3dlciBzb2NrIGxvY2sgaGVsZCAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU2OTp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTcwLXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTg2PXN0YXRpYyB2b2lkIHRsc19zdHJwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01OTgtICogcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jaywgb3IgcXVldWVkIGRhdGEgd2lsbCBzdGFsbCB1bnRpbCB0aGVcbm5ldC90bHMvdGxzX3N0cnAuYzo1OTk6ICogbmV4dCB0bHNfc3RycF9kYXRhX3JlYWR5KCkgZXZlbnQuXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjI1OT1zdGF0aWMgdm9pZCB0bHNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjY4LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG5uZXQvdGxzL3Rsc19zdy5jOjIyNjk6XHR0bHNfc3RycF9kYXRhX3JlYWR5KFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmMtMjI3MC1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gPSBhbGxvY19zYXZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVExTIHJlY2VpdmUgcGF0aCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYHRsc19kYXRhX3JlYWR5YCBpcyBtb3N0IGxpa2VseSBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBzb21ldGhpbmcgYWtpbiB0byB0aGUgYHNrX2RhdGFfcmVhZHlgIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBmcm9tIG90aGVyIG5ldHdvcmsgc3RhY2tzLiBJdCBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgdW5kZXJseWluZyBzb2NrZXQuCgpOZXh0LCBJIHNlZSBgdGxzX3N0cnBfY2hlY2tfcmN2YC4gQmFzZWQgb24gdGhlIG5hbWluZywgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciB0aGUgc3RyaW5nIHBhcnNlciwgd2hpY2ggaXMga2V5IGZvciBwYXJzaW5nIHRoZSBpbmNvbWluZyBUTFMgbWVzc2FnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jb21pbmcgZGF0YSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFyc2VyIGFuZCBob3cgdGhlIHBhcnNpbmcgcmVzdWx0IGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBtYWluIHJlY2VpdmUgZnVuY3Rpb24sIHRob3VnaC4gTm93IEkgbmVlZCB0byBjaGVjayBgdGxzX3N3X3JlY3Ztc2dgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGhvdyB0aGUgc29ja2V0IGdldHMgdGhlIHJhdyBkYXRhIGFuZCBpbnRlZ3JhdGVzIHdpdGggVExTIHRvIGhhbmRsZSB0aGUgY3J5cHRvZ3JhcGhpYyBzdHVmZi4gTm93IEkgaGF2ZSBhIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgaW5jb21pbmcgZGF0YSB0cmF2ZWxzIHRocm91Z2ggdGhlIFRMUyBzdGFjay4gSXQgd2lsbCBnbyBmcm9tIHRoZSBzb2NrZXQgdGhyb3VnaCB0aGUgbWFpbiByZWNlaXZlIGZ1bmN0aW9uIGFuZCB0aGVuIGJlIHBhcnNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rscy5oPTE2Mj12b2lkIHRsc19zd19mcmVlX2N0eF9yeChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3Rscy90bHMuaC0xNjQtXHRcdCAgIGludCBmbGFncyk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEwMDI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMTY6XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcdFx0ICA9IHRsc19zd19yZWN2bXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVx0cHJvdFtUTFNfU1ddW1RMU19TV10gPSBwcm90W1RMU19TV11bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjE6XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTgwMD1zdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTgwNS1cbm5ldC90bHMvdGxzX3N3LmM6MTgwNjppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfc3cuYy0xODA3LVx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTQKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFRMUyBSZWNlaXZlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmc6IHRoZSBgdGxzX3N3X3JlY3Ztc2dgIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSByZWN2bXNnIGhhbmRsZXIgZm9yIFRMUyBzb2Z0d2FyZSBzb2NrZXRzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGdyZWF0ICYjMzQ7Zm9jdXMgc3ltYm9sLiYjMzQ7IEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBvdmVyIFRMUyBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS4KCkkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBgdGxzX3N0cnBfY2hlY2tfcmN2YCBhcyBhIHJlbGF0ZWQgZm9jdXMgc3ltYm9sLgoKVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBUTFMgc3RyZWFtIHBhcnNlciYjMzk7cyByZWNlaXZlIHBhdGggLSBzcGVjaWZpY2FsbHkgYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AuIFRoaXMgY29uY2VybnMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoZSBxdWV1ZSBsZW5ndGggKmJlZm9yZSogcmVhZGluZyB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBjb3JlIHJlY2VpdmUgbG9naWMgd2l0aGluIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIENydWNpYWxseSwgdGhpcyBwYXRoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aG9zZSBUTFMgc29ja2V0cy4gVGhhdCYjMzk7cyBhIHRleHRib29rIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nISBBIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgcmVhbCBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2UuIEkgc2VlIGBUTFNgLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBvbmUgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4gSSBrbm93IGBUTFNgIGRlcGVuZHMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBDUllQVE9gLiBTaW5jZSBgSU5FVGAgYW5kIGBDUllQVE9gIGFyZSBzdGFuZGFyZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBqdXN0IGhhdmluZyBgVExTYCBlbmFibGVkIGlzIGVub3VnaCB0byBjcmVhdGUgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3ZlcnMgdGhpcyBjb2RlIHBhdGguIFRoaXMgc2hvdWxkIGtlZXAgdGhlIHNldHVwIHJlbGF0aXZlbHkgc2ltcGxlIGFuZCBmb2N1c2VkLiBJJiMzOTttIHJlYWR5IHRvIHJvbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfc3RycF9jaGVja19yY3YmIzM0OywKICAgICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgVExTIHN0cnBhcnNlciB3aGVyZSBgdGxzX3J4X21zZ19zaXplYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhlIHJhdyBUQ1AgcmVjZWl2ZSBxdWV1ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoYXQgdGhlIHNrYnMgZm9ybWluZyB0aGUgVExTIGhlYWRlciBhcmUgY29udGlndW91cyBpbiBzZXF1ZW5jZSBzcGFjZSBhbmQgaGF2ZSBtYXRjaGluZyBkZWNyeXB0ZWQgc3RhdHVzLiBJZiB0aGUgcmVjZWl2ZSBxdWV1ZSBjb250YWluZWQgb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIHNlZ21lbnRzIHdpdGggbWl4ZWQgaGFyZHdhcmUvc29mdHdhcmUgZGVjcnlwdGVkIHN0YXR1cywgYHRsc19yeF9tc2dfc2l6ZWAgd291bGQgcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhbiBlcnJvciAobGlrZSBgLUVCQURNU0dgKSwgY2F1c2luZyBhIHNwdXJpb3VzIGNvbm5lY3Rpb24gYWJvcnQuXG5cbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXG5cblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMzBkNjhlNWVmYjVmODkyMDUyYzExMmQwN2JkMWE2NDAxMGQyNTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdHJwLmMgYi9uZXQvdGxzL3Rsc19zdHJwLmMKaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX3N0cnAuYwpAQCAtNDMwLDkgJiM0Mzs0MzAsMTAgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKJiM0MztzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0Mzsgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gc3RycC0mZ3Q7c3RtLm9mZnNldCAmIzQzOyBsZW47CiAJc3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiOwogCXUzMiBzZXE7CiAKQEAgLTQ0Myw5ICYjNDM7NDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApCiAJLyogTWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSwKIAkgKiBhbmQgdGhlIGRlY3J5cHRlZCBzdGF0dXMgbWF0Y2hlcy4KIAkgKi8KLQl3aGlsZSAoc2tiLSZndDtsZW4gJmx0OyBsZW4pIHsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZsdDsgcmVtYWluaW5nKSB7CiAJCXNlcSAmIzQzOz0gc2tiLSZndDtsZW47Ci0JCWxlbiAtPSBza2ItJmd0O2xlbjsKJiM0MzsJCXJlbWFpbmluZyAtPSBza2ItJmd0O2xlbjsKIAkJc2tiID0gc2tiLSZndDtuZXh0OwogCiAJCWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSAhPSBzZXEpCkBAIC01MjUsNiAmIzQzOzUyNiwxMSBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAogCXRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTsKIAlpZiAoIXN0cnAtJmd0O3N0bS5mdWxsX2xlbikgewomIzQzOwkJaWYgKGlucSAmbHQ7IFRMU19IRUFERVJfU0laRSkKJiM0MzsJCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpOwomIzQzOwkJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwomIzQzOwogCQlzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpOwogCQlpZiAoc3ogJmx0OyAwKQogCQkJcmV0dXJuIHN6OwpAQCAtNTM1LDcgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7CiAJfQogCi0JaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSkKJiM0MzsJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLSZndDtzdG0uZnVsbF9sZW4pKQogCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTsKIAogCVdSSVRFX09OQ0Uoc3RycC0mZ3Q7bXNnX3JlYWR5LCAxKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFBhcnNlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIFRoZXkmIzM5O3ZlIG1vZGlmaWVkIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgdG8gdGFrZSBhIGBsZW5gIGFyZ3VtZW50LCB3aGljaCBpcyBhIGdvb2QgbW92ZSB0byBhdm9pZCByZWR1bmRhbnQgY2FsY3VsYXRpb25zLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYHRsc19zdHJwX3JlYWRfc29ja2AgdG8gdmFsaWRhdGUgdGhlIGluaXRpYWwgYFRMU19IRUFERVJfU0laRWAgb2YgdGhlIGluY29taW5nIHF1ZXVlIChgaW5xYCkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHF1ZXVlIHNpemUgKGBpbnFgKSBpcyBsZXNzIHRoYW4gYFRMU19IRUFERVJfU0laRWAsIGl0IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlgIHdpdGggYSAmIzM0O3RydWUmIzM0OyBmbGFnLiBPdGhlcndpc2UsIGl0IGNoZWNrcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgdG8gZW5zdXJlIHRoZSBoZWFkZXImIzM5O3MgaW50ZWdyaXR5LiBGaW5hbGx5LCBpZiB0aGUgaGVhZGVyIGlzIHZhbGlkIHRoZXkgdGhlbiBjYWxsIGB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC0mZ3Q7YW5jaG9yKWAuCgpOb3csIGRpZ2dpbmcgaW50byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLCBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBTS0IgcXVldWUsIGNoZWNraW5nIGZvciBjb250aWd1b3VzIHNlcXVlbmNlIG51bWJlcnMgYW5kIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFjcm9zcyB0aGUgcXVldWUuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFmdGVyKiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgPwoKVGhlIGNvZGUgY2FsbHMgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpYC4gSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgdGxzX3J4X21zZ19zaXplYCBpcyByZWFkaW5nIHRoZSBoZWFkZXIgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYC4gSWYgdGhlIGhlYWRlciBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgU0tCcywgZG9lcyBgdGxzX3J4X21zZ19zaXplYCBhY3R1YWxseSBoYW5kbGUgdGhpcyBjb3JyZWN0bHk/IE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHRsc19yeF9tc2dfc2l6ZWAgbWlnaHQgYXNzdW1lIGl0IGhhcyBlbm91Z2ggZGF0YSBpbiBgc3RycC0mZ3Q7YW5jaG9yYC4gSWYgaXQgZG9lc24mIzM5O3QsIHRoaXMgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIGEgY2xhc3NpYyBLQVNBTiBpc3N1ZS4gVGhhdCB3b3VsZCBiZSBhIG1ham9yIHByb2JsZW0uCgpJIGhhdmUgdG8gY2hlY2sgYHRsc19yeF9tc2dfc2l6ZWAgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGZyYWdtZW50ZWQgaGVhZGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGUgbmV3IGhlYWRlciB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGhlcmUgYXMgd2VsbD8gSSYjMzk7ZCBiZXR0ZXIgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0bHNfcnhfbXNnX3NpemVgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19yeF9tc2dfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk3PXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xubmV0L3Rscy90bHMuaC0xOTgtXG5uZXQvdGxzL3Rscy5oOjE5OTppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC90bHMvdGxzLmgtMjAwLXZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTIxMD1zdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbl9mcmFnKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0yMzktXG5uZXQvdGxzL3Rsc19zdHJwLmM6MjQwOlx0XHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBza2IpO1xubmV0L3Rscy90bHNfc3RycC5jLTI0MS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz0yODY9c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW5fc2tiKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zMTktXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG5uZXQvdGxzL3Rsc19zdHJwLmM6MzIwOlx0XHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBza2IpO1xubmV0L3Rscy90bHNfc3RycC5jLTMyMS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTUzMy1cbm5ldC90bHMvdGxzX3N0cnAuYzo1MzQ6XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MzUtXHRcdGlmIChzeiBcdTAwM2MgMClcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxNzU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxubmV0L3Rscy90bHNfc3cuYzoyMTg0OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0bHNfcnhfbXNnX3NpemVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBzaXR1YXRlZCB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgVExTLiBJIGtub3cgdGhlIHJlY2VpdmluZyBwYXRoIGlzIGNyaXRpY2FsLCBzbyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2l6ZSBvZiBhbiBpbmNvbWluZyBUTFMgbWVzc2FnZSBpcyBkZXRlcm1pbmVkIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFRoaXMgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIHdpbGwgcHJvdmlkZSB0aGUga2V5IHNpemUgb3IgdGhlIGhlYWRlciBzaXplIGZvciBhbiBpbmNvbWluZyBtZXNzYWdlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQgdG8gYnVmZmVyIHNpemUgb3IgaG93IGEgcGFja2V0IGlzIGhhbmRsZWQgd2hlbiByZWNlaXZlZC4gSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgYW5kIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg0Olx0aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIxODU6XHR7XG4yMTg2Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzdHJwLVx1MDAzZXNrKTtcbjIxODc6XHRcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4yMTg4Olx0XHRjaGFyIGhlYWRlcltUTFNfSEVBREVSX1NJWkUgJiM0MzsgVExTX01BWF9JVl9TSVpFXTtcbjIxODk6XHRcdHNpemVfdCBjaXBoZXJfb3ZlcmhlYWQ7XG4yMTkwOlx0XHRzaXplX3QgZGF0YV9sZW4gPSAwO1xuMjE5MTpcdFx0aW50IHJldDtcbjIxOTI6XHRcbjIxOTM6XHRcdC8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdWxsIFRMUyBoZWFkZXIsIG9yIHdhaXQgZm9yIG1vcmUgZGF0YSAqL1xuMjE5NDpcdFx0aWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCAmIzQzOyBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjIxOTU6XHRcdFx0cmV0dXJuIDA7XG4yMTk2Olx0XG4yMTk3Olx0XHQvKiBTYW5pdHktY2hlY2sgc2l6ZSBvZiBvbi1zdGFjayBidWZmZXIuICovXG4yMTk4Olx0XHRpZiAoV0FSTl9PTihwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKGhlYWRlcikpKSB7XG4yMTk5Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMjAwOlx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIwMTpcdFx0fVxuMjIwMjpcdFxuMjIwMzpcdFx0LyogTGluZWFyaXplIGhlYWRlciB0byBsb2NhbCBidWZmZXIgKi9cbjIyMDQ6XHRcdHJldCA9IHNrYl9jb3B5X2JpdHMoc2tiLCBzdHJwLVx1MDAzZXN0bS5vZmZzZXQsIGhlYWRlciwgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemUpO1xuMjIwNTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIyMDY6XHRcdFx0Z290byByZWFkX2ZhaWx1cmU7XG4yMjA3Olx0XG4yMjA4Olx0XHRzdHJwLVx1MDAzZW1hcmsgPSBoZWFkZXJbMF07XG4yMjA5Olx0XG4yMjEwOlx0XHRkYXRhX2xlbiA9ICgoaGVhZGVyWzRdIFx1MDAyNiAweEZGKSB8IChoZWFkZXJbM10gXHUwMDNjXHUwMDNjIDgpKTtcbjIyMTE6XHRcbjIyMTI6XHRcdGNpcGhlcl9vdmVyaGVhZCA9IHByb3QtXHUwMDNldGFnX3NpemU7XG4yMjEzOlx0XHRpZiAocHJvdC1cdTAwM2V2ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTiBcdTAwMjZcdTAwMjZcbjIyMTQ6XHRcdCAgICBwcm90LVx1MDAzZWNpcGhlcl90eXBlICE9IFRMU19DSVBIRVJfQ0hBQ0hBMjBfUE9MWTEzMDUpXG4yMjE1Olx0XHRcdGNpcGhlcl9vdmVyaGVhZCAmIzQzOz0gcHJvdC1cdTAwM2Vpdl9zaXplO1xuMjIxNjpcdFxuMjIxNzpcdFx0aWYgKGRhdGFfbGVuIFx1MDAzZSBUTFNfTUFYX1BBWUxPQURfU0laRSAmIzQzOyBjaXBoZXJfb3ZlcmhlYWQgJiM0MztcbjIyMTg6XHRcdCAgICBwcm90LVx1MDAzZXRhaWxfc2l6ZSkge1xuMjIxOTpcdFx0XHRyZXQgPSAtRU1TR1NJWkU7XG4yMjIwOlx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIyMTpcdFx0fVxuMjIyMjpcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBjaXBoZXJfb3ZlcmhlYWQpIHtcbjIyMjM6XHRcdFx0cmV0ID0gLUVCQURNU0c7XG4yMjI0Olx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIyNTpcdFx0fVxuMjIyNjpcdFxuMjIyNzpcdFx0LyogTm90ZSB0aGF0IGJvdGggVExTMS4zIGFuZCBUTFMxLjIgdXNlIFRMU18xXzIgdmVyc2lvbiBoZXJlICovXG4yMjI4Olx0XHRpZiAoaGVhZGVyWzFdICE9IFRMU18xXzJfVkVSU0lPTl9NSU5PUiB8fFxuMjIyOTpcdFx0ICAgIGhlYWRlclsyXSAhPSBUTFNfMV8yX1ZFUlNJT05fTUFKT1IpIHtcbjIyMzA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjIyMzE6XHRcdFx0Z290byByZWFkX2ZhaWx1cmU7XG4yMjMyOlx0XHR9XG4yMjMzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgUmVjZWl2ZSBNZXNzYWdlIFNpemUgQ2FsY3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgdGxzX3J4X21zZ19zaXplYCB3b3JrcywgYW5kIGl0JiMzOTtzIHVzaW5nIGBza2JfY29weV9iaXRzYCB0byBncmFiIHRoZSBUTFMgaGVhZGVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdyYWJiaW5nIGBwcm90LSZndDtwcmVwZW5kX3NpemVgIGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSwgc3RhcnRpbmcgYXQgYW4gb2Zmc2V0IG9mIGBzdHJwLSZndDtzdG0ub2Zmc2V0YC4gTm93LCBpZiB0aGUgc29ja2V0IGJ1ZmZlciYjMzk7cyB0b3RhbCBsZW5ndGggKGBza2ItJmd0O2xlbmApIGlzbiYjMzk7dCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG9mZnNldCBwbHVzIHRoZSBoZWFkZXIgc2l6ZSwgYHNrYl9jb3B5X2JpdHNgIHJldHVybnMgMC4gSSBzZWUgdGhhdCB0aGUgY29kZSBleHBsaWNpdGx5IGNoZWNrcyB0aGlzIGNvbmRpdGlvbjoKCmBgYGMKCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdWxsIFRMUyBoZWFkZXIsIG9yIHdhaXQgZm9yIG1vcmUgZGF0YSAqLwoJaWYgKHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0MzsgcHJvdC0mZ3Q7cHJlcGVuZF9zaXplICZndDsgc2tiLSZndDtsZW4pCgkJcmV0dXJuIDA7CmBgYAoKVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlcmUgaXNuJiMzOTt0IGVub3VnaCBkYXRhLCBpdCBzaG91bGQgcmV0dXJuIGVhcmx5LiBIb3dldmVyLCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhlYWRlciBpcyAqc3BsaXQqIGFjcm9zcyBtdWx0aXBsZSBzb2NrZXQgYnVmZmVycz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZnJhZ21lbnRlZCBwYWNrZXQgc2NlbmFyaW8uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb2RlIGhhbmRsZXMgdGhhdCBjb3JyZWN0bHkuCgpJIHRob3VnaHQgYHNrYl9jb3B5X2JpdHNgIGNvdWxkIGhhbmRsZSB0aGlzLCBzaW5jZSBpdCBjYW4gcmVhZCBhY3Jvc3MgbXVsdGlwbGUgc2ticyBpZiBgc2tiYCBpcyBhIGZyYWdtZW50ZWQgc2tiIG9yIGlmIGl0IGhhcyBhIGZyYWdfbGlzdCBvciBuZXh0IHNrYnMuIEJ1dCB3YWl0Li4uIHVwb24gcmUtcmVhZGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgSSBzZWUgdGhhdCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHJlYWRzIGZyb20gdGhlIGN1cnJlbnQgc2tiIGFuZCBpdHMgZnJhZ21lbnRzL2ZyYWdfbGlzdC4gSXQgKmRvZXNuJiMzOTt0KiBhdXRvbWF0aWNhbGx5IHRyYXZlcnNlIGBza2ItJmd0O25leHRgLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgYWxtb3N0IG1pc3NlZCEKClRoaXMgbGVhZHMgbWUgdG8gYHRsc19zdHJwX3JlYWRfc29ja2AuIFRoZSB2YXJpYWJsZSBgc3RycC0mZ3Q7YW5jaG9yYCBob2xkcyB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSBvZiBzb2NrZXQgYnVmZmVycy4gVGhleSBhcmUgbGlua2VkIHZpYSBgc2tiLSZndDtuZXh0YCwgc28gaWYgdGhlIGhlYWRlciBpcyBmcmFnbWVudGVkLCBgc3RycC0mZ3Q7YW5jaG9yYCBwb2ludHMgdG8gdGhlICpmaXJzdCogc2tiLiBBbmQgbm93LCBJIHJlbWVtYmVyLCB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBtaWdodCBzZXQgdGhpcyBgc3RycC0mZ3Q7YW5jaG9yYCB2YXJpYWJsZS4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgcXVldWUuIElzIGl0IGNvbmNhdGVuYXRpbmcgdGhlbSwgb3Igc2ltcGx5IHBvaW50aW5nIHRvIHRoZSBmaXJzdCBza2IgaW4gdGhlIGNoYWluPyBJZiBpdCBqdXN0IHBvaW50cyB0byB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgdGhlbiBgc2tiX2NvcHlfYml0c2Agd2lsbCAqbm90KiB3b3JrIGFzIEkgb3JpZ2luYWxseSB0aG91Z2h0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYz00MzM9c3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQ2MC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NjE6c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcbm5ldC90bHMvdGxzX3N0cnAuYy00NjIte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00OTktXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTAwOlx0XHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTI2LVxubmV0L3Rscy90bHNfc3RycC5jOjUyNzpcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MjgtXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGZ1bmN0aW9uOiBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAuIEp1c3QgdGhlIG5hbWUgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgc29tZSBjbHVlcy4gJiMzNDt0bHNfc3RycCYjMzQ7IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIG9yIHBvdGVudGlhbGx5IGEgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0IGFuZCB0aGF0IHdlIGFyZSB1c2luZyBzdHJpbmcgcHJvY2Vzc2luZy4gJiMzNDtMb2FkX2FuY2hvciYjMzQ7IG1vc3QgbGlrZWx5IGlzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgYWNjZXNzaW5nLCBsb2FkaW5nLCBvciBzZXR0aW5nIGEgdHJ1c3QgYW5jaG9yLCBhIHJvb3QgY2VydGlmaWNhdGUsIG9yIHNpbWlsYXIgY3JlZGVudGlhbCBmb3IgdmFsaWRhdGluZyBvdGhlciBjZXJ0aWZpY2F0ZXMgaW4gYSBUTFMgaGFuZHNoYWtlLiBUaGUgaW5jbHVzaW9uIG9mICYjMzQ7cXVldWUmIzM0OyBzdHJvbmdseSBoaW50cyB0aGF0IHRoZXJlJiMzOTtzIGEgbWFuYWdlZCBvcmRlciwgcG9zc2libHkgYSBjcml0aWNhbCBvciBjb21wbGV4IG9wZXJhdGlvbiwgb3IgdGhhdCBtdWx0aXBsZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgdGhlcmUgYXJlIHF1ZXVlaW5nIGNvbmNlcm5zLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLCBwb3RlbnRpYWxseSBpbiBhIHN5c3RlbSB3aXRoIGFzeW5jaHJvbm91cyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNraW5nIG9yIGEgY29ubmVjdGlvbiBwb29saW5nIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBUTFMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcywgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHRocmVhZCBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgYW5kIHZhbGlkYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGhvdyB0cnVzdCBhbmNob3JzIGFyZSBoYW5kbGVkIGluIGEgcXVldWUgc2V0dGluZywgYW5kIHdoeSBhIHF1ZXVlIGlzIHVzZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYxOlx0c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcbiA0NjI6XHR7XG4gNDYzOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHN0cnAtXHUwMDNlc2spO1xuIDQ2NDpcdFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0O1xuIDQ2NTpcdFx0dTMyIG9mZnNldDtcbiA0NjY6XHRcbiA0Njc6XHRcdGZpcnN0ID0gdGNwX3JlY3Zfc2tiKHN0cnAtXHUwMDNlc2ssIHRwLVx1MDAzZWNvcGllZF9zZXEsIFx1MDAyNm9mZnNldCk7XG4gNDY4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmaXJzdCkpXG4gNDY5Olx0XHRcdHJldHVybjtcbiA0NzA6XHRcbiA0NzE6XHRcdC8qIEJlc3RvdyB0aGUgc3RhdGUgb250byB0aGUgYW5jaG9yICovXG4gNDcyOlx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2VsZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3MzpcdFx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3NDpcdFx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNldHJ1ZXNpemUgPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0c2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XG4gNDc3Olx0XG4gNDc4Olx0XHRza2JfY29weV9oZWFkZXIoc3RycC1cdTAwM2VhbmNob3IsIGZpcnN0KTtcbiA0Nzk6XHRcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuIDQ4MDpcdFxuIDQ4MTpcdFx0c3RycC1cdTAwM2VzdG0ub2Zmc2V0ID0gb2Zmc2V0O1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXG4gNDg1Olx0e1xuIDQ4NjpcdFx0c3RydWN0IHN0cnBfbXNnICpyeG07XG4gNDg3Olx0XHRzdHJ1Y3QgdGxzX21zZyAqdGxtO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cdTAwM2Vtc2dfcmVhZHkpO1xuIDQ5MDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUTFMvVENQIFJlY2VpdmUgUXVldWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIFRDUCByZWNlaXZlIHF1ZXVlcyBpbiBUTFMgcHJvY2Vzc2luZy4gSXQgc3RhcnRzIHdpdGggYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgLCB3aGljaCBzZXRzIHVwIHRoaXMgYHN0cnAtJmd0O2FuY2hvcmAgc2tiIGFuZCBpdHMgYGZyYWdfbGlzdGAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNrYiAoYGZpcnN0YCkgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGlzIG1lYW5zIGBza2JfY29weV9iaXRzYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYCBBTkQgaXRzIGBmcmFnX2xpc3RgLiAgVGhlIGBmcmFnX2xpc3RgIGlzIGEgbGlua2VkIGxpc3Qgb2Ygc2ticyB0aGF0IG1ha2UgdXAgdGhlIGluY29taW5nIFRDUCBkYXRhLgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZGF0YSBpbnRlZ3JpdHkgd2l0aGluIHRoaXMgcXVldWUsIG9yIGxhY2sgdGhlcmVvZi4gIEJlZm9yZSB0aGUgcGF0Y2gsIHdlIHdlcmUgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCB3aXRob3V0IGEgY2hlY2sgZm9yIHRoZSBoZWFkZXIgc2l6ZSB1c2luZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGNoZWNrcyBpZiBhbGwgdGhlIHNrYnMgYXJlIGNvbnRpZ3VvdXMgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gVGhlIGtleSBpc3N1ZSBpcyBhcm91bmQgc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmxhcHBpbmcgb3IgJiMzNDtob2xlLXkmIzM0OyBUQ1Agc2VnbWVudHMgaW4gdGhlIHF1ZXVlLgoKQmFzaWNhbGx5LCBpZiBUQ1Agc2VnbWVudHMgYXJyaXZlIG91dCBvZiBvcmRlciwgb3IgcGFydGlhbGx5IG92ZXJsYXAsIGBza2JfY29weV9iaXRzYCBtaWdodCByZWFkIHRoZSB3cm9uZyBkYXRhIGJlY2F1c2UgYHNrYi0mZ3Q7bGVuYCBtaWdodCBub3QgY29ycmVzcG9uZCB0byBjb250aWd1b3VzIGRhdGEsIG9yIGBza2ItJmd0O25leHRgIG1pZ2h0IGhhdmUgYW4gb3ZlcmxhcHBpbmcgc2VxdWVuY2UgbnVtYmVyLiBUaGlzIGNhbiBsZWFkIHRvIGluY29ycmVjdCBUTFMgaGVhZGVyIHBhcnNpbmcgZHVlIHRvIGluY29uc2lzdGVudCBkYXRhIGJlaW5nIHJlYWQuCgpUaGUgcGF0Y2ggdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGFkZGluZyBhIHByZWxpbWluYXJ5IGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgY2hlY2sgQkVGT1JFIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAuICBIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuCgpOb3csIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2Agd2Fsa3MgdGhlIHF1ZXVlLCBjaGVja2luZyBzZXF1ZW5jZSBudW1iZXJzIGFuZCBkZWNyeXB0ZWQgc3RhdHVzLiBJdCBkb2VzIHRoaXMgd2l0aGluIHRoZSAmIzM0O3doaWxlIGxvb3AmIzM0OyBjb25kaXRpb24gYHdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IHJlbWFpbmluZylgLiBJZiB0aGUgY3VycmVudCBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgcmVtYWluaW5nYCwgdGhlIGNvZGUgcHJvY2VlZHMgdG8gdGhlIG5leHQgYHNrYmAgaW4gdGhlIGxpc3QsIGJ5IGFkZGluZyBgc2tiID0gc2tiLSZndDtuZXh0O2AuCgpJZiBgVENQX1NLQl9DQihza2IpLSZndDtzZXEgIT0gc2VxYCBpbnNpZGUgdGhlIGB3aGlsZWAgbG9vcCwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtOiBub24tY29udGlndW91cyBzZWdtZW50cyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBoZWFkZXIgcGFyc2luZy4gIEJ1dCB3aGF0IGlmIGBza2ItJmd0O25leHRgIGlzIE5VTEwgYmVmb3JlIHRoZSBgd2hpbGVgIGxvb3AgY2FuIHByb2Nlc3MgZW5vdWdoIGRhdGE/ICBUaGF0IG1lYW5zLCBpbiB0aGUgb3JpZ2luYWwgY29kZSB0aGUgd2hpbGUgbG9vcCB3b24mIzM5O3QgdGVybWluYXRlLiBJdCYjMzk7bGwganVzdCBrZWVwIGdvaW5nLiAgVGhpcyBwb3RlbnRpYWxseSBsZWFkcyB0byBhIGNyYXNoIGJ5IGRlcmVmZXJlbmNpbmcgYSBOVUxMIHBvaW50ZXIuICBJZiB0aGUgbG9vcCBET0VTIHRlcm1pbmF0ZSwgYnV0IG9ubHkgcHJvY2Vzc2VzIGEgc3Vic2V0IG9mIHRoZSBpbmNvbWluZyBkYXRhLCB0aGlzIGNvdWxkIHN0aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGRhdGEgb3IgYSByZWFkIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSB2YWxpZCBkYXRhLgoKVGhlIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gdmFsaWRhdGUgdXAgdG8gdGhlIGZ1bGwgbWVzc2FnZSBsZW5ndGggKGBzemApLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB2YWxpZGF0ZWQgdGhlIF9lbnRpcmVfIG1lc3NhZ2UgbGVuZ3RoLiAgTm93LCB0aGUgcGF0Y2ggdHJpZXMgdG8gdmFsaWRhdGUgb25seSB0aGUgaGVhZGVyIHNpemUgZmlyc3QsIGJ1dCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycy4gIElmIGB0bHNfcnhfbXNnX3NpemVgIHJlYWRzIGdhcmJhZ2UsIGl0IGNvdWxkIHJldHVybiBhICpzbWFsbGVyKiBgc3pgIHRoYW4gdGhlIGhlYWRlciBzaXplLCBidXQgaWYgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBsYXRlciBjaGVja3MgZm9yIGNvbnRpZ3VpdHkgdXAgdG8gYSBzbWFsbGVyIG51bWJlciBvZiBieXRlcyB0aGFuIHRoZSBoZWFkZXIsIHRoZSBjb250aWd1aXR5IGNoZWNrIGlzIG5vIGxvbmdlciBjb21wbGV0ZSBhbmQgdGhpcyBzdGlsbCBsZWFkcyB0byBpc3N1ZXMgd2hlbiB0aGUgYHdoaWxlYCBsb29wIHJ1bnMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHN0cnAtJmd0O2FuY2hvcmAgaXMgYWxsb2NhdGVkLiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBhbGxvY2F0ZWQgYXMgYSAmIzM0O3NwZWNpYWwgc2tiJiMzNDssIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGB0Y3BfcmVjdl9za2JgLiBCdXQsIGRvZXMgYHN0cnAtJmd0O2FuY2hvcmAgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YT8gSWYgYHN0cnAtJmd0O2FuY2hvcmAgZG9lc24mIzM5O3QgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YSwgZGVyZWZlcmVuY2luZyBgVENQX1NLQl9DQihzdHJwLSZndDthbmNob3IpYCBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoaXMgYWxsIHNlZW1zIHRvIHBvaW50IHRvIGEgcG90ZW50aWFsbHkgc2VyaW91cyBsb2dpYyBmbGF3IGluIGhvdyB3ZSBoYW5kbGUgVENQIHNlZ21lbnQgb3JkZXJpbmcgYW5kIHF1ZXVlIHZhbGlkYXRpb24gaW4gVExTIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NrYi4qYW5jaG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipMb2NhdGluZyBQb3RlbnRpYWwgVExTIFN0cmlwcGluZyBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSB0YXJnZXQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVExTIHN0cmlwcGluZywgc28gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIHRlcm0gJiMzNDthbmNob3ImIzM0OyB3aXRoaW4gdGhlIGBuZXQvdGxzL3Rsc19zdHJwLmNgIGZpbGUuIFRoZSB3b3JkICYjMzQ7YW5jaG9yJiMzNDsgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0IGNhbiByZWZlciB0byBhIHJvb3Qgb2YgdHJ1c3QsIGEgcG9pbnQgaW4gdGhlIGNlcnRpZmljYXRlIGNoYWluLCBvciBwZXJoYXBzIGEgbW9yZSBhYnN0cmFjdCAmIzM5O2FuY2hvciBwb2ludCYjMzk7IGluIHRoZSBjb2RlJiMzOTtzIGxvZ2ljLiBUaGlzIHNlYXJjaCBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBhcmVhcyB3aGVyZSB0aGUgY29kZSBtaWdodCBoYW5kbGUgb3IgcmVseSB1cG9uIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBvciB2YWxpZGF0aW9uIHByb2Nlc3Nlcywgd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBzdHJpcHBpbmcgYXR0YWNrcy4gSXQmIzM5O3MgYSB0YXJnZXRlZCBhcHByb2FjaCwgaG9wZWZ1bGx5IGZvY3VzaW5nIG15IGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FuY2hvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MTY9dm9pZCB0bHNfc3RycF9hYm9ydF9zdHJwKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0yOS1cbm5ldC90bHMvdGxzX3N0cnAuYzozMDpzdGF0aWMgdm9pZCB0bHNfc3RycF9hbmNob3JfZnJlZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy0zMS17XG5uZXQvdGxzL3Rsc19zdHJwLmM6MzI6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0zMy1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzYtXHRcdHNoaW5mby1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jOjM3Olx0Y29uc3VtZV9za2Ioc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jOjM4Olx0c3RycC1cdTAwM2VhbmNob3IgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jLTM5LX1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9Njk9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfbWFrZV9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy03My1cbm5ldC90bHMvdGxzX3N0cnAuYzo3NDpcdHNrYiA9IHRsc19zdHJwX3NrYl9jb3B5KHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yLCBzdHJwLVx1MDAzZXN0bS5vZmZzZXQsXG5uZXQvdGxzL3Rsc19zdHJwLmMtNzUtXHRcdFx0XHRzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbik7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTg1PXN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfZGV0YWNoKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy04OS0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0Vcbm5ldC90bHMvdGxzX3N0cnAuYzo5MDpcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlY3J5cHRlZCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtOTEtI2Vsc2Vcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAwLVxubmV0L3Rscy90bHNfc3RycC5jOjEwMTpcdFx0LyogUmVwbGFjZSBhbmNob3Igd2l0aCBhbiBlbXB0eSBza2IsIHRoaXMgaXMgYSBsaXR0bGVcbm5ldC90bHMvdGxzX3N0cnAuYy0xMDItXHRcdCAqIGRhbmdlcm91cyBidXQgX190bHNfY3VyX21zZygpIHdhcm5zIG9uIGVtcHR5IHNrYnNcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTA4LVxubmV0L3Rscy90bHNfc3RycC5jOjEwOTpcdFx0c3dhcChzdHJwLVx1MDAzZWFuY2hvciwgc2tiKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xMTAtXHRcdHJldHVybiBza2I7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTEyMD1pbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTMxLVxubmV0L3Rscy90bHNfc3RycC5jOjEzMjpcdHRsc19zdHJwX2FuY2hvcl9mcmVlKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jOjEzMzpcdHN0cnAtXHUwMDNlYW5jaG9yID0gc2tiO1xubmV0L3Rscy90bHNfc3RycC5jLTEzNC1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ1PWludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxubmV0L3Rscy90bHNfc3RycC5jLTE0Ni17XG5uZXQvdGxzL3Rsc19zdHJwLmM6MTQ3Olx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtMTQ4LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0xNTMtXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTU0Olx0XHQvKiBXZSBjYW4mIzM5O3Qgc2tiX2Nsb25lKCkgdGhlIGFuY2hvciwgaXQgZ2V0cyB3aXBlZCBieSB1bnBhdXNlICovXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTU1LVx0XHRza2IgPSBhbGxvY19za2IoMCwgc3RycC1cdTAwM2Vzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTU4LVxubmV0L3Rscy90bHNfc3RycC5jOjE1OTpcdFx0X19za2JfcXVldWVfdGFpbChkc3QsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjA6XHRcdHN0cnAtXHUwMDNlYW5jaG9yID0gc2tiO1xubmV0L3Rscy90bHNfc3RycC5jLTE2MS1cdH0gZWxzZSB7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTE5MS1cbm5ldC90bHMvdGxzX3N0cnAuYzoxOTI6c3RhdGljIHZvaWQgdGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTkzLXtcbm5ldC90bHMvdGxzX3N0cnAuYzoxOTQ6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xOTUtXHRpbnQgaTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNTEtXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzUyOlx0c2tiID0gc3RycC1cdTAwM2VhbmNob3I7XG5uZXQvdGxzL3Rsc19zdHJwLmMtMzUzLVx0aWYgKCFza2ItXHUwMDNlbGVuKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz0zOTA9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00MDItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDAzOlx0c2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDA0LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00MTAtXHRcdGlmICghcGFnZSkge1xubmV0L3Rscy90bHNfc3RycC5jOjQxMTpcdFx0XHR0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJwKTtcbm5ldC90bHMvdGxzX3N0cnAuYy00MTItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQxNC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0MTU6XHRcdHNrYl9maWxsX3BhZ2VfZGVzYyhzdHJwLVx1MDAzZWFuY2hvciwgc2hpbmZvLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOyxcbm5ldC90bHMvdGxzX3N0cnAuYy00MTYtXHRcdFx0XHQgICBwYWdlLCAwLCAwKTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDIzLVxubmV0L3Rscy90bHNfc3RycC5jOjQyNDpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IDA7XG5uZXQvdGxzL3Rsc19zdHJwLmM6NDI1Olx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSAwO1xubmV0L3Rscy90bHNfc3RycC5jOjQyNjpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZXRydWVzaXplID0gcm91bmRfdXAobmVlZF9zcGMsIFBBR0VfU0laRSk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz00MzM9c3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQzOS1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NDA6XHRmaXJzdCA9IHNrYl9zaGluZm8oc3RycC1cdTAwM2VhbmNob3IpLVx1MDAzZWZyYWdfbGlzdDtcbm5ldC90bHMvdGxzX3N0cnAuYy00NDEtXHRza2IgPSBmaXJzdDtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYwLVxubmV0L3Rscy90bHNfc3RycC5jOjQ2MTpzdGF0aWMgdm9pZCB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgbGVuKVxubmV0L3Rscy90bHNfc3RycC5jLTQ2Mi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQ3MC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NzE6XHQvKiBCZXN0b3cgdGhlIHN0YXRlIG9udG8gdGhlIGFuY2hvciAqL1xubmV0L3Rscy90bHNfc3RycC5jOjQ3MjpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IG9mZnNldCAmIzQzOyBsZW47XG5uZXQvdGxzL3Rsc19zdHJwLmM6NDczOlx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xubmV0L3Rscy90bHNfc3RycC5jOjQ3NDpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZXRydWVzaXplID0gb2Zmc2V0ICYjNDM7IGxlbjtcbm5ldC90bHMvdGxzX3N0cnAuYy00NzUtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDc2Olx0c2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc3LVxubmV0L3Rscy90bHNfc3RycC5jOjQ3ODpcdHNrYl9jb3B5X2hlYWRlcihzdHJwLVx1MDAzZWFuY2hvciwgZmlyc3QpO1xubmV0L3Rscy90bHNfc3RycC5jOjQ3OTpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jLTQ4MC1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NDg0PWJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxubmV0L3Rscy90bHNfc3RycC5jOjUwMDpcdFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTAxLVx0fVxubmV0L3Rscy90bHNfc3RycC5jLTUwMi1cbm5ldC90bHMvdGxzX3N0cnAuYzo1MDM6XHRyeG0gPSBzdHJwX21zZyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTA0LVx0cnhtLVx1MDAzZWZ1bGxfbGVuXHQ9IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO1xubmV0L3Rscy90bHNfc3RycC5jLTUwNS1cdHJ4bS1cdTAwM2VvZmZzZXRcdD0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0O1xubmV0L3Rscy90bHNfc3RycC5jOjUwNjpcdHRsbSA9IHRsc19tc2coc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jLTUwNy1cdHRsbS1cdTAwM2Vjb250cm9sXHQ9IHN0cnAtXHUwMDNlbWFyaztcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MjYtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTI3Olx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpO1xubmV0L3Rscy90bHNfc3RycC5jLTUyOC1cdGlmICghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pIHtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTMzLVxubmV0L3Rscy90bHNfc3RycC5jOjUzNDpcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jLTUzNS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02MDE9dm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA3LVx0ZWxzZVxubmV0L3Rscy90bHNfc3RycC5jOjYwODpcdFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA5LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02MjA9aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI1LVxubmV0L3Rscy90bHNfc3RycC5jOjYyNjpcdHN0cnAtXHUwMDNlYW5jaG9yID0gYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpO1xubmV0L3Rscy90bHNfc3RycC5jOjYyNzpcdGlmICghc3RycC1cdTAwM2VhbmNob3IpXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI4LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjQ3PXZvaWQgX190bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTY0OC17XG5uZXQvdGxzL3Rsc19zdHJwLmM6NjQ5Olx0dGxzX3N0cnBfYW5jaG9yX2ZyZWUoc3RycCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCB1c2VzIGBmaXJzdCA9IHNrYl9zaGluZm8oc3RycC0mZ3Q7YW5jaG9yKS0mZ3Q7ZnJhZ19saXN0O2AgaW4gdGhlIGN1cnJlbnQga2VybmVsLCB3aGljaCBJIHVuZGVyc3RhbmQuIEJ1dCB0aGUgZGlmZiBwcm92aWRlZCBkb2VzbiYjMzk7dCBoYXZlICp0aGF0KiBsaW5lLiBJbnN0ZWFkLCBpdCBoYXMgYGZpcnN0ID0gc3RycC0mZ3Q7YW5jaG9yO2AuIFRoYXQgc2VlbXMgd3JvbmcuIExldCBtZSByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9tcHQmIzM5O3MgZGlmZi4uLgoKUmlnaHQsIGxvb2tpbmcgYWdhaW4gYXQgdGhlIGRpZmYgaW4gdGhlIHByb21wdCwgaXQgY2hhbmdlcyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGFjY2VwdCBhIGBsZW5gIHBhcmFtZXRlciBhbmQgaW50cm9kdWNlcyBgcmVtYWluaW5nYC4uLiBPa2F5LCBidXQgaXQgc3RpbGwgaW5pdGlhbGl6ZXMgYGZpcnN0YCBhcyBgc3RycC0mZ3Q7YW5jaG9yYCwgYW5kIHRoZW4gc2V0cyBgc2tiID0gZmlyc3Q7YC4gV2FpdCBhIG1pbnV0ZSwgbXkgYGdyZXBgIG91dHB1dCBmcm9tIHRoZSBjdXJyZW50IHRyZWUgc2hvd3MgYGZpcnN0ID0gc2tiX3NoaW5mbyhzdHJwLSZndDthbmNob3IpLSZndDtmcmFnX2xpc3Q7YC4gQWgsIHRoYXQmIzM5O3MgaXQhIE15IGdyZXAgaXMgc2hvd2luZyB0aGUgY29kZSAqYWZ0ZXIqIHRoaXMgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCBvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGl0LiBTbyB0aGUgY3VycmVudCBjb2RlIGRvZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgZnJhZ21lbnQgbGlzdCBhY2Nlc3MsIGFuZCB0aGlzIGRpZmYgaXMgc2hvd2luZyB0aGUgY2hhbmdlLgoKQnV0LCBpZiBgZmlyc3RgIGlzIGFzc2lnbmVkIGBzdHJwLSZndDthbmNob3JgLCB0aGVuIGBza2JgIGlzIGFsc28gYHN0cnAtJmd0O2FuY2hvcmAsIGFuZCB0aGVuIHdlIHJlYWQgYFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxYC4gTm93LCB0aGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIHRoZSBwcm9ibGVtLiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBhbGxvY2F0ZWQgd2l0aCBgYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpYC4gSXRzIGNvbnRyb2wgYmxvY2sgKGBjYmApIGlzICpub3QqIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBidWchIGBhbGxvY19za2JgIHVzZXMgYGttZW1fY2FjaGVfYWxsb2Nfbm9kZWAgb3Igc2ltaWxhciwgd2hpY2ggdmVyeSBsaWtlbHkgZG9lc24mIzM5O3QgemVybyB0aGUgYGNiYCBmaWVsZCB1bmxlc3MgYF9fR0ZQX1pFUk9gIGlzIGV4cGxpY2l0bHkgdXNlZC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NrYmAgYWN0dWFsbHkgemVyb2VzIHRoZSBgY2JgIGZpZWxkLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMgaXNzdWUgaGVyZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBhbGxvY19za2JgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtc2V0LipjYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGludm9sdmVkIGluIHRoaXMgYXJlYToKCioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGd1dHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIG5lZWQgdG8gZGlnIGludG8gaG93IHRob3NlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBfX2FsbG9jX3NrYmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgY29yZSBvZiBob3cgb3VyIG5ldHdvcmtpbmcgZGF0YSBpcyBtYW5hZ2VkIGF0IHRoZSBwYWNrZXQgbGV2ZWwuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnkgaW5jb21pbmcgYW5kIG91dGdvaW5nIG5ldHdvcmsgcGFja2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcsIGRlYnVnZ2luZyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMsIGFuZCBwb3RlbnRpYWxseSwgY3JhZnRpbmcgYW55IGN1c3RvbSBuZXR3b3JraW5nIHNvbHV0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIEkmIzM5O20gd29ya2luZyB3aXRoIHRvZGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTYwNj1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjY1ODogKlx0X19hbGxvY19za2JcdC1cdGFsbG9jYXRlIGEgbmV0d29yayBidWZmZXJcbm5ldC9jb3JlL3NrYnVmZi5jLTY1OS0gKlx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NzMtICovXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3NS1cdFx0XHQgICAgaW50IGZsYWdzLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxubmV0L2NvcmUvc2tidWZmLmM6NzQ2OkVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNzQ3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTc2MT1zdHJ1Y3Qgc2tfYnVmZiAqX19uZXRkZXZfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVx0ICAgIChnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XHRcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCwgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cdFx0aWYgKCFza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9ODM4PXN0cnVjdCBza19idWZmICpuYXBpX2FsbG9jX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtODU0LVx0ICAgIChnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XHRcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCB8IFNLQl9BTExPQ19OQVBJLFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVx0XHRcdFx0ICBOVU1BX05PX05PREUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTAtXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItXHUwMDNlZGF0YV9sZW47XG5uZXQvY29yZS9za2J1ZmYuYzoyMTkxOlx0biA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cdFx0XHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjIyOS1cdGludCBmbGFncyA9IHNrYl9hbGxvY19yeF9mbGFnKHNrYikgfCAoZmNsb25lID8gU0tCX0FMTE9DX0ZDTE9ORSA6IDApO1xubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcdHN0cnVjdCBza19idWZmICpuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssIGZsYWdzLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc2tidWZmLmMtMjIzMS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNTAyPXN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVx0b2xkaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MjA6XHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gJiM0Mzsgc2tiLVx1MDAzZWxlbiAmIzQzOyBuZXd0YWlscm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXHRcdFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDQtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTQ1Olx0XHRcdG5za2IgPSBfX2FsbG9jX3NrYihoc2l6ZSAmIzQzOyBkb2Zmc2V0ICYjNDM7IGhlYWRyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNDk0Ni1cdFx0XHRcdFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCB0byBWYWxpZGF0ZSBDb250cm9sIEJsb2NrIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBfX2FsbG9jX3NrYmAgaGFuZGxlcyB0aGUgY29udHJvbCBibG9jayAoYGNiYCkuIFdlIGtub3cgdGhhdCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMgbGlrZSBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiBgX19hbGxvY19za2JgIGV4cGxpY2l0bHkgemVyb2VzIHRoaXMgYGNiYCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMg4oCTIGlmIGl0ICpkb2VzbiYjMzk7dCogemVybyBpdCwgd2UmIzM5O3JlIGxpa2VseSByZWx5aW5nIG9uIHNvbWUgb3RoZXIgaW5pdGlhbGl6YXRpb24gbWVjaGFuaXNtIGxhdGVyIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MgaWYgdGhvc2UgbWVjaGFuaXNtcyBhcmUgbWlzc2VkIG9yIGlmIG1lbW9yeSBpcyBub3QgbWFuYWdlZCBhcHByb3ByaWF0ZWx5LiBJZiBpdCAqZG9lcyogemVybyBpdCwgdGhhdCBnaXZlcyBhIGJhc2VsaW5lIGZvciBvdGhlciBvcGVyYXRpb25zIHRvIHdvcmsgb2ZmIG9mLiBVbHRpbWF0ZWx5IEkmIzM5O20gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG91ciBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBtZW1vcnkgcmVnaW9uIGFyZSBjb3JyZWN0LCBhbmQgcG90ZW50aWFsbHkgdG8gaWRlbnRpZnkgYSBoaWRkZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiB0aGVyZSBpcyBtb3JlIGluaXRpYWxpemF0aW9uIHRoYW4gbmVjZXNzYXJ5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3NDpcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gNjc1Olx0XHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4gNjc2Olx0e1xuIDY3NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gNjc4Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGU7XG4gNjc5Olx0XHR1OCAqZGF0YTtcbiA2ODA6XHRcbiA2ODE6XHRcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19SWCkpXG4gNjgyOlx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xuIDY4MzpcdFxuIDY4NDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfRkNMT05FKSB7XG4gNjg1Olx0XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcbiA2ODY6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2ODc6XHRcdH1cbiA2ODg6XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xuIDY4OTpcdFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxuIDY5MDpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xuIDY5MzpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQodHJ1ZSk7XG4gNjk0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA2OTU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTY6XHRcdH0gZWxzZSBpZiAoIWluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xuIDY5NzpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNjk4Olx0XHRcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XG4gNjk5Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFza2IpIHtcbiA3MDM6XHRmYWxsYmFjazpcbiA3MDQ6XHRcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xuIDcwNTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNzA2Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XHRza2J1ZmZfY2xlYXIoc2tiKTtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXG4gNzExOlx0XHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXG4gNzEyOlx0XHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cbiA3MTM6XHRcdCAqIEJvdGggc2tiLVx1MDAzZWhlYWQgYW5kIHNrYl9zaGFyZWRfaW5mbyBhcmUgY2FjaGUgbGluZSBhbGlnbmVkLlxuIDcxNDpcdFx0ICovXG4gNzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xuIDcxNjpcdFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcbiA3MTc6XHRcdFx0Z290byBub2RhdGE7XG4gNzE4Olx0XHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxuIDcxOTpcdFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXG4gNzIwOlx0XHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxuIDcyMTpcdFx0ICovXG4gNzIyOlx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA3MjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gaW4gdGhlIFNLQiBDb250cm9sIEJsb2NrKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBTb21ldGhpbmcgZmVlbHMgb2ZmLCBhbmQgSSBzdXNwZWN0IGEgc3VidGxlIGNvcnJ1cHRpb24gbWlnaHQgYmUgbHVya2luZyBzb21ld2hlcmUgaW4gdGhlIGBza2JgIGNvbnRyb2wgYmxvY2ssIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgY2JgIGZpZWxkIGlzIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaG93IGBjYmAgaXMgYmVpbmcgemVyb2VkIG91dCBvciBoYW5kbGVkIGluIGdlbmVyYWwuIEnigJltIHRoaW5raW5nIGBza2J1ZmZfY2xlYXJgIGlzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQ7IHRoYXQmIzM5O3Mgd2hlcmUgd2UgdHlwaWNhbGx5IGV4cGVjdCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciB3aGVuIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCBvciByZWN5Y2xlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHplcm9pbmcgYGNiYCB0aGVyZSwgd2hpY2ggdGhleSAqc2hvdWxkKiBiZS4KCkhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIHRoZXJlIGRpcmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgbnVhbmNlZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCB0aGVuIEkgc2hvdWxkIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgbWF5YmUgdGhlcmUmIzM5O3MgYW4gaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIHByZXBwZWQuIFBlcmhhcHMgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIGluc3RlYWQuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBpbml0aWFsaXphdGlvbiwgYXMgc29tZXRpbWVzIGluaXRpYWxpemF0aW9uIHdpbGwgaGFwcGVuIGluIGEgc3BvdCB3aGVyZSBpdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rLiBUaGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cmFwcGluZyB1cCBzb21lIFNLQiBvcGVyYXRpb25zLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgemVyb2luZyBpc24mIzM5O3QgaGFwcGVuaW5nIHdoZXJlIEkgZXhwZWN0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGJvdGggZnVuY3Rpb25zLCBiZWNhdXNlIGlmIGBjYmAgaXNuJiMzOTt0IGNvbnNpc3RlbnRseSBjbGVhcmVkLCB3ZSBjb3VsZCBoYXZlIHN0YWxlIGRhdGEgYmxlZWRpbmcgb3ZlciwgY2F1c2luZyBhbGwgc29ydHMgb2YgZXJyYXRpYyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIFNLQiBhbmQgaXRzIGNvbnRyb2wgYmxvY2sgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgc3BvdCBpZiBzb21ldGhpbmcmIzM5O3MgYW1pc3Mgd2l0aCBob3cgYGNiYCBpcyBiZWluZyBoYW5kbGVkLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgYSBtb3JlIGRlZXBseSByb290ZWQgaXNzdWUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgZWxpbWluYXRlIHBvc3NpYmxlIGlzc3VlcywgYW5kIGNvbmZpcm0gaWYgYGNiYCBpcyBjb25zaXN0ZW50bHkgc2V0IHRvIHplcm8uIFRoaXMgaXMgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHNrYnVmZl9jbGVhcmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUsICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHNrYnVmZl9jbGVhcmAsJiMzNDsgaW5kaWNhdGVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGdpdmVuIHRoZSBgc2tidWZmYCBwcmVmaXguIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWFuYWdpbmcgbmV0d29yayBwYWNrZXRzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBpdHNlbGYuCgpUaGUgZ29hbCBpcyBsaWtlbHkgdG8gZGVjb25zdHJ1Y3QgaXRzIG9wZXJhdGlvbjsgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBoYXBwZW5zIHdoZW4gYW4gYHNrYnVmZmAgaW5zdGFuY2UgaXMgJiMzNDtjbGVhcmVkLiYjMzQ7IFRoaXMgY291bGQgaW52b2x2ZSB6ZXJvaW5nIG91dCBtZW1vcnksIHJlbGVhc2luZyBhc3NvY2lhdGVkIHJlc291cmNlcyBsaWtlIGRhdGEgYnVmZmVycyBhbmQgbWV0YWRhdGEsIHBvc3NpYmx5IHVwZGF0aW5nIGludGVybmFsIGZsYWdzLCBhbmQgbWF5YmUgZXZlbiByZXR1cm5pbmcgdGhlIGBza2J1ZmZgIHRvIGEgcG9vbCBmb3IgcmV1c2UuIFRoZSBzcGVjaWZpY3MgYXJlIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBrZnJlZV9za2JgLCBgc2tiX3JlbGVhc2VfZGF0YWAsIGFueSBtYW5pcHVsYXRpb24gb2YgYGRhdGFgLCBgdGFpbGAsIGBsZW5gLCBgaGVhZGAsIGBuZXh0YCwgYHByZXZgIHBvaW50ZXJzLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gZW5zdXJpbmcgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgY29uY3VycmVudGx5IGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dC4gQSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc2tidWZmX2NsZWFyYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW50ZXJydXB0IGNvbnRleHRzIHdpbGwgYmUgY3J1Y2lhbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgd2l0aGluIHRoZSBjb2RlLCBhbmQgbWF5YmUgYWxzbyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaG9zZW4gaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBpZiBhbnkgb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMTc6XHR7XG4gMzE4Olx0XHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcbiAzMTk6XHRcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxuIDMyMDpcdFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFx1MDAzYz0gMTI4KTtcbiAzMjM6XHRcdG1lbXNldChza2IsIDAsIDEyOCk7XG4gMzI0Olx0XHRiYXJyaWVyKCk7XG4gMzI1Olx0XHRtZW1zZXQoKHZvaWQgKilza2IgJiM0MzsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHQvKipcbiAzMjk6XHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXG4gMzMwOlx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xuIDMzMTpcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcbiAzMzQ6XHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcbiAzMzU6XHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAgYW5kIHRoZSBTdHJ1Y3R1cmUgTGF5b3V0KioKClJpZ2h0LCBzbyBgc2tidWZmX2NsZWFyYCBpcyB3aXBpbmcgb3V0IHRoZSBpbml0aWFsIHBvcnRpb24gb2YgdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIGFsbCB0aGUgd2F5IHVwIHRvIHdoZXJlIHRoZSBgdGFpbGAgcG9pbnRlciBpcyBsb2NhdGVkLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhpcyBjbGVhcmluZyBvcGVyYXRpb24gYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGBza19idWZmYCBpcyBpbml0aWFsaXplZCBhbmQgaG93IG11Y2ggc3RhdGUgaXMgdHlwaWNhbGx5IHJlc2V0LgoKTm93LCBteSBuZXh0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgc3RydWN0dXJlcywgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIG9mZnNldCBvZiB0aGUgQ29udHJvbCBCbG9jaywgb3IgYGNiYC4gSSBuZWVkIHRvIHByZWNpc2VseSB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgZGF0YSByZXNpZGVzIHJlbGF0aXZlIHRvIHRoZSBgdGFpbGAgcG9pbnRlciwgYW5kIHRoZXJlZm9yZSBob3cgbXVjaCBvZiB0aGUgQ29udHJvbCBCbG9jayBJIHNob3VsZCBleHBlY3QgdG8gYmUgemVyb2VkIGJ5IGBza2J1ZmZfY2xlYXJgLiBJcyBpdCBiZWluZyBjbGVhcmVkPyBQYXJ0aWFsbHkgY2xlYXJlZD8gVGhpcyBoYXMgcmFtaWZpY2F0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgYnVmZmVyIEkgbmVlZCB0byByZXBvcHVsYXRlIGFmdGVyIHRoaXMgY2xlYXIgb3BlcmF0aW9uLiBJIG5lZWQgdGhhdCBgY2JgIG9mZnNldCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgb3IgdGhhdCBJJiMzOTttIHNldHRpbmcgdXAgdGhlIHJpZ2h0IHBhcnRzIGJlZm9yZSBoYW5kaW5nIGl0IG9mZiB0byBhbm90aGVyIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgcmVhbGx5IG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2xlYXJpbmcgYW5kIGlmIG15IGFzc3VtcHRpb25zIGFyZSByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhci4qY2JcXFsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTkxOC1cdCAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5MTk6XHRjaGFyXHRcdFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBza19idWZmIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkYXRhIGxheW91dCBhbmQgaG93IHRoZSBkaWZmZXJlbnQgZmllbGRzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGB0YWlsYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBVbmRlcnN0YW5kaW5nIGl0cyBwb3NpdGlvbmluZyB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3QgaXMgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbG93LWxldmVsIHBhY2tldCBwcm9jZXNzaW5nIG9yIG9wdGltaXphdGlvbiBJJiMzOTttIHdvcmtpbmcgb24gcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YWlsOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTA5MS1cdC8qIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgYXQgdGhlIGVuZCwgc2VlIGFsbG9jX3NrYigpIGZvciBkZXRhaWxzLiAgKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTA5MjpcdHNrX2J1ZmZfZGF0YV90XHRcdHRhaWw7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwOTMtXHRza19idWZmX2RhdGFfdFx0XHRlbmQ7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzE2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzE3LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjcxODpcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNldGFpbDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjcxOS19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzMzPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzM0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjczNTpcdHJldHVybiBza2ItXHUwMDNldGFpbDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjczNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yOTEzPXN0YXRpYyBpbmxpbmUgaW50IHNrYl90YWlscm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjkxNTpcdHJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgPyAwIDogc2tiLVx1MDAzZWVuZCAtIHNrYi1cdTAwM2V0YWlsO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIFF1ZXVlIGluIHRoZSBUTFMgU3RyaW5nIFBhcnNlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgd29ya2luZyB3aXRoIHRoZSBgc2tfYnVmZmAgcXVldWUuIE15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0lmIGBjYmAgaXMgemVyb2VkIG91dCBieSBgc2tidWZmX2NsZWFyYCwgdGhlbiBgVENQX1NLQl9DQihza2IpLSZndDtzZXFgIHdvdWxkIGJlIHplcm8sJiMzNDsgd2hpY2ggc2VlbXMgbGlrZSBhIHByb2JsZW0uIEJ1dCB0aGVuLCBJIHNlZSB0aGF0IGBza2JgIGlzIHNldCB0byBgZmlyc3RgLCB3aGljaCBpcyBgc2tiX3NoaW5mbyhzdHJwLSZndDthbmNob3IpLSZndDtmcmFnX2xpc3RgLiAgSG1tLCB3YWl0IGEgbWludXRlLCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIHdhcyBhIGNoYW5nZSB0byB0aGlzIGxpbmUsIGJ1dCBhZnRlciByZS1yZWFkaW5nIHRoZSBwcm92aWRlZCBkaWZmLCBJIHNlZSB0aGF0IHRoZSBsaW5lIGBmaXJzdCA9IHN0cnAtJmd0O2FuY2hvcjtgIGlzIE5PVCBjaGFuZ2VkIGluIHRoaXMgZGlmZiEKCk9rYXksIHNvIHRoYXQgbWVhbnMgYGZpcnN0YCBpcyBzZXQgdG8gYHN0cnAtJmd0O2FuY2hvcmAsIGFuZCB0aHVzIGBza2JgIGdldHMgc2V0IHRvIGBzdHJwLSZndDthbmNob3JgLiBUaGlzIG1lYW5zIGBzZXEgPSBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcTtgIGlzIHJlYWRpbmcgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYC4gQnV0IEkga25vdyB0aGF0IGBzdHJwLSZndDthbmNob3JgJiMzOTtzIGBjYmAgaXMgemVyb2VkIHdoZW4gaXQmIzM5O3MgYWxsb2NhdGVkLCB3aGljaCBpcyB3aHkgSSBzdGFydGVkIHRvIHdvcnJ5IQoKQWhhISBOb3cgSSByZW1lbWJlciB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBjYWxscyBgdGNwX3JlY3Zfc2tiYCB3aGljaCBhbGxvY2F0ZXMgYGZpcnN0YCwgYW5kIHRoZW4gYHNrYl9jb3B5X2hlYWRlcihzdHJwLSZndDthbmNob3IsIGZpcnN0KTtgIGlzIGNhbGxlZCEgQW5kIHRoYXQgbWVhbnMgdGhlIGBjYmAgaXMgY29waWVkIGZyb20gYGZpcnN0YCB0byBgc3RycC0mZ3Q7YW5jaG9yYCEgT2ssIHRoYXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYHNrYl9jb3B5X2hlYWRlcmAgZnVuY3Rpb24gbm93LCB0byBlbnN1cmUgSSYjMzk7bSBjb3JyZWN0IGluIG15IHVuZGVyc3RhbmRpbmcsIGJ1dCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2NvcHlfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9OTQyPWludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk2Ny1cdHNrYl9yZXNlcnZlKG5za2IsIGhlYWRyb29tKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjk2ODpcdHNrYl9jb3B5X2hlYWRlcihuc2tiLCBza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtOTY5LVx0c2tiX21hcmtfZm9yX3JlY3ljbGUobnNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0MT1FWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Mi1cbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDM6dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxNTAtfVxubmV0L2NvcmUvc2tidWZmLmM6MjE1MTpFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2hlYWRlcik7XG5uZXQvY29yZS9za2J1ZmYuYy0yMTUyLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMDItXG5uZXQvY29yZS9za2J1ZmYuYzoyMjAzOlx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0yMjA0LVx0cmV0dXJuIG47XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjY3LVxubmV0L2NvcmUvc2tidWZmLmM6MjI2ODpcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtMjI2OS1vdXQ6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjU0MS1cbm5ldC9jb3JlL3NrYnVmZi5jOjI1NDI6XHRza2JfY29weV9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc2tiX2NvcHlfaGVhZGVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgc2tiX2NvcHlfaGVhZGVyYC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGl0cyByb2xlIGluIGNyZWF0aW5nIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlci4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyBiZWluZyBjYWxsZWQgZHVyaW5nIGEgY2xvbmluZyBvcGVyYXRpb24sIG9yIHBlcmhhcHMgZm9yIHNlZ21lbnRhdGlvbiBvZmZsb2FkLCBvciBpcyB0aGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEgZGV2aWNlIGRyaXZlcj8gSSBrbm93IHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBjYXJlZnVsIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGlmIGFwcGxpY2FibGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBgc2tiLSZndDtkYXRhYCwgYHNrYi0mZ3Q7bGVuYCwgYHNrYi0mZ3Q7bWFjX2hlYWRlcmAsIGFuZCBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0cy4gSXMgaXQgcGVyZm9ybWluZyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgaW5wdXQgU0tCIHRvIGVuc3VyZSBpdCYjMzk7cyBpbiBhIGdvb2Qgc3RhdGUgYmVmb3JlIGNvcHlpbmc/IExldCYjMzk7cyBjaGVjayBob3cgdGhlIG5ldyBTS0IgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBhbmQgaG93IGl0cyBtZXRhZGF0YSBpcyBjb3BpZWQgb3Zlci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uPyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIGNoZWNrc3VtIG9mZmxvYWQgZGV0YWlscz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBvdmVyYWxsIGRhdGFwYXRoIHBlcmZvcm1hbmNlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY29weSBvdmVyaGVhZCBpbiBkaWZmZXJlbnQgdXNlLWNhc2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHNwZWNpZmljIENQVSBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE0MzpcdHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4yMTQ0Olx0e1xuMjE0NTpcdFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuMjE0NjpcdFxuMjE0NzpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb19zaXplID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb19zaXplO1xuMjE0ODpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb19zZWdzID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb19zZWdzO1xuMjE0OTpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb190eXBlID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb190eXBlO1xuMjE1MDpcdH1cbjIxNTE6XHRFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2hlYWRlcik7XG4yMTUyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTUzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19jb3B5X3NrYl9oZWFkZXJgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBfX2NvcHlfc2tiX2hlYWRlcmAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29yZSBtZWNoYW5pY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXNzZW50aWFsIHRhc2sgb2YgY29weWluZyB0aGUgaGVhZGVyIGRhdGEgZnJvbSBvbmUgU0tCIHRvIGFub3RoZXIuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLCBvZnRlbiBlbXBsb3llZCBkdXJpbmcgcGFja2V0IGNsb25pbmcgb3Igd2hlbiBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgbnVhbmNlcyByZWdhcmRpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipIZWFkZXIgTGVuZ3RoOioqIEhvdyBkb2VzIGl0IGRldGVybWluZSB0aGUgYW1vdW50IG9mIGRhdGEgdG8gY29weSwgYW5kIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaW4gZGlmZmVyaW5nIGhlYWRlciBsZW5ndGhzIGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gU0tCcz8gV2UgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuCiogICAqKlNLQiBNZXRhZGF0YToqKiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1ldGFkYXRhIGZpZWxkcyB0aGF0ICphcmUqIGFuZCAqYXJlIG5vdCogY29waWVkLiBUaGluZ3MgbGlrZSBjaGVja3N1bSBzdGF0dXMsIFZMQU4gdGFncywgYW5kIGFueSBvdGhlciByZWxldmFudCBmbGFncyBhcmUgaW1wb3J0YW50LiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGluZ3MgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gQXJlIGFueSBhc3BlY3RzIG9mIHRoZSBkZXN0aW5hdGlvbiBTS0ImIzM5O3MgbWV0YWRhdGEgKnVwZGF0ZWQqIGluIHRoZSBwcm9jZXNzPwoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEkmIzM5O20gd29uZGVyaW5nIGhvdyB0aGUgZnVuY3Rpb24gbWFuYWdlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGR1cmluZyBoZWFkZXIgY29weS4gSXMgdGhlcmUgYSBiYWNrLW9mZiBzdHJhdGVneT8KKiAgICoqUGVyZm9ybWFuY2UgQ29uc2lkZXJhdGlvbnM6KiogR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBvbiB0aGUgY3JpdGljYWwgcGF0aCwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgdXNlZCBoZXJlLiBJcyB0aGVyZSBhbnkgYWxpZ25tZW50IHBhZGRpbmc/IFZlY3Rvcml6YXRpb24/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgY29weSBmYWlscz8gV2hhdCBzaWduYWxzIGFyZSByZXR1cm5lZCwgYW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0/IEFyZSB0aGVyZSBhbnkgaW52YXJpYW50cyBtYWludGFpbmVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPwoKRXNzZW50aWFsbHksIEkgd2FudCB0byByYXBpZGx5IGVuc3VyZSB0aGF0IG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uIHJlbWFpbnMgYWNjdXJhdGUgYW5kLCBwZXJoYXBzLCB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgYSBkZWVwZXIgZGl2ZSBtYXkgYmUgd2FycmFudGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGtlcm5lbCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9za2JfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTUtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU3LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xubmV0L2NvcmUvc2tidWZmLmM6MTYwNTogKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxubmV0L2NvcmUvc2tidWZmLmMtMTYwNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjEyLVx0bi1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za2J1ZmYuYzoxNjEzOlx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NTctXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4Olx0X19jb3B5X3NrYl9oZWFkZXIobiwgZmlyc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtMTY1OS1cdG4tXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ1Olx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Ni1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDczMi1cdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NDczMzpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3MzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTYyOlx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00OTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDMzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fY29weV9za2JfaGVhZGVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMgaGVyZTogdGhlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGNhY2hlIGxpbmUgYmVoYXZpb3IsIGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggRE1BIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgcGxhdGZvcm0/IEFyZSB3ZSB4ODYsIEFSTSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBpbXBsaWNhdGlvbnMgb2YgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scyBhcmUgYWxyZWFkeSBidWJibGluZyB1cC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBmYWxzZSBzaGFyaW5nLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgaGVhdmlseSBtdWx0aS10aHJlYWRlZCwgd2hpY2gsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIGxpa2VseS4KClRoZSBjb3JlIG9mIGl0LCB0aG91Z2gsIGlzIGVzc2VudGlhbGx5IGEgbWVtY3B5LCBidXQgdGFpbG9yZWQgZm9yIFNLQnMuIEkgbmVlZCB0byBiZSBhc2tpbmcgbXlzZWxmIHRoZSBxdWVzdGlvbiBhYm91dCBpZiBpdCYjMzk7cyB1c2luZyB0aGUgcmlnaHQgbWVtY3B5IHZhcmlhbnQuIElzIGl0IGBtZW1jcHlgLCBgX19tZW1jcHlgLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgdmVjdG9yaXplZCBpbnN0cnVjdGlvbiwgc3VjaCBhcyBgbWVtY3B5X25lb25gPyBJcyBpdCB0YWtpbmcgYWR2YW50YWdlIG9mIGFueSBwcmVmZXRjaGluZz8gTWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvbiB0aGUga2VybmVsIGFyZSB2ZXJ5IGltcG9ydGFudC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgY29weSBlbmdpbmUgY2FwYWJpbGl0aWVzIGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IE5JQyBvciBETUEgYWNjZWxlcmF0aW9uLiBIb3cgYXJlIHdlIGhhbmRsaW5nIGhlYWRlciBvZmZzZXRzLCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBzaXplIG9mIHRoZSBoZWFkZXIgYmVpbmcgY29waWVkPyBBbnkgY2hhbmNlIG9mIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgdW5hbGlnbmVkIGFjY2VzcyBhbmQgc2VlIGlmIGFueSBjbGV2ZXIgdHJpY2tzIGFyZSB1c2VkIHRvIG1pdGlnYXRlIHRoYXQuCgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gU0tCIGlzIG1hbGZvcm1lZD8gRG8gd2UgaGF2ZSBzdWZmaWNpZW50IGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz8gVGhpcyBpcyBrZXJuZWwtbGV2ZWwgY29kZSwgYWZ0ZXIgYWxsOyBzdGFiaWxpdHkgaXMgcGFyYW1vdW50LgoKRmluYWxseSwgd2hhdCYjMzk7cyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgc29mdGlycSwgb3IgYSBwcm9jZXNzIGNvbnRleHQ/IFRoaXMgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2VzIHRoZSBhbGxvd2VkIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBmb3IgY29udGV4dCBzd2l0Y2hlcy4gVGhpcyYjMzk7bGwgaW1wYWN0IG91ciBhbmFseXNpcyBvbiB3aGV0aGVyIHRoaXMgaXMgYW4gYXJlYSBmb3IgYW55IG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aG9zZSBhbnN3ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTU2Olx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbjE1NTc6XHR7XG4xNTU4Olx0XHRuZXctXHUwMDNldHN0YW1wXHRcdD0gb2xkLVx1MDAzZXRzdGFtcDtcbjE1NTk6XHRcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cdTAwM2VzayAqL1xuMTU2MDpcdFx0bmV3LVx1MDAzZWRldlx0XHQ9IG9sZC1cdTAwM2VkZXY7XG4xNTYxOlx0XHRtZW1jcHkobmV3LVx1MDAzZWNiLCBvbGQtXHUwMDNlY2IsIHNpemVvZihvbGQtXHUwMDNlY2IpKTtcbjE1NjI6XHRcdHNrYl9kc3RfY29weShuZXcsIG9sZCk7XG4xNTYzOlx0XHRfX3NrYl9leHRfY29weShuZXcsIG9sZCk7XG4xNTY0Olx0XHRfX25mX2NvcHkobmV3LCBvbGQsIGZhbHNlKTtcbjE1NjU6XHRcbjE1NjY6XHRcdC8qIE5vdGUgOiB0aGlzIGZpZWxkIGNvdWxkIGJlIGluIHRoZSBoZWFkZXJzIGdyb3VwLlxuMTU2NzpcdFx0ICogSXQgaXMgbm90IHlldCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvIGhhdmUgYSAxNiBiaXQgaG9sZVxuMTU2ODpcdFx0ICovXG4xNTY5Olx0XHRuZXctXHUwMDNlcXVldWVfbWFwcGluZyA9IG9sZC1cdTAwM2VxdWV1ZV9tYXBwaW5nO1xuMTU3MDpcdFxuMTU3MTpcdFx0bWVtY3B5KFx1MDAyNm5ldy1cdTAwM2VoZWFkZXJzLCBcdTAwMjZvbGQtXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cdTAwM2VoZWFkZXJzKSk7XG4xNTcyOlx0XHRDSEVDS19TS0JfRklFTEQocHJvdG9jb2wpO1xuMTU3MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGNzdW0pO1xuMTU3NDpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGhhc2gpO1xuMTU3NTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHByaW9yaXR5KTtcbjE1NzY6XHRcdENIRUNLX1NLQl9GSUVMRChza2JfaWlmKTtcbjE1Nzc6XHRcdENIRUNLX1NLQl9GSUVMRCh2bGFuX3Byb3RvKTtcbjE1Nzg6XHRcdENIRUNLX1NLQl9GSUVMRCh2bGFuX3RjaSk7XG4xNTc5Olx0XHRDSEVDS19TS0JfRklFTEQodHJhbnNwb3J0X2hlYWRlcik7XG4xNTgwOlx0XHRDSEVDS19TS0JfRklFTEQobmV0d29ya19oZWFkZXIpO1xuMTU4MTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hY19oZWFkZXIpO1xuMTU4MjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3Byb3RvY29sKTtcbjE1ODM6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl90cmFuc3BvcnRfaGVhZGVyKTtcbjE1ODQ6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9uZXR3b3JrX2hlYWRlcik7XG4xNTg1Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbWFjX2hlYWRlcik7XG4xNTg2Olx0XHRDSEVDS19TS0JfRklFTEQobWFyayk7XG4xNTg3Olx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcbjE1ODg6XHRcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcbjE1ODk6XHQjZW5kaWZcbjE1OTA6XHQjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbjE1OTE6XHRcdENIRUNLX1NLQl9GSUVMRChuYXBpX2lkKTtcbjE1OTI6XHQjZW5kaWZcbjE1OTM6XHRcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xuMTU5NDpcdCNpZmRlZiBDT05GSUdfWFBTXG4xNTk1Olx0XHRDSEVDS19TS0JfRklFTEQoc2VuZGVyX2NwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUGFyc2VyIEJ1ZyBhbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbuKAlGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNvcHlpbmcgdGhlIFRDUCBjb250cm9sIGJsb2NrIChgY2JgKSBmcm9tIGFuIG9sZCBTS0IgaW50byBhIG5ldyBvbmUuIFRoZSBgY2JgIGluIHRoZSBgZmlyc3RgIFNLQiBpcyBzZXQgdXAgYnkgdGhlIFRDUCBzdGFjayBpdHNlbGYuIFRoaXMgbWVhbnMgYFRDUF9TS0JfQ0Ioc3RycC0mZ3Q7YW5jaG9yKS0mZ3Q7c2VxYCBzaG91bGQgYmUgdmFsaWQgYW5kIGluaXRpYWxpemVkLiBCdXQgd2hlcmUmIzM5O3MgdGhlIGJ1Zz8gSXQgaGFzIHRvIGJlIGluIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AuIExldCBtZSBzZWUuLi4KCkFoLCByaWdodCEgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgbG9vcCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGNhbiBkZXJlZmVyZW5jZSBhIG51bGwgcG9pbnRlciBpZiBgcmVtYWluaW5nYCBleGNlZWRzIHRoZSB0b3RhbCBsZW5ndGggb2YgYWxsIHRoZSBTS0JzIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhlIGxpc3QgZW5kcyB1cCBiZWluZyBleGhhdXN0ZWQsIGBza2JgIGJlY29tZXMgTlVMTC4gIGBUQ1BfU0tCX0NCKHNrYilgIHRoZW4gdHJpZXMgdG8gYWNjZXNzIGAmYW1wO05VTEwtJmd0O2NiWzBdYCwgcmVzdWx0aW5nIGluIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGtlcm5lbCBvb3BzLCBlYXN5LiBJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlPyBObywgSXQmIzM5O3MgZWl0aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQgb2YgYm91bmRzIHJlYWQsIGRlcGVuZGluZyBvbiB3aGF0IGBza2ItJmd0O25leHRgIHBvaW50cyB0by4gIFRoZSBgZnJhZ19saXN0YCBpcyBOVUxMLXRlcm1pbmF0ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLiBJdCBhZGRzIGNoZWNrcyB3aXRoIGBUTFNfSEVBREVSX1NJWkVgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHRsc19yeF9tc2dfc2l6ZWAgd2FzIGNhbGxlZCBkaXJlY3RseS4gVGhpcyBmdW5jdGlvbiB0aGVuIHZhbGlkYXRlcyBoZWFkZXIgc2l6ZSBieSBjaGVja2luZyB0aGUgYHNrYi0mZ3Q7bGVuYC4gIFRoZSBgc2tiLSZndDtsZW5gIGhlcmUgaXMgZGV0ZXJtaW5lZCBieSBgc3RycC0mZ3Q7YW5jaG9yLSZndDtsZW5gLCBhbmQgdGhhdCBpcyBpbml0aWFsaXplZCBieSBgaW5xYCAodGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlKSwgYW5kIHRoaXMgY2FuIGJlIGxlc3MgdGhhbiBgVExTX0hFQURFUl9TSVpFYCwgYW5kIGB0bHNfcnhfbXNnX3NpemVgIG1pZ2h0IHJldHVybiAwIChpZiBub3QgZW5vdWdoIGJ5dGVzIGFyZSB0aGVyZSkuCgpgc2tiX2NvcHlfYml0c2AgaXMgdGhlIGlzc3VlLCBpdCBoYXMgdGhlIGFiaWxpdHkgdG8gdHJhdmVyc2UgdGhlIHF1ZXVlIHRocm91Z2ggYGZyYWdfbGlzdGAuICBJZiBgZnJhZ19saXN0YCBkb2VzIG5vdCBoYXZlIGVub3VnaCBieXRlcywgaXQgcmV0dXJucyBhbiBlcnJvciBzdWNoIGFzIGAtRUZBVUxUYCAuICBBbmQgYHRsc19yeF9tc2dfc2l6ZWAgYWxzbyBoYW5kbGVzIHRoaXMgY2FzZSBhbmQgd291bGQgcmV0dXJuIGAtRUZBVUxUYC4gU28gaXQgc2VlbXMgYHRsc19yeF9tc2dfc2l6ZWAgaXRzZWxmIHdhcyBoYW5kbGluZyBjYXNlcyB3aGVyZSBub3QgZW5vdWdoIGJ5dGVzIHdlcmUgYXZhaWxhYmxlLCByaWdodD8gVGhlbiB3aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgbmV3IGNoZWNrcz8KClRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIHBhdGNoIGlzIGFkZGluZyBhIGNoZWNrIGZvciAqY29udGlndW91cyogc2VxdWVuY2Ugc3BhY2Ugd2l0aGluIHRoZSBTS0JzLCB3aGljaCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIHJlc3BvbnNpYmxlIGZvci4gIGBza2JfY29weV9iaXRzYCBjb3BpZXMgd2l0aG91dCBhbnkgY2hlY2tzIG9uIHNlcXVlbmNlIG51bWJlci4gSXQgaXMgY2hlY2tpbmcgdGhhdCB0aGUgU0tCcyBhcmUgY29udGlndW91cywgYW5kIG5vdCBvdmVybGFwcGluZy4gSXQgYWxzbyBjaGVja3MgdGhhdCB0aGUgU0tCcyBhcmUgb2YgdGhlIHNhbWUgZGVjcnlwdGVkIHN0YXRlLiAgSWYgbm90LCB0aGUgZGF0YSBjb3BpZWQgd291bGQgYmUgYSBtZXNzLiAgQnV0IHRoZXNlIGNoZWNrcyBqdXN0IGVuc3VyZSB0aGF0IHRoZSBieXRlcyBhcmUgbm90IG1peGVkLgoKV2FpdCwgaXMgdGhlcmUgYW55IGNhc2Ugd2hlcmUgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIGZyb20gdGhlIHNrYiBkYXRhIGJ1ZmZlcnMsIHdoaWNoIGNvbnRhaW4gdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBkYXRhIGlzIGluaXRpYWxpemVkLgoKSGFuZyBvbi4gV2hhdCBpZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIGNhbGxlZCAqd2l0aCogYHN0cnAtJmd0O3N0bS5mdWxsX2xlbmAgKHRoZSBmdWxsIGV4cGVjdGVkIG1lc3NhZ2UgbGVuZ3RoKT8gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIGNhbGxlZCAqYWZ0ZXIqIGB0bHNfcnhfbXNnX3NpemVgIGFuZCBjaGVja2VkIHRoZSBlbnRpcmUgbWVzc2FnZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29uZGl0aW9uIGByZW1haW5pbmdgICh3aGljaCBpcyBgb2Zmc2V0ICYjNDM7IHN0cnAtJmd0O3N0bS5mdWxsX2xlbmApIGNhbiBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgU0tCIHF1ZXVlIGxlbmd0aC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgc2FtZSBOVUxMIGRlcmVmZXJlbmNlLgoKSG93ZXZlciwgdGhlIGxvZ2ljICpiZWZvcmUqIGNhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBpbmNsdWRlcyBzb21lIGNoZWNrczogYHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtJmd0O2FuY2hvcilgIGFuZCBgaWYgKHN6ICZndDsgaW5xKSByZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO2AuICBTbywgaWYgYHN0cnAtJmd0O3N0bS5mdWxsX2xlbmAgKG5vdyBgc3pgKSBpcyBncmVhdGVyIHRoYW4gYGlucWAsIHRoZW4gYHRsc19zdHJwX3JlYWRfY29weWAgZ2V0cyBjYWxsZWQsIGFuZCB3ZSAqYXZvaWQqIGNhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBhdCBhbGwhIFRoaXMgbWVhbnMgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCB3aWxsICpvbmx5KiBnZXQgY2FsbGVkIHdoZW4gd2UgKmRvKiBoYXZlIGF0IGxlYXN0IGVub3VnaCBkYXRhLCBtYWtpbmcgdGhlIE5VTEwgcG9pbnRlciBzY2VuYXJpbyBpbXBvc3NpYmxlLgoKU28gd2h5IHRoZSBjaGFuZ2U/IEFoISBUaGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB0byB0YWtlIGBsZW5gIGFzIGFuIGFyZ3VtZW50IHNvIHRoZXkgY2FuIGNhbGwgaXQgd2l0aCBgVExTX0hFQURFUl9TSVpFYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbiAzOTE6XHR7XG4gMzkyOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gMzkzOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAzOTQ6XHRcdGludCBuZWVkX3NwYywgbGVuO1xuIDM5NTpcdFxuIDM5NjpcdFx0LyogSWYgdGhlIHJidWYgaXMgc21hbGwgb3IgcmN2IHdpbmRvdyBoYXMgY29sbGFwc2VkIHRvIDAgd2UgbmVlZFxuIDM5NzpcdFx0ICogdG8gcmVhZCB0aGUgZGF0YSBvdXQuIE90aGVyd2lzZSB0aGUgY29ubmVjdGlvbiB3aWxsIHN0YWxsLlxuIDM5ODpcdFx0ICogV2l0aG91dCBwcmVzc3VyZSB0aHJlc2hvbGQgb2YgSU5UX01BWCB3aWxsIG5ldmVyIGJlIHJlYWR5LlxuIDM5OTpcdFx0ICovXG4gNDAwOlx0XHRpZiAobGlrZWx5KHFzaG9ydCBcdTAwMjZcdTAwMjYgIXRjcF9lcG9sbGluX3JlYWR5KHN0cnAtXHUwMDNlc2ssIElOVF9NQVgpKSlcbiA0MDE6XHRcdFx0cmV0dXJuIDA7XG4gNDAyOlx0XG4gNDAzOlx0XHRzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdC8qIElmIHdlIGRvbiYjMzk7dCBrbm93IHRoZSBsZW5ndGggZ28gbWF4IHBsdXMgcGFnZSBmb3IgY2lwaGVyIG92ZXJoZWFkICovXG4gNDA2Olx0XHRuZWVkX3NwYyA9IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuID86IFRMU19NQVhfUEFZTE9BRF9TSVpFICYjNDM7IFBBR0VfU0laRTtcbiA0MDc6XHRcbiA0MDg6XHRcdGZvciAobGVuID0gbmVlZF9zcGM7IGxlbiBcdTAwM2UgMDsgbGVuIC09IFBBR0VfU0laRSkge1xuIDQwOTpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZShzdHJwLVx1MDAzZXNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuIDQxMDpcdFx0XHRpZiAoIXBhZ2UpIHtcbiA0MTE6XHRcdFx0XHR0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJwKTtcbiA0MTI6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0MTM6XHRcdFx0fVxuIDQxNDpcdFxuIDQxNTpcdFx0XHRza2JfZmlsbF9wYWdlX2Rlc2Moc3RycC1cdTAwM2VhbmNob3IsIHNoaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MzssXG4gNDE2Olx0XHRcdFx0XHQgICBwYWdlLCAwLCAwKTtcbiA0MTc6XHRcdH1cbiA0MTg6XHRcbiA0MTk6XHRcdHNoaW5mby1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xuIDQyMDpcdFxuIDQyMTpcdFx0c3RycC1cdTAwM2Vjb3B5X21vZGUgPSAxO1xuIDQyMjpcdFx0c3RycC1cdTAwM2VzdG0ub2Zmc2V0ID0gMDtcbiA0MjM6XHRcbiA0MjQ6XHRcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IDA7XG4gNDI1Olx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2VkYXRhX2xlbiA9IDA7XG4gNDI2Olx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2V0cnVlc2l6ZSA9IHJvdW5kX3VwKG5lZWRfc3BjLCBQQUdFX1NJWkUpO1xuIDQyNzpcdFxuIDQyODpcdFx0dGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XG4gNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFByb2Nlc3NpbmcqKgoKT2theSwgc28gYHRsc19zdHJwX3JlYWRfY29weWAgaXMgYWxsb2NhdGluZyBtZW1vcnkgcGFnZXMsIGFuZCBjcnVjaWFsbHksIGl0JiMzOTtzIHNldHRpbmcgYHN0cnAtJmd0O2NvcHlfbW9kZSA9IDFgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBrZXksIEkgc2VlLiBUaGVuIGl0IGltbWVkaWF0ZWx5IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbihzdHJwKWAuIFJpZ2h0LCBzbyB0aGlzIGBjb3B5aW5gIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBkYXRhIHRyYW5zZmVyIGZyb20gdGhlIFRDUCByZWNlaXZlIHF1ZXVlICphY3R1YWxseSogdGFrZXMgcGxhY2UsIGZlZWRpbmcgdGhlIGFsbG9jYXRlZCBwYWdlcy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24gdG8gY29uZmlybSBteSB0aGlua2luZy4gR290dGEgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgY29weSBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc3RycF9yZWFkX2NvcHlpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNzUtXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc2OnN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzc3LXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzkwPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxubmV0L3Rscy90bHNfc3RycC5jOjQyODpcdHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jLTQyOS1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MjEtXHRpZiAodW5saWtlbHkoc3RycC1cdTAwM2Vjb3B5X21vZGUpKVxubmV0L3Rscy90bHNfc3RycC5jOjUyMjpcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jLTUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwuICYjMzQ7dGxzJiMzNDsgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UsIGFuZCAmIzM0O3N0cnAmIzM0OyBsaWtlbHkgaW1wbGllcyBzb21lIHN0cmluZyBwcm9jZXNzaW5nIG9yIGNvcHlpbmcgb3BlcmF0aW9uLiAmIzM0O1JlYWQmIzM0OyBpbmRpY2F0ZXMgdGhpcyBpcyBhYm91dCBwdWxsaW5nIGRhdGEgaW4uIEFuZCAmIzM0O2NvcHlpbiYjMzQ7IGlzIGludGVyZXN0aW5nIC0gaXQgaW1wbGllcyBjb3B5aW5nIGRhdGEgKmludG8qIGEgc3BlY2lmaWMgbG9jYXRpb24sIHBlcmhhcHMgYSBidWZmZXIgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHJlYWRpbmcgc3RyaW5nIGRhdGEgZnJvbSBzb21lIHNvdXJjZSwgbGlrZWx5IGludG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBlbnN1cmluZyB0aHJlYWQtc2FmZXR5IHdoZW4gaGFuZGxpbmcgc3RyaW5ncywgcGVyaGFwcyB3aGVuIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbiBkYXRhIHdpdGhpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSAmIzM0O2NvcHlpbiYjMzQ7IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBwcm90ZWN0aW9uIGluIHBsYWNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGRlZXBlciB0byBzZWUgKndoZXJlKiB0aGlzIGRhdGEgaXMgY29waWVkIGFuZCAqaG93KiB0aGF0IGNvcHkgb3BlcmF0aW9uIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgdGhyZWFkLXNhZmV0eS4gSXMgaXQgYSBkZWVwIGNvcHk/IERvZXMgaXQgdXNlIGEgbG9jaz8gQXJlIHRoZXJlIGFueSBzaXplIGxpbWl0cyBvciBlcnJvciBoYW5kbGluZyBpbnZvbHZlZD8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzY6XHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weWluKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuIDM3NzpcdHtcbiAzNzg6XHRcdHJlYWRfZGVzY3JpcHRvcl90IGRlc2M7XG4gMzc5Olx0XG4gMzgwOlx0XHRkZXNjLmFyZy5kYXRhID0gc3RycDtcbiAzODE6XHRcdGRlc2MuZXJyb3IgPSAwO1xuIDM4MjpcdFx0ZGVzYy5jb3VudCA9IDE7IC8qIGdpdmUgbW9yZSB0aGFuIG9uZSBza2IgcGVyIGNhbGwgKi9cbiAzODM6XHRcbiAzODQ6XHRcdC8qIHNrIHNob3VsZCBiZSBsb2NrZWQgaGVyZSwgc28gb2theSB0byBkbyByZWFkX3NvY2sgKi9cbiAzODU6XHRcdHRjcF9yZWFkX3NvY2soc3RycC1cdTAwM2VzaywgXHUwMDI2ZGVzYywgdGxzX3N0cnBfY29weWluKTtcbiAzODY6XHRcbiAzODc6XHRcdHJldHVybiBkZXNjLmVycm9yO1xuIDM4ODpcdH1cbiAzODk6XHRcbiAzOTA6XHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYHRsc19zdHJwX2NvcHlpbmAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y3BfcmVhZF9zb2NrYCBjYWxscyBgdGxzX3N0cnBfY29weWluYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRhdGEgdHJhbnNmZXIgcmVsYXRlZCB0byBUTFMgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGluYm91bmQgVExTIGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFRDUCBjb25uZWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGB0bHNfc3RycF9jb3B5aW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBkYXRhIGlzIGJlaW5nIGNvcGllZCBpbiBhbmQgcHJvY2Vzc2VkLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSBlbmNyeXB0ZWQgVExTIGRhdGEgaXMgYmVpbmcgZGVjcnlwdGVkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGl0cyBtZW1vcnkgaGFuZGxpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVExTIGxpYnJhcnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDI6XHRzdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiAzNDM6XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgaW5fbGVuKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwID0gKHN0cnVjdCB0bHNfc3RycGFyc2VyICopZGVzYy1cdTAwM2VhcmcuZGF0YTtcbiAzNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMzQ3Olx0XHRpbnQgcmV0O1xuIDM0ODpcdFxuIDM0OTpcdFx0aWYgKHN0cnAtXHUwMDNlbXNnX3JlYWR5KVxuIDM1MDpcdFx0XHRyZXR1cm4gMDtcbiAzNTE6XHRcbiAzNTI6XHRcdHNrYiA9IHN0cnAtXHUwMDNlYW5jaG9yO1xuIDM1MzpcdFx0aWYgKCFza2ItXHUwMDNlbGVuKVxuIDM1NDpcdFx0XHRza2JfY29weV9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xuIDM1NTpcdFx0ZWxzZVxuIDM1NjpcdFx0XHRzdHJwLVx1MDAzZW1peGVkX2RlY3J5cHRlZCB8PSAhIXNrYl9jbXBfZGVjcnlwdGVkKHNrYiwgaW5fc2tiKTtcbiAzNTc6XHRcbiAzNTg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKSBcdTAwMjZcdTAwMjYgc3RycC1cdTAwM2VtaXhlZF9kZWNyeXB0ZWQpXG4gMzU5Olx0XHRcdHJldCA9IHRsc19zdHJwX2NvcHlpbl9za2Ioc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcbiAzNjA6XHRcdGVsc2VcbiAzNjE6XHRcdFx0cmV0ID0gdGxzX3N0cnBfY29weWluX2ZyYWcoc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcbiAzNjI6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzNjM6XHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IHJldDtcbiAzNjQ6XHRcdFx0cmV0ID0gMDtcbiAzNjU6XHRcdH1cbiAzNjY6XHRcbiAzNjc6XHRcdGlmIChzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbiBcdTAwMjZcdTAwMjYgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuIDM2ODpcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiAzNjk6XHRcbiAzNzA6XHRcdFx0V1JJVEVfT05DRShzdHJwLVx1MDAzZW1zZ19yZWFkeSwgMSk7XG4gMzcxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmlwIENvcHktSW4gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0bHNfc3RycF9jb3B5aW5gIHdvcmtzLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0cyBwcmltYXJ5IGpvYiBpcyB0byBnZXQgZGF0YSBmcm9tIGBpbl9za2JgIGFuZCBwdXQgaXQgaW50byB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGhpbiBgc3RycC0mZ3Q7YW5jaG9yYC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IElmIGBzdHJwLSZndDtzdG0uZnVsbF9sZW5gIGhhcHBlbnMgdG8gYmUgemVybyBhdCB0aGUgc3RhcnQsIGB0bHNfc3RycF9jb3B5aW5gIGRvZXNuJiMzOTt0IGp1c3QgY29weSB0aGUgZGF0YS4gSXQgKmFsc28qIGNhbGxzIGB0bHNfcnhfbXNnX3NpemVgLiAgVGhhdCBjYWxsIHRha2VzIHBsYWNlIHdpdGhpbiBlaXRoZXIgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCBvciBgdGxzX3N0cnBfY29weWluX3NrYmAsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBob3cgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCB3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93IGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW5fZnJhZyhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyMTE6XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICppbl9za2IsIHVuc2lnbmVkIGludCBvZmZzZXQsXG4gMjEyOlx0XHRcdFx0XHRzaXplX3QgaW5fbGVuKVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHVuc2lnbmVkIGludCBuZnJhZyA9IHNrYi1cdTAwM2VsZW4gLyBQQUdFX1NJWkU7XG4gMjE1Olx0XHRzaXplX3QgbGVuLCBjaHVuaztcbiAyMTY6XHRcdHNrYl9mcmFnX3QgKmZyYWc7XG4gMjE3Olx0XHRpbnQgc3o7XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAodW5saWtlbHkobmZyYWcgXHUwMDNlPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MpKSB7XG4gMjIwOlx0XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XG4gMjIxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHRmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW25mcmFnXTtcbiAyMjU6XHRcbiAyMjY6XHRcdGxlbiA9IGluX2xlbjtcbiAyMjc6XHRcdC8qIEZpcnN0IG1ha2Ugc3VyZSB3ZSBnb3QgdGhlIGhlYWRlciAqL1xuIDIyODpcdFx0aWYgKCFzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbikge1xuIDIyOTpcdFx0XHQvKiBBc3N1bWUgb25lIHBhZ2UgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgaGVhZGVycyAqL1xuIDIzMDpcdFx0XHRjaHVuayA9XHRtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4gMjMxOlx0XHRcdFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKGluX3NrYiwgb2Zmc2V0LFxuIDIzMjpcdFx0XHRcdFx0XHQgICBza2JfZnJhZ19hZGRyZXNzKGZyYWcpICYjNDM7XG4gMjMzOlx0XHRcdFx0XHRcdCAgIHNrYl9mcmFnX3NpemUoZnJhZyksXG4gMjM0Olx0XHRcdFx0XHRcdCAgIGNodW5rKSk7XG4gMjM1Olx0XG4gMjM2Olx0XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IGNodW5rO1xuIDIzNzpcdFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGNodW5rO1xuIDIzODpcdFx0XHRza2JfZnJhZ19zaXplX2FkZChmcmFnLCBjaHVuayk7XG4gMjM5Olx0XG4gMjQwOlx0XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHNrYik7XG4gMjQxOlx0XHRcdGlmIChzeiBcdTAwM2MgMClcbiAyNDI6XHRcdFx0XHRyZXR1cm4gc3o7XG4gMjQzOlx0XG4gMjQ0Olx0XHRcdC8qIFdlIG1heSBoYXZlIG92ZXItcmVhZCwgc3ogPT0gMCBpcyBndWFyYW50ZWVkIHVuZGVyLXJlYWQgKi9cbiAyNDU6XHRcdFx0aWYgKHVubGlrZWx5KHN6IFx1MDAyNlx1MDAyNiBzeiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikpIHtcbiAyNDY6XHRcdFx0XHRpbnQgb3ZlciA9IHNrYi1cdTAwM2VsZW4gLSBzejtcbiAyNDc6XHRcbiAyNDg6XHRcdFx0XHRXQVJOX09OX09OQ0Uob3ZlciBcdTAwM2UgY2h1bmspO1xuIDI0OTpcdFx0XHRcdHNrYi1cdTAwM2VsZW4gLT0gb3ZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIGluY29taW5nIFRMUyBtZXNzYWdlcyBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgdGxzX3N0cnBfcmVhZF9jb3B5YCBnZXRzIGNhbGxlZCwgY29waWVzIGRhdGEgaW50byBwYWdlcywgYW5kIHRoZW4gY2FsbHMgYHRsc19yeF9tc2dfc2l6ZWAgb24gdGhpcyBjb3BpZWQgZGF0YS4gVGhhdCYjMzk7cyBmaW5lIOKAkyB0aGUgcGFnZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIGNvbnRpZ3VvdXMgYmVjYXVzZSBgc2tiX2NvcHlfYml0c2AgZG9lcyB0aGUgY29weSBwcm9wZXJseS4gVGhlIGxvZ2ljIGdvZXMgbGlrZSB0aGlzOiBpZiAgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmYWlscyAobWVhbmluZyBza2JzIGluIHRoZSBxdWV1ZSBhcmUgZGlzY29udGludW91cyBvciBoYXZlIGRpZmZlcmluZyBkZWNyeXB0ZWQgc3RhdGVzKSwgd2UgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlcyBhbmQgdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcmVhc3NlbWJsZSB0aGUgZGF0YS4gYHRjcF9yZWFkX3NvY2tgIGlzIHRoZSByaWdodCB0b29sOyBpdCBjb3JyZWN0bHkgaGFuZGxlcyBhbnkgVENQIGlkaW9zeW5jcmFzaWVzIGxpa2Ugb3V0LW9mLW9yZGVyIHNlZ21lbnRzIG9yIG92ZXJsYXBzLiBTbywgdXNpbmcgYHRjcF9yZWFkX3NvY2tgIGdldHMgdXMgdGhlIHByb3BlciwgcmVhc3NlbWJsZWQgVENQIHN0cmVhbS4gVGhlbiwgYHRsc19yeF9tc2dfc2l6ZWAgY2FuIHJlYWQgdGhlIGNvcnJlY3QgVExTIGhlYWRlciBmcm9tIHRoZXNlIHBhZ2VzLgoKTm93LCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZGlyZWN0bHkgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCBvbiBgc3RycC0mZ3Q7YW5jaG9yYCwgd2hpY2ggd2FzIHNpbXBseSBhIGBmcmFnX2xpc3RgIHBvaW50aW5nIHRvIHRoZSBUQ1AgcmVjZWl2ZSBxdWV1ZS4gVGhlIHZ1bG5lcmFiaWxpdHkgaGVyZSBpcyB0aGF0IGBza2JfY29weV9iaXRzYCB3b3VsZCBibGluZGx5IGNvcHkgZGF0YSBmcm9tIHRoZSBza2JzIGluIHRoYXQgbGlzdCwgaWdub3JpbmcgVENQIHNlcXVlbmNlIG51bWJlcnMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGhhZCBvdmVybGFwcGluZywgb3V0LW9mLW9yZGVyLCBvciBkaWZmZXJlbnRseSBkZWNyeXB0ZWQgc2ticyAod2hpY2ggKnNob3VsZG4mIzM5O3QqIGhhcHBlbiwgYnV0IG1pZ2h0IHdpdGggdXJnZW50IGRhdGEgb3Igc29tZSBlZGdlIGNhc2UpIGBza2JfY29weV9iaXRzYCB3b3VsZCBwdWxsIHRoZSB3cm9uZyBkYXRhLiBUaGVuIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHBhcnNlIHRoaXMgY29ycnVwdGVkIGRhdGEgYXMgYSBUTFMgaGVhZGVyLCBwb3NzaWJseSBjYWxjdWxhdGluZyB0aGUgbWVzc2FnZSBzaXplIGluY29ycmVjdGx5IGFuZCBjb3JydXB0aW5nIHRoZSBzdHJlYW0uIFRoZSBmaXggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGNoZWNrOgoKYGBgYwomIzQzOwkJaWYgKGlucSAmbHQ7IFRMU19IRUFERVJfU0laRSkKJiM0MzsJCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpOwomIzQzOwkJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwpgYGAKClRoaXMgKmVuc3VyZXMqIHRoZSBmaXJzdCBgVExTX0hFQURFUl9TSVpFYCBieXRlcyBhcmUgY29udGlndW91cywgYW5kIHRoYXQgdGhlaXIgZGVjcnlwdGVkIHN0YXRlIGlzIGNvbnNpc3RlbnQuICBJZiBub3QsIGl0IGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCB0byByZWFzc2VtYmxlIHRoZSBkYXRhIGJlZm9yZSBwYXJzaW5nLgoKSG1tLCBidXQgd2hhdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGBza2JfY29weV9iaXRzYCByZWFkcyBmcm9tIHRoZSBkYXRhIGJ1ZmZlcnMgb2YgdGhlIHNrYnMsIHdoaWNoIGNvbnRhaW4gbmV0d29yayBkYXRhOyB0aGVzZSBidWZmZXJzIGFyZSAqYWx3YXlzKiBpbml0aWFsaXplZC4gRXZlbiBpZiBpdCByZWFkcyB0aGUgd3JvbmcgZGF0YSAoZHVlIHRvIHNlcXVlbmNlIG51bWJlciBpc3N1ZXMpLCB0aGUgZGF0YSAqaXRzZWxmKiBpcyBpbml0aWFsaXplZCwganVzdCBpbmNvcnJlY3QuICBgdGxzX3J4X21zZ19zaXplYCBjYWxjdWxhdGVzIGBkYXRhX2xlbmAgdGhlbiBzZXRzIGBzdHJwLSZndDtzdG0uZnVsbF9sZW4gPSBzemAuIEFmdGVyd2FyZHMsIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgdmFsaWRhdGVzIHRoZSBjb250aWd1b3VzbmVzcyBvZiB0aGUgZGF0YSB1cCB0byBgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuYC4gSWYgdGhhdCBmYWlscywgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHdvdWxkIGRpc2NhcmQgdGhlIGJhZCBjYWxjdWxhdGVkIHNpemUuCgpPa2F5LCBsZXQmIzM5O3MgY29uc2lkZXIgYSBzY2VuYXJpbyB3aGVyZSBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHN1Y2NlZWRzLCBidXQgYHRsc19yeF9tc2dfc2l6ZWAgc29tZWhvdyBzdGlsbCByZWFkcyBnYXJiYWdlLiBIb3cgY291bGQgdGhpcyBoYXBwZW4/IElmIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgKnN1Y2NlZWRzKiwgaXQgbWVhbnMgdGhlIHNrYnMgdXAgdG8gdGhlIGNhbGN1bGF0ZWQgYHN6YCBhcmUgY29udGlndW91cy4gU2luY2UgYHN6YCBpcyBndWFyYW50ZWVkIHRvIGJlIGF0IGxlYXN0IGBUTFNfSEVBREVSX1NJWkVgLCB0aGUgZmlyc3QgaGVhZGVyIGJ5dGVzIHdlcmUgYWxzbyBjb250aWd1b3VzLCB3aGljaCBtZWFucyBgdGxzX3J4X21zZ19zaXplYCBzaG91bGQgaGF2ZSByZWFkIHRoZSBjb3JyZWN0IGhlYWRlci4gU28sIHdoeSB0aGUgYWRkZWQgY2hlY2sgKmJlZm9yZSogY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYD8KCkFoYSEgIFdoYXQgYWJvdXQgYSBjcmFzaCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlmIGByZW1haW5pbmdgIGV4Y2VlZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHF1ZXVlZCBza2JzPyBMZXQmIzM5O3MgY2hlY2s6CmBgYGMKCXdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IHJlbWFpbmluZykgewoJCXNlcSAmIzQzOz0gc2tiLSZndDtsZW47CgkJcmVtYWluaW5nIC09IHNrYi0mZ3Q7bGVuOwoJCXNrYiA9IHNrYi0mZ3Q7bmV4dDsKCgkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxICE9IHNlcSkKCQkJcmV0dXJuIGZhbHNlOwpgYGAKSWYgYHJlbWFpbmluZ2AgaXMgZ3JlYXRlciwgdGhlIGxvb3AgKm1pZ2h0KiBkZXJlZmVyZW5jZSBhIE5VTEwgYHNrYmAuIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBSZW1lbWJlciB0aGF0IGByZW1haW5pbmcgPSBzdHJwLSZndDtzdG0ub2Zmc2V0ICYjNDM7IHN0cnAtJmd0O3N0bS5mdWxsX2xlbjtgLCB3aGVyZSBgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuYCBpcyBqdXN0IHRoZSBgc3pgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5xID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE2LVxubmV0L3Rscy90bHNfc3RycC5jOjUxNzpcdGlucSA9IHRjcF9pbnEoc3RycC1cdTAwM2Vzayk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE4LVx0aWYgKGlucSBcdTAwM2MgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgUmVjZWl2ZSBRdWV1ZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNwX2lucWAgZnVuY3Rpb24gY2FsbCBhbmQgd2hhdCBpdCYjMzk7cyB0ZWxsaW5nIG1lIGFib3V0IHRoZSBhbW91bnQgb2YgZGF0YSByZWFkeSB0byBiZSByZWFkLiBJbml0aWFsbHksIEkgdGhvdWdodCwgJiMzNDtXYWl0LCBgdGNwX2lucWAgZ2l2ZXMgbWUgdGhlIElOLVNFUVVFTkNFIGRhdGE/JiMzNDsgTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHdhcyBhIHNsaWdodCB3b3JyeSBhYm91dCBvdXQtb2Ytb3JkZXIgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSwgYnV0IHRoZW4gaXQgaGl0cyBtZS4gIGB0Y3BfaW5xYCBpcyBhY3R1YWxseSBwcm92aWRpbmcgYHRwLSZndDtyY3Zfbnh0IC0gdHAtJmd0O2NvcGllZF9zZXFgLCB3aGljaCAqaXMqIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZWAgc3RyaWN0bHkgY29udGFpbnMgaW4tc2VxdWVuY2UgU0tCcy4gVGhlIG91dC1vZi1vcmRlciBvbmVzIGFyZSBzYWZlbHkgdHVja2VkIGF3YXkgaW4gdGhlIGBvdXRfb2Zfb3JkZXJfcXVldWVgLiAgU28sICphbHdheXMqIGluLXNlcXVlbmNlLiBCdXQgdGhlbiwgSSYjMzk7bSBxdWVzdGlvbmluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGFuZCB3b25kZXJpbmcgd2h5IGl0JiMzOTtzIGV2ZW4gY29tcGFyaW5nIHNlcXVlbmNlIG51bWJlcnMgKGBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSAhPSBzZXFgKS4gSXMgaXQgZm9yIHVyZ2VudCBkYXRhIHNjZW5hcmlvcz8gRWRnZSBjYXNlcyB3aXRoIG92ZXJsYXBwaW5nIFNLQnM/CgpBbmQgdGhlbiBJIHJlbWVtYmVyOiBvdmVybGFwcGluZyBTS0JzICpjYW4qIGV4aXN0IGluIHRoZSByZWNlaXZlIHF1ZXVlIGlmIHRoZXkgaGF2ZW4mIzM5O3QgYmVlbiBjb2xsYXBzZWQgeWV0LiBUaGF0JiMzOTtzIGEgZ29vZCBnb3RjaGEhICBUaGlzIHJhaXNlcyBhbm90aGVyIGNvbmNlcm46IGlmIGFuIFNLQiYjMzk7cyBgbGVuYCBpbmNsdWRlcyBvdmVybGFwcGluZyBkYXRhLCBpdHMgbGVuZ3RoIG1pZ2h0IGJlICpsYXJnZXIqIHRoYW4gdGhlIGFjdHVhbCBpbi1zZXF1ZW5jZSBkYXRhIGl0IHByb3ZpZGVzISAgSWYgc28sIHRoZSBzdW0gb2YgYHNrYi0mZ3Q7bGVuYCBmb3IgYWxsIFNLQnMgaW4gdGhlIHJlY2VpdmUgcXVldWUgbWlnaHQgYWN0dWFsbHkgZXhjZWVkIHdoYXQgYHRjcF9pbnFgIHJlcG9ydHMgYXMgdGhlIGluLXNlcXVlbmNlIGRhdGEhCgpJZiB0aGlzIGlzIHRydWUsIHRoZW4gYHJlbWFpbmluZ2AgKHdoaWNoIGlzIGxpbWl0ZWQgYnkgYG9mZnNldCAmIzQzOyBpbnFgKSB3b3VsZCBiZSAqc21hbGxlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItJmd0O2xlbmAuICBTbywgdGhlIGBza2JgIHdvdWxkbiYjMzk7dCBiZWNvbWUgbnVsbCwgYW5kIGl0IGFsbCBjaGVja3Mgb3V0LgoKT2theSwgbGV0JiMzOTtzIGV4cGxvcmUgYW5vdGhlciBwb3NzaWJpbGl0eS4gIFdoYXQgaWYgYW4gU0tCIGlzIHNvbWVob3cgKnNtYWxsZXIqIHRoYW4gdGhlIHNlcXVlbmNlIHNwYWNlIGl0IGNvdmVycz8gKGxpa2UsIGlmIGl0IGhhcyAmIzM0O2hvbGVzJiMzNDsgc29tZWhvdz8gTm8sIFRDUCBza2JzIGRvbiYjMzk7dCBoYXZlIGhvbGVzLikgV2hhdCBpZiBgaW5xYCB3ZXJlIHNvbWVob3cgKmxhcmdlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItJmd0O2xlbmAgaW4gYHNrX3JlY2VpdmVfcXVldWVgPyBIb3cgY291bGQgdGhhdCBoYXBwZW4/IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGBpbnFgIGlz4oCmIGl04oCZcyBgdHAtJmd0O3Jjdl9ueHQgLSB0cC0mZ3Q7Y29waWVkX3NlcWAuIEFuZCBpZiB0aGVyZSYjMzk7cyBhIEZJTiwgYGlucWAgbWlnaHQgaW5jbHVkZSBpdCwgYnV0IHRoZSBkYXRhIGNhbGN1bGF0aW9uIHdvdWxkbiYjMzk7dC4gSGFuZyBvbiwgZG9lcyBgdGNwX2lucWAgZXZlbiBpbmNsdWRlIHRoZSBGSU4/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYHRjcF9pbnFgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW5xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9NjM5PWludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwLmMtNjUwLVx0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc2spO1xubmV0L2lwdjQvdGNwLmM6NjUxOlx0XHRhbnN3ID0gdGNwX2lucShzayk7XG5uZXQvaXB2NC90Y3AuYy02NTItXHRcdHVubG9ja19zb2NrX2Zhc3Qoc2ssIHNsb3cpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTE4MjM9aW50IHRjcF9wZWVrX2xlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2lwdjQvdGNwLmMtMTgyNC17XG5uZXQvaXB2NC90Y3AuYzoxODI1Olx0cmV0dXJuIHRjcF9pbnEoc29jay1cdTAwM2Vzayk7XG5uZXQvaXB2NC90Y3AuYy0xODI2LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTk1PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMDktXHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xubmV0L2lwdjQvdGNwLmM6MjIxMDpcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTIyMTEtXHRib29sIG1tYXBfbG9ja2VkO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTIzNDY9dm9pZCB0Y3BfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjQxMi1cbm5ldC9pcHY0L3RjcC5jOjI0MTM6c3RhdGljIGludCB0Y3BfaW5xX2hpbnQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwLmMtMjQxNC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MjkzMD1pbnQgdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yOTUwLVx0XHRpZiAoKGNtc2dfZmxhZ3MgXHUwMDI2IFRDUF9DTVNHX0lOUSkgfCBtc2ctXHUwMDNlbXNnX2dldF9pbnEpIHtcbm5ldC9pcHY0L3RjcC5jOjI5NTE6XHRcdFx0bXNnLVx1MDAzZW1zZ19pbnEgPSB0Y3BfaW5xX2hpbnQoc2spO1xubmV0L2lwdjQvdGNwLmMtMjk1Mi1cdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgVENQX0NNU0dfSU5RKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ3OTgtemVyb2NvcHlfcmN2X2lucTpcbm5ldC9pcHY0L3RjcC5jOjQ3OTk6XHRcdHpjLmlucSA9IHRjcF9pbnFfaGludChzayk7XG5uZXQvaXB2NC90Y3AuYy00ODAwLXplcm9jb3B5X3Jjdl9vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgUXVldWUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIHJlY2VpdmUgcXVldWUgaXMgbWFuYWdlZCBpbnRlcm5hbGx5LCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBvZiBgdGNwX2lucWAuIEkga25vdyBpdCYjMzk7cyBhIGtleSBlbGVtZW50IGluIHVuZGVyc3RhbmRpbmcgaG93IGluY29taW5nIGRhdGEgaXMgaGFuZGxlZCwgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgd2hhdCBmaWVsZHMgaXQgY29udGFpbnMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc2tfcmVjZWl2ZV9xdWV1ZWAuIFRoYXQmIzM5O2xsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBkZWVwZXIgZGl2ZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgY29uZ2VzdGlvbiBjb250cm9sIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYyBsYXRlciBvbi4gTm8gcG9pbnQgaW4gYnVpbGRpbmcgYW55IGFzc3VtcHRpb25zIGJlZm9yZSBJIHJlZnJlc2ggdGhlIGZvdW5kYXRpb24ga25vd2xlZGdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW5xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjczNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90Y3BfcHVyZV9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yNzQwLVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjc0MTpzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTI3NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3BlYWtpbmcgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgdGNwX2lucWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGB0Y3BfaW5xYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nOyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgaG93IGl0IGFmZmVjdHMgdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJcyB0aGlzIGEgcGFja2V0IHJlY2VpdmUgcXVldWUgbGVuZ3RoLCBvciBzb21lIHNvcnQgb2YgaW50ZXJuYWwgYnVmZmVyPyBJcyBpdCB1c2VkIGZvciBjb25nZXN0aW9uIGNvbnRyb2wsIGZsb3cgY29udHJvbCwgb3Igc2ltcGx5IGEgZGVidWdnaW5nIG1ldHJpYz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBleGFjdGx5IGFtIEkgbG9va2luZyBmb3I/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gd2F0Y2ggb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYHNrX2J1ZmZgIG9yIHJlbGF0ZWQgbmV0d29ya2luZyBkYXRhIHN0cnVjdHVyZXMgYXMgdGhvc2UgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB0aGUgZnVuY3Rpb24uIEFueSBvYnZpb3VzIGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBUaGF0JiMzOTtzIGFsd2F5cyBpbXBvcnRhbnQgdG8gbm90ZSB3aXRoIG5ldHdvcmtpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGlzIGlzIHdlbGwtY29tbWVudGVkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NDE6XHRzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcbjI3NDI6XHR7XG4yNzQzOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjI3NDQ6XHRcdGludCBhbnN3O1xuMjc0NTpcdFxuMjc0NjpcdFx0aWYgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX1NZTl9TRU5UIHwgVENQRl9TWU5fUkVDVikpIHtcbjI3NDc6XHRcdFx0YW5zdyA9IDA7XG4yNzQ4Olx0XHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19VUkdJTkxJTkUpIHx8XG4yNzQ5Olx0XHRcdCAgICF0cC1cdTAwM2V1cmdfZGF0YSB8fFxuMjc1MDpcdFx0XHQgICBiZWZvcmUodHAtXHUwMDNldXJnX3NlcSwgdHAtXHUwMDNlY29waWVkX3NlcSkgfHxcbjI3NTE6XHRcdFx0ICAgIWJlZm9yZSh0cC1cdTAwM2V1cmdfc2VxLCB0cC1cdTAwM2VyY3Zfbnh0KSkge1xuMjc1MjpcdFxuMjc1MzpcdFx0XHRhbnN3ID0gdHAtXHUwMDNlcmN2X254dCAtIHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yNzU0Olx0XG4yNzU1Olx0XHRcdC8qIFN1YnRyYWN0IDEsIGlmIEZJTiB3YXMgcmVjZWl2ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2MTkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFRMUyBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlIChgaW5xYCkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGFkanVzdHMgYGlucWAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBGSU4gcGFja2V0IHdhcyByZWNlaXZlZCwgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1cmdlbnQgZGF0YS4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBieXRlcyAqYXZhaWxhYmxlKiBpbiB0aGUgcXVldWUgYW5kIHRoZSBieXRlcyAqY2xhaW1lZCogdG8gYmUgYXZhaWxhYmxlLiAgU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBza2JgcywgYW5kIGhhcyBhIGxvb3AgdGhhdCB0ZXJtaW5hdGVzIHdoZW4gYHNrYi0mZ3Q7bGVuYCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBieXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCAoYHJlbWFpbmluZ2ApLgoKSSBpbml0aWFsbHkgd29ycmllZCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIGByZW1haW5pbmdgIGNvdWxkIHNvbWVob3cgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBkYXRhIGluIHRoZSBxdWV1ZSBhbmQgYHNrYmAgYmVjb21lcyBgTlVMTGAsIGJ1dCBJIGNhcmVmdWxseSBhbmFseXplZCB0aGUgaW52YXJpYW50cyBhbmQgY29uc3RyYWludHMuIFRoZSBjb2RlICpzaG91bGRuJiMzOTt0KiBkZXJlZmVyZW5jZSBhIGBOVUxMYCBwb2ludGVyIHdoZW4gcmVhZGluZyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlIGJlY2F1c2UgYHJlbWFpbmluZ2AgaXMgY29ycmVjdGx5IGNhbGN1bGF0ZWQgYmFzZWQgb24gYGlucWAgYW5kIHRoZSBsb29wIGNvbmRpdGlvbiBwcmV2ZW50cyB0aGlzLiBUaGUgdG90YWwgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBtdXN0ICphbHdheXMqIGJlICZndDs9IGByZW1haW5pbmdgLCBhbmQgc28gdGhlIGxvb3AgbXVzdCBhbHdheXMgdGVybWluYXRlIGJlZm9yZSBza2IgYmVjb21lcyBgTlVMTGAuCgpUaGVuIG15IGZvY3VzIHNoaWZ0ZWQgdG8gd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgaXMuIEkgdGhlbiBsb29rZWQgYXQgdGhlIG5ldyBhZGRpdGlvbiB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBiYW5kLWFpZCBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYWRkZWQuCgpJdCBiZWNhbWUgY2xlYXIgdGhhdCB0aGUgcmVhbCBpc3N1ZSBpcyBub3QgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGJ1dCByYXRoZXIgKmluY29ycmVjdCogaGFuZGxpbmcgb2Ygb3ZlcmxhcHBpbmcgb3IgZnJhZ21lbnRlZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgYmVmb3JlIGB0bHNfcnhfbXNnX3NpemVgIGlzIGEgcmVzdWx0IG9mIHRoYXQuIGB0bHNfcnhfbXNnX3NpemVgIGNhbiByZXR1cm4gYW4gZXJyb3IgKGAtRUJBRE1TR2AsIGAtRU1TR1NJWkVgLCBvciBgLUVJTlZBTGApIGlmIHRoZSBUTFMgaGVhZGVyIGlzIGNvcnJ1cHRlZCBkdWUgdG8gZHVwbGljYXRlIG9yIG1peGVkIGRlY3J5cHRlZCBkYXRhLiAgVGhpcyBpbiB0dXJuIHdvdWxkIGFib3J0IGEgcG90ZW50aWFsbHkgdmFsaWQgVExTIGNvbm5lY3Rpb24gZHVlIHRvIGhvdyB0aGUgc2l6ZSBpcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkLiBDYWxsaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgYmVmb3JlaGFuZCBoZWxwcyB0byBlbnN1cmUgdGhhdCBgdGxzX3J4X21zZ19zaXplYCBnZXRzIHZhbGlkIGRhdGEsIG9yIHdpbGwgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIHRoZW4gbGV0cyBUQ1AgaGFuZGxlIHRoZSByZWFzc2VtYmx5LCBhbmQgdGhlbiByZWFkIHRoZSB2YWxpZCBoZWFkZXIuCgpJIHJ1bGVkIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiAgVGhlIGNvZGUgb3BlcmF0ZXMgb24gbmV0d29yayBidWZmZXJzLCB3aGljaCwgd2hpbGUgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcsIGFyZSBhc3N1bWVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGUgYnVmZmVycyBhcmUgc291cmNlZCBmcm9tIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlcnMgYXJlIG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEkgdGhlbiBydWxlZCBvdXQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGR1ZSB0byB0aGUgY2hlY2tzIGluIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBpbnZvbHZlZC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgZGlyZWN0bHkgb24gYSByYXcgVENQIHJlY2VpdmUgcXVldWUgbWlnaHQgbGVhZCB0byBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0cyB3aGVuIFRMUyBkYXRhIGlzIGZyYWdtZW50ZWQgb3IgcmV0cmFuc21pdHRlZCwgb3IgaXMgdGhlIHJlc3VsdCBvZiBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0aW9uLiBUaGUgZml4IGludm9sdmVzIGNoZWNraW5nIHRoZSBxdWV1ZSBmb3Igb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIGNvbnNpc3RlbnQgZGVjcnlwdGlvbiBzdGF0dXMgKmJlZm9yZSogdHJ5aW5nIHRvIHBhcnNlIHRoZSBUTFMgaGVhZGVyIHNpemUuICBUaGlzIHBhdGNoIHByZXZlbnRzIHRoZSBtaXNjYWxjdWxhdGlvbiBvZiB0aGUgc2l6ZSBhbmQgdGhlIHBvdGVudGlhbCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYSB2YWxpZCBjb25uZWN0aW9uLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcnJlY3RseSBoYW5kbGUgVExTIGRhdGEgaW4gdGhlIHByZXNlbmNlIG9mIFRDUCByZXRyYW5zbWlzc2lvbnMsIG92ZXJsYXBwaW5nIHNlZ21lbnRzIGFuZCBtaXhlZCBkZWNyeXB0aW9uIHN0YXR1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfT05DRVxcKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxXFwpOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNjktXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzcwOlx0XHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0zNzEtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTQ2LVxubmV0L3Rscy90bHNfc3RycC5jOjU0NzpcdFdSSVRFX09OQ0Uoc3RycC1cdTAwM2Vtc2dfcmVhZHksIDEpO1xubmV0L3Rscy90bHNfc3RycC5jLTU0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX3JlYWRfc29ja2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIFRMUyBzb2NrZXQgcmVhZGluZyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGB0bHNfc3RycF9yZWFkX3NvY2tgLCB3b3Jrcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDU0Ny4gSSYjMzk7bGwgcHJvYmFibHkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gdGhlcmUsIHNlZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgcGVyZm9ybWFuY2UsIG9yIHBlcmhhcHMgZm9yIHNlY3VyaXR5LCBzbyBhIHRob3JvdWdoIHJldmlldyBpcyB3YXJyYW50ZWQuIExldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0aWYgKHVubGlrZWx5KHN0cnAtXHUwMDNlY29weV9tb2RlKSlcbiA1MjI6XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xuIDUyMzpcdFxuIDUyNDpcdFx0aWYgKGlucSBcdTAwM2Mgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pXG4gNTI1Olx0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4gNTI2Olx0XG4gNTI3Olx0XHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gNTI4Olx0XHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4gNTI5Olx0XHRcdGlmIChpbnEgXHUwMDNjIFRMU19IRUFERVJfU0laRSlcbiA1MzA6XHRcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuIDUzMTpcdFx0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4gNTMyOlx0XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gNTMzOlx0XG4gNTM0Olx0XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbiA1MzU6XHRcdFx0aWYgKHN6IFx1MDAzYyAwKVxuIDUzNjpcdFx0XHRcdHJldHVybiBzejtcbiA1Mzc6XHRcbiA1Mzg6XHRcdFx0c3RycC1cdTAwM2VzdG0uZnVsbF9sZW4gPSBzejtcbiA1Mzk6XHRcbiA1NDA6XHRcdFx0aWYgKCFzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbiB8fCBpbnEgXHUwMDNjIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKVxuIDU0MTpcdFx0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4gNTQyOlx0XHR9XG4gNTQzOlx0XG4gNTQ0Olx0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSlcbiA1NDU6XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbiA1NDg6XHRcbiA1NDk6XHRcdHJldHVybiAwO1xuIDU1MDpcdH1cbiA1NTE6XHRcbiA1NTI6XHQvKiBQYXJzZSBxdWV1ZWQgZGF0YS4gV2hlbiBAYW5ub3VuY2UgaXMgdHJ1ZSBhbmQgcGFyc2luZyBwcm9kdWNlcyBhXG4gNTUzOlx0ICogbmV3bHktcmVhZHkgcmVjb3JkLCBmaXJlIHRoZSBjb25zdW1lciBub3RpZmljYXRpb24uIENhbGxlcnMgdGhhdFxuIDU1NDpcdCAqIG5lZWQgdG8gbm90aWZ5IGEgd2FpdGVyIGFib3V0IGEgcmVjb3JkIHBhcnNlZCBieSBhbm90aGVyIHBhdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MzYKCQkJCQkJCW91dHB1dDogMzAyCgkJCQkJCQl0aG91Z2h0czogMTgzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVExTIENvZGUgUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgbG9naWMgZmxvdyB3YXM6IGxvYWQgdGhlIGFuY2hvciwgZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgVExTIG1lc3NhZ2UsIGFuZCAqdGhlbiogY2hlY2sgaWYgdGhlIHF1ZXVlJiMzOTtzIHN0YXRlIGlzIHZhbGlkLiBJIGNhbiBzZWUgdGhlIHByb2JsZW0gaW1tZWRpYXRlbHk6IGlmIHRoZSBzaXplIGNhbGN1bGF0aW9uLCBgdGxzX3J4X21zZ19zaXplYCwgaXMgcGVyZm9ybWVkICpiZWZvcmUqIGNoZWNraW5nIHRoZSBxdWV1ZSYjMzk7cyBpbnRlZ3JpdHksIGl0JiMzOTtzIHBvc3NpYmxlIHRvIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIGEgbWl4IG9mIGRlY3J5cHRlZCBhbmQgZW5jcnlwdGVkIGRhdGEuIFRoaXMgY2FuIGVhc2lseSBsZWFkIHRvIGAtRUJBRE1TR2Agb3IgYC1FTVNHU0laRWAgZXJyb3JzLCBjYXVzaW5nIGNvbm5lY3Rpb24gYWJvcnRzLgoKSSBzZWUgdGhlIGZpeCBpcyB0byBhZGQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgcXVldWUgaXMgaW4gYSBiYWQgc3RhdGUsIHdlIHNraXAgdGhlIHNpemUgY2FsY3VsYXRpb24gYWx0b2dldGhlciBhbmQgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHdoaWNoIHRoZW4gcmVhc3NlbWJsZXMgdGhlIFRDUCBzdHJlYW0sIGRpc2NhcmRzIG92ZXJsYXBwaW5nIHNlZ21lbnRzLCAqdGhlbiogcGFyc2VzIHRoZSBoZWFkZXIgY29ycmVjdGx5LiBUaGUgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydHMgYXJlIGF2b2lkZWQgdGhpcyB3YXkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2g6IGB0bHNfcnhfbXNnX3NpemVgIHJlYWRzIFRDUCBkYXRhLCB3aGljaCBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIG5ldHdvcmsgZGF0YSwgc28gbm8gaXNzdWVzIHRoZXJlLiBUaGUgYGNiYCBmaWVsZCBvZiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNrYl9jb3B5X2hlYWRlcmAsIG5vIHdvcnJpZXMgdGhlcmUuIEFuZCB0aGUgYHNrYi0mZ3Q7ZGVjcnlwdGVkYCBmaWVsZCBpcyBhbHNvIGluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24uIFRoZSBwYWdlcyBhbGxvY2F0ZWQgYnkgYHRsc19zdHJwX3JlYWRfY29weWAgYXJlIGZpbGxlZCBieSBgdGNwX3JlYWRfc29ja2AsIGFuZCBzcGVjaWZpY2FsbHksIGBza2JfY29weV9iaXRzYCwgZW5zdXJlcyB0aGF0IHRoZSBvbmx5IGRhdGEgZXhwb3NlZCBpbiB0aGUgc2tiIGlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGB0Y3BfcmVhZF9zb2NrYCBkb2VzbiYjMzk7dCBmaWxsIHRoZSB3aG9sZSBwYWdlLCBgc2tiX2ZyYWdfc2l6ZV9hZGRgIG9ubHkgdXBkYXRlcyB0aGUgbGVuZ3RoIHdpdGggdGhlIHZhbGlkLCBjb3BpZWQgZGF0YS4KCkhvbGQgb24sIGNvdWxkIGBza2JfY29weV9iaXRzYCByZWFkIHBhc3QgdGhlIGVuZCBvZiBhbiBza2IgYW5kIHRodXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgaGFzIGJ1aWx0LWluIGJvdW5kcyBjaGVja2luZzsgaWYgdGhlIHJlcXVlc3RlZCBkYXRhIGxlbmd0aCBpcyB1bmF2YWlsYWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9tc2dfc2l6ZWAgZG9lcyBpdHMgb3duIGxlbmd0aCBjaGVja3Mgd2l0aCBgaWYgKHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0MzsgcHJvdC0mZ3Q7cHJlcGVuZF9zaXplICZndDsgc2tiLSZndDtsZW4pIHJldHVybiAwO2AgYmVmb3JlIGNhbGxpbmcgYHNrYl9jb3B5X2JpdHNgLiBTbywgbm8gbWVtb3J5IGlzIGJlaW5nIHJlYWQgcGFzdCB0aGUgZW5kLgoKQW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgLSBjb3VsZCBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2hlY2sgaW52b2x2ZXMgYHJlbWFpbmluZ2AgdmFsdWVzIGJ1dCwgYXMgSSBjYW4gc2VlIGZyb20gdHJhY2luZywgdGhlIGByZW1haW5pbmdgIHZhbHVlcyBhcmUgYWx3YXlzIGNvcnJlY3RseSBjYWxjdWxhdGVkLiBBbmQsIGV2ZW4gaWYgYSBwcm9ibGVtYXRpYyB2YWx1ZSBvZiByZW1haW5pbmcgdmFsdWUgZXhpc3RlZCwgdGhlIGNvZGUgaXMgc3VjaCB0aGF0IGFueSByZWFkcyBpbiB0aGlzIHNpdHVhdGlvbiB3b3VsZCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBlcnJvciBhbmQsIHRoZXJlZm9yZSwgZ29vZC4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBhYm91dCBmaXhpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEl0JiMzOTtzIHN0cmljdGx5IGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhhbmRsaW5nIGZyYWdtZW50ZWQgb3IgbWl4ZWQgZGVjcnlwdGlvbiBzdGF0ZXMgaW4gdGhlIFRDUCBzdHJlYW0uIFRoZSBidWcgaXMgdGhhdCBgdGxzX3J4X21zZ19zaXplYCB3YXMgY2FsbGVkIGJlZm9yZSBjaGVja2luZyB0aGUgcXVldWUgc3RhdGUuIFRoZSBmaXggY29ycmVjdHMgdGhpcy4KCk9uZSBtb3JlIHF1aWNrIGNoZWNrOiB3aGF0IGFib3V0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcz8gTGV0JiMzOTtzIHNheSBgdGxzX3J4X21zZ19zaXplYCByZXBvcnRzIGEgaHVnZSBzaXplIGFuZCBgdGxzX3N0cnBfcmVhZF9jb3B5YCB0cmllcyB0byBhbGxvY2F0ZSBhIGh1Z2UgYW1vdW50IG9mIG1lbW9yeT8gVGhlIG1heGltdW0gc2l6ZSBgc3pgIHJldHVybmVkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGlzIGJvdW5kIGJ5IGBUTFNfTUFYX1BBWUxPQURfU0laRSAmIzQzOyBjaXBoZXJfb3ZlcmhlYWQgJiM0MzsgcHJvdC0mZ3Q7dGFpbF9zaXplICYjNDM7IFRMU19IRUFERVJfU0laRWAsIHdoaWNoIGlzIGFyb3VuZCAxNktCLiBUaGF0IG1lYW5zIGEgbWF4aW11bSBvZiBhYm91dCA1IHBhZ2VzLiBUaGF0JiMzOTtzIG5vdCBhIGxvdCwgYW5kIHRoZXJlJiMzOTtzIGEgbGltaXQuCgpXaGF0IGFib3V0IGB0bHNfc3RycF9yZWFkX2NvcHlgIGFsbG9jYXRpbmcgcGFnZXMsIGFuZCB0aGVuIG5vdCBpbml0aWFsaXppbmcgdGhlbT8gSXQgYWxsb2NhdGVzIHBhZ2VzIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIGJ1dCB0aGVuIGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAuIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgdXNlcyBgdGNwX3JlYWRfc29ja2Agd2hpY2ggY2FsbHMgYHRsc19zdHJwX2NvcHlpbmAsIGFuZCB0aGVuIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2AsIHdoaWNoIGNhbGxzIGBza2JfY29weV9iaXRzYC4gQ3J1Y2lhbGx5LCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2tiIChgc2tiLSZndDtsZW5gKSBhbmQgdGhlIGZyYWdtZW50IHNpemUgKGBza2JfZnJhZ19zaXplYCkgd2l0aCB0aGUgYW1vdW50IG9mIGRhdGEgKmFjdHVhbGx5KiBjb3BpZWQuIFRoZSBza2ImIzM5O3MgZGF0YSBsZW5ndGggKm9ubHkqIHJlcHJlc2VudHMgdGhlIGluaXRpYWxpemVkIGRhdGEhIEFueSB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHBhZ2UgaXMgbm90IGV4cG9zZWQgdG8gdGhlIG5ldHdvcmsgY29kZS4KCioqSW4gY29uY2x1c2lvbjogdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNhdXNlcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cblxuQnkgYWRkaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCBiZWZvcmUgcGFyc2luZyB0aGUgaGVhZGVyLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGRldGVjdHMgdGhlc2UgZWRnZSBjYXNlcyBhbmQgZmFsbHMgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YCwgd2hpY2ggdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcHJvcGVybHkgcmVhc3NlbWJsZSB0aGUgVENQIHN0cmVhbSBpbnRvIGEgbGluZWFyIGJ1ZmZlciBiZWZvcmUgcGFyc2luZy5cblxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgVExTIHN0cnBhcnNlciB3aGVyZSBgdGxzX3J4X21zZ19zaXplYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhlIHJhdyBUQ1AgcmVjZWl2ZSBxdWV1ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoYXQgdGhlIHNrYnMgZm9ybWluZyB0aGUgVExTIGhlYWRlciBhcmUgY29udGlndW91cyBpbiBzZXF1ZW5jZSBzcGFjZSBhbmQgaGF2ZSBtYXRjaGluZyBkZWNyeXB0ZWQgc3RhdHVzLiBJZiB0aGUgcmVjZWl2ZSBxdWV1ZSBjb250YWluZWQgb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIHNlZ21lbnRzIHdpdGggbWl4ZWQgaGFyZHdhcmUvc29mdHdhcmUgZGVjcnlwdGVkIHN0YXR1cywgYHRsc19yeF9tc2dfc2l6ZWAgd291bGQgcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhbiBlcnJvciAobGlrZSBgLUVCQURNU0dgKSwgY2F1c2luZyBhIHNwdXJpb3VzIGNvbm5lY3Rpb24gYWJvcnQuXG5cbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXG5cblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozMC4xNDUyNjEyMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY3NzgxMDE2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N0cnBfY2hlY2tfcmN2XCIsXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjMwLjE0NTI2NzIwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwOTY0MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdHJwLmMgYi9uZXQvdGxzL3Rsc19zdHJwLmNcXG5pbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xcbisrKyBiL25ldC90bHMvdGxzX3N0cnAuY1xcbkBAIC00MzAsOSArNDMwLDEwIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbitzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBsZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGxlbiA9IHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgKyBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW47XFxuK1xcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVxcdTAwM2VzdG0ub2Zmc2V0ICsgbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7XFxuIFxcdHUzMiBzZXE7XFxuIFxcbkBAIC00NDMsOSArNDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuIFxcdC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcXG4gXFx0ICogYW5kIHRoZSBkZWNyeXB0ZWQgc3RhdHVzIG1hdGNoZXMuXFxuIFxcdCAqL1xcbi1cXHR3aGlsZSAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBsZW4pIHtcXG4rXFx0d2hpbGUgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgcmVtYWluaW5nKSB7XFxuIFxcdFxcdHNlcSArPSBza2ItXFx1MDAzZWxlbjtcXG4tXFx0XFx0bGVuIC09IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRcXHRyZW1haW5pbmcgLT0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHNrYiA9IHNrYi1cXHUwMDNlbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAhPSBzZXEpXFxuQEAgLTUyNSw2ICs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuIFxcbiBcXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XFxuIFxcdGlmICghc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XFxuK1xcdFxcdGlmIChpbnEgXFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuK1xcbiBcXHRcXHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbiBcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gc3o7XFxuQEAgLTUzNSw3ICs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4gXFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSlcXG4rXFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pKVxcbiBcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MzAuNTI2ODkyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0MzI3OTg2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zdHJwX2NoZWNrX3JjdlwiLFxuICAgIFwidGxzX3N3X3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3RycC5jIGIvbmV0L3Rscy90bHNfc3RycC5jXG5pbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3RycC5jXG4rKysgYi9uZXQvdGxzL3Rsc19zdHJwLmNcbkBAIC00MzAsOSArNDMwLDEwIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbitzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgKyBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbjtcbitcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgKyBsZW47XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7XG4gXHR1MzIgc2VxO1xuIFxuQEAgLTQ0Myw5ICs0NDQsOSBAQCBzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcdC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcbiBcdCAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLlxuIFx0ICovXG4tXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuKSB7XG4rXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgcmVtYWluaW5nKSB7XG4gXHRcdHNlcSArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRsZW4gLT0gc2tiLVx1MDAzZWxlbjtcbitcdFx0cmVtYWluaW5nIC09IHNrYi1cdTAwM2VsZW47XG4gXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuIFxuIFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAhPSBzZXEpXG5AQCAtNTI1LDYgKzUyNiwxMSBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcbiBcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcbiBcdGlmICghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pIHtcbitcdFx0aWYgKGlucSBcdTAwM2MgVExTX0hFQURFUl9TSVpFKVxuK1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4rXHRcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKSlcbitcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcbitcbiBcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xuIFx0XHRpZiAoc3ogXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHN6O1xuQEAgLTUzNSw3ICs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuIFx0fVxuIFxuLVx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSlcbitcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pKVxuIFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc3RycC1cdTAwM2Vtc2dfcmVhZHksIDEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MzAuNTI2ODkzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAwNjQ5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdGlnaHRlbmluZyB1cCBzb21lIHRoaW5ncyBhcm91bmQgdGhlIHN0cmVhbSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAsIHdlJ3JlIG5vdyBwYXNzaW5nIGluIGEgYGxlbmAgYXJndW1lbnQgZGlyZWN0bHkuIFRoYXTigJlzIGEgZ29vZCBtb3ZlLCBtYWtlcyB0aGUgZnVuY3Rpb24gbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhdm9pZHMgcmVkdW5kYW50IGNhbGN1bGF0aW9ucyBpZiBgZnVsbF9sZW5gIGlzbid0IGFsd2F5cyBjdXJyZW50LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGFkZGl0aW9uIGluIGB0bHNfc3RycF9yZWFkX3NvY2tgLiBXZeKAmXJlIHByZWVtcHRpdmVseSBjYWxsaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgKmJlZm9yZSogaGl0dGluZyBgdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKWAuIFRoaXMgaXMga2V5LiBJdCBpbXBsaWVzIHdlJ3JlIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICpiZWZvcmUqIHdlIGF0dGVtcHQgdG8gcGFyc2UgYW55IGhlYWRlcnMuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UtaW4tZGVwdGggYXBwcm9hY2guIFdlJ3JlIGxvb2tpbmcgdG8gYXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQgZGVlcGVyIG5vdyBhbmQgc2VlIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBjaGVjayBpcyB1c2luZyBgVExTX0hFQURFUl9TSVpFYCBoZXJlLCB3aGljaCBzdWdnZXN0cyB3ZSBhcmUgdmFsaWRhdGluZyB0aGUgc2l6ZSBvZiB0aGUgVExTIGhlYWRlciBmaXJzdC5cblxuVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGBUTFNfSEVBREVSX1NJWkVgIGFjdHVhbGx5IHJlcHJlc2VudHMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG91ciBtZXNzYWdlIHBhcnNpbmcgc3RyYXRlZ3kuIEkgd2FudCB0byBsb29rIGF0IGhvdyB3ZSBhcmUgY2FsY3VsYXRpbmcgYW5kIHZlcmlmeWluZyB0aGUgYWN0dWFsIGluY29taW5nIG1lc3NhZ2Ugc2l6ZSBhZnRlciB0aGlzIGluaXRpYWwgY2hlY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHVzZSBvZiB0aGUgYGFuY2hvcmAuIEkgYW0gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcyBnaXZlbiB0aGlzIHByZS1lbXB0aXZlIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozNi40Mjc1NDYwMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTEyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N0cnBfcmVhZF9zb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTUxMi0vKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQgb24gbG93ZXIgc29ja2V0ICovXFxubmV0L3Rscy90bHNfc3RycC5jOjUxMzpzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE0LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTYxLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1NjI6XFx0aWYgKHRsc19zdHJwX3JlYWRfc29jayhzdHJwKSA9PSAtRU5PTUVNKVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NjMtXFx0XFx0cXVldWVfd29yayh0bHNfc3RycF93cSwgXFx1MDAyNnN0cnAtXFx1MDAzZXdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozNi40NzEzMDA1NjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYxMjQwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgcHJvdG9jb2xzOlxuXG4qKlRyYWNpbmcgYSBEYXRhIEZsb3cgaW4gdGhlIFRMUyBTdGFjayoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlYWRzIGRhdGEgZnJvbSB0aGUgc29ja2V0LCBhbmQgYHRsc19zdHJwX2NoZWNrX3JjdmAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGB0bHNfc3RycF9jaGVja19yY3ZgIGlzIGdldHRpbmcgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHRsc19zdHJwX2NoZWNrX3JjdmAuIFdoZXJlJ3MgaXRzIGNhbGxzaXRlPyBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGluIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB0aGUgdml0YWwgY29udGV4dCB0byBteSBhbmFseXNpcy4gVGltZSB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjQwLjkzMjU0NDk4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg4NTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfc3RycF9jaGVja19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xOTQ9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTE5NS1cXG5uZXQvdGxzL3Rscy5oOjE5Njp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSk7XFxubmV0L3Rscy90bHMuaC0xOTctdm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9NjI3PXN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxcbm5ldC90bHMvdGxzX21haW4uYzo3NzU6XFx0XFx0dGxzX3N0cnBfY2hlY2tfcmN2KFxcdTAwMjZyeF9jdHgtXFx1MDAzZXN0cnAsIHRydWUpO1xcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NTYtICovXFxubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU4LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU4Mi1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlxcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTg0LX1cXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01ODY9c3RhdGljIHZvaWQgdGxzX3N0cnBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVxcdGxvY2tfc29jayhzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcXHR0bHNfc3RycF9jaGVja19yY3Yoc3RycCwgdHJ1ZSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTU5My1cXHRyZWxlYXNlX3NvY2soc3RycC1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXFxubmV0L3Rscy90bHNfc3RycC5jOjU5NzogKiBuZXh0IHJlY29yZC4gQ2FsbGVycyBtdXN0IGludm9rZSB0bHNfc3RycF9jaGVja19yY3YoKSBiZWZvcmVcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk4LSAqIHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2ssIG9yIHF1ZXVlZCBkYXRhIHdpbGwgc3RhbGwgdW50aWwgdGhlXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTEwOTU9dGxzX3J4X3JlY193YWl0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBub25ibG9jaywgYm9vbCByZWxlYXNlZCwgYm9vbCBoYXNfY29waWVkKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVxcdFxcdFxcdCAqL1xcbm5ldC90bHMvdGxzX3N3LmM6MTEyNTpcXHRcXHRcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCwgZmFsc2UpO1xcbm5ldC90bHMvdGxzX3N3LmMtMTEyNi1cXHRcXHRcXHRpZiAodGxzX3N0cnBfbXNnX3JlYWR5KGN0eCkpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xNjI2LVxcdHRsc19zdHJwX21zZ19jb25zdW1lKFxcdTAwMjZjdHgtXFx1MDAzZXN0cnApO1xcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCwgZmFsc2UpO1xcbm5ldC90bHMvdGxzX3N3LmMtMTYyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjQwLjk3NzQzNDI3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTU1NzQxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFRMUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwYXRjaCBtb2RpZnlpbmcgdGhlIGNvcmUgVExTIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvdGxzL2AgZGlyZWN0b3J5IOKAkyB0aGUgaGVhcnQgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBhY2Nlc3NpYmxlIHZpYSBUTFMgc29ja2V0cy4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRhcmdldGVkOiBgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjaGVjayBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYHRsc19yeF9tc2dfc2l6ZWAgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHJlY2VpdmUgcGF0aC4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGlzIGFyZWEsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBpbnRlbnNpdmUgZnV6emluZy4gSSBuZWVkIHRvIGdldCB0aGlzIGludG8gbXkgZnV6emluZyBwaXBlbGluZSBBU0FQLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBUTFMgdG8gZW5zdXJlIEknbSBmdXp6aW5nIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIHRvIHRhcmdldCB0aGlzIG1vZGlmaWNhdGlvbiBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6NDYuMTkzMDExMzQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTU1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo0Ni4yMzc1NzAwNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0OTgxMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBTY29wZSoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBUTFNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhbmQgZnJhbmtseSwgbXkgc3RhbmRhcmQgcHJvY2VkdXJlLCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggc3dlZXAgb2YgdGhlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYFRMU2AgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZS4gQXJlIHRoZXJlIGFueSBsZWdhY3kgY29uZmlncyBsdXJraW5nIGFyb3VuZD8gTWF5YmUgc29tZSBoaWRkZW4gb3ZlcnJpZGVzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIGV2ZW4gZGlmZmVyZW50IGNvbXBvbmVudHMgdGhhdCAqc2hvdWxkKiBiZSBhbGlnbmVkIGJ1dCBhcmVuJ3Q/IEkgaGF2ZSB0byBjb25maXJtIHRoYXQgdGhpcyBgVExTYCBzZXR0aW5nIGhhcyBhIGZ1bGx5IGVuY29tcGFzc2luZyBzY29wZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50OyBvdGhlcndpc2UsIGl0J3MgaW1wb3NzaWJsZSB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgc2V0dXAuIEdvdHRhIGJlIHN5c3RlbWF0aWMgYW5kIGVsaW1pbmF0ZSBhbnkgYmxpbmQgc3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo1MC40ODI1NTMxOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxubmV0L3Rscy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L3Rscy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcbm5ldC90bHMvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIFRMU1xcbm5ldC90bHMvS2NvbmZpZy0yMi1cXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo1MC41MjcwMDI5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2MTE2NDU4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFRMU2AgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyBzb2NrZXQgcmVhZHMuIEkgc2VlIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgYWxzbyBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaW5kIG91dCB3aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cywgYXMgdGhhdCB3b3VsZCBzdWdnZXN0IGhvdyB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLCBnaXZlbiBpdHMgbGltaXRlZCBzY29wZS5cblxuSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYHRsc19zdHJwX2NoZWNrX3JjdmAgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIE5vdyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgc2ltaWxhciBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IG1heSBleGlzdC4gSSBhbSBsb29raW5nIGZvciBvdGhlciBjYWxsaW5nIGZ1bmN0aW9ucyB0byBnYWluIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzowOS4xMzg2NTA4NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI3Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX2NoZWNrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE5ND12b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk1LVxcbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcXG5uZXQvdGxzL3Rscy5oLTE5Ny12b2lkIHRsc19zdHJwX21zZ19jb25zdW1lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy03NzQtXFxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcXHRcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNnJ4X2N0eC1cXHUwMDNlc3RycCwgdHJ1ZSk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTc3Ni1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU1Ni0gKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTU3OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU2OT12b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTgyLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1ODM6XFx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01ODQtfVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01OTEtXFx0bG9ja19zb2NrKHN0cnAtXFx1MDAzZXNrKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTkyOlxcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkzLVxcdHJlbGVhc2Vfc29jayhzdHJwLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk2LS8qIFJlbGVhc2UgdGhlIGN1cnJlbnQgcmVjb3JkIHdpdGhvdXQgdHJpZ2dlcmluZyBhIGNoZWNrIGZvciB0aGVcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxcbm5ldC90bHMvdGxzX3N0cnAuYy01OTgtICogcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jaywgb3IgcXVldWVkIGRhdGEgd2lsbCBzdGFsbCB1bnRpbCB0aGVcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTExMjQtXFx0XFx0XFx0ICovXFxubmV0L3Rscy90bHNfc3cuYzoxMTI1OlxcdFxcdFxcdHRsc19zdHJwX2NoZWNrX3JjdihcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwLCBmYWxzZSk7XFxubmV0L3Rscy90bHNfc3cuYy0xMTI2LVxcdFxcdFxcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTYyND1zdGF0aWMgdm9pZCB0bHNfcnhfcmVjX2RvbmUoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE2MjYtXFx0dGxzX3N0cnBfbXNnX2NvbnN1bWUoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxubmV0L3Rscy90bHNfc3cuYzoxNjI3OlxcdHRsc19zdHJwX2NoZWNrX3JjdihcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwLCBmYWxzZSk7XFxubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MDkuMTgzMzgzODc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTY3OTAxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSZWFkaW5lc3MqKlxuXG5BbHJpZ2h0LCBzbyBgdGxzX3N0cnBfY2hlY2tfcmN2YCBjYXVnaHQgbXkgZXllIGFzIGEgbGlrZWx5IGtleSBmb2N1cyBzeW1ib2wuIEdvb2QgY2hvaWNlLiBCdXQgd2FpdCwgYHRsc19zdHJwX2RhdGFfcmVhZHlgIGFsc28gbG9va3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpc24ndCBzdGF0aWMgd2hpY2ggaXMgdW51c3VhbC4gVGhlIGZhY3QgdGhhdCBpdCAqY2FsbHMqIGB0bHNfc3RycF9jaGVja19yY3ZgIHJhaXNlcyBzb21lIGltbWVkaWF0ZSBxdWVzdGlvbnMuIFNlZW1zIGxpa2UgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0IGB0bHNfc3RycF9kYXRhX3JlYWR5YCBpcyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgZmlndXJlIG91dCB3aGF0IGRhdGEgcmVhZGluZXNzIHRydWx5IG1lYW5zIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjEzLjM0MDE3NjkwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NjUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N0cnBfZGF0YV9yZWFkeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE5Mz1pbnQgdGxzX3N0cnBfaW5pdChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvdGxzL3Rscy5oOjE5NDp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk1LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU1Nz12b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NjgtLyogTG93ZXIgc29jayBsb2NrIGhlbGQgKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTY5OnZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTcwLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01ODY9c3RhdGljIHZvaWQgdGxzX3N0cnBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk4LSAqIHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2ssIG9yIHF1ZXVlZCBkYXRhIHdpbGwgc3RhbGwgdW50aWwgdGhlXFxubmV0L3Rscy90bHNfc3RycC5jOjU5OTogKiBuZXh0IHRsc19zdHJwX2RhdGFfcmVhZHkoKSBldmVudC5cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMjU5PXN0YXRpYyB2b2lkIHRsc19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjI2OC1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XFxubmV0L3Rscy90bHNfc3cuYzoyMjY5OlxcdHRsc19zdHJwX2RhdGFfcmVhZHkoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxubmV0L3Rscy90bHNfc3cuYy0yMjcwLVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uID0gYWxsb2Nfc2F2ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MTMuMzg0NjQ4NjU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQxODE4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFRMUyByZWNlaXZlIHBhdGggaGVyZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGB0bHNfZGF0YV9yZWFkeWAgaXMgbW9zdCBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiwgc29tZXRoaW5nIGFraW4gdG8gdGhlIGBza19kYXRhX3JlYWR5YCBJJ20gZmFtaWxpYXIgd2l0aCBmcm9tIG90aGVyIG5ldHdvcmsgc3RhY2tzLiBJdCBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgdW5kZXJseWluZyBzb2NrZXQuXG5cbk5leHQsIEkgc2VlIGB0bHNfc3RycF9jaGVja19yY3ZgLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIHN0cmluZyBwYXJzZXIsIHdoaWNoIGlzIGtleSBmb3IgcGFyc2luZyB0aGUgaW5jb21pbmcgVExTIG1lc3NhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY29taW5nIGRhdGEgaW50ZXJhY3RzIHdpdGggdGhlIHBhcnNlciBhbmQgaG93IHRoZSBwYXJzaW5nIHJlc3VsdCBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24uXG5cbkxldCdzIG5vdCBmb3JnZXQgdGhlIG1haW4gcmVjZWl2ZSBmdW5jdGlvbiwgdGhvdWdoLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGB0bHNfc3dfcmVjdm1zZ2AuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgaG93IHRoZSBzb2NrZXQgZ2V0cyB0aGUgcmF3IGRhdGEgYW5kIGludGVncmF0ZXMgd2l0aCBUTFMgdG8gaGFuZGxlIHRoZSBjcnlwdG9ncmFwaGljIHN0dWZmLiBOb3cgSSBoYXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoZSBpbmNvbWluZyBkYXRhIHRyYXZlbHMgdGhyb3VnaCB0aGUgVExTIHN0YWNrLiBJdCB3aWxsIGdvIGZyb20gdGhlIHNvY2tldCB0aHJvdWdoIHRoZSBtYWluIHJlY2VpdmUgZnVuY3Rpb24gYW5kIHRoZW4gYmUgcGFyc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MTcuNzY4ODMzMjkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MDg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xNjI9dm9pZCB0bHNfc3dfZnJlZV9jdHhfcngoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Rscy90bHMuaC0xNjQtXFx0XFx0ICAgaW50IGZsYWdzKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDAyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcXHRcXHQgID0gdGxzX3N3X3JlY3Ztc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVxcdHByb3RbVExTX1NXXVtUTFNfU1ddID0gcHJvdFtUTFNfU1ddW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMTpcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cXHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTgwMD1zdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xODA1LVxcbm5ldC90bHMvdGxzX3N3LmM6MTgwNjppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX3N3LmMtMTgwNy1cXHRcXHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjE3Ljk4MDQ0NjI4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk3NDQyNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFRMUyBSZWNlaXZlIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nOiB0aGUgYHRsc19zd19yZWN2bXNnYCBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgcmVjdm1zZyBoYW5kbGVyIGZvciBUTFMgc29mdHdhcmUgc29ja2V0cywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBncmVhdCBcImZvY3VzIHN5bWJvbC5cIiBJdCdzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBvdmVyIFRMUyBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS5cblxuSSd2ZSBhbHNvIGlkZW50aWZpZWQgYHRsc19zdHJwX2NoZWNrX3JjdmAgYXMgYSByZWxhdGVkIGZvY3VzIHN5bWJvbC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBUTFMgc3RyZWFtIHBhcnNlcidzIHJlY2VpdmUgcGF0aCAtIHNwZWNpZmljYWxseSBgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gVGhpcyBjb25jZXJucyBob3cgdGhlIHN5c3RlbSBjaGVja3MgdGhlIHF1ZXVlIGxlbmd0aCAqYmVmb3JlKiByZWFkaW5nIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGNvcmUgcmVjZWl2ZSBsb2dpYyB3aXRoaW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gQ3J1Y2lhbGx5LCB0aGlzIHBhdGggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRob3NlIFRMUyBzb2NrZXRzLiBUaGF0J3MgYSB0ZXh0Ym9vayBvcHBvcnR1bml0eSBmb3IgZnV6emluZyEgQSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHJlYWwgaXNzdWVzLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY29uZmlndXJhdGlvbi13aXNlLiBJIHNlZSBgVExTYCwgYW5kIHRoYXQncyB0aGUgb25seSBvbmUgSSdtIGNvbmNlcm5lZCB3aXRoLiBJIGtub3cgYFRMU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNlbGVjdHMgYENSWVBUT2AuIFNpbmNlIGBJTkVUYCBhbmQgYENSWVBUT2AgYXJlIHN0YW5kYXJkLCBJJ20gY29uZmlkZW50IHRoYXQganVzdCBoYXZpbmcgYFRMU2AgZW5hYmxlZCBpcyBlbm91Z2ggdG8gY3JlYXRlIGEgZnV6emluZyBjb25maWd1cmF0aW9uIHRoYXQgY292ZXJzIHRoaXMgY29kZSBwYXRoLiBUaGlzIHNob3VsZCBrZWVwIHRoZSBzZXR1cCByZWxhdGl2ZWx5IHNpbXBsZSBhbmQgZm9jdXNlZC4gSSdtIHJlYWR5IHRvIHJvbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTQsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljc3Nzg5MjgyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3RycF9jaGVja19yY3ZcIixcbiAgICBcInRsc19zd19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N0cnBfY2hlY2tfcmN2XCIsXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc3RyZWFtIHBhcnNlciByZWNlaXZlIHBhdGggKGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgKSB0byBjb3JyZWN0bHkgY2hlY2sgdGhlIHF1ZXVlIGxlbmd0aCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVExTIHJlY2VpdmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRMUyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyNC44NTQ4ODE4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjA2ODQ2Njc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljg1NTM0NDg2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTIwNjc5OTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cXG5cXG5CeSBhZGRpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSlgIGJlZm9yZSBwYXJzaW5nIHRoZSBoZWFkZXIsIHRoZSBjb2RlIG5vdyBjb3JyZWN0bHkgZGV0ZWN0cyB0aGVzZSBlZGdlIGNhc2VzIGFuZCBmYWxscyBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLCB3aGljaCB1c2VzIGB0Y3BfcmVhZF9zb2NrYCB0byBwcm9wZXJseSByZWFzc2VtYmxlIHRoZSBUQ1Agc3RyZWFtIGludG8gYSBsaW5lYXIgYnVmZmVyIGJlZm9yZSBwYXJzaW5nLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzMGQ2OGU1ZWZiNWY4OTIwNTJjMTEyZDA3YmQxYTY0MDEwZDI1MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuY1xuaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xuKysrIGIvbmV0L3Rscy90bHNfc3RycC5jXG5AQCAtNDMwLDkgKzQzMCwxMCBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4rc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGxlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbGVuID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICsgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW47XG4rXHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICsgbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiO1xuIFx0dTMyIHNlcTtcbiBcbkBAIC00NDMsOSArNDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHQvKiBNYWtlIHN1cmUgdGhlcmUncyBubyBkdXBsaWNhdGUgZGF0YSBpbiB0aGUgcXVldWUsXG4gXHQgKiBhbmQgdGhlIGRlY3J5cHRlZCBzdGF0dXMgbWF0Y2hlcy5cbiBcdCAqL1xuLVx0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIGxlbikge1xuK1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuIFx0XHRzZXEgKz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0bGVuIC09IHNrYi1cdTAwM2VsZW47XG4rXHRcdHJlbWFpbmluZyAtPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRza2IgPSBza2ItXHUwMDNlbmV4dDtcbiBcbiBcdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxKVxuQEAgLTUyNSw2ICs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXG4gXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4rXHRcdGlmIChpbnEgXHUwMDNjIFRMU19IRUFERVJfU0laRSlcbitcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuK1x0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4rXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4rXG4gXHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbiBcdFx0aWYgKHN6IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBzejtcbkBAIC01MzUsNyArNTQxLDcgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbiBcdH1cbiBcbi1cdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCkpXG4rXHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSlcbiBcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gXG4gXHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljg1NTM0NTY3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk1MjUyMDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIFRoZXkndmUgbW9kaWZpZWQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCB0byB0YWtlIGEgYGxlbmAgYXJndW1lbnQsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIHJlZHVuZGFudCBjYWxjdWxhdGlvbnMuIFRoZXkndmUgYWxzbyBhZGRlZCBhIGNoZWNrIGluIGB0bHNfc3RycF9yZWFkX3NvY2tgIHRvIHZhbGlkYXRlIHRoZSBpbml0aWFsIGBUTFNfSEVBREVSX1NJWkVgIG9mIHRoZSBpbmNvbWluZyBxdWV1ZSAoYGlucWApLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHF1ZXVlIHNpemUgKGBpbnFgKSBpcyBsZXNzIHRoYW4gYFRMU19IRUFERVJfU0laRWAsIGl0IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlgIHdpdGggYSBcInRydWVcIiBmbGFnLiBPdGhlcndpc2UsIGl0IGNoZWNrcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgdG8gZW5zdXJlIHRoZSBoZWFkZXIncyBpbnRlZ3JpdHkuIEZpbmFsbHksIGlmIHRoZSBoZWFkZXIgaXMgdmFsaWQgdGhleSB0aGVuIGNhbGwgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVx1MDAzZWFuY2hvcilgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLCBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBTS0IgcXVldWUsIGNoZWNraW5nIGZvciBjb250aWd1b3VzIHNlcXVlbmNlIG51bWJlcnMgYW5kIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFjcm9zcyB0aGUgcXVldWUuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCdzIGhhcHBlbmluZyAqYWZ0ZXIqIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2A/XG5cblRoZSBjb2RlIGNhbGxzIGB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB0bHNfcnhfbXNnX3NpemVgIGlzIHJlYWRpbmcgdGhlIGhlYWRlciBmcm9tIGBzdHJwLVx1MDAzZWFuY2hvcmAuIElmIHRoZSBoZWFkZXIgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIFNLQnMsIGRvZXMgYHRsc19yeF9tc2dfc2l6ZWAgYWN0dWFsbHkgaGFuZGxlIHRoaXMgY29ycmVjdGx5PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGB0bHNfcnhfbXNnX3NpemVgIG1pZ2h0IGFzc3VtZSBpdCBoYXMgZW5vdWdoIGRhdGEgaW4gYHN0cnAtXHUwMDNlYW5jaG9yYC4gSWYgaXQgZG9lc24ndCwgdGhpcyBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCDigJMgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLiBUaGF0IHdvdWxkIGJlIGEgbWFqb3IgcHJvYmxlbS5cblxuSSBoYXZlIHRvIGNoZWNrIGB0bHNfcnhfbXNnX3NpemVgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGVkIGhlYWRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGUgbmV3IGhlYWRlciB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGhlcmUgYXMgd2VsbD8gSSdkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRsc19yeF9tc2dfc2l6ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjM1LjgwNzg2OTg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MjE3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3J4X21zZ19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9MTk3PXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk4LVxcbm5ldC90bHMvdGxzLmg6MTk5OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC90bHMvdGxzLmgtMjAwLXZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MjEwPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluX2ZyYWcoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMjM5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzoyNDA6XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc2tiKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMjQxLVxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9Mjg2PXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluX3NrYihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0zMTktXFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pIHtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzIwOlxcdFxcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHNrYik7XFxubmV0L3Rscy90bHNfc3RycC5jLTMyMS1cXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MzMtXFxubmV0L3Rscy90bHNfc3RycC5jOjUzNDpcXHRcXHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MzUtXFx0XFx0aWYgKHN6IFxcdTAwM2MgMClcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjE3NT1ib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE4My1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxODQ6aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozNS44NTE0MDQ1MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NjExNDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBSZWNlaXZlIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGB0bHNfcnhfbXNnX3NpemVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBzaXR1YXRlZCB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgVExTLiBJIGtub3cgdGhlIHJlY2VpdmluZyBwYXRoIGlzIGNyaXRpY2FsLCBzbyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2l6ZSBvZiBhbiBpbmNvbWluZyBUTFMgbWVzc2FnZSBpcyBkZXRlcm1pbmVkIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFRoaXMgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIHdpbGwgcHJvdmlkZSB0aGUga2V5IHNpemUgb3IgdGhlIGhlYWRlciBzaXplIGZvciBhbiBpbmNvbWluZyBtZXNzYWdlLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGltcG9ydGFudCB0byBidWZmZXIgc2l6ZSBvciBob3cgYSBwYWNrZXQgaXMgaGFuZGxlZCB3aGVuIHJlY2VpdmVkLiBJJ20gZWFnZXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgZXh0cmFjdGVkIGFuZCB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozOS4xMjc1MjIyMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4NDpcXHRpbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIxODU6XFx0e1xcbjIxODY6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc3RycC1cXHUwMDNlc2spO1xcbjIxODc6XFx0XFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbjIxODg6XFx0XFx0Y2hhciBoZWFkZXJbVExTX0hFQURFUl9TSVpFICsgVExTX01BWF9JVl9TSVpFXTtcXG4yMTg5OlxcdFxcdHNpemVfdCBjaXBoZXJfb3ZlcmhlYWQ7XFxuMjE5MDpcXHRcXHRzaXplX3QgZGF0YV9sZW4gPSAwO1xcbjIxOTE6XFx0XFx0aW50IHJldDtcXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0LyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bGwgVExTIGhlYWRlciwgb3Igd2FpdCBmb3IgbW9yZSBkYXRhICovXFxuMjE5NDpcXHRcXHRpZiAoc3RycC1cXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjIxOTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE5NjpcXHRcXG4yMTk3OlxcdFxcdC8qIFNhbml0eS1jaGVjayBzaXplIG9mIG9uLXN0YWNrIGJ1ZmZlci4gKi9cXG4yMTk4OlxcdFxcdGlmIChXQVJOX09OKHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSBcXHUwMDNlIHNpemVvZihoZWFkZXIpKSkge1xcbjIxOTk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4yMjAwOlxcdFxcdFxcdGdvdG8gcmVhZF9mYWlsdXJlO1xcbjIyMDE6XFx0XFx0fVxcbjIyMDI6XFx0XFxuMjIwMzpcXHRcXHQvKiBMaW5lYXJpemUgaGVhZGVyIHRvIGxvY2FsIGJ1ZmZlciAqL1xcbjIyMDQ6XFx0XFx0cmV0ID0gc2tiX2NvcHlfYml0cyhza2IsIHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQsIGhlYWRlciwgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKTtcXG4yMjA1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIyMDY6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdHN0cnAtXFx1MDAzZW1hcmsgPSBoZWFkZXJbMF07XFxuMjIwOTpcXHRcXG4yMjEwOlxcdFxcdGRhdGFfbGVuID0gKChoZWFkZXJbNF0gXFx1MDAyNiAweEZGKSB8IChoZWFkZXJbM10gXFx1MDAzY1xcdTAwM2MgOCkpO1xcbjIyMTE6XFx0XFxuMjIxMjpcXHRcXHRjaXBoZXJfb3ZlcmhlYWQgPSBwcm90LVxcdTAwM2V0YWdfc2l6ZTtcXG4yMjEzOlxcdFxcdGlmIChwcm90LVxcdTAwM2V2ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjIyMTQ6XFx0XFx0ICAgIHByb3QtXFx1MDAzZWNpcGhlcl90eXBlICE9IFRMU19DSVBIRVJfQ0hBQ0hBMjBfUE9MWTEzMDUpXFxuMjIxNTpcXHRcXHRcXHRjaXBoZXJfb3ZlcmhlYWQgKz0gcHJvdC1cXHUwMDNlaXZfc2l6ZTtcXG4yMjE2OlxcdFxcbjIyMTc6XFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUgKyBjaXBoZXJfb3ZlcmhlYWQgK1xcbjIyMTg6XFx0XFx0ICAgIHByb3QtXFx1MDAzZXRhaWxfc2l6ZSkge1xcbjIyMTk6XFx0XFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbjIyMjA6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIyMTpcXHRcXHR9XFxuMjIyMjpcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBjaXBoZXJfb3ZlcmhlYWQpIHtcXG4yMjIzOlxcdFxcdFxcdHJldCA9IC1FQkFETVNHO1xcbjIyMjQ6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIyNTpcXHRcXHR9XFxuMjIyNjpcXHRcXG4yMjI3OlxcdFxcdC8qIE5vdGUgdGhhdCBib3RoIFRMUzEuMyBhbmQgVExTMS4yIHVzZSBUTFNfMV8yIHZlcnNpb24gaGVyZSAqL1xcbjIyMjg6XFx0XFx0aWYgKGhlYWRlclsxXSAhPSBUTFNfMV8yX1ZFUlNJT05fTUlOT1IgfHxcXG4yMjI5OlxcdFxcdCAgICBoZWFkZXJbMl0gIT0gVExTXzFfMl9WRVJTSU9OX01BSk9SKSB7XFxuMjIzMDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIyMzE6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIzMjpcXHRcXHR9XFxuMjIzMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MzkuMTI3Njk4OTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NDM2NDEyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgUmVjZWl2ZSBNZXNzYWdlIFNpemUgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHRsc19yeF9tc2dfc2l6ZWAgd29ya3MsIGFuZCBpdCdzIHVzaW5nIGBza2JfY29weV9iaXRzYCB0byBncmFiIHRoZSBUTFMgaGVhZGVyLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3JhYmJpbmcgYHByb3QtXHUwMDNlcHJlcGVuZF9zaXplYCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCksIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiBgc3RycC1cdTAwM2VzdG0ub2Zmc2V0YC4gTm93LCBpZiB0aGUgc29ja2V0IGJ1ZmZlcidzIHRvdGFsIGxlbmd0aCAoYHNrYi1cdTAwM2VsZW5gKSBpc24ndCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG9mZnNldCBwbHVzIHRoZSBoZWFkZXIgc2l6ZSwgYHNrYl9jb3B5X2JpdHNgIHJldHVybnMgMC4gSSBzZWUgdGhhdCB0aGUgY29kZSBleHBsaWNpdGx5IGNoZWNrcyB0aGlzIGNvbmRpdGlvbjpcblxuYGBgY1xuXHQvKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVsbCBUTFMgaGVhZGVyLCBvciB3YWl0IGZvciBtb3JlIGRhdGEgKi9cblx0aWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cblRoaXMgbWFrZXMgc2Vuc2U7IGlmIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhLCBpdCBzaG91bGQgcmV0dXJuIGVhcmx5LiBIb3dldmVyLCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhlYWRlciBpcyAqc3BsaXQqIGFjcm9zcyBtdWx0aXBsZSBzb2NrZXQgYnVmZmVycz8gVGhhdCdzIGEgY2xhc3NpYyBmcmFnbWVudGVkIHBhY2tldCBzY2VuYXJpby4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvZGUgaGFuZGxlcyB0aGF0IGNvcnJlY3RseS5cblxuSSB0aG91Z2h0IGBza2JfY29weV9iaXRzYCBjb3VsZCBoYW5kbGUgdGhpcywgc2luY2UgaXQgY2FuIHJlYWQgYWNyb3NzIG11bHRpcGxlIHNrYnMgaWYgYHNrYmAgaXMgYSBmcmFnbWVudGVkIHNrYiBvciBpZiBpdCBoYXMgYSBmcmFnX2xpc3Qgb3IgbmV4dCBza2JzLiBCdXQgd2FpdC4uLiB1cG9uIHJlLXJlYWRpbmcgdGhlIGRvY3VtZW50YXRpb24sIEkgc2VlIHRoYXQgYHNrYl9jb3B5X2JpdHNgICpvbmx5KiByZWFkcyBmcm9tIHRoZSBjdXJyZW50IHNrYiBhbmQgaXRzIGZyYWdtZW50cy9mcmFnX2xpc3QuIEl0ICpkb2Vzbid0KiBhdXRvbWF0aWNhbGx5IHRyYXZlcnNlIGBza2ItXHUwMDNlbmV4dGAuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIGFsbW9zdCBtaXNzZWQhXG5cblRoaXMgbGVhZHMgbWUgdG8gYHRsc19zdHJwX3JlYWRfc29ja2AuIFRoZSB2YXJpYWJsZSBgc3RycC1cdTAwM2VhbmNob3JgIGhvbGRzIHRoZSBmaXJzdCBza2IgaW4gdGhlIHF1ZXVlIG9mIHNvY2tldCBidWZmZXJzLiBUaGV5IGFyZSBsaW5rZWQgdmlhIGBza2ItXHUwMDNlbmV4dGAsIHNvIGlmIHRoZSBoZWFkZXIgaXMgZnJhZ21lbnRlZCwgYHN0cnAtXHUwMDNlYW5jaG9yYCBwb2ludHMgdG8gdGhlICpmaXJzdCogc2tiLiBBbmQgbm93LCBJIHJlbWVtYmVyLCB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBtaWdodCBzZXQgdGhpcyBgc3RycC1cdTAwM2VhbmNob3JgIHZhcmlhYmxlLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBob3cgYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgIGFjdHVhbGx5IHdvcmtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgc2tiIHF1ZXVlLiBJcyBpdCBjb25jYXRlbmF0aW5nIHRoZW0sIG9yIHNpbXBseSBwb2ludGluZyB0byB0aGUgZmlyc3Qgc2tiIGluIHRoZSBjaGFpbj8gSWYgaXQganVzdCBwb2ludHMgdG8gdGhlIGZpcnN0IHNrYiBpbiB0aGUgcXVldWUsIHRoZW4gYHNrYl9jb3B5X2JpdHNgIHdpbGwgKm5vdCogd29yayBhcyBJIG9yaWdpbmFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0Ny45NzEzNDQyOTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzQ0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfc3RycC5jPTQzMz1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NjAtXFxubmV0L3Rscy90bHNfc3RycC5jOjQ2MTpzdGF0aWMgdm9pZCB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgbGVuKVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NjIte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQ4ND1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MDA6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MjYtXFxubmV0L3Rscy90bHNfc3RycC5jOjUyNzpcXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUyOC1cXHRpZiAoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0OC4wMzIwOTQ1MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NjMxNjkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBmdW5jdGlvbjogYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgLiBKdXN0IHRoZSBuYW1lIGltbWVkaWF0ZWx5IGdpdmVzIG1lIHNvbWUgY2x1ZXMuIFwidGxzX3N0cnBcIiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIG9yIHBvdGVudGlhbGx5IGEgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0IGFuZCB0aGF0IHdlIGFyZSB1c2luZyBzdHJpbmcgcHJvY2Vzc2luZy4gXCJMb2FkX2FuY2hvclwiIG1vc3QgbGlrZWx5IGlzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgYWNjZXNzaW5nLCBsb2FkaW5nLCBvciBzZXR0aW5nIGEgdHJ1c3QgYW5jaG9yLCBhIHJvb3QgY2VydGlmaWNhdGUsIG9yIHNpbWlsYXIgY3JlZGVudGlhbCBmb3IgdmFsaWRhdGluZyBvdGhlciBjZXJ0aWZpY2F0ZXMgaW4gYSBUTFMgaGFuZHNoYWtlLiBUaGUgaW5jbHVzaW9uIG9mIFwicXVldWVcIiBzdHJvbmdseSBoaW50cyB0aGF0IHRoZXJlJ3MgYSBtYW5hZ2VkIG9yZGVyLCBwb3NzaWJseSBhIGNyaXRpY2FsIG9yIGNvbXBsZXggb3BlcmF0aW9uLCBvciB0aGF0IG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgYXJlIGludm9sdmVkIGFuZCB0aGVyZSBhcmUgcXVldWVpbmcgY29uY2VybnMuIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHZhbGlkYXRpb24sIHBvdGVudGlhbGx5IGluIGEgc3lzdGVtIHdpdGggYXN5bmNocm9ub3VzIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tpbmcgb3IgYSBjb25uZWN0aW9uIHBvb2xpbmcgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFRMUyBpbXBsZW1lbnRhdGlvbi4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHRocmVhZCBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgYW5kIHZhbGlkYXRpb24uIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgaG93IHRydXN0IGFuY2hvcnMgYXJlIGhhbmRsZWQgaW4gYSBxdWV1ZSBzZXR0aW5nLCBhbmQgd2h5IGEgcXVldWUgaXMgdXNlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo1Mi44Nzg0MTUyNjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjE6XFx0c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcXG4gNDYyOlxcdHtcXG4gNDYzOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc3RycC1cXHUwMDNlc2spO1xcbiA0NjQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0O1xcbiA0NjU6XFx0XFx0dTMyIG9mZnNldDtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0Zmlyc3QgPSB0Y3BfcmVjdl9za2Ioc3RycC1cXHUwMDNlc2ssIHRwLVxcdTAwM2Vjb3BpZWRfc2VxLCBcXHUwMDI2b2Zmc2V0KTtcXG4gNDY4OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZpcnN0KSlcXG4gNDY5OlxcdFxcdFxcdHJldHVybjtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0LyogQmVzdG93IHRoZSBzdGF0ZSBvbnRvIHRoZSBhbmNob3IgKi9cXG4gNDcyOlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNlbGVuID0gb2Zmc2V0ICsgbGVuO1xcbiA0NzM6XFx0XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VkYXRhX2xlbiA9IG9mZnNldCArIGxlbjtcXG4gNDc0OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSBvZmZzZXQgKyBsZW47XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKS1cXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHNrYl9jb3B5X2hlYWRlcihzdHJwLVxcdTAwM2VhbmNob3IsIGZpcnN0KTtcXG4gNDc5OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgPSBvZmZzZXQ7XFxuIDQ4MjpcXHR9XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdGJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaClcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdHN0cnVjdCBzdHJwX21zZyAqcnhtO1xcbiA0ODc6XFx0XFx0c3RydWN0IHRsc19tc2cgKnRsbTtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cXHUwMDNlbXNnX3JlYWR5KTtcXG4gNDkwOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjUyLjg3ODUxOTk4NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQyOTc5OTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMvVENQIFJlY2VpdmUgUXVldWUgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBUQ1AgcmVjZWl2ZSBxdWV1ZXMgaW4gVExTIHByb2Nlc3NpbmcuIEl0IHN0YXJ0cyB3aXRoIGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCwgd2hpY2ggc2V0cyB1cCB0aGlzIGBzdHJwLVx1MDAzZWFuY2hvcmAgc2tiIGFuZCBpdHMgYGZyYWdfbGlzdGAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNrYiAoYGZpcnN0YCkgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGlzIG1lYW5zIGBza2JfY29weV9iaXRzYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSBgc3RycC1cdTAwM2VhbmNob3JgIEFORCBpdHMgYGZyYWdfbGlzdGAuICBUaGUgYGZyYWdfbGlzdGAgaXMgYSBsaW5rZWQgbGlzdCBvZiBza2JzIHRoYXQgbWFrZSB1cCB0aGUgaW5jb21pbmcgVENQIGRhdGEuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBjb2RlIG5vdyBjaGVja3MgZm9yIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHF1ZXVlLCBvciBsYWNrIHRoZXJlb2YuICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgd2l0aG91dCBhIGNoZWNrIGZvciB0aGUgaGVhZGVyIHNpemUgdXNpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBjaGVja3MgaWYgYWxsIHRoZSBza2JzIGFyZSBjb250aWd1b3VzIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoZSBrZXkgaXNzdWUgaXMgYXJvdW5kIHNlcXVlbmNlIG51bWJlcnMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG92ZXJsYXBwaW5nIG9yIFwiaG9sZS15XCIgVENQIHNlZ21lbnRzIGluIHRoZSBxdWV1ZS5cblxuQmFzaWNhbGx5LCBpZiBUQ1Agc2VnbWVudHMgYXJyaXZlIG91dCBvZiBvcmRlciwgb3IgcGFydGlhbGx5IG92ZXJsYXAsIGBza2JfY29weV9iaXRzYCBtaWdodCByZWFkIHRoZSB3cm9uZyBkYXRhIGJlY2F1c2UgYHNrYi1cdTAwM2VsZW5gIG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRvIGNvbnRpZ3VvdXMgZGF0YSwgb3IgYHNrYi1cdTAwM2VuZXh0YCBtaWdodCBoYXZlIGFuIG92ZXJsYXBwaW5nIHNlcXVlbmNlIG51bWJlci4gVGhpcyBjYW4gbGVhZCB0byBpbmNvcnJlY3QgVExTIGhlYWRlciBwYXJzaW5nIGR1ZSB0byBpbmNvbnNpc3RlbnQgZGF0YSBiZWluZyByZWFkLlxuXG5UaGUgcGF0Y2ggdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGFkZGluZyBhIHByZWxpbWluYXJ5IGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgY2hlY2sgQkVGT1JFIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAuICBIb3dldmVyLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHdhbGtzIHRoZSBxdWV1ZSwgY2hlY2tpbmcgc2VxdWVuY2UgbnVtYmVycyBhbmQgZGVjcnlwdGVkIHN0YXR1cy4gSXQgZG9lcyB0aGlzIHdpdGhpbiB0aGUgXCJ3aGlsZSBsb29wXCIgY29uZGl0aW9uIGB3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgcmVtYWluaW5nKWAuIElmIHRoZSBjdXJyZW50IGBza2ItXHUwMDNlbGVuYCBpcyBsZXNzIHRoYW4gYHJlbWFpbmluZ2AsIHRoZSBjb2RlIHByb2NlZWRzIHRvIHRoZSBuZXh0IGBza2JgIGluIHRoZSBsaXN0LCBieSBhZGRpbmcgYHNrYiA9IHNrYi1cdTAwM2VuZXh0O2AuXG5cbklmIGBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxICE9IHNlcWAgaW5zaWRlIHRoZSBgd2hpbGVgIGxvb3AsIHRoZXJlJ3MgYSBwcm9ibGVtOiBub24tY29udGlndW91cyBzZWdtZW50cyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBoZWFkZXIgcGFyc2luZy4gIEJ1dCB3aGF0IGlmIGBza2ItXHUwMDNlbmV4dGAgaXMgTlVMTCBiZWZvcmUgdGhlIGB3aGlsZWAgbG9vcCBjYW4gcHJvY2VzcyBlbm91Z2ggZGF0YT8gIFRoYXQgbWVhbnMsIGluIHRoZSBvcmlnaW5hbCBjb2RlIHRoZSB3aGlsZSBsb29wIHdvbid0IHRlcm1pbmF0ZS4gSXQnbGwganVzdCBrZWVwIGdvaW5nLiAgVGhpcyBwb3RlbnRpYWxseSBsZWFkcyB0byBhIGNyYXNoIGJ5IGRlcmVmZXJlbmNpbmcgYSBOVUxMIHBvaW50ZXIuICBJZiB0aGUgbG9vcCBET0VTIHRlcm1pbmF0ZSwgYnV0IG9ubHkgcHJvY2Vzc2VzIGEgc3Vic2V0IG9mIHRoZSBpbmNvbWluZyBkYXRhLCB0aGlzIGNvdWxkIHN0aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGRhdGEgb3IgYSByZWFkIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSB2YWxpZCBkYXRhLlxuXG5UaGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byB2YWxpZGF0ZSB1cCB0byB0aGUgZnVsbCBtZXNzYWdlIGxlbmd0aCAoYHN6YCkuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHZhbGlkYXRlZCB0aGUgX2VudGlyZV8gbWVzc2FnZSBsZW5ndGguICBOb3csIHRoZSBwYXRjaCB0cmllcyB0byB2YWxpZGF0ZSBvbmx5IHRoZSBoZWFkZXIgc2l6ZSBmaXJzdCwgYnV0IHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMuICBJZiBgdGxzX3J4X21zZ19zaXplYCByZWFkcyBnYXJiYWdlLCBpdCBjb3VsZCByZXR1cm4gYSAqc21hbGxlciogYHN6YCB0aGFuIHRoZSBoZWFkZXIgc2l6ZSwgYnV0IGlmIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgbGF0ZXIgY2hlY2tzIGZvciBjb250aWd1aXR5IHVwIHRvIGEgc21hbGxlciBudW1iZXIgb2YgYnl0ZXMgdGhhbiB0aGUgaGVhZGVyLCB0aGUgY29udGlndWl0eSBjaGVjayBpcyBubyBsb25nZXIgY29tcGxldGUgYW5kIHRoaXMgc3RpbGwgbGVhZHMgdG8gaXNzdWVzIHdoZW4gdGhlIGB3aGlsZWAgbG9vcCBydW5zLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBhbGxvY2F0ZWQuIGBzdHJwLVx1MDAzZWFuY2hvcmAgaXMgYWxsb2NhdGVkIGFzIGEgXCJzcGVjaWFsIHNrYlwiLCBhbmQgaXQncyBpbml0aWFsaXplZCB3aXRoIGB0Y3BfcmVjdl9za2JgLiBCdXQsIGRvZXMgYHN0cnAtXHUwMDNlYW5jaG9yYCBoYXZlIHZhbGlkIGBUQ1BfU0tCX0NCYCBkYXRhPyBJZiBgc3RycC1cdTAwM2VhbmNob3JgIGRvZXNuJ3QgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YSwgZGVyZWZlcmVuY2luZyBgVENQX1NLQl9DQihzdHJwLVx1MDAzZWFuY2hvcilgIGlzIGdvaW5nIHRvIGJlIGEgcHJvYmxlbS4gVGhpcyBhbGwgc2VlbXMgdG8gcG9pbnQgdG8gYSBwb3RlbnRpYWxseSBzZXJpb3VzIGxvZ2ljIGZsYXcgaW4gaG93IHdlIGhhbmRsZSBUQ1Agc2VnbWVudCBvcmRlcmluZyBhbmQgcXVldWUgdmFsaWRhdGlvbiBpbiBUTFMgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MTkuMzA4MzIzNDU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM2MDE2NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2tiLiphbmNob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjE5LjM1MjY4OTkyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1MDg0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTG9jYXRpbmcgUG90ZW50aWFsIFRMUyBTdHJpcHBpbmcgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSB0YXJnZXQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVExTIHN0cmlwcGluZywgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgdGVybSBcImFuY2hvclwiIHdpdGhpbiB0aGUgYG5ldC90bHMvdGxzX3N0cnAuY2AgZmlsZS4gVGhlIHdvcmQgXCJhbmNob3JcIiBjb3VsZCBiZSBzaWduaWZpY2FudC4gSXQgY2FuIHJlZmVyIHRvIGEgcm9vdCBvZiB0cnVzdCwgYSBwb2ludCBpbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4sIG9yIHBlcmhhcHMgYSBtb3JlIGFic3RyYWN0ICdhbmNob3IgcG9pbnQnIGluIHRoZSBjb2RlJ3MgbG9naWMuIFRoaXMgc2VhcmNoIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFyZWFzIHdoZXJlIHRoZSBjb2RlIG1pZ2h0IGhhbmRsZSBvciByZWx5IHVwb24gc3BlY2lmaWMgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIG9yIHZhbGlkYXRpb24gcHJvY2Vzc2VzLCB3aGljaCBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHN0cmlwcGluZyBhdHRhY2tzLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGhvcGVmdWxseSBmb2N1c2luZyBteSBlZmZvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjIyLjc0Nzc3ODc1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMzg2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5jaG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19zdHJwLmM9MTY9dm9pZCB0bHNfc3RycF9hYm9ydF9zdHJwKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTI5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzozMDpzdGF0aWMgdm9pZCB0bHNfc3RycF9hbmNob3JfZnJlZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzEte1xcbm5ldC90bHMvdGxzX3N0cnAuYzozMjpcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXFx1MDAzZWFuY2hvcik7XFxubmV0L3Rscy90bHNfc3RycC5jLTMzLVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTM2LVxcdFxcdHNoaW5mby1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc6XFx0Y29uc3VtZV9za2Ioc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzg6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzktfVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTY5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX21ha2VfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy03My1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NzQ6XFx0c2tiID0gdGxzX3N0cnBfc2tiX2NvcHkoc3RycCwgc3RycC1cXHUwMDNlYW5jaG9yLCBzdHJwLVxcdTAwM2VzdG0ub2Zmc2V0LFxcbm5ldC90bHMvdGxzX3N0cnAuYy03NS1cXHRcXHRcXHRcXHRzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTg1PXN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfZGV0YWNoKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTg5LSNpZmRlZiBDT05GSUdfVExTX0RFVklDRVxcbm5ldC90bHMvdGxzX3N0cnAuYzo5MDpcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRlY3J5cHRlZCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTkxLSNlbHNlXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxMDE6XFx0XFx0LyogUmVwbGFjZSBhbmNob3Igd2l0aCBhbiBlbXB0eSBza2IsIHRoaXMgaXMgYSBsaXR0bGVcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAyLVxcdFxcdCAqIGRhbmdlcm91cyBidXQgX190bHNfY3VyX21zZygpIHdhcm5zIG9uIGVtcHR5IHNrYnNcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xMDgtXFxubmV0L3Rscy90bHNfc3RycC5jOjEwOTpcXHRcXHRzd2FwKHN0cnAtXFx1MDAzZWFuY2hvciwgc2tiKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTEwLVxcdFxcdHJldHVybiBza2I7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTIwPWludCB0bHNfc3RycF9tc2dfY293KHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTEzMS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTMyOlxcdHRsc19zdHJwX2FuY2hvcl9mcmVlKHN0cnApO1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxMzM6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gc2tiO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xMzQtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ1PWludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDYte1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxNDc6XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDgtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTUzLVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxNTQ6XFx0XFx0LyogV2UgY2FuJ3Qgc2tiX2Nsb25lKCkgdGhlIGFuY2hvciwgaXQgZ2V0cyB3aXBlZCBieSB1bnBhdXNlICovXFxubmV0L3Rscy90bHNfc3RycC5jLTE1NS1cXHRcXHRza2IgPSBhbGxvY19za2IoMCwgc3RycC1cXHUwMDNlc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTE1OC1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTU5OlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoZHN0LCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjA6XFx0XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gc2tiO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xNjEtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xOTEtXFxubmV0L3Rscy90bHNfc3RycC5jOjE5MjpzdGF0aWMgdm9pZCB0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTkzLXtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTk0OlxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTk1LVxcdGludCBpO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTM0Mj1zdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0zNTEtXFxubmV0L3Rscy90bHNfc3RycC5jOjM1MjpcXHRza2IgPSBzdHJwLVxcdTAwM2VhbmNob3I7XFxubmV0L3Rscy90bHNfc3RycC5jLTM1My1cXHRpZiAoIXNrYi1cXHUwMDNlbGVuKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTM5MD1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDAyLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0MDM6XFx0c2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy00MDQtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDEwLVxcdFxcdGlmICghcGFnZSkge1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0MTE6XFx0XFx0XFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTQxMi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MTQtXFxubmV0L3Rscy90bHNfc3RycC5jOjQxNTpcXHRcXHRza2JfZmlsbF9wYWdlX2Rlc2Moc3RycC1cXHUwMDNlYW5jaG9yLCBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzKyssXFxubmV0L3Rscy90bHNfc3RycC5jLTQxNi1cXHRcXHRcXHRcXHQgICBwYWdlLCAwLCAwKTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MjMtXFxubmV0L3Rscy90bHNfc3RycC5jOjQyNDpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWxlbiA9IDA7XFxubmV0L3Rscy90bHNfc3RycC5jOjQyNTpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDI2OlxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSByb3VuZF91cChuZWVkX3NwYywgUEFHRV9TSVpFKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQzMz1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MzktXFxubmV0L3Rscy90bHNfc3RycC5jOjQ0MDpcXHRmaXJzdCA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKS1cXHUwMDNlZnJhZ19saXN0O1xcbm5ldC90bHMvdGxzX3N0cnAuYy00NDEtXFx0c2tiID0gZmlyc3Q7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0NjE6c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYyLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NzAtXFxubmV0L3Rscy90bHNfc3RycC5jOjQ3MTpcXHQvKiBCZXN0b3cgdGhlIHN0YXRlIG9udG8gdGhlIGFuY2hvciAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzI6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VsZW4gPSBvZmZzZXQgKyBsZW47XFxubmV0L3Rscy90bHNfc3RycC5jOjQ3MzpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gb2Zmc2V0ICsgbGVuO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzQ6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2V0cnVlc2l6ZSA9IG9mZnNldCArIGxlbjtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzY6XFx0c2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpLVxcdTAwM2VmcmFnX2xpc3QgPSBmaXJzdDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc3LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0Nzg6XFx0c2tiX2NvcHlfaGVhZGVyKHN0cnAtXFx1MDAzZWFuY2hvciwgZmlyc3QpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0Nzk6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VkZXN0cnVjdG9yID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDgwLVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQ4ND1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MDA6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXFx0fVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MDItXFxubmV0L3Rscy90bHNfc3RycC5jOjUwMzpcXHRyeG0gPSBzdHJwX21zZyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDQtXFx0cnhtLVxcdTAwM2VmdWxsX2xlblxcdD0gc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDUtXFx0cnhtLVxcdTAwM2VvZmZzZXRcXHQ9IHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQ7XFxubmV0L3Rscy90bHNfc3RycC5jOjUwNjpcXHR0bG0gPSB0bHNfbXNnKHN0cnAtXFx1MDAzZWFuY2hvcik7XFxubmV0L3Rscy90bHNfc3RycC5jLTUwNy1cXHR0bG0tXFx1MDAzZWNvbnRyb2xcXHQ9IHN0cnAtXFx1MDAzZW1hcms7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTUyNi1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTI3OlxcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTI4LVxcdGlmICghc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTMzLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MzQ6XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTM1LVxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjAxPXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA3LVxcdGVsc2VcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjA4OlxcdFxcdHRsc19zdHJwX2ZsdXNoX2FuY2hvcl9jb3B5KHN0cnApO1xcbm5ldC90bHMvdGxzX3N0cnAuYy02MDktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjIwPWludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2MjY6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo2Mjc6XFx0aWYgKCFzdHJwLVxcdTAwM2VhbmNob3IpXFxubmV0L3Rscy90bHNfc3RycC5jLTYyOC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz02NDc9dm9pZCBfX3Rsc19zdHJwX2RvbmUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTY0OC17XFxubmV0L3Rscy90bHNfc3RycC5jOjY0OTpcXHR0bHNfc3RycF9hbmNob3JfZnJlZShzdHJwKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjUwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MjIuODQ3MDI3MzQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzkwMzA2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQgdXNlcyBgZmlyc3QgPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKS1cdTAwM2VmcmFnX2xpc3Q7YCBpbiB0aGUgY3VycmVudCBrZXJuZWwsIHdoaWNoIEkgdW5kZXJzdGFuZC4gQnV0IHRoZSBkaWZmIHByb3ZpZGVkIGRvZXNuJ3QgaGF2ZSAqdGhhdCogbGluZS4gSW5zdGVhZCwgaXQgaGFzIGBmaXJzdCA9IHN0cnAtXHUwMDNlYW5jaG9yO2AuIFRoYXQgc2VlbXMgd3JvbmcuIExldCBtZSByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9tcHQncyBkaWZmLi4uXG5cblJpZ2h0LCBsb29raW5nIGFnYWluIGF0IHRoZSBkaWZmIGluIHRoZSBwcm9tcHQsIGl0IGNoYW5nZXMgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBhY2NlcHQgYSBgbGVuYCBwYXJhbWV0ZXIgYW5kIGludHJvZHVjZXMgYHJlbWFpbmluZ2AuLi4gT2theSwgYnV0IGl0IHN0aWxsIGluaXRpYWxpemVzIGBmaXJzdGAgYXMgYHN0cnAtXHUwMDNlYW5jaG9yYCwgYW5kIHRoZW4gc2V0cyBgc2tiID0gZmlyc3Q7YC4gV2FpdCBhIG1pbnV0ZSwgbXkgYGdyZXBgIG91dHB1dCBmcm9tIHRoZSBjdXJyZW50IHRyZWUgc2hvd3MgYGZpcnN0ID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0O2AuIEFoLCB0aGF0J3MgaXQhIE15IGdyZXAgaXMgc2hvd2luZyB0aGUgY29kZSAqYWZ0ZXIqIHRoaXMgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCBvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGl0LiBTbyB0aGUgY3VycmVudCBjb2RlIGRvZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgZnJhZ21lbnQgbGlzdCBhY2Nlc3MsIGFuZCB0aGlzIGRpZmYgaXMgc2hvd2luZyB0aGUgY2hhbmdlLlxuXG5CdXQsIGlmIGBmaXJzdGAgaXMgYXNzaWduZWQgYHN0cnAtXHUwMDNlYW5jaG9yYCwgdGhlbiBgc2tiYCBpcyBhbHNvIGBzdHJwLVx1MDAzZWFuY2hvcmAsIGFuZCB0aGVuIHdlIHJlYWQgYFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXFgLiBOb3csIHRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgcHJvYmxlbS4gYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBhbGxvY2F0ZWQgd2l0aCBgYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpYC4gSXRzIGNvbnRyb2wgYmxvY2sgKGBjYmApIGlzICpub3QqIGluaXRpYWxpemVkLiBUaGF0J3MgYSBzZXJpb3VzIGJ1ZyEgYGFsbG9jX3NrYmAgdXNlcyBga21lbV9jYWNoZV9hbGxvY19ub2RlYCBvciBzaW1pbGFyLCB3aGljaCB2ZXJ5IGxpa2VseSBkb2Vzbid0IHplcm8gdGhlIGBjYmAgZmllbGQgdW5sZXNzIGBfX0dGUF9aRVJPYCBpcyBleHBsaWNpdGx5IHVzZWQuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19za2JgIGFjdHVhbGx5IHplcm9lcyB0aGUgYGNiYCBmaWVsZCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMgaXNzdWUgaGVyZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBhbGxvY19za2JgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozNS42MzczMzY5MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTE3NDk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKmNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozNS42ODI4NjA1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTkyNDE1MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBndXRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgYWxsb2NhdGVkLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNvcmUgb2YgaG93IG91ciBuZXR3b3JraW5nIGRhdGEgaXMgbWFuYWdlZCBhdCB0aGUgcGFja2V0IGxldmVsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnkgaW5jb21pbmcgYW5kIG91dGdvaW5nIG5ldHdvcmsgcGFja2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcsIGRlYnVnZ2luZyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMsIGFuZCBwb3RlbnRpYWxseSwgY3JhZnRpbmcgYW55IGN1c3RvbSBuZXR3b3JraW5nIHNvbHV0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIHdpdGggdG9kYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDEuODc1Mjc4OTQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1MTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0MS45MjIxMzc2NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxNjc5NTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX3NrYmAgdG8gVmFsaWRhdGUgQ29udHJvbCBCbG9jayBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBfX2FsbG9jX3NrYmAgaGFuZGxlcyB0aGUgY29udHJvbCBibG9jayAoYGNiYCkuIFdlIGtub3cgdGhhdCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMgbGlrZSBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiBgX19hbGxvY19za2JgIGV4cGxpY2l0bHkgemVyb2VzIHRoaXMgYGNiYCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMg4oCTIGlmIGl0ICpkb2Vzbid0KiB6ZXJvIGl0LCB3ZSdyZSBsaWtlbHkgcmVseWluZyBvbiBzb21lIG90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBsYXRlciBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHN1YnRsZSBidWdzIGlmIHRob3NlIG1lY2hhbmlzbXMgYXJlIG1pc3NlZCBvciBpZiBtZW1vcnkgaXMgbm90IG1hbmFnZWQgYXBwcm9wcmlhdGVseS4gSWYgaXQgKmRvZXMqIHplcm8gaXQsIHRoYXQgZ2l2ZXMgYSBiYXNlbGluZSBmb3Igb3RoZXIgb3BlcmF0aW9ucyB0byB3b3JrIG9mZiBvZi4gVWx0aW1hdGVseSBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG91ciBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBtZW1vcnkgcmVnaW9uIGFyZSBjb3JyZWN0LCBhbmQgcG90ZW50aWFsbHkgdG8gaWRlbnRpZnkgYSBoaWRkZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiB0aGVyZSBpcyBtb3JlIGluaXRpYWxpemF0aW9uIHRoYW4gbmVjZXNzYXJ5LiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0Ni43Mzg5MzY0NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDYuNzM5MjIxMzE0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTY5NTE1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgQ29ycnVwdGlvbiBpbiB0aGUgU0tCIENvbnRyb2wgQmxvY2sqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gU29tZXRoaW5nIGZlZWxzIG9mZiwgYW5kIEkgc3VzcGVjdCBhIHN1YnRsZSBjb3JydXB0aW9uIG1pZ2h0IGJlIGx1cmtpbmcgc29tZXdoZXJlIGluIHRoZSBgc2tiYCBjb250cm9sIGJsb2NrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgYGNiYCBmaWVsZCBpcyBoYW5kbGVkLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGhvdyBgY2JgIGlzIGJlaW5nIHplcm9lZCBvdXQgb3IgaGFuZGxlZCBpbiBnZW5lcmFsLiBJ4oCZbSB0aGlua2luZyBgc2tidWZmX2NsZWFyYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50OyB0aGF0J3Mgd2hlcmUgd2UgdHlwaWNhbGx5IGV4cGVjdCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciB3aGVuIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCBvciByZWN5Y2xlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIGV4cGxpY2l0bHkgemVyb2luZyBgY2JgIHRoZXJlLCB3aGljaCB0aGV5ICpzaG91bGQqIGJlLlxuXG5Ib3dldmVyLCBpZiBpdCdzIG5vdCBoYW5kbGVkIHRoZXJlIGRpcmVjdGx5LCBvciBpZiB0aGVyZSdzIGEgbW9yZSBudWFuY2VkIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHRoZW4gSSBzaG91bGQgZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIG1heWJlIHRoZXJlJ3MgYW4gaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIHByZXBwZWQuIFBlcmhhcHMgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIGluc3RlYWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIGluaXRpYWxpemF0aW9uLCBhcyBzb21ldGltZXMgaW5pdGlhbGl6YXRpb24gd2lsbCBoYXBwZW4gaW4gYSBzcG90IHdoZXJlIGl0J3MgZWFzeSB0byBvdmVybG9vay4gVGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgdXAgc29tZSBTS0Igb3BlcmF0aW9ucy4gSXQncyBwb3NzaWJsZSB0aGUgemVyb2luZyBpc24ndCBoYXBwZW5pbmcgd2hlcmUgSSBleHBlY3QuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYm90aCBmdW5jdGlvbnMsIGJlY2F1c2UgaWYgYGNiYCBpc24ndCBjb25zaXN0ZW50bHkgY2xlYXJlZCwgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGJsZWVkaW5nIG92ZXIsIGNhdXNpbmcgYWxsIHNvcnRzIG9mIGVycmF0aWMgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSSBrbm93IHRoZSBTS0IgYW5kIGl0cyBjb250cm9sIGJsb2NrIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IHNwb3QgaWYgc29tZXRoaW5nJ3MgYW1pc3Mgd2l0aCBob3cgYGNiYCBpcyBiZWluZyBoYW5kbGVkLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgYSBtb3JlIGRlZXBseSByb290ZWQgaXNzdWUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgZWxpbWluYXRlIHBvc3NpYmxlIGlzc3VlcywgYW5kIGNvbmZpcm0gaWYgYGNiYCBpcyBjb25zaXN0ZW50bHkgc2V0IHRvIHplcm8uIFRoaXMgaXMgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NTMuOTU2MTc2MjE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI2NjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1NC4wMDU0NDg3OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3OTQ5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tidWZmX2NsZWFyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUsIFwiTGV0J3MgcmVhZCBgc2tidWZmX2NsZWFyYCxcIiBpbmRpY2F0ZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBnaXZlbiB0aGUgYHNrYnVmZmAgcHJlZml4LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UnbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHN0cnVjdHVyZSB1c2VkIGZvciBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMg4oCTIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGl0c2VsZi5cblxuVGhlIGdvYWwgaXMgbGlrZWx5IHRvIGRlY29uc3RydWN0IGl0cyBvcGVyYXRpb247IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgaGFwcGVucyB3aGVuIGFuIGBza2J1ZmZgIGluc3RhbmNlIGlzIFwiY2xlYXJlZC5cIiBUaGlzIGNvdWxkIGludm9sdmUgemVyb2luZyBvdXQgbWVtb3J5LCByZWxlYXNpbmcgYXNzb2NpYXRlZCByZXNvdXJjZXMgbGlrZSBkYXRhIGJ1ZmZlcnMgYW5kIG1ldGFkYXRhLCBwb3NzaWJseSB1cGRhdGluZyBpbnRlcm5hbCBmbGFncywgYW5kIG1heWJlIGV2ZW4gcmV0dXJuaW5nIHRoZSBgc2tidWZmYCB0byBhIHBvb2wgZm9yIHJldXNlLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBrZnJlZV9za2JgLCBgc2tiX3JlbGVhc2VfZGF0YWAsIGFueSBtYW5pcHVsYXRpb24gb2YgYGRhdGFgLCBgdGFpbGAsIGBsZW5gLCBgaGVhZGAsIGBuZXh0YCwgYHByZXZgIHBvaW50ZXJzLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyBlZmZpY2llbnQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGNvbmN1cnJlbnRseSBpbiBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQuIEEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYHNrYnVmZl9jbGVhcmAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGludGVycnVwdCBjb250ZXh0cyB3aWxsIGJlIGNydWNpYWwuIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgd2l0aGluIHRoZSBjb2RlLCBhbmQgbWF5YmUgYWxzbyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaG9zZW4gaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBpZiBhbnkgb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NTguNjgzNDAxMDY2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTY6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMTc6XFx0e1xcbiAzMTg6XFx0XFx0LyogUmVwbGFjZSBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpXFxuIDMxOTpcXHRcXHQgKiB3aXRoIHR3byBzbWFsbGVyIG1lbXNldCgpLCB3aXRoIGEgYmFycmllcigpIGJldHdlZW4gdGhlbS5cXG4gMzIwOlxcdFxcdCAqIFRoaXMgZm9yY2VzIHRoZSBjb21waWxlciB0byBpbmxpbmUgYm90aCBjYWxscy5cXG4gMzIxOlxcdFxcdCAqL1xcbiAzMjI6XFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSBcXHUwMDNjPSAxMjgpO1xcbiAzMjM6XFx0XFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcXG4gMzI0OlxcdFxcdGJhcnJpZXIoKTtcXG4gMzI1OlxcdFxcdG1lbXNldCgodm9pZCAqKXNrYiArIDEyOCwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIC0gMTI4KTtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0LyoqXFxuIDMyOTpcXHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXFxuIDMzMDpcXHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXFxuIDMzMTpcXHQgKiBAbjogbnVtYmVyIG9mIGVudHJpZXMgdG8gcHJvdmlkZVxcbiAzMzI6XFx0ICpcXG4gMzMzOlxcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcXG4gMzM0OlxcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xcbiAzMzU6XFx0ICogYXZhaWxhYmxlLCB0cmllcyB0byByZXBsZW5pc2ggdGhlIGNhY2hlIGFuZCBidWxrLWFsbG9jYXRlcyB0aGUgZGlmZiBmcm9tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjU4LjY4MzY0NDE4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU2NTM5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAgYW5kIHRoZSBTdHJ1Y3R1cmUgTGF5b3V0KipcblxuUmlnaHQsIHNvIGBza2J1ZmZfY2xlYXJgIGlzIHdpcGluZyBvdXQgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSDigJMgYWxsIHRoZSB3YXkgdXAgdG8gd2hlcmUgdGhlIGB0YWlsYCBwb2ludGVyIGlzIGxvY2F0ZWQsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHNrX2J1ZmZgIGlzIGluaXRpYWxpemVkIGFuZCBob3cgbXVjaCBzdGF0ZSBpcyB0eXBpY2FsbHkgcmVzZXQuXG5cbk5vdywgbXkgbmV4dCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggdGhlc2UgbG93LWxldmVsIHN0cnVjdHVyZXMsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBvZmZzZXQgb2YgdGhlIENvbnRyb2wgQmxvY2ssIG9yIGBjYmAuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGRhdGEgcmVzaWRlcyByZWxhdGl2ZSB0byB0aGUgYHRhaWxgIHBvaW50ZXIsIGFuZCB0aGVyZWZvcmUgaG93IG11Y2ggb2YgdGhlIENvbnRyb2wgQmxvY2sgSSBzaG91bGQgZXhwZWN0IHRvIGJlIHplcm9lZCBieSBgc2tidWZmX2NsZWFyYC4gSXMgaXQgYmVpbmcgY2xlYXJlZD8gUGFydGlhbGx5IGNsZWFyZWQ/IFRoaXMgaGFzIHJhbWlmaWNhdGlvbnMgZm9yIGluaXRpYWxpemF0aW9uLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgYnVmZmVyIEkgbmVlZCB0byByZXBvcHVsYXRlIGFmdGVyIHRoaXMgY2xlYXIgb3BlcmF0aW9uLiBJIG5lZWQgdGhhdCBgY2JgIG9mZnNldCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgb3IgdGhhdCBJJ20gc2V0dGluZyB1cCB0aGUgcmlnaHQgcGFydHMgYmVmb3JlIGhhbmRpbmcgaXQgb2ZmIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSByZWFsbHkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjbGVhcmluZyBhbmQgaWYgbXkgYXNzdW1wdGlvbnMgYXJlIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDMuOTQwMTg3NDIxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyNDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFyLipjYlxcXFxbXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MTgtXFx0ICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5MTk6XFx0Y2hhclxcdFxcdFxcdGNiWzQ4XSBfX2FsaWduZWQoOCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjAzLjk4NDIxNzUyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg5MDI0MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc3RydWN0IHNrX2J1ZmZgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGF0YSBsYXlvdXQgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGZpZWxkcyByZWxhdGUgdG8gZWFjaCBvdGhlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGFpbGAgaXMgZGVmaW5lZCBpbiByZWxhdGlvbiB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb25pbmcgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0IGlzIGNydWNpYWwgZm9yIGFueSBzb3J0IG9mIGxvdy1sZXZlbCBwYWNrZXQgcHJvY2Vzc2luZyBvciBvcHRpbWl6YXRpb24gSSdtIHdvcmtpbmcgb24gcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjA3Ljc3MzI0Mzg5NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjU5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFpbDtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwOTEtXFx0LyogVGhlc2UgZWxlbWVudHMgbXVzdCBiZSBhdCB0aGUgZW5kLCBzZWUgYWxsb2Nfc2tiKCkgZm9yIGRldGFpbHMuICAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTA5MjpcXHRza19idWZmX2RhdGFfdFxcdFxcdHRhaWw7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDkzLVxcdHNrX2J1ZmZfZGF0YV90XFx0XFx0ZW5kO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzE2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjcxNy17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzE4OlxcdHJldHVybiBza2ItXFx1MDAzZWhlYWQgKyBza2ItXFx1MDAzZXRhaWw7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjczMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90YWlsX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3MzQte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjczNTpcXHRyZXR1cm4gc2tiLVxcdTAwM2V0YWlsO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjczNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI5MTM9c3RhdGljIGlubGluZSBpbnQgc2tiX3RhaWxyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE0LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI5MTU6XFx0cmV0dXJuIHNrYl9pc19ub25saW5lYXIoc2tiKSA/IDAgOiBza2ItXFx1MDAzZWVuZCAtIHNrYi1cXHUwMDNldGFpbDtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI5MTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTowNy44MTc2MTQ2ODJaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjQ0NTU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIFF1ZXVlIGluIHRoZSBUTFMgU3RyaW5nIFBhcnNlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3Mgd29ya2luZyB3aXRoIHRoZSBgc2tfYnVmZmAgcXVldWUuIE15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklmIGBjYmAgaXMgemVyb2VkIG91dCBieSBgc2tidWZmX2NsZWFyYCwgdGhlbiBgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcWAgd291bGQgYmUgemVybyxcIiB3aGljaCBzZWVtcyBsaWtlIGEgcHJvYmxlbS4gQnV0IHRoZW4sIEkgc2VlIHRoYXQgYHNrYmAgaXMgc2V0IHRvIGBmaXJzdGAsIHdoaWNoIGlzIGBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKS1cdTAwM2VmcmFnX2xpc3RgLiAgSG1tLCB3YWl0IGEgbWludXRlLCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIHdhcyBhIGNoYW5nZSB0byB0aGlzIGxpbmUsIGJ1dCBhZnRlciByZS1yZWFkaW5nIHRoZSBwcm92aWRlZCBkaWZmLCBJIHNlZSB0aGF0IHRoZSBsaW5lIGBmaXJzdCA9IHN0cnAtXHUwMDNlYW5jaG9yO2AgaXMgTk9UIGNoYW5nZWQgaW4gdGhpcyBkaWZmIVxuXG5Pa2F5LCBzbyB0aGF0IG1lYW5zIGBmaXJzdGAgaXMgc2V0IHRvIGBzdHJwLVx1MDAzZWFuY2hvcmAsIGFuZCB0aHVzIGBza2JgIGdldHMgc2V0IHRvIGBzdHJwLVx1MDAzZWFuY2hvcmAuIFRoaXMgbWVhbnMgYHNlcSA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXE7YCBpcyByZWFkaW5nIGZyb20gYHN0cnAtXHUwMDNlYW5jaG9yYC4gQnV0IEkga25vdyB0aGF0IGBzdHJwLVx1MDAzZWFuY2hvcmAncyBgY2JgIGlzIHplcm9lZCB3aGVuIGl0J3MgYWxsb2NhdGVkLCB3aGljaCBpcyB3aHkgSSBzdGFydGVkIHRvIHdvcnJ5IVxuXG5BaGEhIE5vdyBJIHJlbWVtYmVyIHRoYXQgYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgIGNhbGxzIGB0Y3BfcmVjdl9za2JgIHdoaWNoIGFsbG9jYXRlcyBgZmlyc3RgLCBhbmQgdGhlbiBgc2tiX2NvcHlfaGVhZGVyKHN0cnAtXHUwMDNlYW5jaG9yLCBmaXJzdCk7YCBpcyBjYWxsZWQhIEFuZCB0aGF0IG1lYW5zIHRoZSBgY2JgIGlzIGNvcGllZCBmcm9tIGBmaXJzdGAgdG8gYHN0cnAtXHUwMDNlYW5jaG9yYCEgT2ssIHRoYXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYHNrYl9jb3B5X2hlYWRlcmAgZnVuY3Rpb24gbm93LCB0byBlbnN1cmUgSSdtIGNvcnJlY3QgaW4gbXkgdW5kZXJzdGFuZGluZywgYnV0IEkgdGhpbmsgSSd2ZSBnb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjE3Ljg4MjA3MzU5NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzUyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3B5X2hlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz05NDI9aW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05NjctXFx0c2tiX3Jlc2VydmUobnNrYiwgaGVhZHJvb20pO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjk2ODpcXHRza2JfY29weV9oZWFkZXIobnNrYiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy05NjktXFx0c2tiX21hcmtfZm9yX3JlY3ljbGUobnNrYik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMTQxPUVYUE9SVF9TWU1CT0woc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjE0Mi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTQzOnZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMTUwLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTUxOkVYUE9SVF9TWU1CT0woc2tiX2NvcHlfaGVhZGVyKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTUyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjAyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMDM6XFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjIwNC1cXHRyZXR1cm4gbjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjY3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNjg6XFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjI2OS1vdXQ6XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNTAyPXN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDEtXFxubmV0L2NvcmUvc2tidWZmLmM6MjU0MjpcXHRza2JfY29weV9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToxOC4wMDE4MzUyMjRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDEwNDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tiX2NvcHlfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBmb3IgYHNrYl9jb3B5X2hlYWRlcmAuIEknbSBnb2luZyB0byBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGl0cyByb2xlIGluIGNyZWF0aW5nIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlci4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgYSBjbG9uaW5nIG9wZXJhdGlvbiwgb3IgcGVyaGFwcyBmb3Igc2VnbWVudGF0aW9uIG9mZmxvYWQsIG9yIGlzIHRoaXMgYmVpbmcgY2FsbGVkIGZyb20gYSBkZXZpY2UgZHJpdmVyPyBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBzbyBJJ2xsIGV4cGVjdCB0byBzZWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9ucyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBpZiBhcHBsaWNhYmxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYHNrYi1cdTAwM2VkYXRhYCwgYHNrYi1cdTAwM2VsZW5gLCBgc2tiLVx1MDAzZW1hY19oZWFkZXJgLCBhbmQgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0cy4gSXMgaXQgcGVyZm9ybWluZyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgaW5wdXQgU0tCIHRvIGVuc3VyZSBpdCdzIGluIGEgZ29vZCBzdGF0ZSBiZWZvcmUgY29weWluZz8gTGV0J3MgY2hlY2sgaG93IHRoZSBuZXcgU0tCIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdHMgbWV0YWRhdGEgaXMgY29waWVkIG92ZXIuIEFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbj8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSBjaGVja3N1bSBvZmZsb2FkIGRldGFpbHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBvbiB0aGUgb3ZlcmFsbCBkYXRhcGF0aCBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvcHkgb3ZlcmhlYWQgaW4gZGlmZmVyZW50IHVzZS1jYXNlcy4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3Mgb3B0aW1pemVkIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjIzLjA4MTk0MjM4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTQzOlxcdHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuMjE0NDpcXHR7XFxuMjE0NTpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7XFxuMjE0NjpcXHRcXG4yMTQ3OlxcdFxcdHNrYl9zaGluZm8obmV3KS1cXHUwMDNlZ3NvX3NpemUgPSBza2Jfc2hpbmZvKG9sZCktXFx1MDAzZWdzb19zaXplO1xcbjIxNDg6XFx0XFx0c2tiX3NoaW5mbyhuZXcpLVxcdTAwM2Vnc29fc2VncyA9IHNrYl9zaGluZm8ob2xkKS1cXHUwMDNlZ3NvX3NlZ3M7XFxuMjE0OTpcXHRcXHRza2Jfc2hpbmZvKG5ldyktXFx1MDAzZWdzb190eXBlID0gc2tiX3NoaW5mbyhvbGQpLVxcdTAwM2Vnc29fdHlwZTtcXG4yMTUwOlxcdH1cXG4yMTUxOlxcdEVYUE9SVF9TWU1CT0woc2tiX2NvcHlfaGVhZGVyKTtcXG4yMTUyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToyMy4wODIxNjM5NjlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0NDk5NzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19jb3B5X3NrYl9oZWFkZXJgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgX19jb3B5X3NrYl9oZWFkZXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgbWVjaGFuaWNzIGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXNzZW50aWFsIHRhc2sgb2YgY29weWluZyB0aGUgaGVhZGVyIGRhdGEgZnJvbSBvbmUgU0tCIHRvIGFub3RoZXIuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLCBvZnRlbiBlbXBsb3llZCBkdXJpbmcgcGFja2V0IGNsb25pbmcgb3Igd2hlbiBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgbnVhbmNlcyByZWdhcmRpbmcgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhlYWRlciBMZW5ndGg6KiogSG93IGRvZXMgaXQgZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgZGF0YSB0byBjb3B5LCBhbmQgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBpbiBkaWZmZXJpbmcgaGVhZGVyIGxlbmd0aHMgYmV0d2VlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBTS0JzPyBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb3V0IGZvciBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbiogICAqKlNLQiBNZXRhZGF0YToqKiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWV0YWRhdGEgZmllbGRzIHRoYXQgKmFyZSogYW5kICphcmUgbm90KiBjb3BpZWQuIFRoaW5ncyBsaWtlIGNoZWNrc3VtIHN0YXR1cywgVkxBTiB0YWdzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGZsYWdzIGFyZSBpbXBvcnRhbnQuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaW5ncyB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBBcmUgYW55IGFzcGVjdHMgb2YgdGhlIGRlc3RpbmF0aW9uIFNLQidzIG1ldGFkYXRhICp1cGRhdGVkKiBpbiB0aGUgcHJvY2Vzcz9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdtIHdvbmRlcmluZyBob3cgdGhlIGZ1bmN0aW9uIG1hbmFnZXMgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBkdXJpbmcgaGVhZGVyIGNvcHkuIElzIHRoZXJlIGEgYmFjay1vZmYgc3RyYXRlZ3k/XG4qICAgKipQZXJmb3JtYW5jZSBDb25zaWRlcmF0aW9uczoqKiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG9uIHRoZSBjcml0aWNhbCBwYXRoLCBJIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGFueSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB1c2VkIGhlcmUuIElzIHRoZXJlIGFueSBhbGlnbm1lbnQgcGFkZGluZz8gVmVjdG9yaXphdGlvbj9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgY29weSBmYWlscz8gV2hhdCBzaWduYWxzIGFyZSByZXR1cm5lZCwgYW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0/IEFyZSB0aGVyZSBhbnkgaW52YXJpYW50cyBtYWludGFpbmVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIHJhcGlkbHkgZW5zdXJlIHRoYXQgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgZnVuY3Rpb24gcmVtYWlucyBhY2N1cmF0ZSBhbmQsIHBlcmhhcHMsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSBhIGRlZXBlciBkaXZlIG1heSBiZSB3YXJyYW50ZWQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNvZGViYXNlIGFuZCB0aGUga2VybmVsJ3MgaW5oZXJlbnQgY29tcGxleGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjguODI3MTYzODQyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg4OTg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3B5X3NrYl9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1NS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1Ny17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDU6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTItXFx0bi1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTM6XFx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY1Ny1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjU5LVxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDU6XFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzMyLVxcdFxcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzMzOlxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDczNC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk2MjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDk2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjkuMTE2MDcwMzUyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg2MTQ2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fY29weV9za2JfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgYF9fY29weV9za2JfaGVhZGVyYC4gSXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBpc24ndCBpdD8gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU6IHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBjYWNoZSBsaW5lIGJlaGF2aW9yLCBhbmQgdGhlIGludGVycGxheSB3aXRoIERNQSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBXaGF0J3MgdGhlIHRhcmdldCBwbGF0Zm9ybT8gQXJlIHdlIHg4NiwgQVJNLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGltcGxpY2F0aW9ucyBvZiBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2xzIGFyZSBhbHJlYWR5IGJ1YmJsaW5nIHVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZhbHNlIHNoYXJpbmcsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBoZWF2aWx5IG11bHRpLXRocmVhZGVkLCB3aGljaCwgZ2l2ZW4gaXRzIG5hdHVyZSwgaXMgbGlrZWx5LlxuXG5UaGUgY29yZSBvZiBpdCwgdGhvdWdoLCBpcyBlc3NlbnRpYWxseSBhIG1lbWNweSwgYnV0IHRhaWxvcmVkIGZvciBTS0JzLiBJIG5lZWQgdG8gYmUgYXNraW5nIG15c2VsZiB0aGUgcXVlc3Rpb24gYWJvdXQgaWYgaXQncyB1c2luZyB0aGUgcmlnaHQgbWVtY3B5IHZhcmlhbnQuIElzIGl0IGBtZW1jcHlgLCBgX19tZW1jcHlgLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgdmVjdG9yaXplZCBpbnN0cnVjdGlvbiwgc3VjaCBhcyBgbWVtY3B5X25lb25gPyBJcyBpdCB0YWtpbmcgYWR2YW50YWdlIG9mIGFueSBwcmVmZXRjaGluZz8gTWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvbiB0aGUga2VybmVsIGFyZSB2ZXJ5IGltcG9ydGFudC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgY29weSBlbmdpbmUgY2FwYWJpbGl0aWVzIGlmIHdlJ3JlIGxvb2tpbmcgYXQgTklDIG9yIERNQSBhY2NlbGVyYXRpb24uIEhvdyBhcmUgd2UgaGFuZGxpbmcgaGVhZGVyIG9mZnNldHMsIGFuZCB3aGF0J3MgdGhlIHR5cGljYWwgc2l6ZSBvZiB0aGUgaGVhZGVyIGJlaW5nIGNvcGllZD8gQW55IGNoYW5jZSBvZiBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuYWxpZ25lZCBhY2Nlc3MgYW5kIHNlZSBpZiBhbnkgY2xldmVyIHRyaWNrcyBhcmUgdXNlZCB0byBtaXRpZ2F0ZSB0aGF0LlxuXG5JJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBTS0IgaXMgbWFsZm9ybWVkPyBEbyB3ZSBoYXZlIHN1ZmZpY2llbnQgY2hlY2tzIGluIHBsYWNlIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzPyBUaGlzIGlzIGtlcm5lbC1sZXZlbCBjb2RlLCBhZnRlciBhbGw7IHN0YWJpbGl0eSBpcyBwYXJhbW91bnQuXG5cbkZpbmFsbHksIHdoYXQncyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgc29mdGlycSwgb3IgYSBwcm9jZXNzIGNvbnRleHQ/IFRoaXMgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2VzIHRoZSBhbGxvd2VkIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBmb3IgY29udGV4dCBzd2l0Y2hlcy4gVGhpcydsbCBpbXBhY3Qgb3VyIGFuYWx5c2lzIG9uIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIGZvciBhbnkgb3B0aW1pemF0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhvc2UgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTozNC40OTQ2ODc5OTJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTY6XFx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4xNTU3OlxcdHtcXG4xNTU4OlxcdFxcdG5ldy1cXHUwMDNldHN0YW1wXFx0XFx0PSBvbGQtXFx1MDAzZXRzdGFtcDtcXG4xNTU5OlxcdFxcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cXHUwMDNlc2sgKi9cXG4xNTYwOlxcdFxcdG5ldy1cXHUwMDNlZGV2XFx0XFx0PSBvbGQtXFx1MDAzZWRldjtcXG4xNTYxOlxcdFxcdG1lbWNweShuZXctXFx1MDAzZWNiLCBvbGQtXFx1MDAzZWNiLCBzaXplb2Yob2xkLVxcdTAwM2VjYikpO1xcbjE1NjI6XFx0XFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcXG4xNTYzOlxcdFxcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcXG4xNTY0OlxcdFxcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xcbjE1NjU6XFx0XFxuMTU2NjpcXHRcXHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cXG4xNTY3OlxcdFxcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcXG4xNTY4OlxcdFxcdCAqL1xcbjE1Njk6XFx0XFx0bmV3LVxcdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVxcdTAwM2VxdWV1ZV9tYXBwaW5nO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRtZW1jcHkoXFx1MDAyNm5ldy1cXHUwMDNlaGVhZGVycywgXFx1MDAyNm9sZC1cXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cXHUwMDNlaGVhZGVycykpO1xcbjE1NzI6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcXG4xNTczOlxcdFxcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcXG4xNTc0OlxcdFxcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcXG4xNTc1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XFxuMTU3NjpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XFxuMTU3NzpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XFxuMTU3ODpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xcbjE1Nzk6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODA6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcXG4xNTgxOlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcXG4xNTgyOlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XFxuMTU4MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XFxuMTU4NDpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xcbjE1ODU6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xcbjE1ODY6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xcbjE1ODc6XFx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcXG4xNTg4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcXG4xNTg5OlxcdCNlbmRpZlxcbjE1OTA6XFx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuMTU5MTpcXHRcXHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XFxuMTU5MjpcXHQjZW5kaWZcXG4xNTkzOlxcdFxcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xcbjE1OTQ6XFx0I2lmZGVmIENPTkZJR19YUFNcXG4xNTk1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MzQuNDk0OTIyOTcyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODQ3MTczMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQYXJzZXIgQnVnIGFuZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbuKAlGxvb2tzIGxpa2Ugd2UncmUgY29weWluZyB0aGUgVENQIGNvbnRyb2wgYmxvY2sgKGBjYmApIGZyb20gYW4gb2xkIFNLQiBpbnRvIGEgbmV3IG9uZS4gVGhlIGBjYmAgaW4gdGhlIGBmaXJzdGAgU0tCIGlzIHNldCB1cCBieSB0aGUgVENQIHN0YWNrIGl0c2VsZi4gVGhpcyBtZWFucyBgVENQX1NLQl9DQihzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlc2VxYCBzaG91bGQgYmUgdmFsaWQgYW5kIGluaXRpYWxpemVkLiBCdXQgd2hlcmUncyB0aGUgYnVnPyBJdCBoYXMgdG8gYmUgaW4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gTGV0IG1lIHNlZS4uLlxuXG5BaCwgcmlnaHQhIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGxvb3AgaW4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBjYW4gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIgaWYgYHJlbWFpbmluZ2AgZXhjZWVkcyB0aGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0aGUgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoZSBsaXN0IGVuZHMgdXAgYmVpbmcgZXhoYXVzdGVkLCBgc2tiYCBiZWNvbWVzIE5VTEwuICBgVENQX1NLQl9DQihza2IpYCB0aGVuIHRyaWVzIHRvIGFjY2VzcyBgXHUwMDI2TlVMTC1cdTAwM2VjYlswXWAsIHJlc3VsdGluZyBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBrZXJuZWwgb29wcywgZWFzeS4gSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gTm8sIEl0J3MgZWl0aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQgb2YgYm91bmRzIHJlYWQsIGRlcGVuZGluZyBvbiB3aGF0IGBza2ItXHUwMDNlbmV4dGAgcG9pbnRzIHRvLiAgVGhlIGBmcmFnX2xpc3RgIGlzIE5VTEwtdGVybWluYXRlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLiBJdCBhZGRzIGNoZWNrcyB3aXRoIGBUTFNfSEVBREVSX1NJWkVgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHRsc19yeF9tc2dfc2l6ZWAgd2FzIGNhbGxlZCBkaXJlY3RseS4gVGhpcyBmdW5jdGlvbiB0aGVuIHZhbGlkYXRlcyBoZWFkZXIgc2l6ZSBieSBjaGVja2luZyB0aGUgYHNrYi1cdTAwM2VsZW5gLiAgVGhlIGBza2ItXHUwMDNlbGVuYCBoZXJlIGlzIGRldGVybWluZWQgYnkgYHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbmAsIGFuZCB0aGF0IGlzIGluaXRpYWxpemVkIGJ5IGBpbnFgICh0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUpLCBhbmQgdGhpcyBjYW4gYmUgbGVzcyB0aGFuIGBUTFNfSEVBREVSX1NJWkVgLCBhbmQgYHRsc19yeF9tc2dfc2l6ZWAgbWlnaHQgcmV0dXJuIDAgKGlmIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIHRoZXJlKS5cblxuYHNrYl9jb3B5X2JpdHNgIGlzIHRoZSBpc3N1ZSwgaXQgaGFzIHRoZSBhYmlsaXR5IHRvIHRyYXZlcnNlIHRoZSBxdWV1ZSB0aHJvdWdoIGBmcmFnX2xpc3RgLiAgSWYgYGZyYWdfbGlzdGAgZG9lcyBub3QgaGF2ZSBlbm91Z2ggYnl0ZXMsIGl0IHJldHVybnMgYW4gZXJyb3Igc3VjaCBhcyBgLUVGQVVMVGAgLiAgQW5kIGB0bHNfcnhfbXNnX3NpemVgIGFsc28gaGFuZGxlcyB0aGlzIGNhc2UgYW5kIHdvdWxkIHJldHVybiBgLUVGQVVMVGAuIFNvIGl0IHNlZW1zIGB0bHNfcnhfbXNnX3NpemVgIGl0c2VsZiB3YXMgaGFuZGxpbmcgY2FzZXMgd2hlcmUgbm90IGVub3VnaCBieXRlcyB3ZXJlIGF2YWlsYWJsZSwgcmlnaHQ/IFRoZW4gd2hhdCdzIHRoZSBwb2ludCBvZiB0aGUgbmV3IGNoZWNrcz9cblxuVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcGF0Y2ggaXMgYWRkaW5nIGEgY2hlY2sgZm9yICpjb250aWd1b3VzKiBzZXF1ZW5jZSBzcGFjZSB3aXRoaW4gdGhlIFNLQnMsIHdoaWNoIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgaXMgcmVzcG9uc2libGUgZm9yLiAgYHNrYl9jb3B5X2JpdHNgIGNvcGllcyB3aXRob3V0IGFueSBjaGVja3Mgb24gc2VxdWVuY2UgbnVtYmVyLiBJdCBpcyBjaGVja2luZyB0aGF0IHRoZSBTS0JzIGFyZSBjb250aWd1b3VzLCBhbmQgbm90IG92ZXJsYXBwaW5nLiBJdCBhbHNvIGNoZWNrcyB0aGF0IHRoZSBTS0JzIGFyZSBvZiB0aGUgc2FtZSBkZWNyeXB0ZWQgc3RhdGUuICBJZiBub3QsIHRoZSBkYXRhIGNvcGllZCB3b3VsZCBiZSBhIG1lc3MuICBCdXQgdGhlc2UgY2hlY2tzIGp1c3QgZW5zdXJlIHRoYXQgdGhlIGJ5dGVzIGFyZSBub3QgbWl4ZWQuXG5cbldhaXQsIGlzIHRoZXJlIGFueSBjYXNlIHdoZXJlIGBza2JfY29weV9iaXRzYCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGBza2JfY29weV9iaXRzYCByZWFkcyBmcm9tIHRoZSBza2IgZGF0YSBidWZmZXJzLCB3aGljaCBjb250YWluIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsuIFRoaXMgZGF0YSBpcyBpbml0aWFsaXplZC5cblxuSGFuZyBvbi4gV2hhdCBpZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIGNhbGxlZCAqd2l0aCogYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYCAodGhlIGZ1bGwgZXhwZWN0ZWQgbWVzc2FnZSBsZW5ndGgpPyBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3YXMgY2FsbGVkICphZnRlciogYHRsc19yeF9tc2dfc2l6ZWAgYW5kIGNoZWNrZWQgdGhlIGVudGlyZSBtZXNzYWdlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb25kaXRpb24gYHJlbWFpbmluZ2AgKHdoaWNoIGlzIGBvZmZzZXQgKyBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmApIGNhbiBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgU0tCIHF1ZXVlIGxlbmd0aC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgc2FtZSBOVUxMIGRlcmVmZXJlbmNlLlxuXG5Ib3dldmVyLCB0aGUgbG9naWMgKmJlZm9yZSogY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGluY2x1ZGVzIHNvbWUgY2hlY2tzOiBgc3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpYCBhbmQgYGlmIChzeiBcdTAwM2UgaW5xKSByZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO2AuICBTbywgaWYgYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYCAobm93IGBzemApIGlzIGdyZWF0ZXIgdGhhbiBgaW5xYCwgdGhlbiBgdGxzX3N0cnBfcmVhZF9jb3B5YCBnZXRzIGNhbGxlZCwgYW5kIHdlICphdm9pZCogY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGF0IGFsbCEgVGhpcyBtZWFucyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHdpbGwgKm9ubHkqIGdldCBjYWxsZWQgd2hlbiB3ZSAqZG8qIGhhdmUgYXQgbGVhc3QgZW5vdWdoIGRhdGEsIG1ha2luZyB0aGUgTlVMTCBwb2ludGVyIHNjZW5hcmlvIGltcG9zc2libGUuXG5cblNvIHdoeSB0aGUgY2hhbmdlPyBBaCEgVGhleSd2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB0byB0YWtlIGBsZW5gIGFzIGFuIGFyZ3VtZW50IHNvIHRoZXkgY2FuIGNhbGwgaXQgd2l0aCBgVExTX0hFQURFUl9TSVpFYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnXG5cbiIsIklucHV0VG9rZW5zIjoyNTUzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoxMS4zNDIwOTkxNjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MDpcXHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXFxuIDM5MTpcXHR7XFxuIDM5MjpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMzk0OlxcdFxcdGludCBuZWVkX3NwYywgbGVuO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBJZiB0aGUgcmJ1ZiBpcyBzbWFsbCBvciByY3Ygd2luZG93IGhhcyBjb2xsYXBzZWQgdG8gMCB3ZSBuZWVkXFxuIDM5NzpcXHRcXHQgKiB0byByZWFkIHRoZSBkYXRhIG91dC4gT3RoZXJ3aXNlIHRoZSBjb25uZWN0aW9uIHdpbGwgc3RhbGwuXFxuIDM5ODpcXHRcXHQgKiBXaXRob3V0IHByZXNzdXJlIHRocmVzaG9sZCBvZiBJTlRfTUFYIHdpbGwgbmV2ZXIgYmUgcmVhZHkuXFxuIDM5OTpcXHRcXHQgKi9cXG4gNDAwOlxcdFxcdGlmIChsaWtlbHkocXNob3J0IFxcdTAwMjZcXHUwMDI2ICF0Y3BfZXBvbGxpbl9yZWFkeShzdHJwLVxcdTAwM2VzaywgSU5UX01BWCkpKVxcbiA0MDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdHNoaW5mbyA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0LyogSWYgd2UgZG9uJ3Qga25vdyB0aGUgbGVuZ3RoIGdvIG1heCBwbHVzIHBhZ2UgZm9yIGNpcGhlciBvdmVyaGVhZCAqL1xcbiA0MDY6XFx0XFx0bmVlZF9zcGMgPSBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gPzogVExTX01BWF9QQVlMT0FEX1NJWkUgKyBQQUdFX1NJWkU7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdGZvciAobGVuID0gbmVlZF9zcGM7IGxlbiBcXHUwMDNlIDA7IGxlbiAtPSBQQUdFX1NJWkUpIHtcXG4gNDA5OlxcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKHN0cnAtXFx1MDAzZXNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4gNDEwOlxcdFxcdFxcdGlmICghcGFnZSkge1xcbiA0MTE6XFx0XFx0XFx0XFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDEzOlxcdFxcdFxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0XFx0c2tiX2ZpbGxfcGFnZV9kZXNjKHN0cnAtXFx1MDAzZWFuY2hvciwgc2hpbmZvLVxcdTAwM2Vucl9mcmFncysrLFxcbiA0MTY6XFx0XFx0XFx0XFx0XFx0ICAgcGFnZSwgMCwgMCk7XFxuIDQxNzpcXHRcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdHNoaW5mby1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0c3RycC1cXHUwMDNlY29weV9tb2RlID0gMTtcXG4gNDIyOlxcdFxcdHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgPSAwO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWxlbiA9IDA7XFxuIDQyNTpcXHRcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4gNDI2OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSByb3VuZF91cChuZWVkX3NwYywgUEFHRV9TSVpFKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0dGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XFxuIDQyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MTEuMzQyMTg2NzM2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjYzOTIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBgdGxzX3N0cnBfcmVhZF9jb3B5YCBpcyBhbGxvY2F0aW5nIG1lbW9yeSBwYWdlcywgYW5kIGNydWNpYWxseSwgaXQncyBzZXR0aW5nIGBzdHJwLVx1MDAzZWNvcHlfbW9kZSA9IDFgLiBUaGF0J3MgdGhlIGZpcnN0IGtleSwgSSBzZWUuIFRoZW4gaXQgaW1tZWRpYXRlbHkgY2FsbHMgYHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApYC4gUmlnaHQsIHNvIHRoaXMgYGNvcHlpbmAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGRhdGEgdHJhbnNmZXIgZnJvbSB0aGUgVENQIHJlY2VpdmUgcXVldWUgKmFjdHVhbGx5KiB0YWtlcyBwbGFjZSwgZmVlZGluZyB0aGUgYWxsb2NhdGVkIHBhZ2VzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYHRsc19zdHJwX3JlYWRfY29weWluYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHRoaW5raW5nLiBHb3R0YSB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBjb3B5IG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoxNS44Njg1ODE0MTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTU4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX3JlYWRfY29weWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTM3NS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc2OnN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTM3Ny17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzkwPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MjctXFxubmV0L3Rscy90bHNfc3RycC5jOjQyODpcXHR0bHNfc3RycF9yZWFkX2NvcHlpbihzdHJwKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI5LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MjEtXFx0aWYgKHVubGlrZWx5KHN0cnAtXFx1MDAzZWNvcHlfbW9kZSkpXFxubmV0L3Rscy90bHNfc3RycC5jOjUyMjpcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MTUuOTExNzQ0MzEyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTgwNzA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwuIFwidGxzXCIgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UsIGFuZCBcInN0cnBcIiBsaWtlbHkgaW1wbGllcyBzb21lIHN0cmluZyBwcm9jZXNzaW5nIG9yIGNvcHlpbmcgb3BlcmF0aW9uLiBcIlJlYWRcIiBpbmRpY2F0ZXMgdGhpcyBpcyBhYm91dCBwdWxsaW5nIGRhdGEgaW4uIEFuZCBcImNvcHlpblwiIGlzIGludGVyZXN0aW5nIC0gaXQgaW1wbGllcyBjb3B5aW5nIGRhdGEgKmludG8qIGEgc3BlY2lmaWMgbG9jYXRpb24sIHBlcmhhcHMgYSBidWZmZXIgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLlxuXG5NeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggcmVhZGluZyBzdHJpbmcgZGF0YSBmcm9tIHNvbWUgc291cmNlLCBsaWtlbHkgaW50byB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZW5zdXJpbmcgdGhyZWFkLXNhZmV0eSB3aGVuIGhhbmRsaW5nIHN0cmluZ3MsIHBlcmhhcHMgd2hlbiBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGNvbmZpZ3VyYXRpb24gZGF0YSB3aXRoaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBUaGUgXCJjb3B5aW5cIiBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgcHJvdGVjdGlvbiBpbiBwbGFjZSB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciB0byBzZWUgKndoZXJlKiB0aGlzIGRhdGEgaXMgY29waWVkIGFuZCAqaG93KiB0aGF0IGNvcHkgb3BlcmF0aW9uIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgdGhyZWFkLXNhZmV0eS4gSXMgaXQgYSBkZWVwIGNvcHk/IERvZXMgaXQgdXNlIGEgbG9jaz8gQXJlIHRoZXJlIGFueSBzaXplIGxpbWl0cyBvciBlcnJvciBoYW5kbGluZyBpbnZvbHZlZD8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoyMC44MDk4MTcxNjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NjpcXHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weWluKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbiAzNzc6XFx0e1xcbiAzNzg6XFx0XFx0cmVhZF9kZXNjcmlwdG9yX3QgZGVzYztcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGVzYy5hcmcuZGF0YSA9IHN0cnA7XFxuIDM4MTpcXHRcXHRkZXNjLmVycm9yID0gMDtcXG4gMzgyOlxcdFxcdGRlc2MuY291bnQgPSAxOyAvKiBnaXZlIG1vcmUgdGhhbiBvbmUgc2tiIHBlciBjYWxsICovXFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdC8qIHNrIHNob3VsZCBiZSBsb2NrZWQgaGVyZSwgc28gb2theSB0byBkbyByZWFkX3NvY2sgKi9cXG4gMzg1OlxcdFxcdHRjcF9yZWFkX3NvY2soc3RycC1cXHUwMDNlc2ssIFxcdTAwMjZkZXNjLCB0bHNfc3RycF9jb3B5aW4pO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRyZXR1cm4gZGVzYy5lcnJvcjtcXG4gMzg4OlxcdH1cXG4gMzg5OlxcdFxcbiAzOTA6XFx0c3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoyMC44MDk4OTkyMjRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MDkzMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdGxzX3N0cnBfY29weWluYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGB0Y3BfcmVhZF9zb2NrYCBjYWxscyBgdGxzX3N0cnBfY29weWluYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZGF0YSB0cmFuc2ZlciByZWxhdGVkIHRvIFRMUyB3aXRoaW4gdGhlIFRDUCBsYXllci4gSXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpbmJvdW5kIFRMUyBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUQ1AgY29ubmVjdGlvbi4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4gTGV0J3MgZGlnIGludG8gdGhlIGB0bHNfc3RycF9jb3B5aW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBkYXRhIGlzIGJlaW5nIGNvcGllZCBpbiBhbmQgcHJvY2Vzc2VkLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSBlbmNyeXB0ZWQgVExTIGRhdGEgaXMgYmVpbmcgZGVjcnlwdGVkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGl0cyBtZW1vcnkgaGFuZGxpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVExTIGxpYnJhcnkuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MjYuNDUwODM1MTQ3WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDI6XFx0c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW4ocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDM0MzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgaW5fbGVuKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAgPSAoc3RydWN0IHRsc19zdHJwYXJzZXIgKilkZXNjLVxcdTAwM2VhcmcuZGF0YTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM0NzpcXHRcXHRpbnQgcmV0O1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRpZiAoc3RycC1cXHUwMDNlbXNnX3JlYWR5KVxcbiAzNTA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdHNrYiA9IHN0cnAtXFx1MDAzZWFuY2hvcjtcXG4gMzUzOlxcdFxcdGlmICghc2tiLVxcdTAwM2VsZW4pXFxuIDM1NDpcXHRcXHRcXHRza2JfY29weV9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xcbiAzNTU6XFx0XFx0ZWxzZVxcbiAzNTY6XFx0XFx0XFx0c3RycC1cXHUwMDNlbWl4ZWRfZGVjcnlwdGVkIHw9ICEhc2tiX2NtcF9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgc3RycC1cXHUwMDNlbWl4ZWRfZGVjcnlwdGVkKVxcbiAzNTk6XFx0XFx0XFx0cmV0ID0gdGxzX3N0cnBfY29weWluX3NrYihzdHJwLCBza2IsIGluX3NrYiwgb2Zmc2V0LCBpbl9sZW4pO1xcbiAzNjA6XFx0XFx0ZWxzZVxcbiAzNjE6XFx0XFx0XFx0cmV0ID0gdGxzX3N0cnBfY29weWluX2ZyYWcoc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcXG4gMzYyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDM2MzpcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IHJldDtcXG4gMzY0OlxcdFxcdFxcdHJldCA9IDA7XFxuIDM2NTpcXHRcXHR9XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmIChzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gXFx1MDAyNlxcdTAwMjYgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDM2ODpcXHRcXHRcXHRkZXNjLVxcdTAwM2Vjb3VudCA9IDA7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG4gMzcxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MjYuNDUwOTExNjk4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTUyMzk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyaXAgQ29weS1JbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGB0bHNfc3RycF9jb3B5aW5gIHdvcmtzLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0cyBwcmltYXJ5IGpvYiBpcyB0byBnZXQgZGF0YSBmcm9tIGBpbl9za2JgIGFuZCBwdXQgaXQgaW50byB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGhpbiBgc3RycC1cdTAwM2VhbmNob3JgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IElmIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAgaGFwcGVucyB0byBiZSB6ZXJvIGF0IHRoZSBzdGFydCwgYHRsc19zdHJwX2NvcHlpbmAgZG9lc24ndCBqdXN0IGNvcHkgdGhlIGRhdGEuIEl0ICphbHNvKiBjYWxscyBgdGxzX3J4X21zZ19zaXplYC4gIFRoYXQgY2FsbCB0YWtlcyBwbGFjZSB3aXRoaW4gZWl0aGVyIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2Agb3IgYHRsc19zdHJwX2NvcHlpbl9za2JgLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcy5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBob3cgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCB3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93IGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTcyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAwOjMyLjUwNjE1NDUyOVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRzdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbl9mcmFnKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgdW5zaWduZWQgaW50IG9mZnNldCxcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdHNpemVfdCBpbl9sZW4pXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHR1bnNpZ25lZCBpbnQgbmZyYWcgPSBza2ItXFx1MDAzZWxlbiAvIFBBR0VfU0laRTtcXG4gMjE1OlxcdFxcdHNpemVfdCBsZW4sIGNodW5rO1xcbiAyMTY6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMjE3OlxcdFxcdGludCBzejtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0aWYgKHVubGlrZWx5KG5mcmFnIFxcdTAwM2U9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3MpKSB7XFxuIDIyMDpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZnJhZyA9IFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdzW25mcmFnXTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0bGVuID0gaW5fbGVuO1xcbiAyMjc6XFx0XFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlIGdvdCB0aGUgaGVhZGVyICovXFxuIDIyODpcXHRcXHRpZiAoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbikge1xcbiAyMjk6XFx0XFx0XFx0LyogQXNzdW1lIG9uZSBwYWdlIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGhlYWRlcnMgKi9cXG4gMjMwOlxcdFxcdFxcdGNodW5rID1cXHRtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XFxuIDIzMTpcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2tiX2NvcHlfYml0cyhpbl9za2IsIG9mZnNldCxcXG4gMjMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgK1xcbiAyMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcXG4gMjM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNodW5rKSk7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGNodW5rO1xcbiAyMzc6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhX2xlbiArPSBjaHVuaztcXG4gMjM4OlxcdFxcdFxcdHNrYl9mcmFnX3NpemVfYWRkKGZyYWcsIGNodW5rKTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc2tiKTtcXG4gMjQxOlxcdFxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuIDI0MjpcXHRcXHRcXHRcXHRyZXR1cm4gc3o7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdFxcdC8qIFdlIG1heSBoYXZlIG92ZXItcmVhZCwgc3ogPT0gMCBpcyBndWFyYW50ZWVkIHVuZGVyLXJlYWQgKi9cXG4gMjQ1OlxcdFxcdFxcdGlmICh1bmxpa2VseShzeiBcXHUwMDI2XFx1MDAyNiBzeiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSkge1xcbiAyNDY6XFx0XFx0XFx0XFx0aW50IG92ZXIgPSBza2ItXFx1MDAzZWxlbiAtIHN6O1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uob3ZlciBcXHUwMDNlIGNodW5rKTtcXG4gMjQ5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuIC09IG92ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAwOjMyLjUwNjI4NDUwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQ5NDMyNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUHJvY2Vzc2luZyBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIHNpemUgb2YgaW5jb21pbmcgVExTIG1lc3NhZ2VzIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgVENQIHJlY2VpdmUgcXVldWUuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGB0bHNfc3RycF9yZWFkX2NvcHlgIGdldHMgY2FsbGVkLCBjb3BpZXMgZGF0YSBpbnRvIHBhZ2VzLCBhbmQgdGhlbiBjYWxscyBgdGxzX3J4X21zZ19zaXplYCBvbiB0aGlzIGNvcGllZCBkYXRhLiBUaGF0J3MgZmluZSDigJMgdGhlIHBhZ2VzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGFuZCBjb250aWd1b3VzIGJlY2F1c2UgYHNrYl9jb3B5X2JpdHNgIGRvZXMgdGhlIGNvcHkgcHJvcGVybHkuIFRoZSBsb2dpYyBnb2VzIGxpa2UgdGhpczogaWYgIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgZmFpbHMgKG1lYW5pbmcgc2ticyBpbiB0aGUgcXVldWUgYXJlIGRpc2NvbnRpbnVvdXMgb3IgaGF2ZSBkaWZmZXJpbmcgZGVjcnlwdGVkIHN0YXRlcyksIHdlIGZhbGwgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YC4gVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFnZXMgYW5kIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHJlYXNzZW1ibGUgdGhlIGRhdGEuIGB0Y3BfcmVhZF9zb2NrYCBpcyB0aGUgcmlnaHQgdG9vbDsgaXQgY29ycmVjdGx5IGhhbmRsZXMgYW55IFRDUCBpZGlvc3luY3Jhc2llcyBsaWtlIG91dC1vZi1vcmRlciBzZWdtZW50cyBvciBvdmVybGFwcy4gU28sIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCBnZXRzIHVzIHRoZSBwcm9wZXIsIHJlYXNzZW1ibGVkIFRDUCBzdHJlYW0uIFRoZW4sIGB0bHNfcnhfbXNnX3NpemVgIGNhbiByZWFkIHRoZSBjb3JyZWN0IFRMUyBoZWFkZXIgZnJvbSB0aGVzZSBwYWdlcy5cblxuTm93LCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZGlyZWN0bHkgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCBvbiBgc3RycC1cdTAwM2VhbmNob3JgLCB3aGljaCB3YXMgc2ltcGx5IGEgYGZyYWdfbGlzdGAgcG9pbnRpbmcgdG8gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGUgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIHRoYXQgYHNrYl9jb3B5X2JpdHNgIHdvdWxkIGJsaW5kbHkgY29weSBkYXRhIGZyb20gdGhlIHNrYnMgaW4gdGhhdCBsaXN0LCBpZ25vcmluZyBUQ1Agc2VxdWVuY2UgbnVtYmVycy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgaGFkIG92ZXJsYXBwaW5nLCBvdXQtb2Ytb3JkZXIsIG9yIGRpZmZlcmVudGx5IGRlY3J5cHRlZCBza2JzICh3aGljaCAqc2hvdWxkbid0KiBoYXBwZW4sIGJ1dCBtaWdodCB3aXRoIHVyZ2VudCBkYXRhIG9yIHNvbWUgZWRnZSBjYXNlKSBgc2tiX2NvcHlfYml0c2Agd291bGQgcHVsbCB0aGUgd3JvbmcgZGF0YS4gVGhlbiBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCBwYXJzZSB0aGlzIGNvcnJ1cHRlZCBkYXRhIGFzIGEgVExTIGhlYWRlciwgcG9zc2libHkgY2FsY3VsYXRpbmcgdGhlIG1lc3NhZ2Ugc2l6ZSBpbmNvcnJlY3RseSBhbmQgY29ycnVwdGluZyB0aGUgc3RyZWFtLiBUaGUgZml4IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBjaGVjazpcblxuYGBgY1xuK1x0XHRpZiAoaW5xIFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXG4rXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbitcdFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKVxuK1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuYGBgXG5cblRoaXMgKmVuc3VyZXMqIHRoZSBmaXJzdCBgVExTX0hFQURFUl9TSVpFYCBieXRlcyBhcmUgY29udGlndW91cywgYW5kIHRoYXQgdGhlaXIgZGVjcnlwdGVkIHN0YXRlIGlzIGNvbnNpc3RlbnQuICBJZiBub3QsIGl0IGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCB0byByZWFzc2VtYmxlIHRoZSBkYXRhIGJlZm9yZSBwYXJzaW5nLlxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIGZyb20gdGhlIGRhdGEgYnVmZmVycyBvZiB0aGUgc2ticywgd2hpY2ggY29udGFpbiBuZXR3b3JrIGRhdGE7IHRoZXNlIGJ1ZmZlcnMgYXJlICphbHdheXMqIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0IHJlYWRzIHRoZSB3cm9uZyBkYXRhIChkdWUgdG8gc2VxdWVuY2UgbnVtYmVyIGlzc3VlcyksIHRoZSBkYXRhICppdHNlbGYqIGlzIGluaXRpYWxpemVkLCBqdXN0IGluY29ycmVjdC4gIGB0bHNfcnhfbXNnX3NpemVgIGNhbGN1bGF0ZXMgYGRhdGFfbGVuYCB0aGVuIHNldHMgYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuID0gc3pgLiBBZnRlcndhcmRzLCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHZhbGlkYXRlcyB0aGUgY29udGlndW91c25lc3Mgb2YgdGhlIGRhdGEgdXAgdG8gYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYC4gSWYgdGhhdCBmYWlscywgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHdvdWxkIGRpc2NhcmQgdGhlIGJhZCBjYWxjdWxhdGVkIHNpemUuXG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBzdWNjZWVkcywgYnV0IGB0bHNfcnhfbXNnX3NpemVgIHNvbWVob3cgc3RpbGwgcmVhZHMgZ2FyYmFnZS4gSG93IGNvdWxkIHRoaXMgaGFwcGVuPyBJZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgICpzdWNjZWVkcyosIGl0IG1lYW5zIHRoZSBza2JzIHVwIHRvIHRoZSBjYWxjdWxhdGVkIGBzemAgYXJlIGNvbnRpZ3VvdXMuIFNpbmNlIGBzemAgaXMgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCBgVExTX0hFQURFUl9TSVpFYCwgdGhlIGZpcnN0IGhlYWRlciBieXRlcyB3ZXJlIGFsc28gY29udGlndW91cywgd2hpY2ggbWVhbnMgYHRsc19yeF9tc2dfc2l6ZWAgc2hvdWxkIGhhdmUgcmVhZCB0aGUgY29ycmVjdCBoZWFkZXIuIFNvLCB3aHkgdGhlIGFkZGVkIGNoZWNrICpiZWZvcmUqIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWA/XG5cbkFoYSEgIFdoYXQgYWJvdXQgYSBjcmFzaCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlmIGByZW1haW5pbmdgIGV4Y2VlZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHF1ZXVlZCBza2JzPyBMZXQncyBjaGVjazpcbmBgYGNcblx0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuXHRcdHNlcSArPSBza2ItXHUwMDNlbGVuO1xuXHRcdHJlbWFpbmluZyAtPSBza2ItXHUwMDNlbGVuO1xuXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuXG5cdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuYGBgXG5JZiBgcmVtYWluaW5nYCBpcyBncmVhdGVyLCB0aGUgbG9vcCAqbWlnaHQqIGRlcmVmZXJlbmNlIGEgTlVMTCBgc2tiYC4gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IFJlbWVtYmVyIHRoYXQgYHJlbWFpbmluZyA9IHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO2AsIHdoZXJlIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAgaXMganVzdCB0aGUgYHN6YFxuXG4iLCJJbnB1dFRva2VucyI6MzI3NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6NTkuMDAwNjE1NDg3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIwMDcxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5xID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE2LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MTc6XFx0aW5xID0gdGNwX2lucShzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUxOC1cXHRpZiAoaW5xIFxcdTAwM2MgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6NTkuMjgyNjI5MjE4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDc3NjA0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFJlY2VpdmUgUXVldWUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0Y3BfaW5xYCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0IGl0J3MgdGVsbGluZyBtZSBhYm91dCB0aGUgYW1vdW50IG9mIGRhdGEgcmVhZHkgdG8gYmUgcmVhZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQsIFwiV2FpdCwgYHRjcF9pbnFgIGdpdmVzIG1lIHRoZSBJTi1TRVFVRU5DRSBkYXRhP1wiIE15IGltbWVkaWF0ZSByZWFjdGlvbiB3YXMgYSBzbGlnaHQgd29ycnkgYWJvdXQgb3V0LW9mLW9yZGVyIFNLQnMgaW4gdGhlIHJlY2VpdmUgcXVldWUsIGJ1dCB0aGVuIGl0IGhpdHMgbWUuICBgdGNwX2lucWAgaXMgYWN0dWFsbHkgcHJvdmlkaW5nIGB0cC1cdTAwM2VyY3Zfbnh0IC0gdHAtXHUwMDNlY29waWVkX3NlcWAsIHdoaWNoICppcyogdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgYHNrX3JlY2VpdmVfcXVldWVgIHN0cmljdGx5IGNvbnRhaW5zIGluLXNlcXVlbmNlIFNLQnMuIFRoZSBvdXQtb2Ytb3JkZXIgb25lcyBhcmUgc2FmZWx5IHR1Y2tlZCBhd2F5IGluIHRoZSBgb3V0X29mX29yZGVyX3F1ZXVlYC4gIFNvLCAqYWx3YXlzKiBpbi1zZXF1ZW5jZS4gQnV0IHRoZW4sIEknbSBxdWVzdGlvbmluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGFuZCB3b25kZXJpbmcgd2h5IGl0J3MgZXZlbiBjb21wYXJpbmcgc2VxdWVuY2UgbnVtYmVycyAoYFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxYCkuIElzIGl0IGZvciB1cmdlbnQgZGF0YSBzY2VuYXJpb3M/IEVkZ2UgY2FzZXMgd2l0aCBvdmVybGFwcGluZyBTS0JzP1xuXG5BbmQgdGhlbiBJIHJlbWVtYmVyOiBvdmVybGFwcGluZyBTS0JzICpjYW4qIGV4aXN0IGluIHRoZSByZWNlaXZlIHF1ZXVlIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGNvbGxhcHNlZCB5ZXQuIFRoYXQncyBhIGdvb2QgZ290Y2hhISAgVGhpcyByYWlzZXMgYW5vdGhlciBjb25jZXJuOiBpZiBhbiBTS0IncyBgbGVuYCBpbmNsdWRlcyBvdmVybGFwcGluZyBkYXRhLCBpdHMgbGVuZ3RoIG1pZ2h0IGJlICpsYXJnZXIqIHRoYW4gdGhlIGFjdHVhbCBpbi1zZXF1ZW5jZSBkYXRhIGl0IHByb3ZpZGVzISAgSWYgc28sIHRoZSBzdW0gb2YgYHNrYi1cdTAwM2VsZW5gIGZvciBhbGwgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBtaWdodCBhY3R1YWxseSBleGNlZWQgd2hhdCBgdGNwX2lucWAgcmVwb3J0cyBhcyB0aGUgaW4tc2VxdWVuY2UgZGF0YSFcblxuSWYgdGhpcyBpcyB0cnVlLCB0aGVuIGByZW1haW5pbmdgICh3aGljaCBpcyBsaW1pdGVkIGJ5IGBvZmZzZXQgKyBpbnFgKSB3b3VsZCBiZSAqc21hbGxlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItXHUwMDNlbGVuYC4gIFNvLCB0aGUgYHNrYmAgd291bGRuJ3QgYmVjb21lIG51bGwsIGFuZCBpdCBhbGwgY2hlY2tzIG91dC5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBhbm90aGVyIHBvc3NpYmlsaXR5LiAgV2hhdCBpZiBhbiBTS0IgaXMgc29tZWhvdyAqc21hbGxlciogdGhhbiB0aGUgc2VxdWVuY2Ugc3BhY2UgaXQgY292ZXJzPyAobGlrZSwgaWYgaXQgaGFzIFwiaG9sZXNcIiBzb21laG93PyBObywgVENQIHNrYnMgZG9uJ3QgaGF2ZSBob2xlcy4pIFdoYXQgaWYgYGlucWAgd2VyZSBzb21laG93ICpsYXJnZXIqIHRoYW4gdGhlIHN1bSBvZiBgc2tiLVx1MDAzZWxlbmAgaW4gYHNrX3JlY2VpdmVfcXVldWVgPyBIb3cgY291bGQgdGhhdCBoYXBwZW4/IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGBpbnFgIGlz4oCmIGl04oCZcyBgdHAtXHUwMDNlcmN2X254dCAtIHRwLVx1MDAzZWNvcGllZF9zZXFgLiBBbmQgaWYgdGhlcmUncyBhIEZJTiwgYGlucWAgbWlnaHQgaW5jbHVkZSBpdCwgYnV0IHRoZSBkYXRhIGNhbGN1bGF0aW9uIHdvdWxkbid0LiBIYW5nIG9uLCBkb2VzIGB0Y3BfaW5xYCBldmVuIGluY2x1ZGUgdGhlIEZJTj8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgdGNwX2lucWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAxOjEwLjc2MDIzNTYwNVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NzEyNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9pbnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9NjM5PWludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy02NTAtXFx0XFx0c2xvdyA9IGxvY2tfc29ja19mYXN0KHNrKTtcXG5uZXQvaXB2NC90Y3AuYzo2NTE6XFx0XFx0YW5zdyA9IHRjcF9pbnEoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTY1Mi1cXHRcXHR1bmxvY2tfc29ja19mYXN0KHNrLCBzbG93KTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE4MjM9aW50IHRjcF9wZWVrX2xlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9pcHY0L3RjcC5jLTE4MjQte1xcbm5ldC9pcHY0L3RjcC5jOjE4MjU6XFx0cmV0dXJuIHRjcF9pbnEoc29jay1cXHUwMDNlc2spO1xcbm5ldC9pcHY0L3RjcC5jLTE4MjYtfVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5NT1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyMDktXFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcXG5uZXQvaXB2NC90Y3AuYzoyMjEwOlxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy0yMjExLVxcdGJvb2wgbW1hcF9sb2NrZWQ7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMzQ2PXZvaWQgdGNwX3JlY3ZfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjQxMi1cXG5uZXQvaXB2NC90Y3AuYzoyNDEzOnN0YXRpYyBpbnQgdGNwX2lucV9oaW50KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0yNDE0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI5MzA9aW50IHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTUwLVxcdFxcdGlmICgoY21zZ19mbGFncyBcXHUwMDI2IFRDUF9DTVNHX0lOUSkgfCBtc2ctXFx1MDAzZW1zZ19nZXRfaW5xKSB7XFxubmV0L2lwdjQvdGNwLmM6Mjk1MTpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19pbnEgPSB0Y3BfaW5xX2hpbnQoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTI5NTItXFx0XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBUQ1BfQ01TR19JTlEpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3OTgtemVyb2NvcHlfcmN2X2lucTpcXG5uZXQvaXB2NC90Y3AuYzo0Nzk5OlxcdFxcdHpjLmlucSA9IHRjcF9pbnFfaGludChzayk7XFxubmV0L2lwdjQvdGNwLmMtNDgwMC16ZXJvY29weV9yY3Zfb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMToxMC45ODU5NTIyOTJaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMTg0NzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgUXVldWUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBUQ1AgcmVjZWl2ZSBxdWV1ZSBpcyBtYW5hZ2VkIGludGVybmFsbHksIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWZpbml0aW9uIG9mIGB0Y3BfaW5xYC4gSSBrbm93IGl0J3MgYSBrZXkgZWxlbWVudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpbmNvbWluZyBkYXRhIGlzIGhhbmRsZWQsIGFuZCBgaW5jbHVkZS9uZXQvdGNwLmhgIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgd2hhdCBmaWVsZHMgaXQgY29udGFpbnMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc2tfcmVjZWl2ZV9xdWV1ZWAuIFRoYXQnbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIGRlZXBlciBkaXZlcywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25nZXN0aW9uIGNvbnRyb2wgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxhdGVyIG9uLiBObyBwb2ludCBpbiBidWlsZGluZyBhbnkgYXNzdW1wdGlvbnMgYmVmb3JlIEkgcmVmcmVzaCB0aGUgZm91bmRhdGlvbiBrbm93bGVkZ2UuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMToxNS4xODc4MDI1MjZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjgwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9pbnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MjczNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90Y3BfcHVyZV9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI3NDAtXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjc0MTpzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90Y3AuaC0yNzQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDE6MTUuMjc3MDg4NzI3WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTUyNDc5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBzcGVha2luZyBhcyBpZiBpdCB3ZXJlIG15IG93biwgYW5kIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHRjcF9pbnFgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gZGlnIGludG8gYHRjcF9pbnFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmc7IGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBob3cgaXQgYWZmZWN0cyB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suIElzIHRoaXMgYSBwYWNrZXQgcmVjZWl2ZSBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgc29ydCBvZiBpbnRlcm5hbCBidWZmZXI/IElzIGl0IHVzZWQgZm9yIGNvbmdlc3Rpb24gY29udHJvbCwgZmxvdyBjb250cm9sLCBvciBzaW1wbHkgYSBkZWJ1Z2dpbmcgbWV0cmljPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgZXhhY3RseSBhbSBJIGxvb2tpbmcgZm9yPyBJJ20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIG1hbmlwdWxhdGluZy4gSSdtIGdvaW5nIHRvIHdhdGNoIG91dCBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIGBza19idWZmYCBvciByZWxhdGVkIG5ldHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFzIHRob3NlIGFyZSBnb2luZyB0byBiZSBrZXkgdG8gdGhlIGZ1bmN0aW9uLiBBbnkgb2J2aW91cyBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gVGhhdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gbm90ZSB3aXRoIG5ldHdvcmtpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGlzIGlzIHdlbGwtY29tbWVudGVkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMTozMC40Mjk1NzEzMTJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NDE6XFx0c3RhdGljIGlubGluZSBpbnQgdGNwX2lucShzdHJ1Y3Qgc29jayAqc2spXFxuMjc0MjpcXHR7XFxuMjc0MzpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4yNzQ0OlxcdFxcdGludCBhbnN3O1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX1NZTl9TRU5UIHwgVENQRl9TWU5fUkVDVikpIHtcXG4yNzQ3OlxcdFxcdFxcdGFuc3cgPSAwO1xcbjI3NDg6XFx0XFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVVJHSU5MSU5FKSB8fFxcbjI3NDk6XFx0XFx0XFx0ICAgIXRwLVxcdTAwM2V1cmdfZGF0YSB8fFxcbjI3NTA6XFx0XFx0XFx0ICAgYmVmb3JlKHRwLVxcdTAwM2V1cmdfc2VxLCB0cC1cXHUwMDNlY29waWVkX3NlcSkgfHxcXG4yNzUxOlxcdFxcdFxcdCAgICFiZWZvcmUodHAtXFx1MDAzZXVyZ19zZXEsIHRwLVxcdTAwM2VyY3Zfbnh0KSkge1xcbjI3NTI6XFx0XFxuMjc1MzpcXHRcXHRcXHRhbnN3ID0gdHAtXFx1MDAzZXJjdl9ueHQgLSB0cC1cXHUwMDNlY29waWVkX3NlcTtcXG4yNzU0OlxcdFxcbjI3NTU6XFx0XFx0XFx0LyogU3VidHJhY3QgMSwgaWYgRklOIHdhcyByZWNlaXZlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMTozMC40Mjk3ODA5MTJaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MzkwODg3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVExTIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlIChgaW5xYCkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGFkanVzdHMgYGlucWAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBGSU4gcGFja2V0IHdhcyByZWNlaXZlZCwgb3IgaWYgd2UncmUgZGVhbGluZyB3aXRoIHVyZ2VudCBkYXRhLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGJ5dGVzICphdmFpbGFibGUqIGluIHRoZSBxdWV1ZSBhbmQgdGhlIGJ5dGVzICpjbGFpbWVkKiB0byBiZSBhdmFpbGFibGUuICBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYHNrYmBzLCBhbmQgaGFzIGEgbG9vcCB0aGF0IHRlcm1pbmF0ZXMgd2hlbiBgc2tiLVx1MDAzZWxlbmAgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHJlYWQgKGByZW1haW5pbmdgKS5cblxuSSBpbml0aWFsbHkgd29ycmllZCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIGByZW1haW5pbmdgIGNvdWxkIHNvbWVob3cgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBkYXRhIGluIHRoZSBxdWV1ZSBhbmQgYHNrYmAgYmVjb21lcyBgTlVMTGAsIGJ1dCBJIGNhcmVmdWxseSBhbmFseXplZCB0aGUgaW52YXJpYW50cyBhbmQgY29uc3RyYWludHMuIFRoZSBjb2RlICpzaG91bGRuJ3QqIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIgd2hlbiByZWFkaW5nIGZyb20gdGhlIHJlY2VpdmUgcXVldWUgYmVjYXVzZSBgcmVtYWluaW5nYCBpcyBjb3JyZWN0bHkgY2FsY3VsYXRlZCBiYXNlZCBvbiBgaW5xYCBhbmQgdGhlIGxvb3AgY29uZGl0aW9uIHByZXZlbnRzIHRoaXMuIFRoZSB0b3RhbCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlIG11c3QgKmFsd2F5cyogYmUgXHUwMDNlPSBgcmVtYWluaW5nYCwgYW5kIHNvIHRoZSBsb29wIG11c3QgYWx3YXlzIHRlcm1pbmF0ZSBiZWZvcmUgc2tiIGJlY29tZXMgYE5VTExgLlxuXG5UaGVuIG15IGZvY3VzIHNoaWZ0ZWQgdG8gd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgaXMuIEkgdGhlbiBsb29rZWQgYXQgdGhlIG5ldyBhZGRpdGlvbiB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBiYW5kLWFpZCBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYWRkZWQuXG5cbkl0IGJlY2FtZSBjbGVhciB0aGF0IHRoZSByZWFsIGlzc3VlIGlzIG5vdCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYnV0IHJhdGhlciAqaW5jb3JyZWN0KiBoYW5kbGluZyBvZiBvdmVybGFwcGluZyBvciBmcmFnbWVudGVkIGRhdGEgaW4gdGhlIHJlY2VpdmUgcXVldWUsIGFuZCB0aGUgYWRkaXRpb24gb2YgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBiZWZvcmUgYHRsc19yeF9tc2dfc2l6ZWAgaXMgYSByZXN1bHQgb2YgdGhhdC4gYHRsc19yeF9tc2dfc2l6ZWAgY2FuIHJldHVybiBhbiBlcnJvciAoYC1FQkFETVNHYCwgYC1FTVNHU0laRWAsIG9yIGAtRUlOVkFMYCkgaWYgdGhlIFRMUyBoZWFkZXIgaXMgY29ycnVwdGVkIGR1ZSB0byBkdXBsaWNhdGUgb3IgbWl4ZWQgZGVjcnlwdGVkIGRhdGEuICBUaGlzIGluIHR1cm4gd291bGQgYWJvcnQgYSBwb3RlbnRpYWxseSB2YWxpZCBUTFMgY29ubmVjdGlvbiBkdWUgdG8gaG93IHRoZSBzaXplIGlzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQuIENhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBiZWZvcmVoYW5kIGhlbHBzIHRvIGVuc3VyZSB0aGF0IGB0bHNfcnhfbXNnX3NpemVgIGdldHMgdmFsaWQgZGF0YSwgb3Igd2lsbCBmYWxsIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAuIFRoaXMgdGhlbiBsZXRzIFRDUCBoYW5kbGUgdGhlIHJlYXNzZW1ibHksIGFuZCB0aGVuIHJlYWQgdGhlIHZhbGlkIGhlYWRlci5cblxuSSBydWxlZCBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBjb2RlIG9wZXJhdGVzIG9uIG5ldHdvcmsgYnVmZmVycywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nLCBhcmUgYXNzdW1lZCB0byBiZSBpbml0aWFsaXplZC4gVGhlIGJ1ZmZlcnMgYXJlIHNvdXJjZWQgZnJvbSB0aGUgbmV0d29yaywgYW5kIHRoZSBkYXRhIGluIHRoZSBidWZmZXJzIGFyZSBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJIHRoZW4gcnVsZWQgb3V0IGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBkdWUgdG8gdGhlIGNoZWNrcyBpbiB0aGUgdmFyaW91cyBmdW5jdGlvbnMgaW52b2x2ZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgZGlyZWN0bHkgb24gYSByYXcgVENQIHJlY2VpdmUgcXVldWUgbWlnaHQgbGVhZCB0byBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0cyB3aGVuIFRMUyBkYXRhIGlzIGZyYWdtZW50ZWQgb3IgcmV0cmFuc21pdHRlZCwgb3IgaXMgdGhlIHJlc3VsdCBvZiBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0aW9uLiBUaGUgZml4IGludm9sdmVzIGNoZWNraW5nIHRoZSBxdWV1ZSBmb3Igb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIGNvbnNpc3RlbnQgZGVjcnlwdGlvbiBzdGF0dXMgKmJlZm9yZSogdHJ5aW5nIHRvIHBhcnNlIHRoZSBUTFMgaGVhZGVyIHNpemUuICBUaGlzIHBhdGNoIHByZXZlbnRzIHRoZSBtaXNjYWxjdWxhdGlvbiBvZiB0aGUgc2l6ZSBhbmQgdGhlIHBvdGVudGlhbCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYSB2YWxpZCBjb25uZWN0aW9uLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBmaXggdG8gY29ycmVjdGx5IGhhbmRsZSBUTFMgZGF0YSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHJldHJhbnNtaXNzaW9ucywgb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIG1peGVkIGRlY3J5cHRpb24gc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODYxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMjowNS44Njg4NzE4MjJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzk2NDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXUklURV9PTkNFXFxcXChzdHJwLVxcdTAwM2Vtc2dfcmVhZHksIDFcXFxcKTtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz0zNDI9c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW4ocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzY5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzozNzA6XFx0XFx0V1JJVEVfT05DRShzdHJwLVxcdTAwM2Vtc2dfcmVhZHksIDEpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0zNzEtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NDYtXFxubmV0L3Rscy90bHNfc3RycC5jOjU0NzpcXHRXUklURV9PTkNFKHN0cnAtXFx1MDAzZW1zZ19yZWFkeSwgMSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTU0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDI6MDYuMTU2ODQ0MDMyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDk4MDI2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGxzX3N0cnBfcmVhZF9zb2NrYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIFRMUyBzb2NrZXQgcmVhZGluZyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGB0bHNfc3RycF9yZWFkX3NvY2tgLCB3b3Jrcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDU0Ny4gSSdsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGVyZSwgc2VlIGhvdyBpdCBoYW5kbGVzIGVycm9ycywgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBvciBwZXJoYXBzIGZvciBzZWN1cml0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgd2FycmFudGVkLiBMZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMjoxMC43MDY2NTA5N1oiLCJTZXEiOjc2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXG4gNTIxOlxcdFxcdGlmICh1bmxpa2VseShzdHJwLVxcdTAwM2Vjb3B5X21vZGUpKVxcbiA1MjI6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRpZiAoaW5xIFxcdTAwM2Mgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKVxcbiA1MjU6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpO1xcbiA1Mjg6XFx0XFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pIHtcXG4gNTI5OlxcdFxcdFxcdGlmIChpbnEgXFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXFxuIDUzMDpcXHRcXHRcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xcbiA1MzE6XFx0XFx0XFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKVxcbiA1MzI6XFx0XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuIDUzMzpcXHRcXG4gNTM0OlxcdFxcdFxcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXFx1MDAzZWFuY2hvcik7XFxuIDUzNTpcXHRcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbiA1MzY6XFx0XFx0XFx0XFx0cmV0dXJuIHN6O1xcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRcXHRzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gPSBzejtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0XFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gfHwgaW5xIFxcdTAwM2Mgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKVxcbiA1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gNTQyOlxcdFxcdH1cXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pKVxcbiA1NDU6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0cmV0dXJuIDA7XFxuIDU1MDpcXHR9XFxuIDU1MTpcXHRcXG4gNTUyOlxcdC8qIFBhcnNlIHF1ZXVlZCBkYXRhLiBXaGVuIEBhbm5vdW5jZSBpcyB0cnVlIGFuZCBwYXJzaW5nIHByb2R1Y2VzIGFcXG4gNTUzOlxcdCAqIG5ld2x5LXJlYWR5IHJlY29yZCwgZmlyZSB0aGUgY29uc3VtZXIgbm90aWZpY2F0aW9uLiBDYWxsZXJzIHRoYXRcXG4gNTU0OlxcdCAqIG5lZWQgdG8gbm90aWZ5IGEgd2FpdGVyIGFib3V0IGEgcmVjb3JkIHBhcnNlZCBieSBhbm90aGVyIHBhdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDI6MTAuNzA2ODEyODdaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyMTY0OTY3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFRMUyBDb2RlIFBhdGNoOiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBsb2dpYyBmbG93IHdhczogbG9hZCB0aGUgYW5jaG9yLCBmaWd1cmUgb3V0IHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBUTFMgbWVzc2FnZSwgYW5kICp0aGVuKiBjaGVjayBpZiB0aGUgcXVldWUncyBzdGF0ZSBpcyB2YWxpZC4gSSBjYW4gc2VlIHRoZSBwcm9ibGVtIGltbWVkaWF0ZWx5OiBpZiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiwgYHRsc19yeF9tc2dfc2l6ZWAsIGlzIHBlcmZvcm1lZCAqYmVmb3JlKiBjaGVja2luZyB0aGUgcXVldWUncyBpbnRlZ3JpdHksIGl0J3MgcG9zc2libGUgdG8gcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBhIG1peCBvZiBkZWNyeXB0ZWQgYW5kIGVuY3J5cHRlZCBkYXRhLiBUaGlzIGNhbiBlYXNpbHkgbGVhZCB0byBgLUVCQURNU0dgIG9yIGAtRU1TR1NJWkVgIGVycm9ycywgY2F1c2luZyBjb25uZWN0aW9uIGFib3J0cy5cblxuSSBzZWUgdGhlIGZpeCBpcyB0byBhZGQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgcXVldWUgaXMgaW4gYSBiYWQgc3RhdGUsIHdlIHNraXAgdGhlIHNpemUgY2FsY3VsYXRpb24gYWx0b2dldGhlciBhbmQgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHdoaWNoIHRoZW4gcmVhc3NlbWJsZXMgdGhlIFRDUCBzdHJlYW0sIGRpc2NhcmRzIG92ZXJsYXBwaW5nIHNlZ21lbnRzLCAqdGhlbiogcGFyc2VzIHRoZSBoZWFkZXIgY29ycmVjdGx5LiBUaGUgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydHMgYXJlIGF2b2lkZWQgdGhpcyB3YXkuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyB0cmFjZSBpdCB0aHJvdWdoOiBgdGxzX3J4X21zZ19zaXplYCByZWFkcyBUQ1AgZGF0YSwgd2hpY2ggaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGRhdGEsIHNvIG5vIGlzc3VlcyB0aGVyZS4gVGhlIGBjYmAgZmllbGQgb2YgYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNrYl9jb3B5X2hlYWRlcmAsIG5vIHdvcnJpZXMgdGhlcmUuIEFuZCB0aGUgYHNrYi1cdTAwM2VkZWNyeXB0ZWRgIGZpZWxkIGlzIGFsc28gaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBieSBgdGxzX3N0cnBfcmVhZF9jb3B5YCBhcmUgZmlsbGVkIGJ5IGB0Y3BfcmVhZF9zb2NrYCwgYW5kIHNwZWNpZmljYWxseSwgYHNrYl9jb3B5X2JpdHNgLCBlbnN1cmVzIHRoYXQgdGhlIG9ubHkgZGF0YSBleHBvc2VkIGluIHRoZSBza2IgaXMgaW5pdGlhbGl6ZWQuIEV2ZW4gaWYgYHRjcF9yZWFkX3NvY2tgIGRvZXNuJ3QgZmlsbCB0aGUgd2hvbGUgcGFnZSwgYHNrYl9mcmFnX3NpemVfYWRkYCBvbmx5IHVwZGF0ZXMgdGhlIGxlbmd0aCB3aXRoIHRoZSB2YWxpZCwgY29waWVkIGRhdGEuXG5cbkhvbGQgb24sIGNvdWxkIGBza2JfY29weV9iaXRzYCByZWFkIHBhc3QgdGhlIGVuZCBvZiBhbiBza2IgYW5kIHRodXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgaGFzIGJ1aWx0LWluIGJvdW5kcyBjaGVja2luZzsgaWYgdGhlIHJlcXVlc3RlZCBkYXRhIGxlbmd0aCBpcyB1bmF2YWlsYWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9tc2dfc2l6ZWAgZG9lcyBpdHMgb3duIGxlbmd0aCBjaGVja3Mgd2l0aCBgaWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplIFx1MDAzZSBza2ItXHUwMDNlbGVuKSByZXR1cm4gMDtgIGJlZm9yZSBjYWxsaW5nIGBza2JfY29weV9iaXRzYC4gU28sIG5vIG1lbW9yeSBpcyBiZWluZyByZWFkIHBhc3QgdGhlIGVuZC5cblxuQW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgLSBjb3VsZCBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2hlY2sgaW52b2x2ZXMgYHJlbWFpbmluZ2AgdmFsdWVzIGJ1dCwgYXMgSSBjYW4gc2VlIGZyb20gdHJhY2luZywgdGhlIGByZW1haW5pbmdgIHZhbHVlcyBhcmUgYWx3YXlzIGNvcnJlY3RseSBjYWxjdWxhdGVkLiBBbmQsIGV2ZW4gaWYgYSBwcm9ibGVtYXRpYyB2YWx1ZSBvZiByZW1haW5pbmcgdmFsdWUgZXhpc3RlZCwgdGhlIGNvZGUgaXMgc3VjaCB0aGF0IGFueSByZWFkcyBpbiB0aGlzIHNpdHVhdGlvbiB3b3VsZCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBlcnJvciBhbmQsIHRoZXJlZm9yZSwgZ29vZC5cblxuU28sIHRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgZml4aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBJdCdzIHN0cmljdGx5IGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhhbmRsaW5nIGZyYWdtZW50ZWQgb3IgbWl4ZWQgZGVjcnlwdGlvbiBzdGF0ZXMgaW4gdGhlIFRDUCBzdHJlYW0uIFRoZSBidWcgaXMgdGhhdCBgdGxzX3J4X21zZ19zaXplYCB3YXMgY2FsbGVkIGJlZm9yZSBjaGVja2luZyB0aGUgcXVldWUgc3RhdGUuIFRoZSBmaXggY29ycmVjdHMgdGhpcy5cblxuT25lIG1vcmUgcXVpY2sgY2hlY2s6IHdoYXQgYWJvdXQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzPyBMZXQncyBzYXkgYHRsc19yeF9tc2dfc2l6ZWAgcmVwb3J0cyBhIGh1Z2Ugc2l6ZSBhbmQgYHRsc19zdHJwX3JlYWRfY29weWAgdHJpZXMgdG8gYWxsb2NhdGUgYSBodWdlIGFtb3VudCBvZiBtZW1vcnk/IFRoZSBtYXhpbXVtIHNpemUgYHN6YCByZXR1cm5lZCBieSBgdGxzX3J4X21zZ19zaXplYCBpcyBib3VuZCBieSBgVExTX01BWF9QQVlMT0FEX1NJWkUgKyBjaXBoZXJfb3ZlcmhlYWQgKyBwcm90LVx1MDAzZXRhaWxfc2l6ZSArIFRMU19IRUFERVJfU0laRWAsIHdoaWNoIGlzIGFyb3VuZCAxNktCLiBUaGF0IG1lYW5zIGEgbWF4aW11bSBvZiBhYm91dCA1IHBhZ2VzLiBUaGF0J3Mgbm90IGEgbG90LCBhbmQgdGhlcmUncyBhIGxpbWl0LlxuXG5XaGF0IGFib3V0IGB0bHNfc3RycF9yZWFkX2NvcHlgIGFsbG9jYXRpbmcgcGFnZXMsIGFuZCB0aGVuIG5vdCBpbml0aWFsaXppbmcgdGhlbT8gSXQgYWxsb2NhdGVzIHBhZ2VzIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIGJ1dCB0aGVuIGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAuIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgdXNlcyBgdGNwX3JlYWRfc29ja2Agd2hpY2ggY2FsbHMgYHRsc19zdHJwX2NvcHlpbmAsIGFuZCB0aGVuIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2AsIHdoaWNoIGNhbGxzIGBza2JfY29weV9iaXRzYC4gQ3J1Y2lhbGx5LCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2tiIChgc2tiLVx1MDAzZWxlbmApIGFuZCB0aGUgZnJhZ21lbnQgc2l6ZSAoYHNrYl9mcmFnX3NpemVgKSB3aXRoIHRoZSBhbW91bnQgb2YgZGF0YSAqYWN0dWFsbHkqIGNvcGllZC4gVGhlIHNrYidzIGRhdGEgbGVuZ3RoICpvbmx5KiByZXByZXNlbnRzIHRoZSBpbml0aWFsaXplZCBkYXRhISBBbnkgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBwYWdlIGlzIG5vdCBleHBvc2VkIHRvIHRoZSBuZXR3b3JrIGNvZGUuXG5cbioqSW4gY29uY2x1c2lvbjogdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNhdXNlc1xuXG4iLCJJbnB1dFRva2VucyI6NDM0MzYsIk91dHB1dFRva2VucyI6MzAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAyOjM2LjkyMzMxMjk1N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowx26vb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:36:54 +0000 UTC FinishedAt: 2026-08-13 14:02:38 +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": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "e0deb464-9865-4255-afb7-075e1eb09752" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_strp_check_rcv", "tls_sw_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cblxuQnkgYWRkaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCBiZWZvcmUgcGFyc2luZyB0aGUgaGVhZGVyLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGRldGVjdHMgdGhlc2UgZWRnZSBjYXNlcyBhbmQgZmFsbHMgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YCwgd2hpY2ggdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcHJvcGVybHkgcmVhc3NlbWJsZSB0aGUgVENQIHN0cmVhbSBpbnRvIGEgbGluZWFyIGJ1ZmZlciBiZWZvcmUgcGFyc2luZy5cblxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc3RyZWFtIHBhcnNlciByZWNlaXZlIHBhdGggKGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgKSB0byBjb3JyZWN0bHkgY2hlY2sgdGhlIHF1ZXVlIGxlbmd0aCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVExTIHJlY2VpdmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRMUyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuY1xuaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3RycC5jXG5AQCAtNDMwLDkgJiM0Mzs0MzAsMTAgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuJiM0MztzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGxlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbGVuID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICYjNDM7IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgJiM0MzsgbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiO1xuIFx0dTMyIHNlcTtcbiBcbkBAIC00NDMsOSAmIzQzOzQ0NCw5IEBAIHN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuIFx0LyogTWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcbiBcdCAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLlxuIFx0ICovXG4tXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuKSB7XG4mIzQzO1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuIFx0XHRzZXEgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4tXHRcdGxlbiAtPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0cmVtYWluaW5nIC09IHNrYi1cdTAwM2VsZW47XG4gXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuIFxuIFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAhPSBzZXEpXG5AQCAtNTI1LDYgJiM0Mzs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXG4gXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4mIzQzO1x0XHRpZiAoaW5xIFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXG4mIzQzO1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4mIzQzO1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuJiM0MztcbiBcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xuIFx0XHRpZiAoc3ogXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHN6O1xuQEAgLTUzNSw3ICYjNDM7NTQxLDcgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbiBcdH1cbiBcbi1cdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCkpXG4mIzQzO1x0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbikpXG4gXHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuIFxuIFx0V1JJVEVfT05DRShzdHJwLVx1MDAzZW1zZ19yZWFkeSwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzMGQ2OGU1ZWZiNWY4OTIwNTJjMTEyZDA3YmQxYTY0MDEwZDI1MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuYwppbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3RycC5jCkBAIC00MzAsOSAmIzQzOzQzMCwxMCBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQomIzQzO3N0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc3RycC0mZ3Q7c3RtLm9mZnNldCAmIzQzOyBzdHJwLSZndDtzdG0uZnVsbF9sZW47CiYjNDM7CXVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLSZndDtzdG0ub2Zmc2V0ICYjNDM7IGxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7CiAJdTMyIHNlcTsKIApAQCAtNDQzLDkgJiM0Mzs0NDQsOSBAQCBzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAkvKiBNYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gZHVwbGljYXRlIGRhdGEgaW4gdGhlIHF1ZXVlLAogCSAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLgogCSAqLwotCXdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IGxlbikgewomIzQzOwl3aGlsZSAoc2tiLSZndDtsZW4gJmx0OyByZW1haW5pbmcpIHsKIAkJc2VxICYjNDM7PSBza2ItJmd0O2xlbjsKLQkJbGVuIC09IHNrYi0mZ3Q7bGVuOwomIzQzOwkJcmVtYWluaW5nIC09IHNrYi0mZ3Q7bGVuOwogCQlza2IgPSBza2ItJmd0O25leHQ7CiAKIAkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxICE9IHNlcSkKQEAgLTUyNSw2ICYjNDM7NTI2LDExIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQogCiAJdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpOwogCWlmICghc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuKSB7CiYjNDM7CQlpZiAoaW5xICZsdDsgVExTX0hFQURFUl9TSVpFKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7CiYjNDM7CQlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpCiYjNDM7CQkJcmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7CiYjNDM7CiAJCXN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtJmd0O2FuY2hvcik7CiAJCWlmIChzeiAmbHQ7IDApCiAJCQlyZXR1cm4gc3o7CkBAIC01MzUsNyAmIzQzOzU0MSw3IEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKQogCQkJcmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTsKIAl9CiAKLQlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnApKQomIzQzOwlpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtJmd0O3N0bS5mdWxsX2xlbikpCiAJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwogCiAJV1JJVEVfT05DRShzdHJwLSZndDttc2dfcmVhZHksIDEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3Rscy90bHNfc3RycC5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBzb21lIHRoaW5ncyBhcm91bmQgdGhlIHN0cmVhbSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIGBzdHJwLSZndDtzdG0uZnVsbF9sZW5gLCB3ZSYjMzk7cmUgbm93IHBhc3NpbmcgaW4gYSBgbGVuYCBhcmd1bWVudCBkaXJlY3RseS4gVGhhdOKAmXMgYSBnb29kIG1vdmUsIG1ha2VzIHRoZSBmdW5jdGlvbiBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IGF2b2lkcyByZWR1bmRhbnQgY2FsY3VsYXRpb25zIGlmIGBmdWxsX2xlbmAgaXNuJiMzOTt0IGFsd2F5cyBjdXJyZW50LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBhZGRpdGlvbiBpbiBgdGxzX3N0cnBfcmVhZF9zb2NrYC4gV2XigJlyZSBwcmVlbXB0aXZlbHkgY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgICpiZWZvcmUqIGhpdHRpbmcgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpYC4gVGhpcyBpcyBrZXkuIEl0IGltcGxpZXMgd2UmIzM5O3JlIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICpiZWZvcmUqIHdlIGF0dGVtcHQgdG8gcGFyc2UgYW55IGhlYWRlcnMuIFRoYXQmIzM5O3MgYSBzb2xpZCBkZWZlbnNlLWluLWRlcHRoIGFwcHJvYWNoLiBXZSYjMzk7cmUgbG9va2luZyB0byBhdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHJlYWRzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBhIGJpdCBkZWVwZXIgbm93IGFuZCBzZWUgdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIGNoZWNrIGlzIHVzaW5nIGBUTFNfSEVBREVSX1NJWkVgIGhlcmUsIHdoaWNoIHN1Z2dlc3RzIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSBzaXplIG9mIHRoZSBUTFMgaGVhZGVyIGZpcnN0LgoKVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgVExTX0hFQURFUl9TSVpFYCBhY3R1YWxseSByZXByZXNlbnRzIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdXIgbWVzc2FnZSBwYXJzaW5nIHN0cmF0ZWd5LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgd2UgYXJlIGNhbGN1bGF0aW5nIGFuZCB2ZXJpZnlpbmcgdGhlIGFjdHVhbCBpbmNvbWluZyBtZXNzYWdlIHNpemUgYWZ0ZXIgdGhpcyBpbml0aWFsIGNoZWNrLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSB1c2Ugb2YgdGhlIGBhbmNob3JgLiBJIGFtIGFsc28ga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgZ2l2ZW4gdGhpcyBwcmUtZW1wdGl2ZSB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX3JlYWRfc29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MTItLyogQ2FsbGVkIHdpdGggbG9jayBoZWxkIG9uIGxvd2VyIHNvY2tldCAqL1xubmV0L3Rscy90bHNfc3RycC5jOjUxMzpzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy01MTQte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU2MS1cbm5ldC90bHMvdGxzX3N0cnAuYzo1NjI6XHRpZiAodGxzX3N0cnBfcmVhZF9zb2NrKHN0cnApID09IC1FTk9NRU0pXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTYzLVx0XHRxdWV1ZV93b3JrKHRsc19zdHJwX3dxLCBcdTAwMjZzdHJwLVx1MDAzZXdvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgcHJvdG9jb2xzOgoKKipUcmFjaW5nIGEgRGF0YSBGbG93IGluIHRoZSBUTFMgU3RhY2sqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlYWRzIGRhdGEgZnJvbSB0aGUgc29ja2V0LCBhbmQgYHRsc19zdHJwX2NoZWNrX3JjdmAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBgdGxzX3N0cnBfY2hlY2tfcmN2YCBpcyBnZXR0aW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGB0bHNfc3RycF9jaGVja19yY3ZgLiBXaGVyZSYjMzk7cyBpdHMgY2FsbHNpdGU/IFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgVExTIGltcGxlbWVudGF0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgd2lsbCBwcm92aWRlIHRoZSB2aXRhbCBjb250ZXh0IHRvIG15IGFuYWx5c2lzLiBUaW1lIHRvIGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk0PXZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmgtMTk3LXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcdFx0dGxzX3N0cnBfY2hlY2tfcmN2KFx1MDAyNnJ4X2N0eC1cdTAwM2VzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01ODItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xubmV0L3Rscy90bHNfc3RycC5jLTU4NC19XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVx0bG9ja19zb2NrKHN0cnAtXHUwMDNlc2spO1xubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01OTMtXHRyZWxlYXNlX3NvY2soc3RycC1cdTAwM2Vzayk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxubmV0L3Rscy90bHNfc3RycC5jLTU5OC0gKiByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrLCBvciBxdWV1ZWQgZGF0YSB3aWxsIHN0YWxsIHVudGlsIHRoZVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVx0XHRcdCAqL1xubmV0L3Rscy90bHNfc3cuYzoxMTI1Olx0XHRcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xMTI2LVx0XHRcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTYyNi1cdHRsc19zdHJwX21zZ19jb25zdW1lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBUTFMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhIHBhdGNoIG1vZGlmeWluZyB0aGUgY29yZSBUTFMgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC90bHMvYCBkaXJlY3Rvcnkg4oCTIHRoZSBoZWFydCBvZiB0aGUgVExTIGltcGxlbWVudGF0aW9uIGFjY2Vzc2libGUgdmlhIFRMUyBzb2NrZXRzLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBmdW5jdGlvbnMgdGFyZ2V0ZWQ6IGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdGxzX3J4X21zZ19zaXplYCBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgcmVjZWl2ZSBwYXRoLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoaXMgYXJlYSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGludGVuc2l2ZSBmdXp6aW5nLiBJIG5lZWQgdG8gZ2V0IHRoaXMgaW50byBteSBmdXp6aW5nIHBpcGVsaW5lIEFTQVAuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBUTFMgdG8gZW5zdXJlIEkmIzM5O20gZnV6emluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byB0YXJnZXQgdGhpcyBtb2RpZmljYXRpb24gY29tcHJlaGVuc2l2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFNjb3BlKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBUTFNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhbmQgZnJhbmtseSwgbXkgc3RhbmRhcmQgcHJvY2VkdXJlLCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggc3dlZXAgb2YgdGhlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYFRMU2AgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZS4gQXJlIHRoZXJlIGFueSBsZWdhY3kgY29uZmlncyBsdXJraW5nIGFyb3VuZD8gTWF5YmUgc29tZSBoaWRkZW4gb3ZlcnJpZGVzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIGV2ZW4gZGlmZmVyZW50IGNvbXBvbmVudHMgdGhhdCAqc2hvdWxkKiBiZSBhbGlnbmVkIGJ1dCBhcmVuJiMzOTt0PyBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoaXMgYFRMU2Agc2V0dGluZyBoYXMgYSBmdWxseSBlbmNvbXBhc3Npbmcgc2NvcGUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgb3RoZXJ3aXNlLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzZXR1cC4gR290dGEgYmUgc3lzdGVtYXRpYyBhbmQgZWxpbWluYXRlIGFueSBibGluZCBzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG5uZXQvdGxzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVFxubmV0L3Rscy9LY29uZmlnLTgtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG5uZXQvdGxzL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIFRMU1xubmV0L3Rscy9LY29uZmlnLTIyLVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVExTYCBjb25maWd1cmF0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyBzb2NrZXQgcmVhZHMuIEkgc2VlIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgYWxzbyBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgb3V0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cywgYXMgdGhhdCB3b3VsZCBzdWdnZXN0IGhvdyB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLCBnaXZlbiBpdHMgbGltaXRlZCBzY29wZS4KCkkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBgdGxzX3N0cnBfY2hlY2tfcmN2YCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudC4gTm93IEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgc2ltaWxhciBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IG1heSBleGlzdC4gSSBhbSBsb29raW5nIGZvciBvdGhlciBjYWxsaW5nIGZ1bmN0aW9ucyB0byBnYWluIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk0PXZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmgtMTk3LXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcdFx0dGxzX3N0cnBfY2hlY2tfcmN2KFx1MDAyNnJ4X2N0eC1cdTAwM2VzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01ODItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xubmV0L3Rscy90bHNfc3RycC5jLTU4NC19XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVx0bG9ja19zb2NrKHN0cnAtXHUwMDNlc2spO1xubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01OTMtXHRyZWxlYXNlX3NvY2soc3RycC1cdTAwM2Vzayk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxubmV0L3Rscy90bHNfc3RycC5jLTU5OC0gKiByZWxlYXNpbmcgdGhlIHNvY2tldCBsb2NrLCBvciBxdWV1ZWQgZGF0YSB3aWxsIHN0YWxsIHVudGlsIHRoZVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVx0XHRcdCAqL1xubmV0L3Rscy90bHNfc3cuYzoxMTI1Olx0XHRcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xMTI2LVx0XHRcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTYyNi1cdHRsc19zdHJwX21zZ19jb25zdW1lKFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcdHRsc19zdHJwX2NoZWNrX3JjdihcdTAwMjZjdHgtXHUwMDNlc3RycCwgZmFsc2UpO1xubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSZWFkaW5lc3MqKgoKQWxyaWdodCwgc28gYHRsc19zdHJwX2NoZWNrX3JjdmAgY2F1Z2h0IG15IGV5ZSBhcyBhIGxpa2VseSBrZXkgZm9jdXMgc3ltYm9sLiBHb29kIGNob2ljZS4gQnV0IHdhaXQsIGB0bHNfc3RycF9kYXRhX3JlYWR5YCBhbHNvIGxvb2tzIGludGVyZXN0aW5nLCBhbmQgaXQgaXNuJiMzOTt0IHN0YXRpYyB3aGljaCBpcyB1bnVzdWFsLiBUaGUgZmFjdCB0aGF0IGl0ICpjYWxscyogYHRsc19zdHJwX2NoZWNrX3JjdmAgcmFpc2VzIHNvbWUgaW1tZWRpYXRlIHF1ZXN0aW9ucy4gU2VlbXMgbGlrZSB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGB0bHNfc3RycF9kYXRhX3JlYWR5YCBpcyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgZmlndXJlIG91dCB3aGF0IGRhdGEgcmVhZGluZXNzIHRydWx5IG1lYW5zIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N0cnBfZGF0YV9yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTkzPWludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxOTQ6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmgtMTk1LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTU2OC0vKiBMb3dlciBzb2NrIGxvY2sgaGVsZCAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU2OTp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTcwLXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTg2PXN0YXRpYyB2b2lkIHRsc19zdHJwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01OTgtICogcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jaywgb3IgcXVldWVkIGRhdGEgd2lsbCBzdGFsbCB1bnRpbCB0aGVcbm5ldC90bHMvdGxzX3N0cnAuYzo1OTk6ICogbmV4dCB0bHNfc3RycF9kYXRhX3JlYWR5KCkgZXZlbnQuXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjI1OT1zdGF0aWMgdm9pZCB0bHNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjY4LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG5uZXQvdGxzL3Rsc19zdy5jOjIyNjk6XHR0bHNfc3RycF9kYXRhX3JlYWR5KFx1MDAyNmN0eC1cdTAwM2VzdHJwKTtcbm5ldC90bHMvdGxzX3N3LmMtMjI3MC1cdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gPSBhbGxvY19zYXZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVExTIHJlY2VpdmUgcGF0aCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYHRsc19kYXRhX3JlYWR5YCBpcyBtb3N0IGxpa2VseSBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBzb21ldGhpbmcgYWtpbiB0byB0aGUgYHNrX2RhdGFfcmVhZHlgIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBmcm9tIG90aGVyIG5ldHdvcmsgc3RhY2tzLiBJdCBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgdW5kZXJseWluZyBzb2NrZXQuCgpOZXh0LCBJIHNlZSBgdGxzX3N0cnBfY2hlY2tfcmN2YC4gQmFzZWQgb24gdGhlIG5hbWluZywgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciB0aGUgc3RyaW5nIHBhcnNlciwgd2hpY2ggaXMga2V5IGZvciBwYXJzaW5nIHRoZSBpbmNvbWluZyBUTFMgbWVzc2FnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jb21pbmcgZGF0YSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFyc2VyIGFuZCBob3cgdGhlIHBhcnNpbmcgcmVzdWx0IGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBtYWluIHJlY2VpdmUgZnVuY3Rpb24sIHRob3VnaC4gTm93IEkgbmVlZCB0byBjaGVjayBgdGxzX3N3X3JlY3Ztc2dgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGhvdyB0aGUgc29ja2V0IGdldHMgdGhlIHJhdyBkYXRhIGFuZCBpbnRlZ3JhdGVzIHdpdGggVExTIHRvIGhhbmRsZSB0aGUgY3J5cHRvZ3JhcGhpYyBzdHVmZi4gTm93IEkgaGF2ZSBhIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgaW5jb21pbmcgZGF0YSB0cmF2ZWxzIHRocm91Z2ggdGhlIFRMUyBzdGFjay4gSXQgd2lsbCBnbyBmcm9tIHRoZSBzb2NrZXQgdGhyb3VnaCB0aGUgbWFpbiByZWNlaXZlIGZ1bmN0aW9uIGFuZCB0aGVuIGJlIHBhcnNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rscy5oPTE2Mj12b2lkIHRsc19zd19mcmVlX2N0eF9yeChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3Rscy90bHMuaC0xNjQtXHRcdCAgIGludCBmbGFncyk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEwMDI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMTY6XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcdFx0ICA9IHRsc19zd19yZWN2bXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVx0cHJvdFtUTFNfU1ddW1RMU19TV10gPSBwcm90W1RMU19TV11bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjE6XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTgwMD1zdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTgwNS1cbm5ldC90bHMvdGxzX3N3LmM6MTgwNjppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfc3cuYy0xODA3LVx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTQKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFRMUyBSZWNlaXZlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmc6IHRoZSBgdGxzX3N3X3JlY3Ztc2dgIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSByZWN2bXNnIGhhbmRsZXIgZm9yIFRMUyBzb2Z0d2FyZSBzb2NrZXRzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGdyZWF0ICYjMzQ7Zm9jdXMgc3ltYm9sLiYjMzQ7IEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBvdmVyIFRMUyBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS4KCkkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBgdGxzX3N0cnBfY2hlY2tfcmN2YCBhcyBhIHJlbGF0ZWQgZm9jdXMgc3ltYm9sLgoKVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBUTFMgc3RyZWFtIHBhcnNlciYjMzk7cyByZWNlaXZlIHBhdGggLSBzcGVjaWZpY2FsbHkgYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AuIFRoaXMgY29uY2VybnMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoZSBxdWV1ZSBsZW5ndGggKmJlZm9yZSogcmVhZGluZyB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBjb3JlIHJlY2VpdmUgbG9naWMgd2l0aGluIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIENydWNpYWxseSwgdGhpcyBwYXRoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aG9zZSBUTFMgc29ja2V0cy4gVGhhdCYjMzk7cyBhIHRleHRib29rIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nISBBIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgcmVhbCBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2UuIEkgc2VlIGBUTFNgLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBvbmUgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4gSSBrbm93IGBUTFNgIGRlcGVuZHMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBDUllQVE9gLiBTaW5jZSBgSU5FVGAgYW5kIGBDUllQVE9gIGFyZSBzdGFuZGFyZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBqdXN0IGhhdmluZyBgVExTYCBlbmFibGVkIGlzIGVub3VnaCB0byBjcmVhdGUgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3ZlcnMgdGhpcyBjb2RlIHBhdGguIFRoaXMgc2hvdWxkIGtlZXAgdGhlIHNldHVwIHJlbGF0aXZlbHkgc2ltcGxlIGFuZCBmb2N1c2VkLiBJJiMzOTttIHJlYWR5IHRvIHJvbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfc3RycF9jaGVja19yY3YmIzM0OywKICAgICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zdHJwX2NoZWNrX3JjdiYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgVExTIHN0cnBhcnNlciB3aGVyZSBgdGxzX3J4X21zZ19zaXplYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhlIHJhdyBUQ1AgcmVjZWl2ZSBxdWV1ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoYXQgdGhlIHNrYnMgZm9ybWluZyB0aGUgVExTIGhlYWRlciBhcmUgY29udGlndW91cyBpbiBzZXF1ZW5jZSBzcGFjZSBhbmQgaGF2ZSBtYXRjaGluZyBkZWNyeXB0ZWQgc3RhdHVzLiBJZiB0aGUgcmVjZWl2ZSBxdWV1ZSBjb250YWluZWQgb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIHNlZ21lbnRzIHdpdGggbWl4ZWQgaGFyZHdhcmUvc29mdHdhcmUgZGVjcnlwdGVkIHN0YXR1cywgYHRsc19yeF9tc2dfc2l6ZWAgd291bGQgcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhbiBlcnJvciAobGlrZSBgLUVCQURNU0dgKSwgY2F1c2luZyBhIHNwdXJpb3VzIGNvbm5lY3Rpb24gYWJvcnQuXG5cbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXG5cblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMzBkNjhlNWVmYjVmODkyMDUyYzExMmQwN2JkMWE2NDAxMGQyNTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdHJwLmMgYi9uZXQvdGxzL3Rsc19zdHJwLmMKaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX3N0cnAuYwpAQCAtNDMwLDkgJiM0Mzs0MzAsMTAgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKJiM0MztzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0Mzsgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gc3RycC0mZ3Q7c3RtLm9mZnNldCAmIzQzOyBsZW47CiAJc3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiOwogCXUzMiBzZXE7CiAKQEAgLTQ0Myw5ICYjNDM7NDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApCiAJLyogTWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSwKIAkgKiBhbmQgdGhlIGRlY3J5cHRlZCBzdGF0dXMgbWF0Y2hlcy4KIAkgKi8KLQl3aGlsZSAoc2tiLSZndDtsZW4gJmx0OyBsZW4pIHsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZsdDsgcmVtYWluaW5nKSB7CiAJCXNlcSAmIzQzOz0gc2tiLSZndDtsZW47Ci0JCWxlbiAtPSBza2ItJmd0O2xlbjsKJiM0MzsJCXJlbWFpbmluZyAtPSBza2ItJmd0O2xlbjsKIAkJc2tiID0gc2tiLSZndDtuZXh0OwogCiAJCWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSAhPSBzZXEpCkBAIC01MjUsNiAmIzQzOzUyNiwxMSBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAogCXRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTsKIAlpZiAoIXN0cnAtJmd0O3N0bS5mdWxsX2xlbikgewomIzQzOwkJaWYgKGlucSAmbHQ7IFRMU19IRUFERVJfU0laRSkKJiM0MzsJCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpOwomIzQzOwkJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwomIzQzOwogCQlzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpOwogCQlpZiAoc3ogJmx0OyAwKQogCQkJcmV0dXJuIHN6OwpAQCAtNTM1LDcgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCkKIAkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7CiAJfQogCi0JaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSkKJiM0MzsJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLSZndDtzdG0uZnVsbF9sZW4pKQogCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTsKIAogCVdSSVRFX09OQ0Uoc3RycC0mZ3Q7bXNnX3JlYWR5LCAxKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFBhcnNlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIFRoZXkmIzM5O3ZlIG1vZGlmaWVkIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgdG8gdGFrZSBhIGBsZW5gIGFyZ3VtZW50LCB3aGljaCBpcyBhIGdvb2QgbW92ZSB0byBhdm9pZCByZWR1bmRhbnQgY2FsY3VsYXRpb25zLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYHRsc19zdHJwX3JlYWRfc29ja2AgdG8gdmFsaWRhdGUgdGhlIGluaXRpYWwgYFRMU19IRUFERVJfU0laRWAgb2YgdGhlIGluY29taW5nIHF1ZXVlIChgaW5xYCkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHF1ZXVlIHNpemUgKGBpbnFgKSBpcyBsZXNzIHRoYW4gYFRMU19IRUFERVJfU0laRWAsIGl0IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlgIHdpdGggYSAmIzM0O3RydWUmIzM0OyBmbGFnLiBPdGhlcndpc2UsIGl0IGNoZWNrcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgdG8gZW5zdXJlIHRoZSBoZWFkZXImIzM5O3MgaW50ZWdyaXR5LiBGaW5hbGx5LCBpZiB0aGUgaGVhZGVyIGlzIHZhbGlkIHRoZXkgdGhlbiBjYWxsIGB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC0mZ3Q7YW5jaG9yKWAuCgpOb3csIGRpZ2dpbmcgaW50byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLCBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBTS0IgcXVldWUsIGNoZWNraW5nIGZvciBjb250aWd1b3VzIHNlcXVlbmNlIG51bWJlcnMgYW5kIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFjcm9zcyB0aGUgcXVldWUuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFmdGVyKiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgPwoKVGhlIGNvZGUgY2FsbHMgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLSZndDthbmNob3IpYC4gSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgdGxzX3J4X21zZ19zaXplYCBpcyByZWFkaW5nIHRoZSBoZWFkZXIgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYC4gSWYgdGhlIGhlYWRlciBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgU0tCcywgZG9lcyBgdGxzX3J4X21zZ19zaXplYCBhY3R1YWxseSBoYW5kbGUgdGhpcyBjb3JyZWN0bHk/IE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHRsc19yeF9tc2dfc2l6ZWAgbWlnaHQgYXNzdW1lIGl0IGhhcyBlbm91Z2ggZGF0YSBpbiBgc3RycC0mZ3Q7YW5jaG9yYC4gSWYgaXQgZG9lc24mIzM5O3QsIHRoaXMgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIGEgY2xhc3NpYyBLQVNBTiBpc3N1ZS4gVGhhdCB3b3VsZCBiZSBhIG1ham9yIHByb2JsZW0uCgpJIGhhdmUgdG8gY2hlY2sgYHRsc19yeF9tc2dfc2l6ZWAgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGZyYWdtZW50ZWQgaGVhZGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGUgbmV3IGhlYWRlciB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGhlcmUgYXMgd2VsbD8gSSYjMzk7ZCBiZXR0ZXIgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0bHNfcnhfbXNnX3NpemVgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19yeF9tc2dfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTk3PXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xubmV0L3Rscy90bHMuaC0xOTgtXG5uZXQvdGxzL3Rscy5oOjE5OTppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC90bHMvdGxzLmgtMjAwLXZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTIxMD1zdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbl9mcmFnKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0yMzktXG5uZXQvdGxzL3Rsc19zdHJwLmM6MjQwOlx0XHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBza2IpO1xubmV0L3Rscy90bHNfc3RycC5jLTI0MS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz0yODY9c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW5fc2tiKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zMTktXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG5uZXQvdGxzL3Rsc19zdHJwLmM6MzIwOlx0XHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBza2IpO1xubmV0L3Rscy90bHNfc3RycC5jLTMyMS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTUzMy1cbm5ldC90bHMvdGxzX3N0cnAuYzo1MzQ6XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MzUtXHRcdGlmIChzeiBcdTAwM2MgMClcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxNzU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxubmV0L3Rscy90bHNfc3cuYzoyMTg0OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0bHNfcnhfbXNnX3NpemVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBzaXR1YXRlZCB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgVExTLiBJIGtub3cgdGhlIHJlY2VpdmluZyBwYXRoIGlzIGNyaXRpY2FsLCBzbyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2l6ZSBvZiBhbiBpbmNvbWluZyBUTFMgbWVzc2FnZSBpcyBkZXRlcm1pbmVkIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFRoaXMgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIHdpbGwgcHJvdmlkZSB0aGUga2V5IHNpemUgb3IgdGhlIGhlYWRlciBzaXplIGZvciBhbiBpbmNvbWluZyBtZXNzYWdlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBpcyBpbXBvcnRhbnQgdG8gYnVmZmVyIHNpemUgb3IgaG93IGEgcGFja2V0IGlzIGhhbmRsZWQgd2hlbiByZWNlaXZlZC4gSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgYW5kIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg0Olx0aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIxODU6XHR7XG4yMTg2Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzdHJwLVx1MDAzZXNrKTtcbjIxODc6XHRcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4yMTg4Olx0XHRjaGFyIGhlYWRlcltUTFNfSEVBREVSX1NJWkUgJiM0MzsgVExTX01BWF9JVl9TSVpFXTtcbjIxODk6XHRcdHNpemVfdCBjaXBoZXJfb3ZlcmhlYWQ7XG4yMTkwOlx0XHRzaXplX3QgZGF0YV9sZW4gPSAwO1xuMjE5MTpcdFx0aW50IHJldDtcbjIxOTI6XHRcbjIxOTM6XHRcdC8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdWxsIFRMUyBoZWFkZXIsIG9yIHdhaXQgZm9yIG1vcmUgZGF0YSAqL1xuMjE5NDpcdFx0aWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCAmIzQzOyBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjIxOTU6XHRcdFx0cmV0dXJuIDA7XG4yMTk2Olx0XG4yMTk3Olx0XHQvKiBTYW5pdHktY2hlY2sgc2l6ZSBvZiBvbi1zdGFjayBidWZmZXIuICovXG4yMTk4Olx0XHRpZiAoV0FSTl9PTihwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKGhlYWRlcikpKSB7XG4yMTk5Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMjAwOlx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIwMTpcdFx0fVxuMjIwMjpcdFxuMjIwMzpcdFx0LyogTGluZWFyaXplIGhlYWRlciB0byBsb2NhbCBidWZmZXIgKi9cbjIyMDQ6XHRcdHJldCA9IHNrYl9jb3B5X2JpdHMoc2tiLCBzdHJwLVx1MDAzZXN0bS5vZmZzZXQsIGhlYWRlciwgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemUpO1xuMjIwNTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIyMDY6XHRcdFx0Z290byByZWFkX2ZhaWx1cmU7XG4yMjA3Olx0XG4yMjA4Olx0XHRzdHJwLVx1MDAzZW1hcmsgPSBoZWFkZXJbMF07XG4yMjA5Olx0XG4yMjEwOlx0XHRkYXRhX2xlbiA9ICgoaGVhZGVyWzRdIFx1MDAyNiAweEZGKSB8IChoZWFkZXJbM10gXHUwMDNjXHUwMDNjIDgpKTtcbjIyMTE6XHRcbjIyMTI6XHRcdGNpcGhlcl9vdmVyaGVhZCA9IHByb3QtXHUwMDNldGFnX3NpemU7XG4yMjEzOlx0XHRpZiAocHJvdC1cdTAwM2V2ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTiBcdTAwMjZcdTAwMjZcbjIyMTQ6XHRcdCAgICBwcm90LVx1MDAzZWNpcGhlcl90eXBlICE9IFRMU19DSVBIRVJfQ0hBQ0hBMjBfUE9MWTEzMDUpXG4yMjE1Olx0XHRcdGNpcGhlcl9vdmVyaGVhZCAmIzQzOz0gcHJvdC1cdTAwM2Vpdl9zaXplO1xuMjIxNjpcdFxuMjIxNzpcdFx0aWYgKGRhdGFfbGVuIFx1MDAzZSBUTFNfTUFYX1BBWUxPQURfU0laRSAmIzQzOyBjaXBoZXJfb3ZlcmhlYWQgJiM0MztcbjIyMTg6XHRcdCAgICBwcm90LVx1MDAzZXRhaWxfc2l6ZSkge1xuMjIxOTpcdFx0XHRyZXQgPSAtRU1TR1NJWkU7XG4yMjIwOlx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIyMTpcdFx0fVxuMjIyMjpcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBjaXBoZXJfb3ZlcmhlYWQpIHtcbjIyMjM6XHRcdFx0cmV0ID0gLUVCQURNU0c7XG4yMjI0Olx0XHRcdGdvdG8gcmVhZF9mYWlsdXJlO1xuMjIyNTpcdFx0fVxuMjIyNjpcdFxuMjIyNzpcdFx0LyogTm90ZSB0aGF0IGJvdGggVExTMS4zIGFuZCBUTFMxLjIgdXNlIFRMU18xXzIgdmVyc2lvbiBoZXJlICovXG4yMjI4Olx0XHRpZiAoaGVhZGVyWzFdICE9IFRMU18xXzJfVkVSU0lPTl9NSU5PUiB8fFxuMjIyOTpcdFx0ICAgIGhlYWRlclsyXSAhPSBUTFNfMV8yX1ZFUlNJT05fTUFKT1IpIHtcbjIyMzA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjIyMzE6XHRcdFx0Z290byByZWFkX2ZhaWx1cmU7XG4yMjMyOlx0XHR9XG4yMjMzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgUmVjZWl2ZSBNZXNzYWdlIFNpemUgQ2FsY3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgdGxzX3J4X21zZ19zaXplYCB3b3JrcywgYW5kIGl0JiMzOTtzIHVzaW5nIGBza2JfY29weV9iaXRzYCB0byBncmFiIHRoZSBUTFMgaGVhZGVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdyYWJiaW5nIGBwcm90LSZndDtwcmVwZW5kX3NpemVgIGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSwgc3RhcnRpbmcgYXQgYW4gb2Zmc2V0IG9mIGBzdHJwLSZndDtzdG0ub2Zmc2V0YC4gTm93LCBpZiB0aGUgc29ja2V0IGJ1ZmZlciYjMzk7cyB0b3RhbCBsZW5ndGggKGBza2ItJmd0O2xlbmApIGlzbiYjMzk7dCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG9mZnNldCBwbHVzIHRoZSBoZWFkZXIgc2l6ZSwgYHNrYl9jb3B5X2JpdHNgIHJldHVybnMgMC4gSSBzZWUgdGhhdCB0aGUgY29kZSBleHBsaWNpdGx5IGNoZWNrcyB0aGlzIGNvbmRpdGlvbjoKCmBgYGMKCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdWxsIFRMUyBoZWFkZXIsIG9yIHdhaXQgZm9yIG1vcmUgZGF0YSAqLwoJaWYgKHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0MzsgcHJvdC0mZ3Q7cHJlcGVuZF9zaXplICZndDsgc2tiLSZndDtsZW4pCgkJcmV0dXJuIDA7CmBgYAoKVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlcmUgaXNuJiMzOTt0IGVub3VnaCBkYXRhLCBpdCBzaG91bGQgcmV0dXJuIGVhcmx5LiBIb3dldmVyLCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhlYWRlciBpcyAqc3BsaXQqIGFjcm9zcyBtdWx0aXBsZSBzb2NrZXQgYnVmZmVycz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZnJhZ21lbnRlZCBwYWNrZXQgc2NlbmFyaW8uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb2RlIGhhbmRsZXMgdGhhdCBjb3JyZWN0bHkuCgpJIHRob3VnaHQgYHNrYl9jb3B5X2JpdHNgIGNvdWxkIGhhbmRsZSB0aGlzLCBzaW5jZSBpdCBjYW4gcmVhZCBhY3Jvc3MgbXVsdGlwbGUgc2ticyBpZiBgc2tiYCBpcyBhIGZyYWdtZW50ZWQgc2tiIG9yIGlmIGl0IGhhcyBhIGZyYWdfbGlzdCBvciBuZXh0IHNrYnMuIEJ1dCB3YWl0Li4uIHVwb24gcmUtcmVhZGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgSSBzZWUgdGhhdCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHJlYWRzIGZyb20gdGhlIGN1cnJlbnQgc2tiIGFuZCBpdHMgZnJhZ21lbnRzL2ZyYWdfbGlzdC4gSXQgKmRvZXNuJiMzOTt0KiBhdXRvbWF0aWNhbGx5IHRyYXZlcnNlIGBza2ItJmd0O25leHRgLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgYWxtb3N0IG1pc3NlZCEKClRoaXMgbGVhZHMgbWUgdG8gYHRsc19zdHJwX3JlYWRfc29ja2AuIFRoZSB2YXJpYWJsZSBgc3RycC0mZ3Q7YW5jaG9yYCBob2xkcyB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSBvZiBzb2NrZXQgYnVmZmVycy4gVGhleSBhcmUgbGlua2VkIHZpYSBgc2tiLSZndDtuZXh0YCwgc28gaWYgdGhlIGhlYWRlciBpcyBmcmFnbWVudGVkLCBgc3RycC0mZ3Q7YW5jaG9yYCBwb2ludHMgdG8gdGhlICpmaXJzdCogc2tiLiBBbmQgbm93LCBJIHJlbWVtYmVyLCB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBtaWdodCBzZXQgdGhpcyBgc3RycC0mZ3Q7YW5jaG9yYCB2YXJpYWJsZS4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgcXVldWUuIElzIGl0IGNvbmNhdGVuYXRpbmcgdGhlbSwgb3Igc2ltcGx5IHBvaW50aW5nIHRvIHRoZSBmaXJzdCBza2IgaW4gdGhlIGNoYWluPyBJZiBpdCBqdXN0IHBvaW50cyB0byB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgdGhlbiBgc2tiX2NvcHlfYml0c2Agd2lsbCAqbm90KiB3b3JrIGFzIEkgb3JpZ2luYWxseSB0aG91Z2h0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYz00MzM9c3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQ2MC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NjE6c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcbm5ldC90bHMvdGxzX3N0cnAuYy00NjIte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00OTktXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTAwOlx0XHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTI2LVxubmV0L3Rscy90bHNfc3RycC5jOjUyNzpcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcbm5ldC90bHMvdGxzX3N0cnAuYy01MjgtXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGZ1bmN0aW9uOiBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAuIEp1c3QgdGhlIG5hbWUgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgc29tZSBjbHVlcy4gJiMzNDt0bHNfc3RycCYjMzQ7IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIG9yIHBvdGVudGlhbGx5IGEgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0IGFuZCB0aGF0IHdlIGFyZSB1c2luZyBzdHJpbmcgcHJvY2Vzc2luZy4gJiMzNDtMb2FkX2FuY2hvciYjMzQ7IG1vc3QgbGlrZWx5IGlzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgYWNjZXNzaW5nLCBsb2FkaW5nLCBvciBzZXR0aW5nIGEgdHJ1c3QgYW5jaG9yLCBhIHJvb3QgY2VydGlmaWNhdGUsIG9yIHNpbWlsYXIgY3JlZGVudGlhbCBmb3IgdmFsaWRhdGluZyBvdGhlciBjZXJ0aWZpY2F0ZXMgaW4gYSBUTFMgaGFuZHNoYWtlLiBUaGUgaW5jbHVzaW9uIG9mICYjMzQ7cXVldWUmIzM0OyBzdHJvbmdseSBoaW50cyB0aGF0IHRoZXJlJiMzOTtzIGEgbWFuYWdlZCBvcmRlciwgcG9zc2libHkgYSBjcml0aWNhbCBvciBjb21wbGV4IG9wZXJhdGlvbiwgb3IgdGhhdCBtdWx0aXBsZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgdGhlcmUgYXJlIHF1ZXVlaW5nIGNvbmNlcm5zLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLCBwb3RlbnRpYWxseSBpbiBhIHN5c3RlbSB3aXRoIGFzeW5jaHJvbm91cyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNraW5nIG9yIGEgY29ubmVjdGlvbiBwb29saW5nIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBUTFMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcywgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHRocmVhZCBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgYW5kIHZhbGlkYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGhvdyB0cnVzdCBhbmNob3JzIGFyZSBoYW5kbGVkIGluIGEgcXVldWUgc2V0dGluZywgYW5kIHdoeSBhIHF1ZXVlIGlzIHVzZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYxOlx0c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcbiA0NjI6XHR7XG4gNDYzOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHN0cnAtXHUwMDNlc2spO1xuIDQ2NDpcdFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0O1xuIDQ2NTpcdFx0dTMyIG9mZnNldDtcbiA0NjY6XHRcbiA0Njc6XHRcdGZpcnN0ID0gdGNwX3JlY3Zfc2tiKHN0cnAtXHUwMDNlc2ssIHRwLVx1MDAzZWNvcGllZF9zZXEsIFx1MDAyNm9mZnNldCk7XG4gNDY4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmaXJzdCkpXG4gNDY5Olx0XHRcdHJldHVybjtcbiA0NzA6XHRcbiA0NzE6XHRcdC8qIEJlc3RvdyB0aGUgc3RhdGUgb250byB0aGUgYW5jaG9yICovXG4gNDcyOlx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2VsZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3MzpcdFx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3NDpcdFx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNldHJ1ZXNpemUgPSBvZmZzZXQgJiM0MzsgbGVuO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0c2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XG4gNDc3Olx0XG4gNDc4Olx0XHRza2JfY29weV9oZWFkZXIoc3RycC1cdTAwM2VhbmNob3IsIGZpcnN0KTtcbiA0Nzk6XHRcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuIDQ4MDpcdFxuIDQ4MTpcdFx0c3RycC1cdTAwM2VzdG0ub2Zmc2V0ID0gb2Zmc2V0O1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXG4gNDg1Olx0e1xuIDQ4NjpcdFx0c3RydWN0IHN0cnBfbXNnICpyeG07XG4gNDg3Olx0XHRzdHJ1Y3QgdGxzX21zZyAqdGxtO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cdTAwM2Vtc2dfcmVhZHkpO1xuIDQ5MDpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUTFMvVENQIFJlY2VpdmUgUXVldWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIFRDUCByZWNlaXZlIHF1ZXVlcyBpbiBUTFMgcHJvY2Vzc2luZy4gSXQgc3RhcnRzIHdpdGggYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgLCB3aGljaCBzZXRzIHVwIHRoaXMgYHN0cnAtJmd0O2FuY2hvcmAgc2tiIGFuZCBpdHMgYGZyYWdfbGlzdGAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNrYiAoYGZpcnN0YCkgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGlzIG1lYW5zIGBza2JfY29weV9iaXRzYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYCBBTkQgaXRzIGBmcmFnX2xpc3RgLiAgVGhlIGBmcmFnX2xpc3RgIGlzIGEgbGlua2VkIGxpc3Qgb2Ygc2ticyB0aGF0IG1ha2UgdXAgdGhlIGluY29taW5nIFRDUCBkYXRhLgoKVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZGF0YSBpbnRlZ3JpdHkgd2l0aGluIHRoaXMgcXVldWUsIG9yIGxhY2sgdGhlcmVvZi4gIEJlZm9yZSB0aGUgcGF0Y2gsIHdlIHdlcmUgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCB3aXRob3V0IGEgY2hlY2sgZm9yIHRoZSBoZWFkZXIgc2l6ZSB1c2luZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGNoZWNrcyBpZiBhbGwgdGhlIHNrYnMgYXJlIGNvbnRpZ3VvdXMgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gVGhlIGtleSBpc3N1ZSBpcyBhcm91bmQgc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmxhcHBpbmcgb3IgJiMzNDtob2xlLXkmIzM0OyBUQ1Agc2VnbWVudHMgaW4gdGhlIHF1ZXVlLgoKQmFzaWNhbGx5LCBpZiBUQ1Agc2VnbWVudHMgYXJyaXZlIG91dCBvZiBvcmRlciwgb3IgcGFydGlhbGx5IG92ZXJsYXAsIGBza2JfY29weV9iaXRzYCBtaWdodCByZWFkIHRoZSB3cm9uZyBkYXRhIGJlY2F1c2UgYHNrYi0mZ3Q7bGVuYCBtaWdodCBub3QgY29ycmVzcG9uZCB0byBjb250aWd1b3VzIGRhdGEsIG9yIGBza2ItJmd0O25leHRgIG1pZ2h0IGhhdmUgYW4gb3ZlcmxhcHBpbmcgc2VxdWVuY2UgbnVtYmVyLiBUaGlzIGNhbiBsZWFkIHRvIGluY29ycmVjdCBUTFMgaGVhZGVyIHBhcnNpbmcgZHVlIHRvIGluY29uc2lzdGVudCBkYXRhIGJlaW5nIHJlYWQuCgpUaGUgcGF0Y2ggdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGFkZGluZyBhIHByZWxpbWluYXJ5IGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgY2hlY2sgQkVGT1JFIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAuICBIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuCgpOb3csIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2Agd2Fsa3MgdGhlIHF1ZXVlLCBjaGVja2luZyBzZXF1ZW5jZSBudW1iZXJzIGFuZCBkZWNyeXB0ZWQgc3RhdHVzLiBJdCBkb2VzIHRoaXMgd2l0aGluIHRoZSAmIzM0O3doaWxlIGxvb3AmIzM0OyBjb25kaXRpb24gYHdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IHJlbWFpbmluZylgLiBJZiB0aGUgY3VycmVudCBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgcmVtYWluaW5nYCwgdGhlIGNvZGUgcHJvY2VlZHMgdG8gdGhlIG5leHQgYHNrYmAgaW4gdGhlIGxpc3QsIGJ5IGFkZGluZyBgc2tiID0gc2tiLSZndDtuZXh0O2AuCgpJZiBgVENQX1NLQl9DQihza2IpLSZndDtzZXEgIT0gc2VxYCBpbnNpZGUgdGhlIGB3aGlsZWAgbG9vcCwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtOiBub24tY29udGlndW91cyBzZWdtZW50cyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBoZWFkZXIgcGFyc2luZy4gIEJ1dCB3aGF0IGlmIGBza2ItJmd0O25leHRgIGlzIE5VTEwgYmVmb3JlIHRoZSBgd2hpbGVgIGxvb3AgY2FuIHByb2Nlc3MgZW5vdWdoIGRhdGE/ICBUaGF0IG1lYW5zLCBpbiB0aGUgb3JpZ2luYWwgY29kZSB0aGUgd2hpbGUgbG9vcCB3b24mIzM5O3QgdGVybWluYXRlLiBJdCYjMzk7bGwganVzdCBrZWVwIGdvaW5nLiAgVGhpcyBwb3RlbnRpYWxseSBsZWFkcyB0byBhIGNyYXNoIGJ5IGRlcmVmZXJlbmNpbmcgYSBOVUxMIHBvaW50ZXIuICBJZiB0aGUgbG9vcCBET0VTIHRlcm1pbmF0ZSwgYnV0IG9ubHkgcHJvY2Vzc2VzIGEgc3Vic2V0IG9mIHRoZSBpbmNvbWluZyBkYXRhLCB0aGlzIGNvdWxkIHN0aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGRhdGEgb3IgYSByZWFkIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSB2YWxpZCBkYXRhLgoKVGhlIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gdmFsaWRhdGUgdXAgdG8gdGhlIGZ1bGwgbWVzc2FnZSBsZW5ndGggKGBzemApLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB2YWxpZGF0ZWQgdGhlIF9lbnRpcmVfIG1lc3NhZ2UgbGVuZ3RoLiAgTm93LCB0aGUgcGF0Y2ggdHJpZXMgdG8gdmFsaWRhdGUgb25seSB0aGUgaGVhZGVyIHNpemUgZmlyc3QsIGJ1dCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycy4gIElmIGB0bHNfcnhfbXNnX3NpemVgIHJlYWRzIGdhcmJhZ2UsIGl0IGNvdWxkIHJldHVybiBhICpzbWFsbGVyKiBgc3pgIHRoYW4gdGhlIGhlYWRlciBzaXplLCBidXQgaWYgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBsYXRlciBjaGVja3MgZm9yIGNvbnRpZ3VpdHkgdXAgdG8gYSBzbWFsbGVyIG51bWJlciBvZiBieXRlcyB0aGFuIHRoZSBoZWFkZXIsIHRoZSBjb250aWd1aXR5IGNoZWNrIGlzIG5vIGxvbmdlciBjb21wbGV0ZSBhbmQgdGhpcyBzdGlsbCBsZWFkcyB0byBpc3N1ZXMgd2hlbiB0aGUgYHdoaWxlYCBsb29wIHJ1bnMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHN0cnAtJmd0O2FuY2hvcmAgaXMgYWxsb2NhdGVkLiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBhbGxvY2F0ZWQgYXMgYSAmIzM0O3NwZWNpYWwgc2tiJiMzNDssIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB3aXRoIGB0Y3BfcmVjdl9za2JgLiBCdXQsIGRvZXMgYHN0cnAtJmd0O2FuY2hvcmAgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YT8gSWYgYHN0cnAtJmd0O2FuY2hvcmAgZG9lc24mIzM5O3QgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YSwgZGVyZWZlcmVuY2luZyBgVENQX1NLQl9DQihzdHJwLSZndDthbmNob3IpYCBpcyBnb2luZyB0byBiZSBhIHByb2JsZW0uIFRoaXMgYWxsIHNlZW1zIHRvIHBvaW50IHRvIGEgcG90ZW50aWFsbHkgc2VyaW91cyBsb2dpYyBmbGF3IGluIGhvdyB3ZSBoYW5kbGUgVENQIHNlZ21lbnQgb3JkZXJpbmcgYW5kIHF1ZXVlIHZhbGlkYXRpb24gaW4gVExTIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NrYi4qYW5jaG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipMb2NhdGluZyBQb3RlbnRpYWwgVExTIFN0cmlwcGluZyBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSB0YXJnZXQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVExTIHN0cmlwcGluZywgc28gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIHRlcm0gJiMzNDthbmNob3ImIzM0OyB3aXRoaW4gdGhlIGBuZXQvdGxzL3Rsc19zdHJwLmNgIGZpbGUuIFRoZSB3b3JkICYjMzQ7YW5jaG9yJiMzNDsgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0IGNhbiByZWZlciB0byBhIHJvb3Qgb2YgdHJ1c3QsIGEgcG9pbnQgaW4gdGhlIGNlcnRpZmljYXRlIGNoYWluLCBvciBwZXJoYXBzIGEgbW9yZSBhYnN0cmFjdCAmIzM5O2FuY2hvciBwb2ludCYjMzk7IGluIHRoZSBjb2RlJiMzOTtzIGxvZ2ljLiBUaGlzIHNlYXJjaCBzaG91bGQgaGVscCBtZSBwaW5wb2ludCBhcmVhcyB3aGVyZSB0aGUgY29kZSBtaWdodCBoYW5kbGUgb3IgcmVseSB1cG9uIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBvciB2YWxpZGF0aW9uIHByb2Nlc3Nlcywgd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBzdHJpcHBpbmcgYXR0YWNrcy4gSXQmIzM5O3MgYSB0YXJnZXRlZCBhcHByb2FjaCwgaG9wZWZ1bGx5IGZvY3VzaW5nIG15IGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FuY2hvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MTY9dm9pZCB0bHNfc3RycF9hYm9ydF9zdHJwKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0yOS1cbm5ldC90bHMvdGxzX3N0cnAuYzozMDpzdGF0aWMgdm9pZCB0bHNfc3RycF9hbmNob3JfZnJlZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy0zMS17XG5uZXQvdGxzL3Rsc19zdHJwLmM6MzI6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0zMy1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzYtXHRcdHNoaW5mby1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jOjM3Olx0Y29uc3VtZV9za2Ioc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jOjM4Olx0c3RycC1cdTAwM2VhbmNob3IgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jLTM5LX1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9Njk9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfbWFrZV9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy03My1cbm5ldC90bHMvdGxzX3N0cnAuYzo3NDpcdHNrYiA9IHRsc19zdHJwX3NrYl9jb3B5KHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yLCBzdHJwLVx1MDAzZXN0bS5vZmZzZXQsXG5uZXQvdGxzL3Rsc19zdHJwLmMtNzUtXHRcdFx0XHRzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbik7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTg1PXN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfZGV0YWNoKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy04OS0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0Vcbm5ldC90bHMvdGxzX3N0cnAuYzo5MDpcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlY3J5cHRlZCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtOTEtI2Vsc2Vcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAwLVxubmV0L3Rscy90bHNfc3RycC5jOjEwMTpcdFx0LyogUmVwbGFjZSBhbmNob3Igd2l0aCBhbiBlbXB0eSBza2IsIHRoaXMgaXMgYSBsaXR0bGVcbm5ldC90bHMvdGxzX3N0cnAuYy0xMDItXHRcdCAqIGRhbmdlcm91cyBidXQgX190bHNfY3VyX21zZygpIHdhcm5zIG9uIGVtcHR5IHNrYnNcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTA4LVxubmV0L3Rscy90bHNfc3RycC5jOjEwOTpcdFx0c3dhcChzdHJwLVx1MDAzZWFuY2hvciwgc2tiKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xMTAtXHRcdHJldHVybiBza2I7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTEyMD1pbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTMxLVxubmV0L3Rscy90bHNfc3RycC5jOjEzMjpcdHRsc19zdHJwX2FuY2hvcl9mcmVlKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jOjEzMzpcdHN0cnAtXHUwMDNlYW5jaG9yID0gc2tiO1xubmV0L3Rscy90bHNfc3RycC5jLTEzNC1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ1PWludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxubmV0L3Rscy90bHNfc3RycC5jLTE0Ni17XG5uZXQvdGxzL3Rsc19zdHJwLmM6MTQ3Olx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtMTQ4LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0xNTMtXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTU0Olx0XHQvKiBXZSBjYW4mIzM5O3Qgc2tiX2Nsb25lKCkgdGhlIGFuY2hvciwgaXQgZ2V0cyB3aXBlZCBieSB1bnBhdXNlICovXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTU1LVx0XHRza2IgPSBhbGxvY19za2IoMCwgc3RycC1cdTAwM2Vzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTU4LVxubmV0L3Rscy90bHNfc3RycC5jOjE1OTpcdFx0X19za2JfcXVldWVfdGFpbChkc3QsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjA6XHRcdHN0cnAtXHUwMDNlYW5jaG9yID0gc2tiO1xubmV0L3Rscy90bHNfc3RycC5jLTE2MS1cdH0gZWxzZSB7XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTE5MS1cbm5ldC90bHMvdGxzX3N0cnAuYzoxOTI6c3RhdGljIHZvaWQgdGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTkzLXtcbm5ldC90bHMvdGxzX3N0cnAuYzoxOTQ6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xOTUtXHRpbnQgaTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNTEtXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzUyOlx0c2tiID0gc3RycC1cdTAwM2VhbmNob3I7XG5uZXQvdGxzL3Rsc19zdHJwLmMtMzUzLVx0aWYgKCFza2ItXHUwMDNlbGVuKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz0zOTA9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00MDItXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDAzOlx0c2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDA0LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy00MTAtXHRcdGlmICghcGFnZSkge1xubmV0L3Rscy90bHNfc3RycC5jOjQxMTpcdFx0XHR0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJwKTtcbm5ldC90bHMvdGxzX3N0cnAuYy00MTItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQxNC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0MTU6XHRcdHNrYl9maWxsX3BhZ2VfZGVzYyhzdHJwLVx1MDAzZWFuY2hvciwgc2hpbmZvLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOyxcbm5ldC90bHMvdGxzX3N0cnAuYy00MTYtXHRcdFx0XHQgICBwYWdlLCAwLCAwKTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDIzLVxubmV0L3Rscy90bHNfc3RycC5jOjQyNDpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IDA7XG5uZXQvdGxzL3Rsc19zdHJwLmM6NDI1Olx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSAwO1xubmV0L3Rscy90bHNfc3RycC5jOjQyNjpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZXRydWVzaXplID0gcm91bmRfdXAobmVlZF9zcGMsIFBBR0VfU0laRSk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz00MzM9c3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQzOS1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NDA6XHRmaXJzdCA9IHNrYl9zaGluZm8oc3RycC1cdTAwM2VhbmNob3IpLVx1MDAzZWZyYWdfbGlzdDtcbm5ldC90bHMvdGxzX3N0cnAuYy00NDEtXHRza2IgPSBmaXJzdDtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYwLVxubmV0L3Rscy90bHNfc3RycC5jOjQ2MTpzdGF0aWMgdm9pZCB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgbGVuKVxubmV0L3Rscy90bHNfc3RycC5jLTQ2Mi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTQ3MC1cbm5ldC90bHMvdGxzX3N0cnAuYzo0NzE6XHQvKiBCZXN0b3cgdGhlIHN0YXRlIG9udG8gdGhlIGFuY2hvciAqL1xubmV0L3Rscy90bHNfc3RycC5jOjQ3MjpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IG9mZnNldCAmIzQzOyBsZW47XG5uZXQvdGxzL3Rsc19zdHJwLmM6NDczOlx0c3RycC1cdTAwM2VhbmNob3ItXHUwMDNlZGF0YV9sZW4gPSBvZmZzZXQgJiM0MzsgbGVuO1xubmV0L3Rscy90bHNfc3RycC5jOjQ3NDpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZXRydWVzaXplID0gb2Zmc2V0ICYjNDM7IGxlbjtcbm5ldC90bHMvdGxzX3N0cnAuYy00NzUtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDc2Olx0c2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc3LVxubmV0L3Rscy90bHNfc3RycC5jOjQ3ODpcdHNrYl9jb3B5X2hlYWRlcihzdHJwLVx1MDAzZWFuY2hvciwgZmlyc3QpO1xubmV0L3Rscy90bHNfc3RycC5jOjQ3OTpcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xubmV0L3Rscy90bHNfc3RycC5jLTQ4MC1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NDg0PWJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxubmV0L3Rscy90bHNfc3RycC5jOjUwMDpcdFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTAxLVx0fVxubmV0L3Rscy90bHNfc3RycC5jLTUwMi1cbm5ldC90bHMvdGxzX3N0cnAuYzo1MDM6XHRyeG0gPSBzdHJwX21zZyhzdHJwLVx1MDAzZWFuY2hvcik7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTA0LVx0cnhtLVx1MDAzZWZ1bGxfbGVuXHQ9IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO1xubmV0L3Rscy90bHNfc3RycC5jLTUwNS1cdHJ4bS1cdTAwM2VvZmZzZXRcdD0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0O1xubmV0L3Rscy90bHNfc3RycC5jOjUwNjpcdHRsbSA9IHRsc19tc2coc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jLTUwNy1cdHRsbS1cdTAwM2Vjb250cm9sXHQ9IHN0cnAtXHUwMDNlbWFyaztcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MjYtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTI3Olx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpO1xubmV0L3Rscy90bHNfc3RycC5jLTUyOC1cdGlmICghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pIHtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTMzLVxubmV0L3Rscy90bHNfc3RycC5jOjUzNDpcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xubmV0L3Rscy90bHNfc3RycC5jLTUzNS1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02MDE9dm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA3LVx0ZWxzZVxubmV0L3Rscy90bHNfc3RycC5jOjYwODpcdFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA5LVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02MjA9aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI1LVxubmV0L3Rscy90bHNfc3RycC5jOjYyNjpcdHN0cnAtXHUwMDNlYW5jaG9yID0gYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpO1xubmV0L3Rscy90bHNfc3RycC5jOjYyNzpcdGlmICghc3RycC1cdTAwM2VhbmNob3IpXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI4LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjQ3PXZvaWQgX190bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTY0OC17XG5uZXQvdGxzL3Rsc19zdHJwLmM6NjQ5Olx0dGxzX3N0cnBfYW5jaG9yX2ZyZWUoc3RycCk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCB1c2VzIGBmaXJzdCA9IHNrYl9zaGluZm8oc3RycC0mZ3Q7YW5jaG9yKS0mZ3Q7ZnJhZ19saXN0O2AgaW4gdGhlIGN1cnJlbnQga2VybmVsLCB3aGljaCBJIHVuZGVyc3RhbmQuIEJ1dCB0aGUgZGlmZiBwcm92aWRlZCBkb2VzbiYjMzk7dCBoYXZlICp0aGF0KiBsaW5lLiBJbnN0ZWFkLCBpdCBoYXMgYGZpcnN0ID0gc3RycC0mZ3Q7YW5jaG9yO2AuIFRoYXQgc2VlbXMgd3JvbmcuIExldCBtZSByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9tcHQmIzM5O3MgZGlmZi4uLgoKUmlnaHQsIGxvb2tpbmcgYWdhaW4gYXQgdGhlIGRpZmYgaW4gdGhlIHByb21wdCwgaXQgY2hhbmdlcyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGFjY2VwdCBhIGBsZW5gIHBhcmFtZXRlciBhbmQgaW50cm9kdWNlcyBgcmVtYWluaW5nYC4uLiBPa2F5LCBidXQgaXQgc3RpbGwgaW5pdGlhbGl6ZXMgYGZpcnN0YCBhcyBgc3RycC0mZ3Q7YW5jaG9yYCwgYW5kIHRoZW4gc2V0cyBgc2tiID0gZmlyc3Q7YC4gV2FpdCBhIG1pbnV0ZSwgbXkgYGdyZXBgIG91dHB1dCBmcm9tIHRoZSBjdXJyZW50IHRyZWUgc2hvd3MgYGZpcnN0ID0gc2tiX3NoaW5mbyhzdHJwLSZndDthbmNob3IpLSZndDtmcmFnX2xpc3Q7YC4gQWgsIHRoYXQmIzM5O3MgaXQhIE15IGdyZXAgaXMgc2hvd2luZyB0aGUgY29kZSAqYWZ0ZXIqIHRoaXMgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCBvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGl0LiBTbyB0aGUgY3VycmVudCBjb2RlIGRvZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgZnJhZ21lbnQgbGlzdCBhY2Nlc3MsIGFuZCB0aGlzIGRpZmYgaXMgc2hvd2luZyB0aGUgY2hhbmdlLgoKQnV0LCBpZiBgZmlyc3RgIGlzIGFzc2lnbmVkIGBzdHJwLSZndDthbmNob3JgLCB0aGVuIGBza2JgIGlzIGFsc28gYHN0cnAtJmd0O2FuY2hvcmAsIGFuZCB0aGVuIHdlIHJlYWQgYFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxYC4gTm93LCB0aGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIHRoZSBwcm9ibGVtLiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBhbGxvY2F0ZWQgd2l0aCBgYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpYC4gSXRzIGNvbnRyb2wgYmxvY2sgKGBjYmApIGlzICpub3QqIGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBidWchIGBhbGxvY19za2JgIHVzZXMgYGttZW1fY2FjaGVfYWxsb2Nfbm9kZWAgb3Igc2ltaWxhciwgd2hpY2ggdmVyeSBsaWtlbHkgZG9lc24mIzM5O3QgemVybyB0aGUgYGNiYCBmaWVsZCB1bmxlc3MgYF9fR0ZQX1pFUk9gIGlzIGV4cGxpY2l0bHkgdXNlZC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NrYmAgYWN0dWFsbHkgemVyb2VzIHRoZSBgY2JgIGZpZWxkLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMgaXNzdWUgaGVyZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBhbGxvY19za2JgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtc2V0LipjYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGludm9sdmVkIGluIHRoaXMgYXJlYToKCioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGd1dHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIG5lZWQgdG8gZGlnIGludG8gaG93IHRob3NlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmVzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBfX2FsbG9jX3NrYmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgY29yZSBvZiBob3cgb3VyIG5ldHdvcmtpbmcgZGF0YSBpcyBtYW5hZ2VkIGF0IHRoZSBwYWNrZXQgbGV2ZWwuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnkgaW5jb21pbmcgYW5kIG91dGdvaW5nIG5ldHdvcmsgcGFja2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcsIGRlYnVnZ2luZyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMsIGFuZCBwb3RlbnRpYWxseSwgY3JhZnRpbmcgYW55IGN1c3RvbSBuZXR3b3JraW5nIHNvbHV0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIEkmIzM5O20gd29ya2luZyB3aXRoIHRvZGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTYwNj1zdGF0aWMgdm9pZCAqa21hbGxvY19yZXNlcnZlKHVuc2lnbmVkIGludCAqc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjY1ODogKlx0X19hbGxvY19za2JcdC1cdGFsbG9jYXRlIGEgbmV0d29yayBidWZmZXJcbm5ldC9jb3JlL3NrYnVmZi5jLTY1OS0gKlx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NzMtICovXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3NS1cdFx0XHQgICAgaW50IGZsYWdzLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxubmV0L2NvcmUvc2tidWZmLmM6NzQ2OkVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNzQ3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTc2MT1zdHJ1Y3Qgc2tfYnVmZiAqX19uZXRkZXZfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVx0ICAgIChnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XHRcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCwgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cdFx0aWYgKCFza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9ODM4PXN0cnVjdCBza19idWZmICpuYXBpX2FsbG9jX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtODU0LVx0ICAgIChnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XHRcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCB8IFNLQl9BTExPQ19OQVBJLFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVx0XHRcdFx0ICBOVU1BX05PX05PREUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTAtXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItXHUwMDNlZGF0YV9sZW47XG5uZXQvY29yZS9za2J1ZmYuYzoyMTkxOlx0biA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cdFx0XHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjIyOS1cdGludCBmbGFncyA9IHNrYl9hbGxvY19yeF9mbGFnKHNrYikgfCAoZmNsb25lID8gU0tCX0FMTE9DX0ZDTE9ORSA6IDApO1xubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcdHN0cnVjdCBza19idWZmICpuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssIGZsYWdzLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc2tidWZmLmMtMjIzMS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNTAyPXN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVx0b2xkaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MjA6XHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gJiM0Mzsgc2tiLVx1MDAzZWxlbiAmIzQzOyBuZXd0YWlscm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXHRcdFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDQtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTQ1Olx0XHRcdG5za2IgPSBfX2FsbG9jX3NrYihoc2l6ZSAmIzQzOyBkb2Zmc2V0ICYjNDM7IGhlYWRyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNDk0Ni1cdFx0XHRcdFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCB0byBWYWxpZGF0ZSBDb250cm9sIEJsb2NrIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBfX2FsbG9jX3NrYmAgaGFuZGxlcyB0aGUgY29udHJvbCBibG9jayAoYGNiYCkuIFdlIGtub3cgdGhhdCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMgbGlrZSBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiBgX19hbGxvY19za2JgIGV4cGxpY2l0bHkgemVyb2VzIHRoaXMgYGNiYCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMg4oCTIGlmIGl0ICpkb2VzbiYjMzk7dCogemVybyBpdCwgd2UmIzM5O3JlIGxpa2VseSByZWx5aW5nIG9uIHNvbWUgb3RoZXIgaW5pdGlhbGl6YXRpb24gbWVjaGFuaXNtIGxhdGVyIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MgaWYgdGhvc2UgbWVjaGFuaXNtcyBhcmUgbWlzc2VkIG9yIGlmIG1lbW9yeSBpcyBub3QgbWFuYWdlZCBhcHByb3ByaWF0ZWx5LiBJZiBpdCAqZG9lcyogemVybyBpdCwgdGhhdCBnaXZlcyBhIGJhc2VsaW5lIGZvciBvdGhlciBvcGVyYXRpb25zIHRvIHdvcmsgb2ZmIG9mLiBVbHRpbWF0ZWx5IEkmIzM5O20gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG91ciBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBtZW1vcnkgcmVnaW9uIGFyZSBjb3JyZWN0LCBhbmQgcG90ZW50aWFsbHkgdG8gaWRlbnRpZnkgYSBoaWRkZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiB0aGVyZSBpcyBtb3JlIGluaXRpYWxpemF0aW9uIHRoYW4gbmVjZXNzYXJ5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3NDpcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gNjc1Olx0XHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4gNjc2Olx0e1xuIDY3NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gNjc4Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGU7XG4gNjc5Olx0XHR1OCAqZGF0YTtcbiA2ODA6XHRcbiA2ODE6XHRcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19SWCkpXG4gNjgyOlx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xuIDY4MzpcdFxuIDY4NDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfRkNMT05FKSB7XG4gNjg1Olx0XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcbiA2ODY6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2ODc6XHRcdH1cbiA2ODg6XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xuIDY4OTpcdFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxuIDY5MDpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xuIDY5MzpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQodHJ1ZSk7XG4gNjk0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA2OTU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTY6XHRcdH0gZWxzZSBpZiAoIWluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xuIDY5NzpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNjk4Olx0XHRcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XG4gNjk5Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFza2IpIHtcbiA3MDM6XHRmYWxsYmFjazpcbiA3MDQ6XHRcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xuIDcwNTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNzA2Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XHRza2J1ZmZfY2xlYXIoc2tiKTtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXG4gNzExOlx0XHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXG4gNzEyOlx0XHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cbiA3MTM6XHRcdCAqIEJvdGggc2tiLVx1MDAzZWhlYWQgYW5kIHNrYl9zaGFyZWRfaW5mbyBhcmUgY2FjaGUgbGluZSBhbGlnbmVkLlxuIDcxNDpcdFx0ICovXG4gNzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xuIDcxNjpcdFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcbiA3MTc6XHRcdFx0Z290byBub2RhdGE7XG4gNzE4Olx0XHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxuIDcxOTpcdFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXG4gNzIwOlx0XHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxuIDcyMTpcdFx0ICovXG4gNzIyOlx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA3MjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gaW4gdGhlIFNLQiBDb250cm9sIEJsb2NrKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBTb21ldGhpbmcgZmVlbHMgb2ZmLCBhbmQgSSBzdXNwZWN0IGEgc3VidGxlIGNvcnJ1cHRpb24gbWlnaHQgYmUgbHVya2luZyBzb21ld2hlcmUgaW4gdGhlIGBza2JgIGNvbnRyb2wgYmxvY2ssIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgY2JgIGZpZWxkIGlzIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaG93IGBjYmAgaXMgYmVpbmcgemVyb2VkIG91dCBvciBoYW5kbGVkIGluIGdlbmVyYWwuIEnigJltIHRoaW5raW5nIGBza2J1ZmZfY2xlYXJgIGlzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQ7IHRoYXQmIzM5O3Mgd2hlcmUgd2UgdHlwaWNhbGx5IGV4cGVjdCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciB3aGVuIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCBvciByZWN5Y2xlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHplcm9pbmcgYGNiYCB0aGVyZSwgd2hpY2ggdGhleSAqc2hvdWxkKiBiZS4KCkhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIHRoZXJlIGRpcmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgbnVhbmNlZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCB0aGVuIEkgc2hvdWxkIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgbWF5YmUgdGhlcmUmIzM5O3MgYW4gaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIHByZXBwZWQuIFBlcmhhcHMgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIGluc3RlYWQuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBpbml0aWFsaXphdGlvbiwgYXMgc29tZXRpbWVzIGluaXRpYWxpemF0aW9uIHdpbGwgaGFwcGVuIGluIGEgc3BvdCB3aGVyZSBpdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rLiBUaGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cmFwcGluZyB1cCBzb21lIFNLQiBvcGVyYXRpb25zLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgemVyb2luZyBpc24mIzM5O3QgaGFwcGVuaW5nIHdoZXJlIEkgZXhwZWN0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGJvdGggZnVuY3Rpb25zLCBiZWNhdXNlIGlmIGBjYmAgaXNuJiMzOTt0IGNvbnNpc3RlbnRseSBjbGVhcmVkLCB3ZSBjb3VsZCBoYXZlIHN0YWxlIGRhdGEgYmxlZWRpbmcgb3ZlciwgY2F1c2luZyBhbGwgc29ydHMgb2YgZXJyYXRpYyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIFNLQiBhbmQgaXRzIGNvbnRyb2wgYmxvY2sgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgc3BvdCBpZiBzb21ldGhpbmcmIzM5O3MgYW1pc3Mgd2l0aCBob3cgYGNiYCBpcyBiZWluZyBoYW5kbGVkLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgYSBtb3JlIGRlZXBseSByb290ZWQgaXNzdWUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgZWxpbWluYXRlIHBvc3NpYmxlIGlzc3VlcywgYW5kIGNvbmZpcm0gaWYgYGNiYCBpcyBjb25zaXN0ZW50bHkgc2V0IHRvIHplcm8uIFRoaXMgaXMgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHNrYnVmZl9jbGVhcmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUsICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHNrYnVmZl9jbGVhcmAsJiMzNDsgaW5kaWNhdGVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGdpdmVuIHRoZSBgc2tidWZmYCBwcmVmaXguIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWFuYWdpbmcgbmV0d29yayBwYWNrZXRzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBpdHNlbGYuCgpUaGUgZ29hbCBpcyBsaWtlbHkgdG8gZGVjb25zdHJ1Y3QgaXRzIG9wZXJhdGlvbjsgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBoYXBwZW5zIHdoZW4gYW4gYHNrYnVmZmAgaW5zdGFuY2UgaXMgJiMzNDtjbGVhcmVkLiYjMzQ7IFRoaXMgY291bGQgaW52b2x2ZSB6ZXJvaW5nIG91dCBtZW1vcnksIHJlbGVhc2luZyBhc3NvY2lhdGVkIHJlc291cmNlcyBsaWtlIGRhdGEgYnVmZmVycyBhbmQgbWV0YWRhdGEsIHBvc3NpYmx5IHVwZGF0aW5nIGludGVybmFsIGZsYWdzLCBhbmQgbWF5YmUgZXZlbiByZXR1cm5pbmcgdGhlIGBza2J1ZmZgIHRvIGEgcG9vbCBmb3IgcmV1c2UuIFRoZSBzcGVjaWZpY3MgYXJlIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBrZnJlZV9za2JgLCBgc2tiX3JlbGVhc2VfZGF0YWAsIGFueSBtYW5pcHVsYXRpb24gb2YgYGRhdGFgLCBgdGFpbGAsIGBsZW5gLCBgaGVhZGAsIGBuZXh0YCwgYHByZXZgIHBvaW50ZXJzLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gZW5zdXJpbmcgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgY29uY3VycmVudGx5IGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dC4gQSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc2tidWZmX2NsZWFyYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW50ZXJydXB0IGNvbnRleHRzIHdpbGwgYmUgY3J1Y2lhbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgd2l0aGluIHRoZSBjb2RlLCBhbmQgbWF5YmUgYWxzbyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaG9zZW4gaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBpZiBhbnkgb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMTc6XHR7XG4gMzE4Olx0XHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcbiAzMTk6XHRcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxuIDMyMDpcdFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFx1MDAzYz0gMTI4KTtcbiAzMjM6XHRcdG1lbXNldChza2IsIDAsIDEyOCk7XG4gMzI0Olx0XHRiYXJyaWVyKCk7XG4gMzI1Olx0XHRtZW1zZXQoKHZvaWQgKilza2IgJiM0MzsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHQvKipcbiAzMjk6XHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXG4gMzMwOlx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xuIDMzMTpcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcbiAzMzQ6XHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcbiAzMzU6XHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAgYW5kIHRoZSBTdHJ1Y3R1cmUgTGF5b3V0KioKClJpZ2h0LCBzbyBgc2tidWZmX2NsZWFyYCBpcyB3aXBpbmcgb3V0IHRoZSBpbml0aWFsIHBvcnRpb24gb2YgdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIGFsbCB0aGUgd2F5IHVwIHRvIHdoZXJlIHRoZSBgdGFpbGAgcG9pbnRlciBpcyBsb2NhdGVkLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhpcyBjbGVhcmluZyBvcGVyYXRpb24gYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGBza19idWZmYCBpcyBpbml0aWFsaXplZCBhbmQgaG93IG11Y2ggc3RhdGUgaXMgdHlwaWNhbGx5IHJlc2V0LgoKTm93LCBteSBuZXh0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgc3RydWN0dXJlcywgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIG9mZnNldCBvZiB0aGUgQ29udHJvbCBCbG9jaywgb3IgYGNiYC4gSSBuZWVkIHRvIHByZWNpc2VseSB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgZGF0YSByZXNpZGVzIHJlbGF0aXZlIHRvIHRoZSBgdGFpbGAgcG9pbnRlciwgYW5kIHRoZXJlZm9yZSBob3cgbXVjaCBvZiB0aGUgQ29udHJvbCBCbG9jayBJIHNob3VsZCBleHBlY3QgdG8gYmUgemVyb2VkIGJ5IGBza2J1ZmZfY2xlYXJgLiBJcyBpdCBiZWluZyBjbGVhcmVkPyBQYXJ0aWFsbHkgY2xlYXJlZD8gVGhpcyBoYXMgcmFtaWZpY2F0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgYnVmZmVyIEkgbmVlZCB0byByZXBvcHVsYXRlIGFmdGVyIHRoaXMgY2xlYXIgb3BlcmF0aW9uLiBJIG5lZWQgdGhhdCBgY2JgIG9mZnNldCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgb3IgdGhhdCBJJiMzOTttIHNldHRpbmcgdXAgdGhlIHJpZ2h0IHBhcnRzIGJlZm9yZSBoYW5kaW5nIGl0IG9mZiB0byBhbm90aGVyIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgcmVhbGx5IG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY2xlYXJpbmcgYW5kIGlmIG15IGFzc3VtcHRpb25zIGFyZSByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhci4qY2JcXFsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTkxOC1cdCAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5MTk6XHRjaGFyXHRcdFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBza19idWZmIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZmAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkYXRhIGxheW91dCBhbmQgaG93IHRoZSBkaWZmZXJlbnQgZmllbGRzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGB0YWlsYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBVbmRlcnN0YW5kaW5nIGl0cyBwb3NpdGlvbmluZyB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3QgaXMgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbG93LWxldmVsIHBhY2tldCBwcm9jZXNzaW5nIG9yIG9wdGltaXphdGlvbiBJJiMzOTttIHdvcmtpbmcgb24gcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YWlsOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTA5MS1cdC8qIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgYXQgdGhlIGVuZCwgc2VlIGFsbG9jX3NrYigpIGZvciBkZXRhaWxzLiAgKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTA5MjpcdHNrX2J1ZmZfZGF0YV90XHRcdHRhaWw7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwOTMtXHRza19idWZmX2RhdGFfdFx0XHRlbmQ7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzE2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzE3LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjcxODpcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNldGFpbDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjcxOS19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzMzPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzM0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjczNTpcdHJldHVybiBza2ItXHUwMDNldGFpbDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjczNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yOTEzPXN0YXRpYyBpbmxpbmUgaW50IHNrYl90YWlscm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjkxNTpcdHJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgPyAwIDogc2tiLVx1MDAzZWVuZCAtIHNrYi1cdTAwM2V0YWlsO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIFF1ZXVlIGluIHRoZSBUTFMgU3RyaW5nIFBhcnNlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgd29ya2luZyB3aXRoIHRoZSBgc2tfYnVmZmAgcXVldWUuIE15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0lmIGBjYmAgaXMgemVyb2VkIG91dCBieSBgc2tidWZmX2NsZWFyYCwgdGhlbiBgVENQX1NLQl9DQihza2IpLSZndDtzZXFgIHdvdWxkIGJlIHplcm8sJiMzNDsgd2hpY2ggc2VlbXMgbGlrZSBhIHByb2JsZW0uIEJ1dCB0aGVuLCBJIHNlZSB0aGF0IGBza2JgIGlzIHNldCB0byBgZmlyc3RgLCB3aGljaCBpcyBgc2tiX3NoaW5mbyhzdHJwLSZndDthbmNob3IpLSZndDtmcmFnX2xpc3RgLiAgSG1tLCB3YWl0IGEgbWludXRlLCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIHdhcyBhIGNoYW5nZSB0byB0aGlzIGxpbmUsIGJ1dCBhZnRlciByZS1yZWFkaW5nIHRoZSBwcm92aWRlZCBkaWZmLCBJIHNlZSB0aGF0IHRoZSBsaW5lIGBmaXJzdCA9IHN0cnAtJmd0O2FuY2hvcjtgIGlzIE5PVCBjaGFuZ2VkIGluIHRoaXMgZGlmZiEKCk9rYXksIHNvIHRoYXQgbWVhbnMgYGZpcnN0YCBpcyBzZXQgdG8gYHN0cnAtJmd0O2FuY2hvcmAsIGFuZCB0aHVzIGBza2JgIGdldHMgc2V0IHRvIGBzdHJwLSZndDthbmNob3JgLiBUaGlzIG1lYW5zIGBzZXEgPSBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcTtgIGlzIHJlYWRpbmcgZnJvbSBgc3RycC0mZ3Q7YW5jaG9yYC4gQnV0IEkga25vdyB0aGF0IGBzdHJwLSZndDthbmNob3JgJiMzOTtzIGBjYmAgaXMgemVyb2VkIHdoZW4gaXQmIzM5O3MgYWxsb2NhdGVkLCB3aGljaCBpcyB3aHkgSSBzdGFydGVkIHRvIHdvcnJ5IQoKQWhhISBOb3cgSSByZW1lbWJlciB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBjYWxscyBgdGNwX3JlY3Zfc2tiYCB3aGljaCBhbGxvY2F0ZXMgYGZpcnN0YCwgYW5kIHRoZW4gYHNrYl9jb3B5X2hlYWRlcihzdHJwLSZndDthbmNob3IsIGZpcnN0KTtgIGlzIGNhbGxlZCEgQW5kIHRoYXQgbWVhbnMgdGhlIGBjYmAgaXMgY29waWVkIGZyb20gYGZpcnN0YCB0byBgc3RycC0mZ3Q7YW5jaG9yYCEgT2ssIHRoYXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYHNrYl9jb3B5X2hlYWRlcmAgZnVuY3Rpb24gbm93LCB0byBlbnN1cmUgSSYjMzk7bSBjb3JyZWN0IGluIG15IHVuZGVyc3RhbmRpbmcsIGJ1dCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2NvcHlfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9OTQyPWludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk2Ny1cdHNrYl9yZXNlcnZlKG5za2IsIGhlYWRyb29tKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjk2ODpcdHNrYl9jb3B5X2hlYWRlcihuc2tiLCBza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtOTY5LVx0c2tiX21hcmtfZm9yX3JlY3ljbGUobnNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0MT1FWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Mi1cbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDM6dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxNTAtfVxubmV0L2NvcmUvc2tidWZmLmM6MjE1MTpFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2hlYWRlcik7XG5uZXQvY29yZS9za2J1ZmYuYy0yMTUyLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMDItXG5uZXQvY29yZS9za2J1ZmYuYzoyMjAzOlx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0yMjA0LVx0cmV0dXJuIG47XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjY3LVxubmV0L2NvcmUvc2tidWZmLmM6MjI2ODpcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtMjI2OS1vdXQ6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjU0MS1cbm5ldC9jb3JlL3NrYnVmZi5jOjI1NDI6XHRza2JfY29weV9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc2tiX2NvcHlfaGVhZGVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgc2tiX2NvcHlfaGVhZGVyYC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGl0cyByb2xlIGluIGNyZWF0aW5nIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlci4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgdGhpcyBiZWluZyBjYWxsZWQgZHVyaW5nIGEgY2xvbmluZyBvcGVyYXRpb24sIG9yIHBlcmhhcHMgZm9yIHNlZ21lbnRhdGlvbiBvZmZsb2FkLCBvciBpcyB0aGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEgZGV2aWNlIGRyaXZlcj8gSSBrbm93IHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bGwgZXhwZWN0IHRvIHNlZSBjYXJlZnVsIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGlmIGFwcGxpY2FibGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBgc2tiLSZndDtkYXRhYCwgYHNrYi0mZ3Q7bGVuYCwgYHNrYi0mZ3Q7bWFjX2hlYWRlcmAsIGFuZCBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0cy4gSXMgaXQgcGVyZm9ybWluZyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgaW5wdXQgU0tCIHRvIGVuc3VyZSBpdCYjMzk7cyBpbiBhIGdvb2Qgc3RhdGUgYmVmb3JlIGNvcHlpbmc/IExldCYjMzk7cyBjaGVjayBob3cgdGhlIG5ldyBTS0IgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBhbmQgaG93IGl0cyBtZXRhZGF0YSBpcyBjb3BpZWQgb3Zlci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uPyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIGNoZWNrc3VtIG9mZmxvYWQgZGV0YWlscz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBvdmVyYWxsIGRhdGFwYXRoIHBlcmZvcm1hbmNlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY29weSBvdmVyaGVhZCBpbiBkaWZmZXJlbnQgdXNlLWNhc2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHNwZWNpZmljIENQVSBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE0MzpcdHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4yMTQ0Olx0e1xuMjE0NTpcdFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuMjE0NjpcdFxuMjE0NzpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb19zaXplID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb19zaXplO1xuMjE0ODpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb19zZWdzID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb19zZWdzO1xuMjE0OTpcdFx0c2tiX3NoaW5mbyhuZXcpLVx1MDAzZWdzb190eXBlID0gc2tiX3NoaW5mbyhvbGQpLVx1MDAzZWdzb190eXBlO1xuMjE1MDpcdH1cbjIxNTE6XHRFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2hlYWRlcik7XG4yMTUyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTUzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19jb3B5X3NrYl9oZWFkZXJgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBfX2NvcHlfc2tiX2hlYWRlcmAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29yZSBtZWNoYW5pY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXNzZW50aWFsIHRhc2sgb2YgY29weWluZyB0aGUgaGVhZGVyIGRhdGEgZnJvbSBvbmUgU0tCIHRvIGFub3RoZXIuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLCBvZnRlbiBlbXBsb3llZCBkdXJpbmcgcGFja2V0IGNsb25pbmcgb3Igd2hlbiBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgbnVhbmNlcyByZWdhcmRpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipIZWFkZXIgTGVuZ3RoOioqIEhvdyBkb2VzIGl0IGRldGVybWluZSB0aGUgYW1vdW50IG9mIGRhdGEgdG8gY29weSwgYW5kIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaW4gZGlmZmVyaW5nIGhlYWRlciBsZW5ndGhzIGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gU0tCcz8gV2UgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuCiogICAqKlNLQiBNZXRhZGF0YToqKiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1ldGFkYXRhIGZpZWxkcyB0aGF0ICphcmUqIGFuZCAqYXJlIG5vdCogY29waWVkLiBUaGluZ3MgbGlrZSBjaGVja3N1bSBzdGF0dXMsIFZMQU4gdGFncywgYW5kIGFueSBvdGhlciByZWxldmFudCBmbGFncyBhcmUgaW1wb3J0YW50LiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGluZ3MgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gQXJlIGFueSBhc3BlY3RzIG9mIHRoZSBkZXN0aW5hdGlvbiBTS0ImIzM5O3MgbWV0YWRhdGEgKnVwZGF0ZWQqIGluIHRoZSBwcm9jZXNzPwoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEkmIzM5O20gd29uZGVyaW5nIGhvdyB0aGUgZnVuY3Rpb24gbWFuYWdlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGR1cmluZyBoZWFkZXIgY29weS4gSXMgdGhlcmUgYSBiYWNrLW9mZiBzdHJhdGVneT8KKiAgICoqUGVyZm9ybWFuY2UgQ29uc2lkZXJhdGlvbnM6KiogR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBvbiB0aGUgY3JpdGljYWwgcGF0aCwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgdXNlZCBoZXJlLiBJcyB0aGVyZSBhbnkgYWxpZ25tZW50IHBhZGRpbmc/IFZlY3Rvcml6YXRpb24/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgY29weSBmYWlscz8gV2hhdCBzaWduYWxzIGFyZSByZXR1cm5lZCwgYW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0/IEFyZSB0aGVyZSBhbnkgaW52YXJpYW50cyBtYWludGFpbmVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPwoKRXNzZW50aWFsbHksIEkgd2FudCB0byByYXBpZGx5IGVuc3VyZSB0aGF0IG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uIHJlbWFpbnMgYWNjdXJhdGUgYW5kLCBwZXJoYXBzLCB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgYSBkZWVwZXIgZGl2ZSBtYXkgYmUgd2FycmFudGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGtlcm5lbCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9za2JfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTUtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU3LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xubmV0L2NvcmUvc2tidWZmLmM6MTYwNTogKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxubmV0L2NvcmUvc2tidWZmLmMtMTYwNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjEyLVx0bi1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za2J1ZmYuYzoxNjEzOlx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NTctXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4Olx0X19jb3B5X3NrYl9oZWFkZXIobiwgZmlyc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtMTY1OS1cdG4tXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ1Olx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Ni1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDczMi1cdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NDczMzpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3MzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTYyOlx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00OTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDMzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fY29weV9za2JfaGVhZGVyYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMgaGVyZTogdGhlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGNhY2hlIGxpbmUgYmVoYXZpb3IsIGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggRE1BIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgcGxhdGZvcm0/IEFyZSB3ZSB4ODYsIEFSTSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBpbXBsaWNhdGlvbnMgb2YgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scyBhcmUgYWxyZWFkeSBidWJibGluZyB1cC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBmYWxzZSBzaGFyaW5nLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgaGVhdmlseSBtdWx0aS10aHJlYWRlZCwgd2hpY2gsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIGxpa2VseS4KClRoZSBjb3JlIG9mIGl0LCB0aG91Z2gsIGlzIGVzc2VudGlhbGx5IGEgbWVtY3B5LCBidXQgdGFpbG9yZWQgZm9yIFNLQnMuIEkgbmVlZCB0byBiZSBhc2tpbmcgbXlzZWxmIHRoZSBxdWVzdGlvbiBhYm91dCBpZiBpdCYjMzk7cyB1c2luZyB0aGUgcmlnaHQgbWVtY3B5IHZhcmlhbnQuIElzIGl0IGBtZW1jcHlgLCBgX19tZW1jcHlgLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgdmVjdG9yaXplZCBpbnN0cnVjdGlvbiwgc3VjaCBhcyBgbWVtY3B5X25lb25gPyBJcyBpdCB0YWtpbmcgYWR2YW50YWdlIG9mIGFueSBwcmVmZXRjaGluZz8gTWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvbiB0aGUga2VybmVsIGFyZSB2ZXJ5IGltcG9ydGFudC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgY29weSBlbmdpbmUgY2FwYWJpbGl0aWVzIGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IE5JQyBvciBETUEgYWNjZWxlcmF0aW9uLiBIb3cgYXJlIHdlIGhhbmRsaW5nIGhlYWRlciBvZmZzZXRzLCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBzaXplIG9mIHRoZSBoZWFkZXIgYmVpbmcgY29waWVkPyBBbnkgY2hhbmNlIG9mIGFsaWdubWVudCBpc3N1ZXMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgdW5hbGlnbmVkIGFjY2VzcyBhbmQgc2VlIGlmIGFueSBjbGV2ZXIgdHJpY2tzIGFyZSB1c2VkIHRvIG1pdGlnYXRlIHRoYXQuCgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gU0tCIGlzIG1hbGZvcm1lZD8gRG8gd2UgaGF2ZSBzdWZmaWNpZW50IGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz8gVGhpcyBpcyBrZXJuZWwtbGV2ZWwgY29kZSwgYWZ0ZXIgYWxsOyBzdGFiaWxpdHkgaXMgcGFyYW1vdW50LgoKRmluYWxseSwgd2hhdCYjMzk7cyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgc29mdGlycSwgb3IgYSBwcm9jZXNzIGNvbnRleHQ/IFRoaXMgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2VzIHRoZSBhbGxvd2VkIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBmb3IgY29udGV4dCBzd2l0Y2hlcy4gVGhpcyYjMzk7bGwgaW1wYWN0IG91ciBhbmFseXNpcyBvbiB3aGV0aGVyIHRoaXMgaXMgYW4gYXJlYSBmb3IgYW55IG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aG9zZSBhbnN3ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTU2Olx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbjE1NTc6XHR7XG4xNTU4Olx0XHRuZXctXHUwMDNldHN0YW1wXHRcdD0gb2xkLVx1MDAzZXRzdGFtcDtcbjE1NTk6XHRcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cdTAwM2VzayAqL1xuMTU2MDpcdFx0bmV3LVx1MDAzZWRldlx0XHQ9IG9sZC1cdTAwM2VkZXY7XG4xNTYxOlx0XHRtZW1jcHkobmV3LVx1MDAzZWNiLCBvbGQtXHUwMDNlY2IsIHNpemVvZihvbGQtXHUwMDNlY2IpKTtcbjE1NjI6XHRcdHNrYl9kc3RfY29weShuZXcsIG9sZCk7XG4xNTYzOlx0XHRfX3NrYl9leHRfY29weShuZXcsIG9sZCk7XG4xNTY0Olx0XHRfX25mX2NvcHkobmV3LCBvbGQsIGZhbHNlKTtcbjE1NjU6XHRcbjE1NjY6XHRcdC8qIE5vdGUgOiB0aGlzIGZpZWxkIGNvdWxkIGJlIGluIHRoZSBoZWFkZXJzIGdyb3VwLlxuMTU2NzpcdFx0ICogSXQgaXMgbm90IHlldCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvIGhhdmUgYSAxNiBiaXQgaG9sZVxuMTU2ODpcdFx0ICovXG4xNTY5Olx0XHRuZXctXHUwMDNlcXVldWVfbWFwcGluZyA9IG9sZC1cdTAwM2VxdWV1ZV9tYXBwaW5nO1xuMTU3MDpcdFxuMTU3MTpcdFx0bWVtY3B5KFx1MDAyNm5ldy1cdTAwM2VoZWFkZXJzLCBcdTAwMjZvbGQtXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cdTAwM2VoZWFkZXJzKSk7XG4xNTcyOlx0XHRDSEVDS19TS0JfRklFTEQocHJvdG9jb2wpO1xuMTU3MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGNzdW0pO1xuMTU3NDpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGhhc2gpO1xuMTU3NTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHByaW9yaXR5KTtcbjE1NzY6XHRcdENIRUNLX1NLQl9GSUVMRChza2JfaWlmKTtcbjE1Nzc6XHRcdENIRUNLX1NLQl9GSUVMRCh2bGFuX3Byb3RvKTtcbjE1Nzg6XHRcdENIRUNLX1NLQl9GSUVMRCh2bGFuX3RjaSk7XG4xNTc5Olx0XHRDSEVDS19TS0JfRklFTEQodHJhbnNwb3J0X2hlYWRlcik7XG4xNTgwOlx0XHRDSEVDS19TS0JfRklFTEQobmV0d29ya19oZWFkZXIpO1xuMTU4MTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hY19oZWFkZXIpO1xuMTU4MjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3Byb3RvY29sKTtcbjE1ODM6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl90cmFuc3BvcnRfaGVhZGVyKTtcbjE1ODQ6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9uZXR3b3JrX2hlYWRlcik7XG4xNTg1Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbWFjX2hlYWRlcik7XG4xNTg2Olx0XHRDSEVDS19TS0JfRklFTEQobWFyayk7XG4xNTg3Olx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcbjE1ODg6XHRcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcbjE1ODk6XHQjZW5kaWZcbjE1OTA6XHQjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbjE1OTE6XHRcdENIRUNLX1NLQl9GSUVMRChuYXBpX2lkKTtcbjE1OTI6XHQjZW5kaWZcbjE1OTM6XHRcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xuMTU5NDpcdCNpZmRlZiBDT05GSUdfWFBTXG4xNTk1Olx0XHRDSEVDS19TS0JfRklFTEQoc2VuZGVyX2NwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUGFyc2VyIEJ1ZyBhbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbuKAlGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNvcHlpbmcgdGhlIFRDUCBjb250cm9sIGJsb2NrIChgY2JgKSBmcm9tIGFuIG9sZCBTS0IgaW50byBhIG5ldyBvbmUuIFRoZSBgY2JgIGluIHRoZSBgZmlyc3RgIFNLQiBpcyBzZXQgdXAgYnkgdGhlIFRDUCBzdGFjayBpdHNlbGYuIFRoaXMgbWVhbnMgYFRDUF9TS0JfQ0Ioc3RycC0mZ3Q7YW5jaG9yKS0mZ3Q7c2VxYCBzaG91bGQgYmUgdmFsaWQgYW5kIGluaXRpYWxpemVkLiBCdXQgd2hlcmUmIzM5O3MgdGhlIGJ1Zz8gSXQgaGFzIHRvIGJlIGluIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AuIExldCBtZSBzZWUuLi4KCkFoLCByaWdodCEgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgbG9vcCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGNhbiBkZXJlZmVyZW5jZSBhIG51bGwgcG9pbnRlciBpZiBgcmVtYWluaW5nYCBleGNlZWRzIHRoZSB0b3RhbCBsZW5ndGggb2YgYWxsIHRoZSBTS0JzIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhlIGxpc3QgZW5kcyB1cCBiZWluZyBleGhhdXN0ZWQsIGBza2JgIGJlY29tZXMgTlVMTC4gIGBUQ1BfU0tCX0NCKHNrYilgIHRoZW4gdHJpZXMgdG8gYWNjZXNzIGAmYW1wO05VTEwtJmd0O2NiWzBdYCwgcmVzdWx0aW5nIGluIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGtlcm5lbCBvb3BzLCBlYXN5LiBJcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlPyBObywgSXQmIzM5O3MgZWl0aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQgb2YgYm91bmRzIHJlYWQsIGRlcGVuZGluZyBvbiB3aGF0IGBza2ItJmd0O25leHRgIHBvaW50cyB0by4gIFRoZSBgZnJhZ19saXN0YCBpcyBOVUxMLXRlcm1pbmF0ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLiBJdCBhZGRzIGNoZWNrcyB3aXRoIGBUTFNfSEVBREVSX1NJWkVgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHRsc19yeF9tc2dfc2l6ZWAgd2FzIGNhbGxlZCBkaXJlY3RseS4gVGhpcyBmdW5jdGlvbiB0aGVuIHZhbGlkYXRlcyBoZWFkZXIgc2l6ZSBieSBjaGVja2luZyB0aGUgYHNrYi0mZ3Q7bGVuYC4gIFRoZSBgc2tiLSZndDtsZW5gIGhlcmUgaXMgZGV0ZXJtaW5lZCBieSBgc3RycC0mZ3Q7YW5jaG9yLSZndDtsZW5gLCBhbmQgdGhhdCBpcyBpbml0aWFsaXplZCBieSBgaW5xYCAodGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlKSwgYW5kIHRoaXMgY2FuIGJlIGxlc3MgdGhhbiBgVExTX0hFQURFUl9TSVpFYCwgYW5kIGB0bHNfcnhfbXNnX3NpemVgIG1pZ2h0IHJldHVybiAwIChpZiBub3QgZW5vdWdoIGJ5dGVzIGFyZSB0aGVyZSkuCgpgc2tiX2NvcHlfYml0c2AgaXMgdGhlIGlzc3VlLCBpdCBoYXMgdGhlIGFiaWxpdHkgdG8gdHJhdmVyc2UgdGhlIHF1ZXVlIHRocm91Z2ggYGZyYWdfbGlzdGAuICBJZiBgZnJhZ19saXN0YCBkb2VzIG5vdCBoYXZlIGVub3VnaCBieXRlcywgaXQgcmV0dXJucyBhbiBlcnJvciBzdWNoIGFzIGAtRUZBVUxUYCAuICBBbmQgYHRsc19yeF9tc2dfc2l6ZWAgYWxzbyBoYW5kbGVzIHRoaXMgY2FzZSBhbmQgd291bGQgcmV0dXJuIGAtRUZBVUxUYC4gU28gaXQgc2VlbXMgYHRsc19yeF9tc2dfc2l6ZWAgaXRzZWxmIHdhcyBoYW5kbGluZyBjYXNlcyB3aGVyZSBub3QgZW5vdWdoIGJ5dGVzIHdlcmUgYXZhaWxhYmxlLCByaWdodD8gVGhlbiB3aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGUgbmV3IGNoZWNrcz8KClRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIHBhdGNoIGlzIGFkZGluZyBhIGNoZWNrIGZvciAqY29udGlndW91cyogc2VxdWVuY2Ugc3BhY2Ugd2l0aGluIHRoZSBTS0JzLCB3aGljaCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIHJlc3BvbnNpYmxlIGZvci4gIGBza2JfY29weV9iaXRzYCBjb3BpZXMgd2l0aG91dCBhbnkgY2hlY2tzIG9uIHNlcXVlbmNlIG51bWJlci4gSXQgaXMgY2hlY2tpbmcgdGhhdCB0aGUgU0tCcyBhcmUgY29udGlndW91cywgYW5kIG5vdCBvdmVybGFwcGluZy4gSXQgYWxzbyBjaGVja3MgdGhhdCB0aGUgU0tCcyBhcmUgb2YgdGhlIHNhbWUgZGVjcnlwdGVkIHN0YXRlLiAgSWYgbm90LCB0aGUgZGF0YSBjb3BpZWQgd291bGQgYmUgYSBtZXNzLiAgQnV0IHRoZXNlIGNoZWNrcyBqdXN0IGVuc3VyZSB0aGF0IHRoZSBieXRlcyBhcmUgbm90IG1peGVkLgoKV2FpdCwgaXMgdGhlcmUgYW55IGNhc2Ugd2hlcmUgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIGZyb20gdGhlIHNrYiBkYXRhIGJ1ZmZlcnMsIHdoaWNoIGNvbnRhaW4gdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBkYXRhIGlzIGluaXRpYWxpemVkLgoKSGFuZyBvbi4gV2hhdCBpZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIGNhbGxlZCAqd2l0aCogYHN0cnAtJmd0O3N0bS5mdWxsX2xlbmAgKHRoZSBmdWxsIGV4cGVjdGVkIG1lc3NhZ2UgbGVuZ3RoKT8gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIGNhbGxlZCAqYWZ0ZXIqIGB0bHNfcnhfbXNnX3NpemVgIGFuZCBjaGVja2VkIHRoZSBlbnRpcmUgbWVzc2FnZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29uZGl0aW9uIGByZW1haW5pbmdgICh3aGljaCBpcyBgb2Zmc2V0ICYjNDM7IHN0cnAtJmd0O3N0bS5mdWxsX2xlbmApIGNhbiBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgU0tCIHF1ZXVlIGxlbmd0aC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgc2FtZSBOVUxMIGRlcmVmZXJlbmNlLgoKSG93ZXZlciwgdGhlIGxvZ2ljICpiZWZvcmUqIGNhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBpbmNsdWRlcyBzb21lIGNoZWNrczogYHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtJmd0O2FuY2hvcilgIGFuZCBgaWYgKHN6ICZndDsgaW5xKSByZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO2AuICBTbywgaWYgYHN0cnAtJmd0O3N0bS5mdWxsX2xlbmAgKG5vdyBgc3pgKSBpcyBncmVhdGVyIHRoYW4gYGlucWAsIHRoZW4gYHRsc19zdHJwX3JlYWRfY29weWAgZ2V0cyBjYWxsZWQsIGFuZCB3ZSAqYXZvaWQqIGNhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBhdCBhbGwhIFRoaXMgbWVhbnMgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCB3aWxsICpvbmx5KiBnZXQgY2FsbGVkIHdoZW4gd2UgKmRvKiBoYXZlIGF0IGxlYXN0IGVub3VnaCBkYXRhLCBtYWtpbmcgdGhlIE5VTEwgcG9pbnRlciBzY2VuYXJpbyBpbXBvc3NpYmxlLgoKU28gd2h5IHRoZSBjaGFuZ2U/IEFoISBUaGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB0byB0YWtlIGBsZW5gIGFzIGFuIGFyZ3VtZW50IHNvIHRoZXkgY2FuIGNhbGwgaXQgd2l0aCBgVExTX0hFQURFUl9TSVpFYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbiAzOTE6XHR7XG4gMzkyOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gMzkzOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAzOTQ6XHRcdGludCBuZWVkX3NwYywgbGVuO1xuIDM5NTpcdFxuIDM5NjpcdFx0LyogSWYgdGhlIHJidWYgaXMgc21hbGwgb3IgcmN2IHdpbmRvdyBoYXMgY29sbGFwc2VkIHRvIDAgd2UgbmVlZFxuIDM5NzpcdFx0ICogdG8gcmVhZCB0aGUgZGF0YSBvdXQuIE90aGVyd2lzZSB0aGUgY29ubmVjdGlvbiB3aWxsIHN0YWxsLlxuIDM5ODpcdFx0ICogV2l0aG91dCBwcmVzc3VyZSB0aHJlc2hvbGQgb2YgSU5UX01BWCB3aWxsIG5ldmVyIGJlIHJlYWR5LlxuIDM5OTpcdFx0ICovXG4gNDAwOlx0XHRpZiAobGlrZWx5KHFzaG9ydCBcdTAwMjZcdTAwMjYgIXRjcF9lcG9sbGluX3JlYWR5KHN0cnAtXHUwMDNlc2ssIElOVF9NQVgpKSlcbiA0MDE6XHRcdFx0cmV0dXJuIDA7XG4gNDAyOlx0XG4gNDAzOlx0XHRzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdC8qIElmIHdlIGRvbiYjMzk7dCBrbm93IHRoZSBsZW5ndGggZ28gbWF4IHBsdXMgcGFnZSBmb3IgY2lwaGVyIG92ZXJoZWFkICovXG4gNDA2Olx0XHRuZWVkX3NwYyA9IHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuID86IFRMU19NQVhfUEFZTE9BRF9TSVpFICYjNDM7IFBBR0VfU0laRTtcbiA0MDc6XHRcbiA0MDg6XHRcdGZvciAobGVuID0gbmVlZF9zcGM7IGxlbiBcdTAwM2UgMDsgbGVuIC09IFBBR0VfU0laRSkge1xuIDQwOTpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZShzdHJwLVx1MDAzZXNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuIDQxMDpcdFx0XHRpZiAoIXBhZ2UpIHtcbiA0MTE6XHRcdFx0XHR0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJwKTtcbiA0MTI6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0MTM6XHRcdFx0fVxuIDQxNDpcdFxuIDQxNTpcdFx0XHRza2JfZmlsbF9wYWdlX2Rlc2Moc3RycC1cdTAwM2VhbmNob3IsIHNoaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MzssXG4gNDE2Olx0XHRcdFx0XHQgICBwYWdlLCAwLCAwKTtcbiA0MTc6XHRcdH1cbiA0MTg6XHRcbiA0MTk6XHRcdHNoaW5mby1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xuIDQyMDpcdFxuIDQyMTpcdFx0c3RycC1cdTAwM2Vjb3B5X21vZGUgPSAxO1xuIDQyMjpcdFx0c3RycC1cdTAwM2VzdG0ub2Zmc2V0ID0gMDtcbiA0MjM6XHRcbiA0MjQ6XHRcdHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbiA9IDA7XG4gNDI1Olx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2VkYXRhX2xlbiA9IDA7XG4gNDI2Olx0XHRzdHJwLVx1MDAzZWFuY2hvci1cdTAwM2V0cnVlc2l6ZSA9IHJvdW5kX3VwKG5lZWRfc3BjLCBQQUdFX1NJWkUpO1xuIDQyNzpcdFxuIDQyODpcdFx0dGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XG4gNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFByb2Nlc3NpbmcqKgoKT2theSwgc28gYHRsc19zdHJwX3JlYWRfY29weWAgaXMgYWxsb2NhdGluZyBtZW1vcnkgcGFnZXMsIGFuZCBjcnVjaWFsbHksIGl0JiMzOTtzIHNldHRpbmcgYHN0cnAtJmd0O2NvcHlfbW9kZSA9IDFgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBrZXksIEkgc2VlLiBUaGVuIGl0IGltbWVkaWF0ZWx5IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbihzdHJwKWAuIFJpZ2h0LCBzbyB0aGlzIGBjb3B5aW5gIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBkYXRhIHRyYW5zZmVyIGZyb20gdGhlIFRDUCByZWNlaXZlIHF1ZXVlICphY3R1YWxseSogdGFrZXMgcGxhY2UsIGZlZWRpbmcgdGhlIGFsbG9jYXRlZCBwYWdlcy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24gdG8gY29uZmlybSBteSB0aGlua2luZy4gR290dGEgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgY29weSBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc3RycF9yZWFkX2NvcHlpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNzUtXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc2OnN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzc3LXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzkwPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxubmV0L3Rscy90bHNfc3RycC5jOjQyODpcdHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jLTQyOS1cbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01MjEtXHRpZiAodW5saWtlbHkoc3RycC1cdTAwM2Vjb3B5X21vZGUpKVxubmV0L3Rscy90bHNfc3RycC5jOjUyMjpcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xubmV0L3Rscy90bHNfc3RycC5jLTUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwuICYjMzQ7dGxzJiMzNDsgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UsIGFuZCAmIzM0O3N0cnAmIzM0OyBsaWtlbHkgaW1wbGllcyBzb21lIHN0cmluZyBwcm9jZXNzaW5nIG9yIGNvcHlpbmcgb3BlcmF0aW9uLiAmIzM0O1JlYWQmIzM0OyBpbmRpY2F0ZXMgdGhpcyBpcyBhYm91dCBwdWxsaW5nIGRhdGEgaW4uIEFuZCAmIzM0O2NvcHlpbiYjMzQ7IGlzIGludGVyZXN0aW5nIC0gaXQgaW1wbGllcyBjb3B5aW5nIGRhdGEgKmludG8qIGEgc3BlY2lmaWMgbG9jYXRpb24sIHBlcmhhcHMgYSBidWZmZXIgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHJlYWRpbmcgc3RyaW5nIGRhdGEgZnJvbSBzb21lIHNvdXJjZSwgbGlrZWx5IGludG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBlbnN1cmluZyB0aHJlYWQtc2FmZXR5IHdoZW4gaGFuZGxpbmcgc3RyaW5ncywgcGVyaGFwcyB3aGVuIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbiBkYXRhIHdpdGhpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSAmIzM0O2NvcHlpbiYjMzQ7IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBwcm90ZWN0aW9uIGluIHBsYWNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGRlZXBlciB0byBzZWUgKndoZXJlKiB0aGlzIGRhdGEgaXMgY29waWVkIGFuZCAqaG93KiB0aGF0IGNvcHkgb3BlcmF0aW9uIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgdGhyZWFkLXNhZmV0eS4gSXMgaXQgYSBkZWVwIGNvcHk/IERvZXMgaXQgdXNlIGEgbG9jaz8gQXJlIHRoZXJlIGFueSBzaXplIGxpbWl0cyBvciBlcnJvciBoYW5kbGluZyBpbnZvbHZlZD8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzY6XHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weWluKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxuIDM3NzpcdHtcbiAzNzg6XHRcdHJlYWRfZGVzY3JpcHRvcl90IGRlc2M7XG4gMzc5Olx0XG4gMzgwOlx0XHRkZXNjLmFyZy5kYXRhID0gc3RycDtcbiAzODE6XHRcdGRlc2MuZXJyb3IgPSAwO1xuIDM4MjpcdFx0ZGVzYy5jb3VudCA9IDE7IC8qIGdpdmUgbW9yZSB0aGFuIG9uZSBza2IgcGVyIGNhbGwgKi9cbiAzODM6XHRcbiAzODQ6XHRcdC8qIHNrIHNob3VsZCBiZSBsb2NrZWQgaGVyZSwgc28gb2theSB0byBkbyByZWFkX3NvY2sgKi9cbiAzODU6XHRcdHRjcF9yZWFkX3NvY2soc3RycC1cdTAwM2VzaywgXHUwMDI2ZGVzYywgdGxzX3N0cnBfY29weWluKTtcbiAzODY6XHRcbiAzODc6XHRcdHJldHVybiBkZXNjLmVycm9yO1xuIDM4ODpcdH1cbiAzODk6XHRcbiAzOTA6XHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYHRsc19zdHJwX2NvcHlpbmAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y3BfcmVhZF9zb2NrYCBjYWxscyBgdGxzX3N0cnBfY29weWluYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRhdGEgdHJhbnNmZXIgcmVsYXRlZCB0byBUTFMgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGluYm91bmQgVExTIGRhdGEgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFRDUCBjb25uZWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGB0bHNfc3RycF9jb3B5aW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBkYXRhIGlzIGJlaW5nIGNvcGllZCBpbiBhbmQgcHJvY2Vzc2VkLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSBlbmNyeXB0ZWQgVExTIGRhdGEgaXMgYmVpbmcgZGVjcnlwdGVkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGl0cyBtZW1vcnkgaGFuZGxpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVExTIGxpYnJhcnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDI6XHRzdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiAzNDM6XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgaW5fbGVuKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwID0gKHN0cnVjdCB0bHNfc3RycGFyc2VyICopZGVzYy1cdTAwM2VhcmcuZGF0YTtcbiAzNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMzQ3Olx0XHRpbnQgcmV0O1xuIDM0ODpcdFxuIDM0OTpcdFx0aWYgKHN0cnAtXHUwMDNlbXNnX3JlYWR5KVxuIDM1MDpcdFx0XHRyZXR1cm4gMDtcbiAzNTE6XHRcbiAzNTI6XHRcdHNrYiA9IHN0cnAtXHUwMDNlYW5jaG9yO1xuIDM1MzpcdFx0aWYgKCFza2ItXHUwMDNlbGVuKVxuIDM1NDpcdFx0XHRza2JfY29weV9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xuIDM1NTpcdFx0ZWxzZVxuIDM1NjpcdFx0XHRzdHJwLVx1MDAzZW1peGVkX2RlY3J5cHRlZCB8PSAhIXNrYl9jbXBfZGVjcnlwdGVkKHNrYiwgaW5fc2tiKTtcbiAzNTc6XHRcbiAzNTg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKSBcdTAwMjZcdTAwMjYgc3RycC1cdTAwM2VtaXhlZF9kZWNyeXB0ZWQpXG4gMzU5Olx0XHRcdHJldCA9IHRsc19zdHJwX2NvcHlpbl9za2Ioc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcbiAzNjA6XHRcdGVsc2VcbiAzNjE6XHRcdFx0cmV0ID0gdGxzX3N0cnBfY29weWluX2ZyYWcoc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcbiAzNjI6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzNjM6XHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IHJldDtcbiAzNjQ6XHRcdFx0cmV0ID0gMDtcbiAzNjU6XHRcdH1cbiAzNjY6XHRcbiAzNjc6XHRcdGlmIChzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbiBcdTAwMjZcdTAwMjYgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuIDM2ODpcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiAzNjk6XHRcbiAzNzA6XHRcdFx0V1JJVEVfT05DRShzdHJwLVx1MDAzZW1zZ19yZWFkeSwgMSk7XG4gMzcxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmlwIENvcHktSW4gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0bHNfc3RycF9jb3B5aW5gIHdvcmtzLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0cyBwcmltYXJ5IGpvYiBpcyB0byBnZXQgZGF0YSBmcm9tIGBpbl9za2JgIGFuZCBwdXQgaXQgaW50byB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGhpbiBgc3RycC0mZ3Q7YW5jaG9yYC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IElmIGBzdHJwLSZndDtzdG0uZnVsbF9sZW5gIGhhcHBlbnMgdG8gYmUgemVybyBhdCB0aGUgc3RhcnQsIGB0bHNfc3RycF9jb3B5aW5gIGRvZXNuJiMzOTt0IGp1c3QgY29weSB0aGUgZGF0YS4gSXQgKmFsc28qIGNhbGxzIGB0bHNfcnhfbXNnX3NpemVgLiAgVGhhdCBjYWxsIHRha2VzIHBsYWNlIHdpdGhpbiBlaXRoZXIgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCBvciBgdGxzX3N0cnBfY29weWluX3NrYmAsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBob3cgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCB3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93IGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW5fZnJhZyhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyMTE6XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICppbl9za2IsIHVuc2lnbmVkIGludCBvZmZzZXQsXG4gMjEyOlx0XHRcdFx0XHRzaXplX3QgaW5fbGVuKVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHVuc2lnbmVkIGludCBuZnJhZyA9IHNrYi1cdTAwM2VsZW4gLyBQQUdFX1NJWkU7XG4gMjE1Olx0XHRzaXplX3QgbGVuLCBjaHVuaztcbiAyMTY6XHRcdHNrYl9mcmFnX3QgKmZyYWc7XG4gMjE3Olx0XHRpbnQgc3o7XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAodW5saWtlbHkobmZyYWcgXHUwMDNlPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MpKSB7XG4gMjIwOlx0XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XG4gMjIxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHRmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW25mcmFnXTtcbiAyMjU6XHRcbiAyMjY6XHRcdGxlbiA9IGluX2xlbjtcbiAyMjc6XHRcdC8qIEZpcnN0IG1ha2Ugc3VyZSB3ZSBnb3QgdGhlIGhlYWRlciAqL1xuIDIyODpcdFx0aWYgKCFzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbikge1xuIDIyOTpcdFx0XHQvKiBBc3N1bWUgb25lIHBhZ2UgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgaGVhZGVycyAqL1xuIDIzMDpcdFx0XHRjaHVuayA9XHRtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4gMjMxOlx0XHRcdFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKGluX3NrYiwgb2Zmc2V0LFxuIDIzMjpcdFx0XHRcdFx0XHQgICBza2JfZnJhZ19hZGRyZXNzKGZyYWcpICYjNDM7XG4gMjMzOlx0XHRcdFx0XHRcdCAgIHNrYl9mcmFnX3NpemUoZnJhZyksXG4gMjM0Olx0XHRcdFx0XHRcdCAgIGNodW5rKSk7XG4gMjM1Olx0XG4gMjM2Olx0XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IGNodW5rO1xuIDIzNzpcdFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGNodW5rO1xuIDIzODpcdFx0XHRza2JfZnJhZ19zaXplX2FkZChmcmFnLCBjaHVuayk7XG4gMjM5Olx0XG4gMjQwOlx0XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHNrYik7XG4gMjQxOlx0XHRcdGlmIChzeiBcdTAwM2MgMClcbiAyNDI6XHRcdFx0XHRyZXR1cm4gc3o7XG4gMjQzOlx0XG4gMjQ0Olx0XHRcdC8qIFdlIG1heSBoYXZlIG92ZXItcmVhZCwgc3ogPT0gMCBpcyBndWFyYW50ZWVkIHVuZGVyLXJlYWQgKi9cbiAyNDU6XHRcdFx0aWYgKHVubGlrZWx5KHN6IFx1MDAyNlx1MDAyNiBzeiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikpIHtcbiAyNDY6XHRcdFx0XHRpbnQgb3ZlciA9IHNrYi1cdTAwM2VsZW4gLSBzejtcbiAyNDc6XHRcbiAyNDg6XHRcdFx0XHRXQVJOX09OX09OQ0Uob3ZlciBcdTAwM2UgY2h1bmspO1xuIDI0OTpcdFx0XHRcdHNrYi1cdTAwM2VsZW4gLT0gb3ZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIGluY29taW5nIFRMUyBtZXNzYWdlcyBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgdGxzX3N0cnBfcmVhZF9jb3B5YCBnZXRzIGNhbGxlZCwgY29waWVzIGRhdGEgaW50byBwYWdlcywgYW5kIHRoZW4gY2FsbHMgYHRsc19yeF9tc2dfc2l6ZWAgb24gdGhpcyBjb3BpZWQgZGF0YS4gVGhhdCYjMzk7cyBmaW5lIOKAkyB0aGUgcGFnZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIGNvbnRpZ3VvdXMgYmVjYXVzZSBgc2tiX2NvcHlfYml0c2AgZG9lcyB0aGUgY29weSBwcm9wZXJseS4gVGhlIGxvZ2ljIGdvZXMgbGlrZSB0aGlzOiBpZiAgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmYWlscyAobWVhbmluZyBza2JzIGluIHRoZSBxdWV1ZSBhcmUgZGlzY29udGludW91cyBvciBoYXZlIGRpZmZlcmluZyBkZWNyeXB0ZWQgc3RhdGVzKSwgd2UgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlcyBhbmQgdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcmVhc3NlbWJsZSB0aGUgZGF0YS4gYHRjcF9yZWFkX3NvY2tgIGlzIHRoZSByaWdodCB0b29sOyBpdCBjb3JyZWN0bHkgaGFuZGxlcyBhbnkgVENQIGlkaW9zeW5jcmFzaWVzIGxpa2Ugb3V0LW9mLW9yZGVyIHNlZ21lbnRzIG9yIG92ZXJsYXBzLiBTbywgdXNpbmcgYHRjcF9yZWFkX3NvY2tgIGdldHMgdXMgdGhlIHByb3BlciwgcmVhc3NlbWJsZWQgVENQIHN0cmVhbS4gVGhlbiwgYHRsc19yeF9tc2dfc2l6ZWAgY2FuIHJlYWQgdGhlIGNvcnJlY3QgVExTIGhlYWRlciBmcm9tIHRoZXNlIHBhZ2VzLgoKTm93LCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZGlyZWN0bHkgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCBvbiBgc3RycC0mZ3Q7YW5jaG9yYCwgd2hpY2ggd2FzIHNpbXBseSBhIGBmcmFnX2xpc3RgIHBvaW50aW5nIHRvIHRoZSBUQ1AgcmVjZWl2ZSBxdWV1ZS4gVGhlIHZ1bG5lcmFiaWxpdHkgaGVyZSBpcyB0aGF0IGBza2JfY29weV9iaXRzYCB3b3VsZCBibGluZGx5IGNvcHkgZGF0YSBmcm9tIHRoZSBza2JzIGluIHRoYXQgbGlzdCwgaWdub3JpbmcgVENQIHNlcXVlbmNlIG51bWJlcnMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGhhZCBvdmVybGFwcGluZywgb3V0LW9mLW9yZGVyLCBvciBkaWZmZXJlbnRseSBkZWNyeXB0ZWQgc2ticyAod2hpY2ggKnNob3VsZG4mIzM5O3QqIGhhcHBlbiwgYnV0IG1pZ2h0IHdpdGggdXJnZW50IGRhdGEgb3Igc29tZSBlZGdlIGNhc2UpIGBza2JfY29weV9iaXRzYCB3b3VsZCBwdWxsIHRoZSB3cm9uZyBkYXRhLiBUaGVuIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHBhcnNlIHRoaXMgY29ycnVwdGVkIGRhdGEgYXMgYSBUTFMgaGVhZGVyLCBwb3NzaWJseSBjYWxjdWxhdGluZyB0aGUgbWVzc2FnZSBzaXplIGluY29ycmVjdGx5IGFuZCBjb3JydXB0aW5nIHRoZSBzdHJlYW0uIFRoZSBmaXggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGNoZWNrOgoKYGBgYwomIzQzOwkJaWYgKGlucSAmbHQ7IFRMU19IRUFERVJfU0laRSkKJiM0MzsJCQlyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpOwomIzQzOwkJaWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKQomIzQzOwkJCXJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpOwpgYGAKClRoaXMgKmVuc3VyZXMqIHRoZSBmaXJzdCBgVExTX0hFQURFUl9TSVpFYCBieXRlcyBhcmUgY29udGlndW91cywgYW5kIHRoYXQgdGhlaXIgZGVjcnlwdGVkIHN0YXRlIGlzIGNvbnNpc3RlbnQuICBJZiBub3QsIGl0IGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCB0byByZWFzc2VtYmxlIHRoZSBkYXRhIGJlZm9yZSBwYXJzaW5nLgoKSG1tLCBidXQgd2hhdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGBza2JfY29weV9iaXRzYCByZWFkcyBmcm9tIHRoZSBkYXRhIGJ1ZmZlcnMgb2YgdGhlIHNrYnMsIHdoaWNoIGNvbnRhaW4gbmV0d29yayBkYXRhOyB0aGVzZSBidWZmZXJzIGFyZSAqYWx3YXlzKiBpbml0aWFsaXplZC4gRXZlbiBpZiBpdCByZWFkcyB0aGUgd3JvbmcgZGF0YSAoZHVlIHRvIHNlcXVlbmNlIG51bWJlciBpc3N1ZXMpLCB0aGUgZGF0YSAqaXRzZWxmKiBpcyBpbml0aWFsaXplZCwganVzdCBpbmNvcnJlY3QuICBgdGxzX3J4X21zZ19zaXplYCBjYWxjdWxhdGVzIGBkYXRhX2xlbmAgdGhlbiBzZXRzIGBzdHJwLSZndDtzdG0uZnVsbF9sZW4gPSBzemAuIEFmdGVyd2FyZHMsIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgdmFsaWRhdGVzIHRoZSBjb250aWd1b3VzbmVzcyBvZiB0aGUgZGF0YSB1cCB0byBgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuYC4gSWYgdGhhdCBmYWlscywgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHdvdWxkIGRpc2NhcmQgdGhlIGJhZCBjYWxjdWxhdGVkIHNpemUuCgpPa2F5LCBsZXQmIzM5O3MgY29uc2lkZXIgYSBzY2VuYXJpbyB3aGVyZSBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHN1Y2NlZWRzLCBidXQgYHRsc19yeF9tc2dfc2l6ZWAgc29tZWhvdyBzdGlsbCByZWFkcyBnYXJiYWdlLiBIb3cgY291bGQgdGhpcyBoYXBwZW4/IElmIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgKnN1Y2NlZWRzKiwgaXQgbWVhbnMgdGhlIHNrYnMgdXAgdG8gdGhlIGNhbGN1bGF0ZWQgYHN6YCBhcmUgY29udGlndW91cy4gU2luY2UgYHN6YCBpcyBndWFyYW50ZWVkIHRvIGJlIGF0IGxlYXN0IGBUTFNfSEVBREVSX1NJWkVgLCB0aGUgZmlyc3QgaGVhZGVyIGJ5dGVzIHdlcmUgYWxzbyBjb250aWd1b3VzLCB3aGljaCBtZWFucyBgdGxzX3J4X21zZ19zaXplYCBzaG91bGQgaGF2ZSByZWFkIHRoZSBjb3JyZWN0IGhlYWRlci4gU28sIHdoeSB0aGUgYWRkZWQgY2hlY2sgKmJlZm9yZSogY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYD8KCkFoYSEgIFdoYXQgYWJvdXQgYSBjcmFzaCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlmIGByZW1haW5pbmdgIGV4Y2VlZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHF1ZXVlZCBza2JzPyBMZXQmIzM5O3MgY2hlY2s6CmBgYGMKCXdoaWxlIChza2ItJmd0O2xlbiAmbHQ7IHJlbWFpbmluZykgewoJCXNlcSAmIzQzOz0gc2tiLSZndDtsZW47CgkJcmVtYWluaW5nIC09IHNrYi0mZ3Q7bGVuOwoJCXNrYiA9IHNrYi0mZ3Q7bmV4dDsKCgkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxICE9IHNlcSkKCQkJcmV0dXJuIGZhbHNlOwpgYGAKSWYgYHJlbWFpbmluZ2AgaXMgZ3JlYXRlciwgdGhlIGxvb3AgKm1pZ2h0KiBkZXJlZmVyZW5jZSBhIE5VTEwgYHNrYmAuIFdoZW4gY2FuIHRoaXMgaGFwcGVuPyBSZW1lbWJlciB0aGF0IGByZW1haW5pbmcgPSBzdHJwLSZndDtzdG0ub2Zmc2V0ICYjNDM7IHN0cnAtJmd0O3N0bS5mdWxsX2xlbjtgLCB3aGVyZSBgc3RycC0mZ3Q7c3RtLmZ1bGxfbGVuYCBpcyBqdXN0IHRoZSBgc3pgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5xID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE2LVxubmV0L3Rscy90bHNfc3RycC5jOjUxNzpcdGlucSA9IHRjcF9pbnEoc3RycC1cdTAwM2Vzayk7XG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE4LVx0aWYgKGlucSBcdTAwM2MgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5MjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgUmVjZWl2ZSBRdWV1ZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNwX2lucWAgZnVuY3Rpb24gY2FsbCBhbmQgd2hhdCBpdCYjMzk7cyB0ZWxsaW5nIG1lIGFib3V0IHRoZSBhbW91bnQgb2YgZGF0YSByZWFkeSB0byBiZSByZWFkLiBJbml0aWFsbHksIEkgdGhvdWdodCwgJiMzNDtXYWl0LCBgdGNwX2lucWAgZ2l2ZXMgbWUgdGhlIElOLVNFUVVFTkNFIGRhdGE/JiMzNDsgTXkgaW1tZWRpYXRlIHJlYWN0aW9uIHdhcyBhIHNsaWdodCB3b3JyeSBhYm91dCBvdXQtb2Ytb3JkZXIgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSwgYnV0IHRoZW4gaXQgaGl0cyBtZS4gIGB0Y3BfaW5xYCBpcyBhY3R1YWxseSBwcm92aWRpbmcgYHRwLSZndDtyY3Zfbnh0IC0gdHAtJmd0O2NvcGllZF9zZXFgLCB3aGljaCAqaXMqIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZWAgc3RyaWN0bHkgY29udGFpbnMgaW4tc2VxdWVuY2UgU0tCcy4gVGhlIG91dC1vZi1vcmRlciBvbmVzIGFyZSBzYWZlbHkgdHVja2VkIGF3YXkgaW4gdGhlIGBvdXRfb2Zfb3JkZXJfcXVldWVgLiAgU28sICphbHdheXMqIGluLXNlcXVlbmNlLiBCdXQgdGhlbiwgSSYjMzk7bSBxdWVzdGlvbmluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGFuZCB3b25kZXJpbmcgd2h5IGl0JiMzOTtzIGV2ZW4gY29tcGFyaW5nIHNlcXVlbmNlIG51bWJlcnMgKGBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSAhPSBzZXFgKS4gSXMgaXQgZm9yIHVyZ2VudCBkYXRhIHNjZW5hcmlvcz8gRWRnZSBjYXNlcyB3aXRoIG92ZXJsYXBwaW5nIFNLQnM/CgpBbmQgdGhlbiBJIHJlbWVtYmVyOiBvdmVybGFwcGluZyBTS0JzICpjYW4qIGV4aXN0IGluIHRoZSByZWNlaXZlIHF1ZXVlIGlmIHRoZXkgaGF2ZW4mIzM5O3QgYmVlbiBjb2xsYXBzZWQgeWV0LiBUaGF0JiMzOTtzIGEgZ29vZCBnb3RjaGEhICBUaGlzIHJhaXNlcyBhbm90aGVyIGNvbmNlcm46IGlmIGFuIFNLQiYjMzk7cyBgbGVuYCBpbmNsdWRlcyBvdmVybGFwcGluZyBkYXRhLCBpdHMgbGVuZ3RoIG1pZ2h0IGJlICpsYXJnZXIqIHRoYW4gdGhlIGFjdHVhbCBpbi1zZXF1ZW5jZSBkYXRhIGl0IHByb3ZpZGVzISAgSWYgc28sIHRoZSBzdW0gb2YgYHNrYi0mZ3Q7bGVuYCBmb3IgYWxsIFNLQnMgaW4gdGhlIHJlY2VpdmUgcXVldWUgbWlnaHQgYWN0dWFsbHkgZXhjZWVkIHdoYXQgYHRjcF9pbnFgIHJlcG9ydHMgYXMgdGhlIGluLXNlcXVlbmNlIGRhdGEhCgpJZiB0aGlzIGlzIHRydWUsIHRoZW4gYHJlbWFpbmluZ2AgKHdoaWNoIGlzIGxpbWl0ZWQgYnkgYG9mZnNldCAmIzQzOyBpbnFgKSB3b3VsZCBiZSAqc21hbGxlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItJmd0O2xlbmAuICBTbywgdGhlIGBza2JgIHdvdWxkbiYjMzk7dCBiZWNvbWUgbnVsbCwgYW5kIGl0IGFsbCBjaGVja3Mgb3V0LgoKT2theSwgbGV0JiMzOTtzIGV4cGxvcmUgYW5vdGhlciBwb3NzaWJpbGl0eS4gIFdoYXQgaWYgYW4gU0tCIGlzIHNvbWVob3cgKnNtYWxsZXIqIHRoYW4gdGhlIHNlcXVlbmNlIHNwYWNlIGl0IGNvdmVycz8gKGxpa2UsIGlmIGl0IGhhcyAmIzM0O2hvbGVzJiMzNDsgc29tZWhvdz8gTm8sIFRDUCBza2JzIGRvbiYjMzk7dCBoYXZlIGhvbGVzLikgV2hhdCBpZiBgaW5xYCB3ZXJlIHNvbWVob3cgKmxhcmdlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItJmd0O2xlbmAgaW4gYHNrX3JlY2VpdmVfcXVldWVgPyBIb3cgY291bGQgdGhhdCBoYXBwZW4/IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGBpbnFgIGlz4oCmIGl04oCZcyBgdHAtJmd0O3Jjdl9ueHQgLSB0cC0mZ3Q7Y29waWVkX3NlcWAuIEFuZCBpZiB0aGVyZSYjMzk7cyBhIEZJTiwgYGlucWAgbWlnaHQgaW5jbHVkZSBpdCwgYnV0IHRoZSBkYXRhIGNhbGN1bGF0aW9uIHdvdWxkbiYjMzk7dC4gSGFuZyBvbiwgZG9lcyBgdGNwX2lucWAgZXZlbiBpbmNsdWRlIHRoZSBGSU4/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYHRjcF9pbnFgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW5xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9NjM5PWludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwLmMtNjUwLVx0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc2spO1xubmV0L2lwdjQvdGNwLmM6NjUxOlx0XHRhbnN3ID0gdGNwX2lucShzayk7XG5uZXQvaXB2NC90Y3AuYy02NTItXHRcdHVubG9ja19zb2NrX2Zhc3Qoc2ssIHNsb3cpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTE4MjM9aW50IHRjcF9wZWVrX2xlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2lwdjQvdGNwLmMtMTgyNC17XG5uZXQvaXB2NC90Y3AuYzoxODI1Olx0cmV0dXJuIHRjcF9pbnEoc29jay1cdTAwM2Vzayk7XG5uZXQvaXB2NC90Y3AuYy0xODI2LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTk1PXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIyMDktXHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xubmV0L2lwdjQvdGNwLmM6MjIxMDpcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTIyMTEtXHRib29sIG1tYXBfbG9ja2VkO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTIzNDY9dm9pZCB0Y3BfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjQxMi1cbm5ldC9pcHY0L3RjcC5jOjI0MTM6c3RhdGljIGludCB0Y3BfaW5xX2hpbnQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwLmMtMjQxNC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MjkzMD1pbnQgdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yOTUwLVx0XHRpZiAoKGNtc2dfZmxhZ3MgXHUwMDI2IFRDUF9DTVNHX0lOUSkgfCBtc2ctXHUwMDNlbXNnX2dldF9pbnEpIHtcbm5ldC9pcHY0L3RjcC5jOjI5NTE6XHRcdFx0bXNnLVx1MDAzZW1zZ19pbnEgPSB0Y3BfaW5xX2hpbnQoc2spO1xubmV0L2lwdjQvdGNwLmMtMjk1Mi1cdFx0XHRpZiAoY21zZ19mbGFncyBcdTAwMjYgVENQX0NNU0dfSU5RKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ3OTgtemVyb2NvcHlfcmN2X2lucTpcbm5ldC9pcHY0L3RjcC5jOjQ3OTk6XHRcdHpjLmlucSA9IHRjcF9pbnFfaGludChzayk7XG5uZXQvaXB2NC90Y3AuYy00ODAwLXplcm9jb3B5X3Jjdl9vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgUXVldWUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIHJlY2VpdmUgcXVldWUgaXMgbWFuYWdlZCBpbnRlcm5hbGx5LCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBvZiBgdGNwX2lucWAuIEkga25vdyBpdCYjMzk7cyBhIGtleSBlbGVtZW50IGluIHVuZGVyc3RhbmRpbmcgaG93IGluY29taW5nIGRhdGEgaXMgaGFuZGxlZCwgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgd2hhdCBmaWVsZHMgaXQgY29udGFpbnMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc2tfcmVjZWl2ZV9xdWV1ZWAuIFRoYXQmIzM5O2xsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBkZWVwZXIgZGl2ZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgY29uZ2VzdGlvbiBjb250cm9sIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYyBsYXRlciBvbi4gTm8gcG9pbnQgaW4gYnVpbGRpbmcgYW55IGFzc3VtcHRpb25zIGJlZm9yZSBJIHJlZnJlc2ggdGhlIGZvdW5kYXRpb24ga25vd2xlZGdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW5xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjczNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90Y3BfcHVyZV9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yNzQwLVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjc0MTpzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTI3NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3BlYWtpbmcgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgdGNwX2lucWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpZyBpbnRvIGB0Y3BfaW5xYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nOyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgaG93IGl0IGFmZmVjdHMgdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJcyB0aGlzIGEgcGFja2V0IHJlY2VpdmUgcXVldWUgbGVuZ3RoLCBvciBzb21lIHNvcnQgb2YgaW50ZXJuYWwgYnVmZmVyPyBJcyBpdCB1c2VkIGZvciBjb25nZXN0aW9uIGNvbnRyb2wsIGZsb3cgY29udHJvbCwgb3Igc2ltcGx5IGEgZGVidWdnaW5nIG1ldHJpYz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBleGFjdGx5IGFtIEkgbG9va2luZyBmb3I/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gd2F0Y2ggb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYHNrX2J1ZmZgIG9yIHJlbGF0ZWQgbmV0d29ya2luZyBkYXRhIHN0cnVjdHVyZXMgYXMgdGhvc2UgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB0aGUgZnVuY3Rpb24uIEFueSBvYnZpb3VzIGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBUaGF0JiMzOTtzIGFsd2F5cyBpbXBvcnRhbnQgdG8gbm90ZSB3aXRoIG5ldHdvcmtpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGlzIGlzIHdlbGwtY29tbWVudGVkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzQxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NDE6XHRzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcbjI3NDI6XHR7XG4yNzQzOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjI3NDQ6XHRcdGludCBhbnN3O1xuMjc0NTpcdFxuMjc0NjpcdFx0aWYgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX1NZTl9TRU5UIHwgVENQRl9TWU5fUkVDVikpIHtcbjI3NDc6XHRcdFx0YW5zdyA9IDA7XG4yNzQ4Olx0XHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19VUkdJTkxJTkUpIHx8XG4yNzQ5Olx0XHRcdCAgICF0cC1cdTAwM2V1cmdfZGF0YSB8fFxuMjc1MDpcdFx0XHQgICBiZWZvcmUodHAtXHUwMDNldXJnX3NlcSwgdHAtXHUwMDNlY29waWVkX3NlcSkgfHxcbjI3NTE6XHRcdFx0ICAgIWJlZm9yZSh0cC1cdTAwM2V1cmdfc2VxLCB0cC1cdTAwM2VyY3Zfbnh0KSkge1xuMjc1MjpcdFxuMjc1MzpcdFx0XHRhbnN3ID0gdHAtXHUwMDNlcmN2X254dCAtIHRwLVx1MDAzZWNvcGllZF9zZXE7XG4yNzU0Olx0XG4yNzU1Olx0XHRcdC8qIFN1YnRyYWN0IDEsIGlmIEZJTiB3YXMgcmVjZWl2ZWQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2MTkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFRMUyBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlIChgaW5xYCkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGFkanVzdHMgYGlucWAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBGSU4gcGFja2V0IHdhcyByZWNlaXZlZCwgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1cmdlbnQgZGF0YS4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBieXRlcyAqYXZhaWxhYmxlKiBpbiB0aGUgcXVldWUgYW5kIHRoZSBieXRlcyAqY2xhaW1lZCogdG8gYmUgYXZhaWxhYmxlLiAgU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBza2JgcywgYW5kIGhhcyBhIGxvb3AgdGhhdCB0ZXJtaW5hdGVzIHdoZW4gYHNrYi0mZ3Q7bGVuYCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBieXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCAoYHJlbWFpbmluZ2ApLgoKSSBpbml0aWFsbHkgd29ycmllZCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIGByZW1haW5pbmdgIGNvdWxkIHNvbWVob3cgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBkYXRhIGluIHRoZSBxdWV1ZSBhbmQgYHNrYmAgYmVjb21lcyBgTlVMTGAsIGJ1dCBJIGNhcmVmdWxseSBhbmFseXplZCB0aGUgaW52YXJpYW50cyBhbmQgY29uc3RyYWludHMuIFRoZSBjb2RlICpzaG91bGRuJiMzOTt0KiBkZXJlZmVyZW5jZSBhIGBOVUxMYCBwb2ludGVyIHdoZW4gcmVhZGluZyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlIGJlY2F1c2UgYHJlbWFpbmluZ2AgaXMgY29ycmVjdGx5IGNhbGN1bGF0ZWQgYmFzZWQgb24gYGlucWAgYW5kIHRoZSBsb29wIGNvbmRpdGlvbiBwcmV2ZW50cyB0aGlzLiBUaGUgdG90YWwgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBtdXN0ICphbHdheXMqIGJlICZndDs9IGByZW1haW5pbmdgLCBhbmQgc28gdGhlIGxvb3AgbXVzdCBhbHdheXMgdGVybWluYXRlIGJlZm9yZSBza2IgYmVjb21lcyBgTlVMTGAuCgpUaGVuIG15IGZvY3VzIHNoaWZ0ZWQgdG8gd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgaXMuIEkgdGhlbiBsb29rZWQgYXQgdGhlIG5ldyBhZGRpdGlvbiB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBiYW5kLWFpZCBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYWRkZWQuCgpJdCBiZWNhbWUgY2xlYXIgdGhhdCB0aGUgcmVhbCBpc3N1ZSBpcyBub3QgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGJ1dCByYXRoZXIgKmluY29ycmVjdCogaGFuZGxpbmcgb2Ygb3ZlcmxhcHBpbmcgb3IgZnJhZ21lbnRlZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgYmVmb3JlIGB0bHNfcnhfbXNnX3NpemVgIGlzIGEgcmVzdWx0IG9mIHRoYXQuIGB0bHNfcnhfbXNnX3NpemVgIGNhbiByZXR1cm4gYW4gZXJyb3IgKGAtRUJBRE1TR2AsIGAtRU1TR1NJWkVgLCBvciBgLUVJTlZBTGApIGlmIHRoZSBUTFMgaGVhZGVyIGlzIGNvcnJ1cHRlZCBkdWUgdG8gZHVwbGljYXRlIG9yIG1peGVkIGRlY3J5cHRlZCBkYXRhLiAgVGhpcyBpbiB0dXJuIHdvdWxkIGFib3J0IGEgcG90ZW50aWFsbHkgdmFsaWQgVExTIGNvbm5lY3Rpb24gZHVlIHRvIGhvdyB0aGUgc2l6ZSBpcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkLiBDYWxsaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgYmVmb3JlaGFuZCBoZWxwcyB0byBlbnN1cmUgdGhhdCBgdGxzX3J4X21zZ19zaXplYCBnZXRzIHZhbGlkIGRhdGEsIG9yIHdpbGwgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIHRoZW4gbGV0cyBUQ1AgaGFuZGxlIHRoZSByZWFzc2VtYmx5LCBhbmQgdGhlbiByZWFkIHRoZSB2YWxpZCBoZWFkZXIuCgpJIHJ1bGVkIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLiAgVGhlIGNvZGUgb3BlcmF0ZXMgb24gbmV0d29yayBidWZmZXJzLCB3aGljaCwgd2hpbGUgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcsIGFyZSBhc3N1bWVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGUgYnVmZmVycyBhcmUgc291cmNlZCBmcm9tIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlcnMgYXJlIG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEkgdGhlbiBydWxlZCBvdXQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGR1ZSB0byB0aGUgY2hlY2tzIGluIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBpbnZvbHZlZC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgZGlyZWN0bHkgb24gYSByYXcgVENQIHJlY2VpdmUgcXVldWUgbWlnaHQgbGVhZCB0byBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0cyB3aGVuIFRMUyBkYXRhIGlzIGZyYWdtZW50ZWQgb3IgcmV0cmFuc21pdHRlZCwgb3IgaXMgdGhlIHJlc3VsdCBvZiBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0aW9uLiBUaGUgZml4IGludm9sdmVzIGNoZWNraW5nIHRoZSBxdWV1ZSBmb3Igb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIGNvbnNpc3RlbnQgZGVjcnlwdGlvbiBzdGF0dXMgKmJlZm9yZSogdHJ5aW5nIHRvIHBhcnNlIHRoZSBUTFMgaGVhZGVyIHNpemUuICBUaGlzIHBhdGNoIHByZXZlbnRzIHRoZSBtaXNjYWxjdWxhdGlvbiBvZiB0aGUgc2l6ZSBhbmQgdGhlIHBvdGVudGlhbCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYSB2YWxpZCBjb25uZWN0aW9uLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcnJlY3RseSBoYW5kbGUgVExTIGRhdGEgaW4gdGhlIHByZXNlbmNlIG9mIFRDUCByZXRyYW5zbWlzc2lvbnMsIG92ZXJsYXBwaW5nIHNlZ21lbnRzIGFuZCBtaXhlZCBkZWNyeXB0aW9uIHN0YXR1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfT05DRVxcKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxXFwpOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX3N0cnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0zNjktXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzcwOlx0XHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbm5ldC90bHMvdGxzX3N0cnAuYy0zNzEtXHR9XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTQ2LVxubmV0L3Rscy90bHNfc3RycC5jOjU0NzpcdFdSSVRFX09OQ0Uoc3RycC1cdTAwM2Vtc2dfcmVhZHksIDEpO1xubmV0L3Rscy90bHNfc3RycC5jLTU0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX3JlYWRfc29ja2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIFRMUyBzb2NrZXQgcmVhZGluZyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGB0bHNfc3RycF9yZWFkX3NvY2tgLCB3b3Jrcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDU0Ny4gSSYjMzk7bGwgcHJvYmFibHkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gdGhlcmUsIHNlZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgcGVyZm9ybWFuY2UsIG9yIHBlcmhhcHMgZm9yIHNlY3VyaXR5LCBzbyBhIHRob3JvdWdoIHJldmlldyBpcyB3YXJyYW50ZWQuIExldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19zdHJwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFxuIDUyMTpcdFx0aWYgKHVubGlrZWx5KHN0cnAtXHUwMDNlY29weV9tb2RlKSlcbiA1MjI6XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xuIDUyMzpcdFxuIDUyNDpcdFx0aWYgKGlucSBcdTAwM2Mgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pXG4gNTI1Olx0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4gNTI2Olx0XG4gNTI3Olx0XHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gNTI4Olx0XHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4gNTI5Olx0XHRcdGlmIChpbnEgXHUwMDNjIFRMU19IRUFERVJfU0laRSlcbiA1MzA6XHRcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuIDUzMTpcdFx0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4gNTMyOlx0XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gNTMzOlx0XG4gNTM0Olx0XHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbiA1MzU6XHRcdFx0aWYgKHN6IFx1MDAzYyAwKVxuIDUzNjpcdFx0XHRcdHJldHVybiBzejtcbiA1Mzc6XHRcbiA1Mzg6XHRcdFx0c3RycC1cdTAwM2VzdG0uZnVsbF9sZW4gPSBzejtcbiA1Mzk6XHRcbiA1NDA6XHRcdFx0aWYgKCFzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbiB8fCBpbnEgXHUwMDNjIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKVxuIDU0MTpcdFx0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4gNTQyOlx0XHR9XG4gNTQzOlx0XG4gNTQ0Olx0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSlcbiA1NDU6XHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbiA1NDg6XHRcbiA1NDk6XHRcdHJldHVybiAwO1xuIDU1MDpcdH1cbiA1NTE6XHRcbiA1NTI6XHQvKiBQYXJzZSBxdWV1ZWQgZGF0YS4gV2hlbiBAYW5ub3VuY2UgaXMgdHJ1ZSBhbmQgcGFyc2luZyBwcm9kdWNlcyBhXG4gNTUzOlx0ICogbmV3bHktcmVhZHkgcmVjb3JkLCBmaXJlIHRoZSBjb25zdW1lciBub3RpZmljYXRpb24uIENhbGxlcnMgdGhhdFxuIDU1NDpcdCAqIG5lZWQgdG8gbm90aWZ5IGEgd2FpdGVyIGFib3V0IGEgcmVjb3JkIHBhcnNlZCBieSBhbm90aGVyIHBhdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MzYKCQkJCQkJCW91dHB1dDogMzAyCgkJCQkJCQl0aG91Z2h0czogMTgzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVExTIENvZGUgUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgbG9naWMgZmxvdyB3YXM6IGxvYWQgdGhlIGFuY2hvciwgZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgVExTIG1lc3NhZ2UsIGFuZCAqdGhlbiogY2hlY2sgaWYgdGhlIHF1ZXVlJiMzOTtzIHN0YXRlIGlzIHZhbGlkLiBJIGNhbiBzZWUgdGhlIHByb2JsZW0gaW1tZWRpYXRlbHk6IGlmIHRoZSBzaXplIGNhbGN1bGF0aW9uLCBgdGxzX3J4X21zZ19zaXplYCwgaXMgcGVyZm9ybWVkICpiZWZvcmUqIGNoZWNraW5nIHRoZSBxdWV1ZSYjMzk7cyBpbnRlZ3JpdHksIGl0JiMzOTtzIHBvc3NpYmxlIHRvIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIGEgbWl4IG9mIGRlY3J5cHRlZCBhbmQgZW5jcnlwdGVkIGRhdGEuIFRoaXMgY2FuIGVhc2lseSBsZWFkIHRvIGAtRUJBRE1TR2Agb3IgYC1FTVNHU0laRWAgZXJyb3JzLCBjYXVzaW5nIGNvbm5lY3Rpb24gYWJvcnRzLgoKSSBzZWUgdGhlIGZpeCBpcyB0byBhZGQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgcXVldWUgaXMgaW4gYSBiYWQgc3RhdGUsIHdlIHNraXAgdGhlIHNpemUgY2FsY3VsYXRpb24gYWx0b2dldGhlciBhbmQgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHdoaWNoIHRoZW4gcmVhc3NlbWJsZXMgdGhlIFRDUCBzdHJlYW0sIGRpc2NhcmRzIG92ZXJsYXBwaW5nIHNlZ21lbnRzLCAqdGhlbiogcGFyc2VzIHRoZSBoZWFkZXIgY29ycmVjdGx5LiBUaGUgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydHMgYXJlIGF2b2lkZWQgdGhpcyB3YXkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2g6IGB0bHNfcnhfbXNnX3NpemVgIHJlYWRzIFRDUCBkYXRhLCB3aGljaCBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIG5ldHdvcmsgZGF0YSwgc28gbm8gaXNzdWVzIHRoZXJlLiBUaGUgYGNiYCBmaWVsZCBvZiBgc3RycC0mZ3Q7YW5jaG9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNrYl9jb3B5X2hlYWRlcmAsIG5vIHdvcnJpZXMgdGhlcmUuIEFuZCB0aGUgYHNrYi0mZ3Q7ZGVjcnlwdGVkYCBmaWVsZCBpcyBhbHNvIGluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24uIFRoZSBwYWdlcyBhbGxvY2F0ZWQgYnkgYHRsc19zdHJwX3JlYWRfY29weWAgYXJlIGZpbGxlZCBieSBgdGNwX3JlYWRfc29ja2AsIGFuZCBzcGVjaWZpY2FsbHksIGBza2JfY29weV9iaXRzYCwgZW5zdXJlcyB0aGF0IHRoZSBvbmx5IGRhdGEgZXhwb3NlZCBpbiB0aGUgc2tiIGlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGB0Y3BfcmVhZF9zb2NrYCBkb2VzbiYjMzk7dCBmaWxsIHRoZSB3aG9sZSBwYWdlLCBgc2tiX2ZyYWdfc2l6ZV9hZGRgIG9ubHkgdXBkYXRlcyB0aGUgbGVuZ3RoIHdpdGggdGhlIHZhbGlkLCBjb3BpZWQgZGF0YS4KCkhvbGQgb24sIGNvdWxkIGBza2JfY29weV9iaXRzYCByZWFkIHBhc3QgdGhlIGVuZCBvZiBhbiBza2IgYW5kIHRodXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgaGFzIGJ1aWx0LWluIGJvdW5kcyBjaGVja2luZzsgaWYgdGhlIHJlcXVlc3RlZCBkYXRhIGxlbmd0aCBpcyB1bmF2YWlsYWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9tc2dfc2l6ZWAgZG9lcyBpdHMgb3duIGxlbmd0aCBjaGVja3Mgd2l0aCBgaWYgKHN0cnAtJmd0O3N0bS5vZmZzZXQgJiM0MzsgcHJvdC0mZ3Q7cHJlcGVuZF9zaXplICZndDsgc2tiLSZndDtsZW4pIHJldHVybiAwO2AgYmVmb3JlIGNhbGxpbmcgYHNrYl9jb3B5X2JpdHNgLiBTbywgbm8gbWVtb3J5IGlzIGJlaW5nIHJlYWQgcGFzdCB0aGUgZW5kLgoKQW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgLSBjb3VsZCBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2hlY2sgaW52b2x2ZXMgYHJlbWFpbmluZ2AgdmFsdWVzIGJ1dCwgYXMgSSBjYW4gc2VlIGZyb20gdHJhY2luZywgdGhlIGByZW1haW5pbmdgIHZhbHVlcyBhcmUgYWx3YXlzIGNvcnJlY3RseSBjYWxjdWxhdGVkLiBBbmQsIGV2ZW4gaWYgYSBwcm9ibGVtYXRpYyB2YWx1ZSBvZiByZW1haW5pbmcgdmFsdWUgZXhpc3RlZCwgdGhlIGNvZGUgaXMgc3VjaCB0aGF0IGFueSByZWFkcyBpbiB0aGlzIHNpdHVhdGlvbiB3b3VsZCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBlcnJvciBhbmQsIHRoZXJlZm9yZSwgZ29vZC4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBhYm91dCBmaXhpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEl0JiMzOTtzIHN0cmljdGx5IGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhhbmRsaW5nIGZyYWdtZW50ZWQgb3IgbWl4ZWQgZGVjcnlwdGlvbiBzdGF0ZXMgaW4gdGhlIFRDUCBzdHJlYW0uIFRoZSBidWcgaXMgdGhhdCBgdGxzX3J4X21zZ19zaXplYCB3YXMgY2FsbGVkIGJlZm9yZSBjaGVja2luZyB0aGUgcXVldWUgc3RhdGUuIFRoZSBmaXggY29ycmVjdHMgdGhpcy4KCk9uZSBtb3JlIHF1aWNrIGNoZWNrOiB3aGF0IGFib3V0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcz8gTGV0JiMzOTtzIHNheSBgdGxzX3J4X21zZ19zaXplYCByZXBvcnRzIGEgaHVnZSBzaXplIGFuZCBgdGxzX3N0cnBfcmVhZF9jb3B5YCB0cmllcyB0byBhbGxvY2F0ZSBhIGh1Z2UgYW1vdW50IG9mIG1lbW9yeT8gVGhlIG1heGltdW0gc2l6ZSBgc3pgIHJldHVybmVkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGlzIGJvdW5kIGJ5IGBUTFNfTUFYX1BBWUxPQURfU0laRSAmIzQzOyBjaXBoZXJfb3ZlcmhlYWQgJiM0MzsgcHJvdC0mZ3Q7dGFpbF9zaXplICYjNDM7IFRMU19IRUFERVJfU0laRWAsIHdoaWNoIGlzIGFyb3VuZCAxNktCLiBUaGF0IG1lYW5zIGEgbWF4aW11bSBvZiBhYm91dCA1IHBhZ2VzLiBUaGF0JiMzOTtzIG5vdCBhIGxvdCwgYW5kIHRoZXJlJiMzOTtzIGEgbGltaXQuCgpXaGF0IGFib3V0IGB0bHNfc3RycF9yZWFkX2NvcHlgIGFsbG9jYXRpbmcgcGFnZXMsIGFuZCB0aGVuIG5vdCBpbml0aWFsaXppbmcgdGhlbT8gSXQgYWxsb2NhdGVzIHBhZ2VzIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIGJ1dCB0aGVuIGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAuIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgdXNlcyBgdGNwX3JlYWRfc29ja2Agd2hpY2ggY2FsbHMgYHRsc19zdHJwX2NvcHlpbmAsIGFuZCB0aGVuIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2AsIHdoaWNoIGNhbGxzIGBza2JfY29weV9iaXRzYC4gQ3J1Y2lhbGx5LCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2tiIChgc2tiLSZndDtsZW5gKSBhbmQgdGhlIGZyYWdtZW50IHNpemUgKGBza2JfZnJhZ19zaXplYCkgd2l0aCB0aGUgYW1vdW50IG9mIGRhdGEgKmFjdHVhbGx5KiBjb3BpZWQuIFRoZSBza2ImIzM5O3MgZGF0YSBsZW5ndGggKm9ubHkqIHJlcHJlc2VudHMgdGhlIGluaXRpYWxpemVkIGRhdGEhIEFueSB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHBhZ2UgaXMgbm90IGV4cG9zZWQgdG8gdGhlIG5ldHdvcmsgY29kZS4KCioqSW4gY29uY2x1c2lvbjogdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNhdXNlcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cblxuQnkgYWRkaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpYCBiZWZvcmUgcGFyc2luZyB0aGUgaGVhZGVyLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGRldGVjdHMgdGhlc2UgZWRnZSBjYXNlcyBhbmQgZmFsbHMgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YCwgd2hpY2ggdXNlcyBgdGNwX3JlYWRfc29ja2AgdG8gcHJvcGVybHkgcmVhc3NlbWJsZSB0aGUgVENQIHN0cmVhbSBpbnRvIGEgbGluZWFyIGJ1ZmZlciBiZWZvcmUgcGFyc2luZy5cblxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgVExTIHN0cnBhcnNlciB3aGVyZSBgdGxzX3J4X21zZ19zaXplYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhlIHJhdyBUQ1AgcmVjZWl2ZSBxdWV1ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoYXQgdGhlIHNrYnMgZm9ybWluZyB0aGUgVExTIGhlYWRlciBhcmUgY29udGlndW91cyBpbiBzZXF1ZW5jZSBzcGFjZSBhbmQgaGF2ZSBtYXRjaGluZyBkZWNyeXB0ZWQgc3RhdHVzLiBJZiB0aGUgcmVjZWl2ZSBxdWV1ZSBjb250YWluZWQgb3ZlcmxhcHBpbmcgVENQIHNlZ21lbnRzIG9yIHNlZ21lbnRzIHdpdGggbWl4ZWQgaGFyZHdhcmUvc29mdHdhcmUgZGVjcnlwdGVkIHN0YXR1cywgYHRsc19yeF9tc2dfc2l6ZWAgd291bGQgcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhbiBlcnJvciAobGlrZSBgLUVCQURNU0dgKSwgY2F1c2luZyBhIHNwdXJpb3VzIGNvbm5lY3Rpb24gYWJvcnQuXG5cbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXG5cblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozMC4xNDUyNjEyMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY3NzgxMDE2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N0cnBfY2hlY2tfcmN2XCIsXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjMwLjE0NTI2NzIwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwOTY0MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdHJwLmMgYi9uZXQvdGxzL3Rsc19zdHJwLmNcXG5pbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xcbisrKyBiL25ldC90bHMvdGxzX3N0cnAuY1xcbkBAIC00MzAsOSArNDMwLDEwIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbitzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBsZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGxlbiA9IHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgKyBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW47XFxuK1xcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVxcdTAwM2VzdG0ub2Zmc2V0ICsgbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7XFxuIFxcdHUzMiBzZXE7XFxuIFxcbkBAIC00NDMsOSArNDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuIFxcdC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcXG4gXFx0ICogYW5kIHRoZSBkZWNyeXB0ZWQgc3RhdHVzIG1hdGNoZXMuXFxuIFxcdCAqL1xcbi1cXHR3aGlsZSAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBsZW4pIHtcXG4rXFx0d2hpbGUgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgcmVtYWluaW5nKSB7XFxuIFxcdFxcdHNlcSArPSBza2ItXFx1MDAzZWxlbjtcXG4tXFx0XFx0bGVuIC09IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRcXHRyZW1haW5pbmcgLT0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHNrYiA9IHNrYi1cXHUwMDNlbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAhPSBzZXEpXFxuQEAgLTUyNSw2ICs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuIFxcbiBcXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XFxuIFxcdGlmICghc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XFxuK1xcdFxcdGlmIChpbnEgXFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuK1xcbiBcXHRcXHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbiBcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gc3o7XFxuQEAgLTUzNSw3ICs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4gXFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSlcXG4rXFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pKVxcbiBcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MzAuNTI2ODkyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0MzI3OTg2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zdHJwX2NoZWNrX3JjdlwiLFxuICAgIFwidGxzX3N3X3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHN0cmVhbSBwYXJzZXIgcmVjZWl2ZSBwYXRoIChgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCkgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBxdWV1ZSBsZW5ndGggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgVExTIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRMUyByZWNlaXZlIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUTFMgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzMwZDY4ZTVlZmI1Zjg5MjA1MmMxMTJkMDdiZDFhNjQwMTBkMjUxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3RycC5jIGIvbmV0L3Rscy90bHNfc3RycC5jXG5pbmRleCA2MWIxMGM2OTdlY2NiLi42Y2MyMjIwMDhkOTVjIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3RycC5jXG4rKysgYi9uZXQvdGxzL3Rsc19zdHJwLmNcbkBAIC00MzAsOSArNDMwLDEwIEBAIHN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbitzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW4gPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgKyBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbjtcbitcdHVuc2lnbmVkIGludCByZW1haW5pbmcgPSBzdHJwLVx1MDAzZXN0bS5vZmZzZXQgKyBsZW47XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2I7XG4gXHR1MzIgc2VxO1xuIFxuQEAgLTQ0Myw5ICs0NDQsOSBAQCBzdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcdC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIGR1cGxpY2F0ZSBkYXRhIGluIHRoZSBxdWV1ZSxcbiBcdCAqIGFuZCB0aGUgZGVjcnlwdGVkIHN0YXR1cyBtYXRjaGVzLlxuIFx0ICovXG4tXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgbGVuKSB7XG4rXHR3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgcmVtYWluaW5nKSB7XG4gXHRcdHNlcSArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRsZW4gLT0gc2tiLVx1MDAzZWxlbjtcbitcdFx0cmVtYWluaW5nIC09IHNrYi1cdTAwM2VsZW47XG4gXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuIFxuIFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAhPSBzZXEpXG5AQCAtNTI1LDYgKzUyNiwxMSBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcbiBcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcbiBcdGlmICghc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pIHtcbitcdFx0aWYgKGlucSBcdTAwM2MgVExTX0hFQURFUl9TSVpFKVxuK1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgdHJ1ZSk7XG4rXHRcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKSlcbitcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcbitcbiBcdFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpO1xuIFx0XHRpZiAoc3ogXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHN6O1xuQEAgLTUzNSw3ICs1NDEsNyBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbiBcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuIFx0fVxuIFxuLVx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwKSlcbitcdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW4pKVxuIFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIGZhbHNlKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc3RycC1cdTAwM2Vtc2dfcmVhZHksIDEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MzAuNTI2ODkzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAwNjQ5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQcm9jZXNzaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdGlnaHRlbmluZyB1cCBzb21lIHRoaW5ncyBhcm91bmQgdGhlIHN0cmVhbSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAsIHdlJ3JlIG5vdyBwYXNzaW5nIGluIGEgYGxlbmAgYXJndW1lbnQgZGlyZWN0bHkuIFRoYXTigJlzIGEgZ29vZCBtb3ZlLCBtYWtlcyB0aGUgZnVuY3Rpb24gbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhdm9pZHMgcmVkdW5kYW50IGNhbGN1bGF0aW9ucyBpZiBgZnVsbF9sZW5gIGlzbid0IGFsd2F5cyBjdXJyZW50LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGFkZGl0aW9uIGluIGB0bHNfc3RycF9yZWFkX3NvY2tgLiBXZeKAmXJlIHByZWVtcHRpdmVseSBjYWxsaW5nIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgKmJlZm9yZSogaGl0dGluZyBgdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKWAuIFRoaXMgaXMga2V5LiBJdCBpbXBsaWVzIHdlJ3JlIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgYXZhaWxhYmxlIGRhdGEgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICpiZWZvcmUqIHdlIGF0dGVtcHQgdG8gcGFyc2UgYW55IGhlYWRlcnMuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UtaW4tZGVwdGggYXBwcm9hY2guIFdlJ3JlIGxvb2tpbmcgdG8gYXZvaWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQgZGVlcGVyIG5vdyBhbmQgc2VlIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBjaGVjayBpcyB1c2luZyBgVExTX0hFQURFUl9TSVpFYCBoZXJlLCB3aGljaCBzdWdnZXN0cyB3ZSBhcmUgdmFsaWRhdGluZyB0aGUgc2l6ZSBvZiB0aGUgVExTIGhlYWRlciBmaXJzdC5cblxuVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGBUTFNfSEVBREVSX1NJWkVgIGFjdHVhbGx5IHJlcHJlc2VudHMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG91ciBtZXNzYWdlIHBhcnNpbmcgc3RyYXRlZ3kuIEkgd2FudCB0byBsb29rIGF0IGhvdyB3ZSBhcmUgY2FsY3VsYXRpbmcgYW5kIHZlcmlmeWluZyB0aGUgYWN0dWFsIGluY29taW5nIG1lc3NhZ2Ugc2l6ZSBhZnRlciB0aGlzIGluaXRpYWwgY2hlY2ssIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHVzZSBvZiB0aGUgYGFuY2hvcmAuIEkgYW0gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcyBnaXZlbiB0aGlzIHByZS1lbXB0aXZlIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozNi40Mjc1NDYwMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NTEyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N0cnBfcmVhZF9zb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz00ODQ9Ym9vbCB0bHNfc3RycF9tc2dfbG9hZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBmb3JjZV9yZWZyZXNoKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTUxMi0vKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQgb24gbG93ZXIgc29ja2V0ICovXFxubmV0L3Rscy90bHNfc3RycC5jOjUxMzpzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE0LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01NTc9dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTYxLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1NjI6XFx0aWYgKHRsc19zdHJwX3JlYWRfc29jayhzdHJwKSA9PSAtRU5PTUVNKVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NjMtXFx0XFx0cXVldWVfd29yayh0bHNfc3RycF93cSwgXFx1MDAyNnN0cnAtXFx1MDAzZXdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjozNi40NzEzMDA1NjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDYxMjQwMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgcHJvdG9jb2xzOlxuXG4qKlRyYWNpbmcgYSBEYXRhIEZsb3cgaW4gdGhlIFRMUyBTdGFjayoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlYWRzIGRhdGEgZnJvbSB0aGUgc29ja2V0LCBhbmQgYHRsc19zdHJwX2NoZWNrX3JjdmAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGB0bHNfc3RycF9jaGVja19yY3ZgIGlzIGdldHRpbmcgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHRsc19zdHJwX2NoZWNrX3JjdmAuIFdoZXJlJ3MgaXRzIGNhbGxzaXRlPyBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGluIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB0aGUgdml0YWwgY29udGV4dCB0byBteSBhbmFseXNpcy4gVGltZSB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjQwLjkzMjU0NDk4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg4NTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfc3RycF9jaGVja19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xOTQ9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTE5NS1cXG5uZXQvdGxzL3Rscy5oOjE5Njp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSk7XFxubmV0L3Rscy90bHMuaC0xOTctdm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9NjI3PXN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzc0LVxcbm5ldC90bHMvdGxzX21haW4uYzo3NzU6XFx0XFx0dGxzX3N0cnBfY2hlY2tfcmN2KFxcdTAwMjZyeF9jdHgtXFx1MDAzZXN0cnAsIHRydWUpO1xcbm5ldC90bHMvdGxzX21haW4uYy03NzYtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NTYtICovXFxubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU4LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01Njk9dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU4Mi1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTgzOlxcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTg0LX1cXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01ODY9c3RhdGljIHZvaWQgdGxzX3N0cnBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkxLVxcdGxvY2tfc29jayhzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3Rscy90bHNfc3RycC5jOjU5MjpcXHR0bHNfc3RycF9jaGVja19yY3Yoc3RycCwgdHJ1ZSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTU5My1cXHRyZWxlYXNlX3NvY2soc3RycC1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU5Ni0vKiBSZWxlYXNlIHRoZSBjdXJyZW50IHJlY29yZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBjaGVjayBmb3IgdGhlXFxubmV0L3Rscy90bHNfc3RycC5jOjU5NzogKiBuZXh0IHJlY29yZC4gQ2FsbGVycyBtdXN0IGludm9rZSB0bHNfc3RycF9jaGVja19yY3YoKSBiZWZvcmVcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk4LSAqIHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2ssIG9yIHF1ZXVlZCBkYXRhIHdpbGwgc3RhbGwgdW50aWwgdGhlXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTEwOTU9dGxzX3J4X3JlY193YWl0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBub25ibG9jaywgYm9vbCByZWxlYXNlZCwgYm9vbCBoYXNfY29waWVkKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xMTI0LVxcdFxcdFxcdCAqL1xcbm5ldC90bHMvdGxzX3N3LmM6MTEyNTpcXHRcXHRcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCwgZmFsc2UpO1xcbm5ldC90bHMvdGxzX3N3LmMtMTEyNi1cXHRcXHRcXHRpZiAodGxzX3N0cnBfbXNnX3JlYWR5KGN0eCkpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTE2MjQ9c3RhdGljIHZvaWQgdGxzX3J4X3JlY19kb25lKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xNjI2LVxcdHRsc19zdHJwX21zZ19jb25zdW1lKFxcdTAwMjZjdHgtXFx1MDAzZXN0cnApO1xcbm5ldC90bHMvdGxzX3N3LmM6MTYyNzpcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCwgZmFsc2UpO1xcbm5ldC90bHMvdGxzX3N3LmMtMTYyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjQwLjk3NzQzNDI3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTU1NzQxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFRMUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwYXRjaCBtb2RpZnlpbmcgdGhlIGNvcmUgVExTIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvdGxzL2AgZGlyZWN0b3J5IOKAkyB0aGUgaGVhcnQgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBhY2Nlc3NpYmxlIHZpYSBUTFMgc29ja2V0cy4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRhcmdldGVkOiBgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjaGVjayBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYHRsc19yeF9tc2dfc2l6ZWAgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHJlY2VpdmUgcGF0aC4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGlzIGFyZWEsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBpbnRlbnNpdmUgZnV6emluZy4gSSBuZWVkIHRvIGdldCB0aGlzIGludG8gbXkgZnV6emluZyBwaXBlbGluZSBBU0FQLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBUTFMgdG8gZW5zdXJlIEknbSBmdXp6aW5nIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIHRvIHRhcmdldCB0aGlzIG1vZGlmaWNhdGlvbiBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6NDYuMTkzMDExMzQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTU1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo0Ni4yMzc1NzAwNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0OTgxMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBTY29wZSoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBUTFNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhbmQgZnJhbmtseSwgbXkgc3RhbmRhcmQgcHJvY2VkdXJlLCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggc3dlZXAgb2YgdGhlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYFRMU2AgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZS4gQXJlIHRoZXJlIGFueSBsZWdhY3kgY29uZmlncyBsdXJraW5nIGFyb3VuZD8gTWF5YmUgc29tZSBoaWRkZW4gb3ZlcnJpZGVzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG9yIGV2ZW4gZGlmZmVyZW50IGNvbXBvbmVudHMgdGhhdCAqc2hvdWxkKiBiZSBhbGlnbmVkIGJ1dCBhcmVuJ3Q/IEkgaGF2ZSB0byBjb25maXJtIHRoYXQgdGhpcyBgVExTYCBzZXR0aW5nIGhhcyBhIGZ1bGx5IGVuY29tcGFzc2luZyBzY29wZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50OyBvdGhlcndpc2UsIGl0J3MgaW1wb3NzaWJsZSB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgc2V0dXAuIEdvdHRhIGJlIHN5c3RlbWF0aWMgYW5kIGVsaW1pbmF0ZSBhbnkgYmxpbmQgc3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo1MC40ODI1NTMxOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxubmV0L3Rscy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L3Rscy9LY29uZmlnLTgtXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcbm5ldC90bHMvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIFRMU1xcbm5ldC90bHMvS2NvbmZpZy0yMi1cXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Njo1MC41MjcwMDI5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2MTE2NDU4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFRMU2AgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyBzb2NrZXQgcmVhZHMuIEkgc2VlIGB0bHNfc3RycF9yZWFkX3NvY2tgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgYWxzbyBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaW5kIG91dCB3aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cywgYXMgdGhhdCB3b3VsZCBzdWdnZXN0IGhvdyB0aGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLCBnaXZlbiBpdHMgbGltaXRlZCBzY29wZS5cblxuSSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYHRsc19zdHJwX2NoZWNrX3JjdmAgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIE5vdyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgc2ltaWxhciBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IG1heSBleGlzdC4gSSBhbSBsb29raW5nIGZvciBvdGhlciBjYWxsaW5nIGZ1bmN0aW9ucyB0byBnYWluIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzowOS4xMzg2NTA4NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI3Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX2NoZWNrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE5ND12b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk1LVxcbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcXG5uZXQvdGxzL3Rscy5oLTE5Ny12b2lkIHRsc19zdHJwX21zZ19jb25zdW1lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz02Mjc9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9jb25mKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy03NzQtXFxubmV0L3Rscy90bHNfbWFpbi5jOjc3NTpcXHRcXHR0bHNfc3RycF9jaGVja19yY3YoXFx1MDAyNnJ4X2N0eC1cXHUwMDNlc3RycCwgdHJ1ZSk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTc3Ni1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTU1Ni0gKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTU3OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU2OT12b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTgyLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1ODM6XFx0dGxzX3N0cnBfY2hlY2tfcmN2KHN0cnAsIHRydWUpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01ODQtfVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01OTEtXFx0bG9ja19zb2NrKHN0cnAtXFx1MDAzZXNrKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTkyOlxcdHRsc19zdHJwX2NoZWNrX3JjdihzdHJwLCB0cnVlKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTkzLVxcdHJlbGVhc2Vfc29jayhzdHJwLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk2LS8qIFJlbGVhc2UgdGhlIGN1cnJlbnQgcmVjb3JkIHdpdGhvdXQgdHJpZ2dlcmluZyBhIGNoZWNrIGZvciB0aGVcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTk3OiAqIG5leHQgcmVjb3JkLiBDYWxsZXJzIG11c3QgaW52b2tlIHRsc19zdHJwX2NoZWNrX3JjdigpIGJlZm9yZVxcbm5ldC90bHMvdGxzX3N0cnAuYy01OTgtICogcmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jaywgb3IgcXVldWVkIGRhdGEgd2lsbCBzdGFsbCB1bnRpbCB0aGVcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTA5NT10bHNfcnhfcmVjX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBib29sIG5vbmJsb2NrLCBib29sIHJlbGVhc2VkLCBib29sIGhhc19jb3BpZWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTExMjQtXFx0XFx0XFx0ICovXFxubmV0L3Rscy90bHNfc3cuYzoxMTI1OlxcdFxcdFxcdHRsc19zdHJwX2NoZWNrX3JjdihcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwLCBmYWxzZSk7XFxubmV0L3Rscy90bHNfc3cuYy0xMTI2LVxcdFxcdFxcdGlmICh0bHNfc3RycF9tc2dfcmVhZHkoY3R4KSlcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTYyND1zdGF0aWMgdm9pZCB0bHNfcnhfcmVjX2RvbmUoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE2MjYtXFx0dGxzX3N0cnBfbXNnX2NvbnN1bWUoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxubmV0L3Rscy90bHNfc3cuYzoxNjI3OlxcdHRsc19zdHJwX2NoZWNrX3JjdihcXHUwMDI2Y3R4LVxcdTAwM2VzdHJwLCBmYWxzZSk7XFxubmV0L3Rscy90bHNfc3cuYy0xNjI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MDkuMTgzMzgzODc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTY3OTAxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSZWFkaW5lc3MqKlxuXG5BbHJpZ2h0LCBzbyBgdGxzX3N0cnBfY2hlY2tfcmN2YCBjYXVnaHQgbXkgZXllIGFzIGEgbGlrZWx5IGtleSBmb2N1cyBzeW1ib2wuIEdvb2QgY2hvaWNlLiBCdXQgd2FpdCwgYHRsc19zdHJwX2RhdGFfcmVhZHlgIGFsc28gbG9va3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpc24ndCBzdGF0aWMgd2hpY2ggaXMgdW51c3VhbC4gVGhlIGZhY3QgdGhhdCBpdCAqY2FsbHMqIGB0bHNfc3RycF9jaGVja19yY3ZgIHJhaXNlcyBzb21lIGltbWVkaWF0ZSBxdWVzdGlvbnMuIFNlZW1zIGxpa2UgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0IGB0bHNfc3RycF9kYXRhX3JlYWR5YCBpcyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgZmlndXJlIG91dCB3aGF0IGRhdGEgcmVhZGluZXNzIHRydWx5IG1lYW5zIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjEzLjM0MDE3NjkwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NjUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N0cnBfZGF0YV9yZWFkeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE5Mz1pbnQgdGxzX3N0cnBfaW5pdChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvdGxzL3Rscy5oOjE5NDp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk1LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTU1Nz12b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NjgtLyogTG93ZXIgc29jayBsb2NrIGhlbGQgKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTY5OnZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTcwLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01ODY9c3RhdGljIHZvaWQgdGxzX3N0cnBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTk4LSAqIHJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2ssIG9yIHF1ZXVlZCBkYXRhIHdpbGwgc3RhbGwgdW50aWwgdGhlXFxubmV0L3Rscy90bHNfc3RycC5jOjU5OTogKiBuZXh0IHRsc19zdHJwX2RhdGFfcmVhZHkoKSBldmVudC5cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMjU5PXN0YXRpYyB2b2lkIHRsc19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjI2OC1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XFxubmV0L3Rscy90bHNfc3cuYzoyMjY5OlxcdHRsc19zdHJwX2RhdGFfcmVhZHkoXFx1MDAyNmN0eC1cXHUwMDNlc3RycCk7XFxubmV0L3Rscy90bHNfc3cuYy0yMjcwLVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uID0gYWxsb2Nfc2F2ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MTMuMzg0NjQ4NjU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQxODE4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFRMUyByZWNlaXZlIHBhdGggaGVyZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGB0bHNfZGF0YV9yZWFkeWAgaXMgbW9zdCBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiwgc29tZXRoaW5nIGFraW4gdG8gdGhlIGBza19kYXRhX3JlYWR5YCBJJ20gZmFtaWxpYXIgd2l0aCBmcm9tIG90aGVyIG5ldHdvcmsgc3RhY2tzLiBJdCBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgdW5kZXJseWluZyBzb2NrZXQuXG5cbk5leHQsIEkgc2VlIGB0bHNfc3RycF9jaGVja19yY3ZgLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIHN0cmluZyBwYXJzZXIsIHdoaWNoIGlzIGtleSBmb3IgcGFyc2luZyB0aGUgaW5jb21pbmcgVExTIG1lc3NhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluY29taW5nIGRhdGEgaW50ZXJhY3RzIHdpdGggdGhlIHBhcnNlciBhbmQgaG93IHRoZSBwYXJzaW5nIHJlc3VsdCBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24uXG5cbkxldCdzIG5vdCBmb3JnZXQgdGhlIG1haW4gcmVjZWl2ZSBmdW5jdGlvbiwgdGhvdWdoLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGB0bHNfc3dfcmVjdm1zZ2AuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgaG93IHRoZSBzb2NrZXQgZ2V0cyB0aGUgcmF3IGRhdGEgYW5kIGludGVncmF0ZXMgd2l0aCBUTFMgdG8gaGFuZGxlIHRoZSBjcnlwdG9ncmFwaGljIHN0dWZmLiBOb3cgSSBoYXZlIGEgYmV0dGVyIGlkZWEgb2YgaG93IHRoZSBpbmNvbWluZyBkYXRhIHRyYXZlbHMgdGhyb3VnaCB0aGUgVExTIHN0YWNrLiBJdCB3aWxsIGdvIGZyb20gdGhlIHNvY2tldCB0aHJvdWdoIHRoZSBtYWluIHJlY2VpdmUgZnVuY3Rpb24gYW5kIHRoZW4gYmUgcGFyc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MTcuNzY4ODMzMjkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MDg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xNjI9dm9pZCB0bHNfc3dfZnJlZV9jdHhfcngoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Rscy90bHMuaC0xNjQtXFx0XFx0ICAgaW50IGZsYWdzKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDAyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcXHRcXHQgID0gdGxzX3N3X3JlY3Ztc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVxcdHByb3RbVExTX1NXXVtUTFNfU1ddID0gcHJvdFtUTFNfU1ddW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMTpcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cXHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTgwMD1zdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xODA1LVxcbm5ldC90bHMvdGxzX3N3LmM6MTgwNjppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX3N3LmMtMTgwNy1cXHRcXHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjE3Ljk4MDQ0NjI4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk3NDQyNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFRMUyBSZWNlaXZlIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nOiB0aGUgYHRsc19zd19yZWN2bXNnYCBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgcmVjdm1zZyBoYW5kbGVyIGZvciBUTFMgc29mdHdhcmUgc29ja2V0cywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBncmVhdCBcImZvY3VzIHN5bWJvbC5cIiBJdCdzIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWNlaXZpbmcgZGF0YSBvdmVyIFRMUyBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS5cblxuSSd2ZSBhbHNvIGlkZW50aWZpZWQgYHRsc19zdHJwX2NoZWNrX3JjdmAgYXMgYSByZWxhdGVkIGZvY3VzIHN5bWJvbC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBUTFMgc3RyZWFtIHBhcnNlcidzIHJlY2VpdmUgcGF0aCAtIHNwZWNpZmljYWxseSBgdGxzX3N0cnBfcmVhZF9zb2NrYCBhbmQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gVGhpcyBjb25jZXJucyBob3cgdGhlIHN5c3RlbSBjaGVja3MgdGhlIHF1ZXVlIGxlbmd0aCAqYmVmb3JlKiByZWFkaW5nIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGNvcmUgcmVjZWl2ZSBsb2dpYyB3aXRoaW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gQ3J1Y2lhbGx5LCB0aGlzIHBhdGggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRob3NlIFRMUyBzb2NrZXRzLiBUaGF0J3MgYSB0ZXh0Ym9vayBvcHBvcnR1bml0eSBmb3IgZnV6emluZyEgQSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHJlYWwgaXNzdWVzLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY29uZmlndXJhdGlvbi13aXNlLiBJIHNlZSBgVExTYCwgYW5kIHRoYXQncyB0aGUgb25seSBvbmUgSSdtIGNvbmNlcm5lZCB3aXRoLiBJIGtub3cgYFRMU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNlbGVjdHMgYENSWVBUT2AuIFNpbmNlIGBJTkVUYCBhbmQgYENSWVBUT2AgYXJlIHN0YW5kYXJkLCBJJ20gY29uZmlkZW50IHRoYXQganVzdCBoYXZpbmcgYFRMU2AgZW5hYmxlZCBpcyBlbm91Z2ggdG8gY3JlYXRlIGEgZnV6emluZyBjb25maWd1cmF0aW9uIHRoYXQgY292ZXJzIHRoaXMgY29kZSBwYXRoLiBUaGlzIHNob3VsZCBrZWVwIHRoZSBzZXR1cCByZWxhdGl2ZWx5IHNpbXBsZSBhbmQgZm9jdXNlZC4gSSdtIHJlYWR5IHRvIHJvbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTQsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljc3Nzg5MjgyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3RycF9jaGVja19yY3ZcIixcbiAgICBcInRsc19zd19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzdHJlYW0gcGFyc2VyIHJlY2VpdmUgcGF0aCAoYHRsc19zdHJwX3JlYWRfc29ja2AgYW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2ApIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgcXVldWUgbGVuZ3RoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFRMUyBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUTFMgcmVjZWl2ZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVExTIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N0cnBfY2hlY2tfcmN2XCIsXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc3RyZWFtIHBhcnNlciByZWNlaXZlIHBhdGggKGB0bHNfc3RycF9yZWFkX3NvY2tgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgKSB0byBjb3JyZWN0bHkgY2hlY2sgdGhlIHF1ZXVlIGxlbmd0aCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBUTFMgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVExTIHJlY2VpdmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRMUyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzoyNC44NTQ4ODE4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjA2ODQ2Njc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljg1NTM0NDg2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTIwNjc5OTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBUTFMgc3RycGFyc2VyIHdoZXJlIGB0bHNfcnhfbXNnX3NpemVgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcmF3IFRDUCByZWNlaXZlIHF1ZXVlIGJlZm9yZSB2ZXJpZnlpbmcgdGhhdCB0aGUgc2ticyBmb3JtaW5nIHRoZSBUTFMgaGVhZGVyIGFyZSBjb250aWd1b3VzIGluIHNlcXVlbmNlIHNwYWNlIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIElmIHRoZSByZWNlaXZlIHF1ZXVlIGNvbnRhaW5lZCBvdmVybGFwcGluZyBUQ1Agc2VnbWVudHMgb3Igc2VnbWVudHMgd2l0aCBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0ZWQgc3RhdHVzLCBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCByZWFkIGEgY29ycnVwdGVkIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgcmV0dXJuIGFuIGVycm9yIChsaWtlIGAtRUJBRE1TR2ApLCBjYXVzaW5nIGEgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydC5cXG5cXG5CeSBhZGRpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSlgIGJlZm9yZSBwYXJzaW5nIHRoZSBoZWFkZXIsIHRoZSBjb2RlIG5vdyBjb3JyZWN0bHkgZGV0ZWN0cyB0aGVzZSBlZGdlIGNhc2VzIGFuZCBmYWxscyBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLCB3aGljaCB1c2VzIGB0Y3BfcmVhZF9zb2NrYCB0byBwcm9wZXJseSByZWFzc2VtYmxlIHRoZSBUQ1Agc3RyZWFtIGludG8gYSBsaW5lYXIgYnVmZmVyIGJlZm9yZSBwYXJzaW5nLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgZnVuY3Rpb25hbCBidWcgZml4LiBUaGUgZGF0YSByZWFkIGJ5IGB0bHNfcnhfbXNnX3NpemVgIGNvbWVzIGZyb20gZnVsbHkgaW5pdGlhbGl6ZWQgbmV0d29yayBidWZmZXJzLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBpcyBhY2Nlc3NlZCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBwYWdlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBmYWxsYmFjayBwYXRoIGFyZSBvbmx5IGV4cG9zZWQgdXAgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSB0aGUgbmV0d29yayBzdHJlYW0sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzMGQ2OGU1ZWZiNWY4OTIwNTJjMTEyZDA3YmQxYTY0MDEwZDI1MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N0cnAuYyBiL25ldC90bHMvdGxzX3N0cnAuY1xuaW5kZXggNjFiMTBjNjk3ZWNjYi4uNmNjMjIyMDA4ZDk1YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N0cnAuY1xuKysrIGIvbmV0L3Rscy90bHNfc3RycC5jXG5AQCAtNDMwLDkgKzQzMCwxMCBAQCBzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4rc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGxlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbGVuID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICsgc3RycC1cdTAwM2VzdG0uZnVsbF9sZW47XG4rXHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gc3RycC1cdTAwM2VzdG0ub2Zmc2V0ICsgbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0LCAqc2tiO1xuIFx0dTMyIHNlcTtcbiBcbkBAIC00NDMsOSArNDQ0LDkgQEAgc3RhdGljIGJvb2wgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHQvKiBNYWtlIHN1cmUgdGhlcmUncyBubyBkdXBsaWNhdGUgZGF0YSBpbiB0aGUgcXVldWUsXG4gXHQgKiBhbmQgdGhlIGRlY3J5cHRlZCBzdGF0dXMgbWF0Y2hlcy5cbiBcdCAqL1xuLVx0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIGxlbikge1xuK1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuIFx0XHRzZXEgKz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0bGVuIC09IHNrYi1cdTAwM2VsZW47XG4rXHRcdHJlbWFpbmluZyAtPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRza2IgPSBza2ItXHUwMDNlbmV4dDtcbiBcbiBcdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxKVxuQEAgLTUyNSw2ICs1MjYsMTEgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXG4gXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XG4gXHRpZiAoIXN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XG4rXHRcdGlmIChpbnEgXHUwMDNjIFRMU19IRUFERVJfU0laRSlcbitcdFx0XHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xuK1x0XHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIFRMU19IRUFERVJfU0laRSkpXG4rXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4rXG4gXHRcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXHUwMDNlYW5jaG9yKTtcbiBcdFx0aWYgKHN6IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBzejtcbkBAIC01MzUsNyArNTQxLDcgQEAgc3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG4gXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbiBcdH1cbiBcbi1cdGlmICghdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCkpXG4rXHRpZiAoIXRsc19zdHJwX2NoZWNrX3F1ZXVlX29rKHN0cnAsIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuKSlcbiBcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XG4gXG4gXHRXUklURV9PTkNFKHN0cnAtXHUwMDNlbXNnX3JlYWR5LCAxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjI0Ljg1NTM0NTY3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk1MjUyMDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90bHMvdGxzX3N0cnAuY2AuIFRoZXkndmUgbW9kaWZpZWQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCB0byB0YWtlIGEgYGxlbmAgYXJndW1lbnQsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIHJlZHVuZGFudCBjYWxjdWxhdGlvbnMuIFRoZXkndmUgYWxzbyBhZGRlZCBhIGNoZWNrIGluIGB0bHNfc3RycF9yZWFkX3NvY2tgIHRvIHZhbGlkYXRlIHRoZSBpbml0aWFsIGBUTFNfSEVBREVSX1NJWkVgIG9mIHRoZSBpbmNvbWluZyBxdWV1ZSAoYGlucWApLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlIHF1ZXVlIHNpemUgKGBpbnFgKSBpcyBsZXNzIHRoYW4gYFRMU19IRUFERVJfU0laRWAsIGl0IGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlgIHdpdGggYSBcInRydWVcIiBmbGFnLiBPdGhlcndpc2UsIGl0IGNoZWNrcyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgdG8gZW5zdXJlIHRoZSBoZWFkZXIncyBpbnRlZ3JpdHkuIEZpbmFsbHksIGlmIHRoZSBoZWFkZXIgaXMgdmFsaWQgdGhleSB0aGVuIGNhbGwgYHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVx1MDAzZWFuY2hvcilgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgLCBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBTS0IgcXVldWUsIGNoZWNraW5nIGZvciBjb250aWd1b3VzIHNlcXVlbmNlIG51bWJlcnMgYW5kIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFjcm9zcyB0aGUgcXVldWUuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCdzIGhhcHBlbmluZyAqYWZ0ZXIqIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2A/XG5cblRoZSBjb2RlIGNhbGxzIGB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB0bHNfcnhfbXNnX3NpemVgIGlzIHJlYWRpbmcgdGhlIGhlYWRlciBmcm9tIGBzdHJwLVx1MDAzZWFuY2hvcmAuIElmIHRoZSBoZWFkZXIgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIFNLQnMsIGRvZXMgYHRsc19yeF9tc2dfc2l6ZWAgYWN0dWFsbHkgaGFuZGxlIHRoaXMgY29ycmVjdGx5PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGB0bHNfcnhfbXNnX3NpemVgIG1pZ2h0IGFzc3VtZSBpdCBoYXMgZW5vdWdoIGRhdGEgaW4gYHN0cnAtXHUwMDNlYW5jaG9yYC4gSWYgaXQgZG9lc24ndCwgdGhpcyBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCDigJMgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLiBUaGF0IHdvdWxkIGJlIGEgbWFqb3IgcHJvYmxlbS5cblxuSSBoYXZlIHRvIGNoZWNrIGB0bHNfcnhfbXNnX3NpemVgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGVkIGhlYWRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGUgbmV3IGhlYWRlciB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGhlcmUgYXMgd2VsbD8gSSdkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRsc19yeF9tc2dfc2l6ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjM1LjgwNzg2OTg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MjE3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3J4X21zZ19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9MTk3PXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmgtMTk4LVxcbm5ldC90bHMvdGxzLmg6MTk5OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC90bHMvdGxzLmgtMjAwLXZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MjEwPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluX2ZyYWcoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMjM5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzoyNDA6XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc2tiKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMjQxLVxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9Mjg2PXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluX3NrYihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0zMTktXFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pIHtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6MzIwOlxcdFxcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHNrYik7XFxubmV0L3Rscy90bHNfc3RycC5jLTMyMS1cXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MzMtXFxubmV0L3Rscy90bHNfc3RycC5jOjUzNDpcXHRcXHRzeiA9IHRsc19yeF9tc2dfc2l6ZShzdHJwLCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MzUtXFx0XFx0aWYgKHN6IFxcdTAwM2MgMClcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjE3NT1ib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE4My1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxODQ6aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozNS44NTE0MDQ1MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NjExNDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBSZWNlaXZlIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGB0bHNfcnhfbXNnX3NpemVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBzaXR1YXRlZCB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgVExTLiBJIGtub3cgdGhlIHJlY2VpdmluZyBwYXRoIGlzIGNyaXRpY2FsLCBzbyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2l6ZSBvZiBhbiBpbmNvbWluZyBUTFMgbWVzc2FnZSBpcyBkZXRlcm1pbmVkIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFRoaXMgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIHdpbGwgcHJvdmlkZSB0aGUga2V5IHNpemUgb3IgdGhlIGhlYWRlciBzaXplIGZvciBhbiBpbmNvbWluZyBtZXNzYWdlLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGltcG9ydGFudCB0byBidWZmZXIgc2l6ZSBvciBob3cgYSBwYWNrZXQgaXMgaGFuZGxlZCB3aGVuIHJlY2VpdmVkLiBJJ20gZWFnZXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgZXh0cmFjdGVkIGFuZCB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NzozOS4xMjc1MjIyMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4NDpcXHRpbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIxODU6XFx0e1xcbjIxODY6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc3RycC1cXHUwMDNlc2spO1xcbjIxODc6XFx0XFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbjIxODg6XFx0XFx0Y2hhciBoZWFkZXJbVExTX0hFQURFUl9TSVpFICsgVExTX01BWF9JVl9TSVpFXTtcXG4yMTg5OlxcdFxcdHNpemVfdCBjaXBoZXJfb3ZlcmhlYWQ7XFxuMjE5MDpcXHRcXHRzaXplX3QgZGF0YV9sZW4gPSAwO1xcbjIxOTE6XFx0XFx0aW50IHJldDtcXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0LyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bGwgVExTIGhlYWRlciwgb3Igd2FpdCBmb3IgbW9yZSBkYXRhICovXFxuMjE5NDpcXHRcXHRpZiAoc3RycC1cXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjIxOTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE5NjpcXHRcXG4yMTk3OlxcdFxcdC8qIFNhbml0eS1jaGVjayBzaXplIG9mIG9uLXN0YWNrIGJ1ZmZlci4gKi9cXG4yMTk4OlxcdFxcdGlmIChXQVJOX09OKHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSBcXHUwMDNlIHNpemVvZihoZWFkZXIpKSkge1xcbjIxOTk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4yMjAwOlxcdFxcdFxcdGdvdG8gcmVhZF9mYWlsdXJlO1xcbjIyMDE6XFx0XFx0fVxcbjIyMDI6XFx0XFxuMjIwMzpcXHRcXHQvKiBMaW5lYXJpemUgaGVhZGVyIHRvIGxvY2FsIGJ1ZmZlciAqL1xcbjIyMDQ6XFx0XFx0cmV0ID0gc2tiX2NvcHlfYml0cyhza2IsIHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQsIGhlYWRlciwgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKTtcXG4yMjA1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIyMDY6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdHN0cnAtXFx1MDAzZW1hcmsgPSBoZWFkZXJbMF07XFxuMjIwOTpcXHRcXG4yMjEwOlxcdFxcdGRhdGFfbGVuID0gKChoZWFkZXJbNF0gXFx1MDAyNiAweEZGKSB8IChoZWFkZXJbM10gXFx1MDAzY1xcdTAwM2MgOCkpO1xcbjIyMTE6XFx0XFxuMjIxMjpcXHRcXHRjaXBoZXJfb3ZlcmhlYWQgPSBwcm90LVxcdTAwM2V0YWdfc2l6ZTtcXG4yMjEzOlxcdFxcdGlmIChwcm90LVxcdTAwM2V2ZXJzaW9uICE9IFRMU18xXzNfVkVSU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjIyMTQ6XFx0XFx0ICAgIHByb3QtXFx1MDAzZWNpcGhlcl90eXBlICE9IFRMU19DSVBIRVJfQ0hBQ0hBMjBfUE9MWTEzMDUpXFxuMjIxNTpcXHRcXHRcXHRjaXBoZXJfb3ZlcmhlYWQgKz0gcHJvdC1cXHUwMDNlaXZfc2l6ZTtcXG4yMjE2OlxcdFxcbjIyMTc6XFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUgKyBjaXBoZXJfb3ZlcmhlYWQgK1xcbjIyMTg6XFx0XFx0ICAgIHByb3QtXFx1MDAzZXRhaWxfc2l6ZSkge1xcbjIyMTk6XFx0XFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbjIyMjA6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIyMTpcXHRcXHR9XFxuMjIyMjpcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBjaXBoZXJfb3ZlcmhlYWQpIHtcXG4yMjIzOlxcdFxcdFxcdHJldCA9IC1FQkFETVNHO1xcbjIyMjQ6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIyNTpcXHRcXHR9XFxuMjIyNjpcXHRcXG4yMjI3OlxcdFxcdC8qIE5vdGUgdGhhdCBib3RoIFRMUzEuMyBhbmQgVExTMS4yIHVzZSBUTFNfMV8yIHZlcnNpb24gaGVyZSAqL1xcbjIyMjg6XFx0XFx0aWYgKGhlYWRlclsxXSAhPSBUTFNfMV8yX1ZFUlNJT05fTUlOT1IgfHxcXG4yMjI5OlxcdFxcdCAgICBoZWFkZXJbMl0gIT0gVExTXzFfMl9WRVJTSU9OX01BSk9SKSB7XFxuMjIzMDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIyMzE6XFx0XFx0XFx0Z290byByZWFkX2ZhaWx1cmU7XFxuMjIzMjpcXHRcXHR9XFxuMjIzMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTc6MzkuMTI3Njk4OTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NDM2NDEyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgUmVjZWl2ZSBNZXNzYWdlIFNpemUgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHRsc19yeF9tc2dfc2l6ZWAgd29ya3MsIGFuZCBpdCdzIHVzaW5nIGBza2JfY29weV9iaXRzYCB0byBncmFiIHRoZSBUTFMgaGVhZGVyLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3JhYmJpbmcgYHByb3QtXHUwMDNlcHJlcGVuZF9zaXplYCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCksIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiBgc3RycC1cdTAwM2VzdG0ub2Zmc2V0YC4gTm93LCBpZiB0aGUgc29ja2V0IGJ1ZmZlcidzIHRvdGFsIGxlbmd0aCAoYHNrYi1cdTAwM2VsZW5gKSBpc24ndCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG9mZnNldCBwbHVzIHRoZSBoZWFkZXIgc2l6ZSwgYHNrYl9jb3B5X2JpdHNgIHJldHVybnMgMC4gSSBzZWUgdGhhdCB0aGUgY29kZSBleHBsaWNpdGx5IGNoZWNrcyB0aGlzIGNvbmRpdGlvbjpcblxuYGBgY1xuXHQvKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVsbCBUTFMgaGVhZGVyLCBvciB3YWl0IGZvciBtb3JlIGRhdGEgKi9cblx0aWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cblRoaXMgbWFrZXMgc2Vuc2U7IGlmIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhLCBpdCBzaG91bGQgcmV0dXJuIGVhcmx5LiBIb3dldmVyLCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhlYWRlciBpcyAqc3BsaXQqIGFjcm9zcyBtdWx0aXBsZSBzb2NrZXQgYnVmZmVycz8gVGhhdCdzIGEgY2xhc3NpYyBmcmFnbWVudGVkIHBhY2tldCBzY2VuYXJpby4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvZGUgaGFuZGxlcyB0aGF0IGNvcnJlY3RseS5cblxuSSB0aG91Z2h0IGBza2JfY29weV9iaXRzYCBjb3VsZCBoYW5kbGUgdGhpcywgc2luY2UgaXQgY2FuIHJlYWQgYWNyb3NzIG11bHRpcGxlIHNrYnMgaWYgYHNrYmAgaXMgYSBmcmFnbWVudGVkIHNrYiBvciBpZiBpdCBoYXMgYSBmcmFnX2xpc3Qgb3IgbmV4dCBza2JzLiBCdXQgd2FpdC4uLiB1cG9uIHJlLXJlYWRpbmcgdGhlIGRvY3VtZW50YXRpb24sIEkgc2VlIHRoYXQgYHNrYl9jb3B5X2JpdHNgICpvbmx5KiByZWFkcyBmcm9tIHRoZSBjdXJyZW50IHNrYiBhbmQgaXRzIGZyYWdtZW50cy9mcmFnX2xpc3QuIEl0ICpkb2Vzbid0KiBhdXRvbWF0aWNhbGx5IHRyYXZlcnNlIGBza2ItXHUwMDNlbmV4dGAuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIGFsbW9zdCBtaXNzZWQhXG5cblRoaXMgbGVhZHMgbWUgdG8gYHRsc19zdHJwX3JlYWRfc29ja2AuIFRoZSB2YXJpYWJsZSBgc3RycC1cdTAwM2VhbmNob3JgIGhvbGRzIHRoZSBmaXJzdCBza2IgaW4gdGhlIHF1ZXVlIG9mIHNvY2tldCBidWZmZXJzLiBUaGV5IGFyZSBsaW5rZWQgdmlhIGBza2ItXHUwMDNlbmV4dGAsIHNvIGlmIHRoZSBoZWFkZXIgaXMgZnJhZ21lbnRlZCwgYHN0cnAtXHUwMDNlYW5jaG9yYCBwb2ludHMgdG8gdGhlICpmaXJzdCogc2tiLiBBbmQgbm93LCBJIHJlbWVtYmVyLCB0aGF0IGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCBtaWdodCBzZXQgdGhpcyBgc3RycC1cdTAwM2VhbmNob3JgIHZhcmlhYmxlLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBob3cgYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgIGFjdHVhbGx5IHdvcmtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgc2tiIHF1ZXVlLiBJcyBpdCBjb25jYXRlbmF0aW5nIHRoZW0sIG9yIHNpbXBseSBwb2ludGluZyB0byB0aGUgZmlyc3Qgc2tiIGluIHRoZSBjaGFpbj8gSWYgaXQganVzdCBwb2ludHMgdG8gdGhlIGZpcnN0IHNrYiBpbiB0aGUgcXVldWUsIHRoZW4gYHNrYl9jb3B5X2JpdHNgIHdpbGwgKm5vdCogd29yayBhcyBJIG9yaWdpbmFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0Ny45NzEzNDQyOTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzQ0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfc3RycC5jPTQzMz1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NjAtXFxubmV0L3Rscy90bHNfc3RycC5jOjQ2MTpzdGF0aWMgdm9pZCB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgbGVuKVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NjIte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQ4ND1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MDA6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MjYtXFxubmV0L3Rscy90bHNfc3RycC5jOjUyNzpcXHR0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlKHN0cnAsIGlucSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUyOC1cXHRpZiAoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo0OC4wMzIwOTQ1MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NjMxNjkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBmdW5jdGlvbjogYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgLiBKdXN0IHRoZSBuYW1lIGltbWVkaWF0ZWx5IGdpdmVzIG1lIHNvbWUgY2x1ZXMuIFwidGxzX3N0cnBcIiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIG9yIHBvdGVudGlhbGx5IGEgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0IGFuZCB0aGF0IHdlIGFyZSB1c2luZyBzdHJpbmcgcHJvY2Vzc2luZy4gXCJMb2FkX2FuY2hvclwiIG1vc3QgbGlrZWx5IGlzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhcmUgYWNjZXNzaW5nLCBsb2FkaW5nLCBvciBzZXR0aW5nIGEgdHJ1c3QgYW5jaG9yLCBhIHJvb3QgY2VydGlmaWNhdGUsIG9yIHNpbWlsYXIgY3JlZGVudGlhbCBmb3IgdmFsaWRhdGluZyBvdGhlciBjZXJ0aWZpY2F0ZXMgaW4gYSBUTFMgaGFuZHNoYWtlLiBUaGUgaW5jbHVzaW9uIG9mIFwicXVldWVcIiBzdHJvbmdseSBoaW50cyB0aGF0IHRoZXJlJ3MgYSBtYW5hZ2VkIG9yZGVyLCBwb3NzaWJseSBhIGNyaXRpY2FsIG9yIGNvbXBsZXggb3BlcmF0aW9uLCBvciB0aGF0IG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgYXJlIGludm9sdmVkIGFuZCB0aGVyZSBhcmUgcXVldWVpbmcgY29uY2VybnMuIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHZhbGlkYXRpb24sIHBvdGVudGlhbGx5IGluIGEgc3lzdGVtIHdpdGggYXN5bmNocm9ub3VzIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tpbmcgb3IgYSBjb25uZWN0aW9uIHBvb2xpbmcgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFRMUyBpbXBsZW1lbnRhdGlvbi4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gY2hlY2sgZm9yIHRocmVhZCBzYWZldHksIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgYW5kIHZhbGlkYXRpb24uIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgaG93IHRydXN0IGFuY2hvcnMgYXJlIGhhbmRsZWQgaW4gYSBxdWV1ZSBzZXR0aW5nLCBhbmQgd2h5IGEgcXVldWUgaXMgdXNlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Nzo1Mi44Nzg0MTUyNjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjE6XFx0c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcXG4gNDYyOlxcdHtcXG4gNDYzOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc3RycC1cXHUwMDNlc2spO1xcbiA0NjQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmZpcnN0O1xcbiA0NjU6XFx0XFx0dTMyIG9mZnNldDtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0Zmlyc3QgPSB0Y3BfcmVjdl9za2Ioc3RycC1cXHUwMDNlc2ssIHRwLVxcdTAwM2Vjb3BpZWRfc2VxLCBcXHUwMDI2b2Zmc2V0KTtcXG4gNDY4OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZpcnN0KSlcXG4gNDY5OlxcdFxcdFxcdHJldHVybjtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0LyogQmVzdG93IHRoZSBzdGF0ZSBvbnRvIHRoZSBhbmNob3IgKi9cXG4gNDcyOlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNlbGVuID0gb2Zmc2V0ICsgbGVuO1xcbiA0NzM6XFx0XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VkYXRhX2xlbiA9IG9mZnNldCArIGxlbjtcXG4gNDc0OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSBvZmZzZXQgKyBsZW47XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKS1cXHUwMDNlZnJhZ19saXN0ID0gZmlyc3Q7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHNrYl9jb3B5X2hlYWRlcihzdHJwLVxcdTAwM2VhbmNob3IsIGZpcnN0KTtcXG4gNDc5OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgPSBvZmZzZXQ7XFxuIDQ4MjpcXHR9XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdGJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaClcXG4gNDg1OlxcdHtcXG4gNDg2OlxcdFxcdHN0cnVjdCBzdHJwX21zZyAqcnhtO1xcbiA0ODc6XFx0XFx0c3RydWN0IHRsc19tc2cgKnRsbTtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc3RycC1cXHUwMDNlbXNnX3JlYWR5KTtcXG4gNDkwOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU3OjUyLjg3ODUxOTk4NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQyOTc5OTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMvVENQIFJlY2VpdmUgUXVldWUgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBUQ1AgcmVjZWl2ZSBxdWV1ZXMgaW4gVExTIHByb2Nlc3NpbmcuIEl0IHN0YXJ0cyB3aXRoIGB0bHNfc3RycF9sb2FkX2FuY2hvcl93aXRoX3F1ZXVlYCwgd2hpY2ggc2V0cyB1cCB0aGlzIGBzdHJwLVx1MDAzZWFuY2hvcmAgc2tiIGFuZCBpdHMgYGZyYWdfbGlzdGAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNrYiAoYGZpcnN0YCkgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGlzIG1lYW5zIGBza2JfY29weV9iaXRzYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSBgc3RycC1cdTAwM2VhbmNob3JgIEFORCBpdHMgYGZyYWdfbGlzdGAuICBUaGUgYGZyYWdfbGlzdGAgaXMgYSBsaW5rZWQgbGlzdCBvZiBza2JzIHRoYXQgbWFrZSB1cCB0aGUgaW5jb21pbmcgVENQIGRhdGEuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBjb2RlIG5vdyBjaGVja3MgZm9yIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGlzIHF1ZXVlLCBvciBsYWNrIHRoZXJlb2YuICBCZWZvcmUgdGhlIHBhdGNoLCB3ZSB3ZXJlIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgd2l0aG91dCBhIGNoZWNrIGZvciB0aGUgaGVhZGVyIHNpemUgdXNpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBjaGVja3MgaWYgYWxsIHRoZSBza2JzIGFyZSBjb250aWd1b3VzIGFuZCBoYXZlIG1hdGNoaW5nIGRlY3J5cHRlZCBzdGF0dXMuIFRoZSBrZXkgaXNzdWUgaXMgYXJvdW5kIHNlcXVlbmNlIG51bWJlcnMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG92ZXJsYXBwaW5nIG9yIFwiaG9sZS15XCIgVENQIHNlZ21lbnRzIGluIHRoZSBxdWV1ZS5cblxuQmFzaWNhbGx5LCBpZiBUQ1Agc2VnbWVudHMgYXJyaXZlIG91dCBvZiBvcmRlciwgb3IgcGFydGlhbGx5IG92ZXJsYXAsIGBza2JfY29weV9iaXRzYCBtaWdodCByZWFkIHRoZSB3cm9uZyBkYXRhIGJlY2F1c2UgYHNrYi1cdTAwM2VsZW5gIG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRvIGNvbnRpZ3VvdXMgZGF0YSwgb3IgYHNrYi1cdTAwM2VuZXh0YCBtaWdodCBoYXZlIGFuIG92ZXJsYXBwaW5nIHNlcXVlbmNlIG51bWJlci4gVGhpcyBjYW4gbGVhZCB0byBpbmNvcnJlY3QgVExTIGhlYWRlciBwYXJzaW5nIGR1ZSB0byBpbmNvbnNpc3RlbnQgZGF0YSBiZWluZyByZWFkLlxuXG5UaGUgcGF0Y2ggdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGFkZGluZyBhIHByZWxpbWluYXJ5IGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgY2hlY2sgQkVGT1JFIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAuICBIb3dldmVyLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHdhbGtzIHRoZSBxdWV1ZSwgY2hlY2tpbmcgc2VxdWVuY2UgbnVtYmVycyBhbmQgZGVjcnlwdGVkIHN0YXR1cy4gSXQgZG9lcyB0aGlzIHdpdGhpbiB0aGUgXCJ3aGlsZSBsb29wXCIgY29uZGl0aW9uIGB3aGlsZSAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgcmVtYWluaW5nKWAuIElmIHRoZSBjdXJyZW50IGBza2ItXHUwMDNlbGVuYCBpcyBsZXNzIHRoYW4gYHJlbWFpbmluZ2AsIHRoZSBjb2RlIHByb2NlZWRzIHRvIHRoZSBuZXh0IGBza2JgIGluIHRoZSBsaXN0LCBieSBhZGRpbmcgYHNrYiA9IHNrYi1cdTAwM2VuZXh0O2AuXG5cbklmIGBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxICE9IHNlcWAgaW5zaWRlIHRoZSBgd2hpbGVgIGxvb3AsIHRoZXJlJ3MgYSBwcm9ibGVtOiBub24tY29udGlndW91cyBzZWdtZW50cyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBoZWFkZXIgcGFyc2luZy4gIEJ1dCB3aGF0IGlmIGBza2ItXHUwMDNlbmV4dGAgaXMgTlVMTCBiZWZvcmUgdGhlIGB3aGlsZWAgbG9vcCBjYW4gcHJvY2VzcyBlbm91Z2ggZGF0YT8gIFRoYXQgbWVhbnMsIGluIHRoZSBvcmlnaW5hbCBjb2RlIHRoZSB3aGlsZSBsb29wIHdvbid0IHRlcm1pbmF0ZS4gSXQnbGwganVzdCBrZWVwIGdvaW5nLiAgVGhpcyBwb3RlbnRpYWxseSBsZWFkcyB0byBhIGNyYXNoIGJ5IGRlcmVmZXJlbmNpbmcgYSBOVUxMIHBvaW50ZXIuICBJZiB0aGUgbG9vcCBET0VTIHRlcm1pbmF0ZSwgYnV0IG9ubHkgcHJvY2Vzc2VzIGEgc3Vic2V0IG9mIHRoZSBpbmNvbWluZyBkYXRhLCB0aGlzIGNvdWxkIHN0aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGRhdGEgb3IgYSByZWFkIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSB2YWxpZCBkYXRhLlxuXG5UaGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byB2YWxpZGF0ZSB1cCB0byB0aGUgZnVsbCBtZXNzYWdlIGxlbmd0aCAoYHN6YCkuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHZhbGlkYXRlZCB0aGUgX2VudGlyZV8gbWVzc2FnZSBsZW5ndGguICBOb3csIHRoZSBwYXRjaCB0cmllcyB0byB2YWxpZGF0ZSBvbmx5IHRoZSBoZWFkZXIgc2l6ZSBmaXJzdCwgYnV0IHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMuICBJZiBgdGxzX3J4X21zZ19zaXplYCByZWFkcyBnYXJiYWdlLCBpdCBjb3VsZCByZXR1cm4gYSAqc21hbGxlciogYHN6YCB0aGFuIHRoZSBoZWFkZXIgc2l6ZSwgYnV0IGlmIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgbGF0ZXIgY2hlY2tzIGZvciBjb250aWd1aXR5IHVwIHRvIGEgc21hbGxlciBudW1iZXIgb2YgYnl0ZXMgdGhhbiB0aGUgaGVhZGVyLCB0aGUgY29udGlndWl0eSBjaGVjayBpcyBubyBsb25nZXIgY29tcGxldGUgYW5kIHRoaXMgc3RpbGwgbGVhZHMgdG8gaXNzdWVzIHdoZW4gdGhlIGB3aGlsZWAgbG9vcCBydW5zLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBhbGxvY2F0ZWQuIGBzdHJwLVx1MDAzZWFuY2hvcmAgaXMgYWxsb2NhdGVkIGFzIGEgXCJzcGVjaWFsIHNrYlwiLCBhbmQgaXQncyBpbml0aWFsaXplZCB3aXRoIGB0Y3BfcmVjdl9za2JgLiBCdXQsIGRvZXMgYHN0cnAtXHUwMDNlYW5jaG9yYCBoYXZlIHZhbGlkIGBUQ1BfU0tCX0NCYCBkYXRhPyBJZiBgc3RycC1cdTAwM2VhbmNob3JgIGRvZXNuJ3QgaGF2ZSB2YWxpZCBgVENQX1NLQl9DQmAgZGF0YSwgZGVyZWZlcmVuY2luZyBgVENQX1NLQl9DQihzdHJwLVx1MDAzZWFuY2hvcilgIGlzIGdvaW5nIHRvIGJlIGEgcHJvYmxlbS4gVGhpcyBhbGwgc2VlbXMgdG8gcG9pbnQgdG8gYSBwb3RlbnRpYWxseSBzZXJpb3VzIGxvZ2ljIGZsYXcgaW4gaG93IHdlIGhhbmRsZSBUQ1Agc2VnbWVudCBvcmRlcmluZyBhbmQgcXVldWUgdmFsaWRhdGlvbiBpbiBUTFMgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MTkuMzA4MzIzNDU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM2MDE2NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2tiLiphbmNob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjE5LjM1MjY4OTkyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1MDg0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTG9jYXRpbmcgUG90ZW50aWFsIFRMUyBTdHJpcHBpbmcgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSB0YXJnZXQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVExTIHN0cmlwcGluZywgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgdGVybSBcImFuY2hvclwiIHdpdGhpbiB0aGUgYG5ldC90bHMvdGxzX3N0cnAuY2AgZmlsZS4gVGhlIHdvcmQgXCJhbmNob3JcIiBjb3VsZCBiZSBzaWduaWZpY2FudC4gSXQgY2FuIHJlZmVyIHRvIGEgcm9vdCBvZiB0cnVzdCwgYSBwb2ludCBpbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4sIG9yIHBlcmhhcHMgYSBtb3JlIGFic3RyYWN0ICdhbmNob3IgcG9pbnQnIGluIHRoZSBjb2RlJ3MgbG9naWMuIFRoaXMgc2VhcmNoIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFyZWFzIHdoZXJlIHRoZSBjb2RlIG1pZ2h0IGhhbmRsZSBvciByZWx5IHVwb24gc3BlY2lmaWMgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIG9yIHZhbGlkYXRpb24gcHJvY2Vzc2VzLCB3aGljaCBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHN0cmlwcGluZyBhdHRhY2tzLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGhvcGVmdWxseSBmb2N1c2luZyBteSBlZmZvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjIyLjc0Nzc3ODc1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMzg2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5jaG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19zdHJwLmM9MTY9dm9pZCB0bHNfc3RycF9hYm9ydF9zdHJwKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTI5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzozMDpzdGF0aWMgdm9pZCB0bHNfc3RycF9hbmNob3JfZnJlZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzEte1xcbm5ldC90bHMvdGxzX3N0cnAuYzozMjpcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHN0cnAtXFx1MDAzZWFuY2hvcik7XFxubmV0L3Rscy90bHNfc3RycC5jLTMzLVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTM2LVxcdFxcdHNoaW5mby1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc6XFx0Y29uc3VtZV9za2Ioc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzg6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzktfVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTY5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX21ha2VfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy03My1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NzQ6XFx0c2tiID0gdGxzX3N0cnBfc2tiX2NvcHkoc3RycCwgc3RycC1cXHUwMDNlYW5jaG9yLCBzdHJwLVxcdTAwM2VzdG0ub2Zmc2V0LFxcbm5ldC90bHMvdGxzX3N0cnAuYy03NS1cXHRcXHRcXHRcXHRzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTg1PXN0cnVjdCBza19idWZmICp0bHNfc3RycF9tc2dfZGV0YWNoKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTg5LSNpZmRlZiBDT05GSUdfVExTX0RFVklDRVxcbm5ldC90bHMvdGxzX3N0cnAuYzo5MDpcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRlY3J5cHRlZCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTkxLSNlbHNlXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxMDE6XFx0XFx0LyogUmVwbGFjZSBhbmNob3Igd2l0aCBhbiBlbXB0eSBza2IsIHRoaXMgaXMgYSBsaXR0bGVcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTAyLVxcdFxcdCAqIGRhbmdlcm91cyBidXQgX190bHNfY3VyX21zZygpIHdhcm5zIG9uIGVtcHR5IHNrYnNcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xMDgtXFxubmV0L3Rscy90bHNfc3RycC5jOjEwOTpcXHRcXHRzd2FwKHN0cnAtXFx1MDAzZWFuY2hvciwgc2tiKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTEwLVxcdFxcdHJldHVybiBza2I7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTIwPWludCB0bHNfc3RycF9tc2dfY293KHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTEzMS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTMyOlxcdHRsc19zdHJwX2FuY2hvcl9mcmVlKHN0cnApO1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxMzM6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gc2tiO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xMzQtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ1PWludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDYte1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxNDc6XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDgtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTUzLVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxNTQ6XFx0XFx0LyogV2UgY2FuJ3Qgc2tiX2Nsb25lKCkgdGhlIGFuY2hvciwgaXQgZ2V0cyB3aXBlZCBieSB1bnBhdXNlICovXFxubmV0L3Rscy90bHNfc3RycC5jLTE1NS1cXHRcXHRza2IgPSBhbGxvY19za2IoMCwgc3RycC1cXHUwMDNlc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTE1OC1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTU5OlxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoZHN0LCBzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjA6XFx0XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gc2tiO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0xNjEtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xOTEtXFxubmV0L3Rscy90bHNfc3RycC5jOjE5MjpzdGF0aWMgdm9pZCB0bHNfc3RycF9mbHVzaF9hbmNob3JfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTkzLXtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTk0OlxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTk1LVxcdGludCBpO1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTM0Mj1zdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0zNTEtXFxubmV0L3Rscy90bHNfc3RycC5jOjM1MjpcXHRza2IgPSBzdHJwLVxcdTAwM2VhbmNob3I7XFxubmV0L3Rscy90bHNfc3RycC5jLTM1My1cXHRpZiAoIXNrYi1cXHUwMDNlbGVuKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTM5MD1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDAyLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0MDM6XFx0c2hpbmZvID0gc2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy00MDQtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDEwLVxcdFxcdGlmICghcGFnZSkge1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0MTE6XFx0XFx0XFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTQxMi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MTQtXFxubmV0L3Rscy90bHNfc3RycC5jOjQxNTpcXHRcXHRza2JfZmlsbF9wYWdlX2Rlc2Moc3RycC1cXHUwMDNlYW5jaG9yLCBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzKyssXFxubmV0L3Rscy90bHNfc3RycC5jLTQxNi1cXHRcXHRcXHRcXHQgICBwYWdlLCAwLCAwKTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MjMtXFxubmV0L3Rscy90bHNfc3RycC5jOjQyNDpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWxlbiA9IDA7XFxubmV0L3Rscy90bHNfc3RycC5jOjQyNTpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NDI2OlxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSByb3VuZF91cChuZWVkX3NwYywgUEFHRV9TSVpFKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI3LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQzMz1zdGF0aWMgYm9vbCB0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCxcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MzktXFxubmV0L3Rscy90bHNfc3RycC5jOjQ0MDpcXHRmaXJzdCA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKS1cXHUwMDNlZnJhZ19saXN0O1xcbm5ldC90bHMvdGxzX3N0cnAuYy00NDEtXFx0c2tiID0gZmlyc3Q7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0NjE6c3RhdGljIHZvaWQgdGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgaW50IGxlbilcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDYyLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00NzAtXFxubmV0L3Rscy90bHNfc3RycC5jOjQ3MTpcXHQvKiBCZXN0b3cgdGhlIHN0YXRlIG9udG8gdGhlIGFuY2hvciAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzI6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VsZW4gPSBvZmZzZXQgKyBsZW47XFxubmV0L3Rscy90bHNfc3RycC5jOjQ3MzpcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gb2Zmc2V0ICsgbGVuO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzQ6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2V0cnVlc2l6ZSA9IG9mZnNldCArIGxlbjtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0NzY6XFx0c2tiX3NoaW5mbyhzdHJwLVxcdTAwM2VhbmNob3IpLVxcdTAwM2VmcmFnX2xpc3QgPSBmaXJzdDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDc3LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo0Nzg6XFx0c2tiX2NvcHlfaGVhZGVyKHN0cnAtXFx1MDAzZWFuY2hvciwgZmlyc3QpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo0Nzk6XFx0c3RycC1cXHUwMDNlYW5jaG9yLVxcdTAwM2VkZXN0cnVjdG9yID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDgwLVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTQ4ND1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDk5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MDA6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDEtXFx0fVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MDItXFxubmV0L3Rscy90bHNfc3RycC5jOjUwMzpcXHRyeG0gPSBzdHJwX21zZyhzdHJwLVxcdTAwM2VhbmNob3IpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDQtXFx0cnhtLVxcdTAwM2VmdWxsX2xlblxcdD0gc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuO1xcbm5ldC90bHMvdGxzX3N0cnAuYy01MDUtXFx0cnhtLVxcdTAwM2VvZmZzZXRcXHQ9IHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQ7XFxubmV0L3Rscy90bHNfc3RycC5jOjUwNjpcXHR0bG0gPSB0bHNfbXNnKHN0cnAtXFx1MDAzZWFuY2hvcik7XFxubmV0L3Rscy90bHNfc3RycC5jLTUwNy1cXHR0bG0tXFx1MDAzZWNvbnRyb2xcXHQ9IHN0cnAtXFx1MDAzZW1hcms7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTEzPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTUyNi1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NTI3OlxcdHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWUoc3RycCwgaW5xKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTI4LVxcdGlmICghc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKSB7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTMzLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MzQ6XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cXHUwMDNlYW5jaG9yKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTM1LVxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjAxPXZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjA3LVxcdGVsc2VcXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjA4OlxcdFxcdHRsc19zdHJwX2ZsdXNoX2FuY2hvcl9jb3B5KHN0cnApO1xcbm5ldC90bHMvdGxzX3N0cnAuYy02MDktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NjIwPWludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjI1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2MjY6XFx0c3RycC1cXHUwMDNlYW5jaG9yID0gYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpO1xcbm5ldC90bHMvdGxzX3N0cnAuYzo2Mjc6XFx0aWYgKCFzdHJwLVxcdTAwM2VhbmNob3IpXFxubmV0L3Rscy90bHNfc3RycC5jLTYyOC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz02NDc9dm9pZCBfX3Rsc19zdHJwX2RvbmUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTY0OC17XFxubmV0L3Rscy90bHNfc3RycC5jOjY0OTpcXHR0bHNfc3RycF9hbmNob3JfZnJlZShzdHJwKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjUwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6MjIuODQ3MDI3MzQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzkwMzA2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQgdXNlcyBgZmlyc3QgPSBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKS1cdTAwM2VmcmFnX2xpc3Q7YCBpbiB0aGUgY3VycmVudCBrZXJuZWwsIHdoaWNoIEkgdW5kZXJzdGFuZC4gQnV0IHRoZSBkaWZmIHByb3ZpZGVkIGRvZXNuJ3QgaGF2ZSAqdGhhdCogbGluZS4gSW5zdGVhZCwgaXQgaGFzIGBmaXJzdCA9IHN0cnAtXHUwMDNlYW5jaG9yO2AuIFRoYXQgc2VlbXMgd3JvbmcuIExldCBtZSByZS1leGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9tcHQncyBkaWZmLi4uXG5cblJpZ2h0LCBsb29raW5nIGFnYWluIGF0IHRoZSBkaWZmIGluIHRoZSBwcm9tcHQsIGl0IGNoYW5nZXMgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBhY2NlcHQgYSBgbGVuYCBwYXJhbWV0ZXIgYW5kIGludHJvZHVjZXMgYHJlbWFpbmluZ2AuLi4gT2theSwgYnV0IGl0IHN0aWxsIGluaXRpYWxpemVzIGBmaXJzdGAgYXMgYHN0cnAtXHUwMDNlYW5jaG9yYCwgYW5kIHRoZW4gc2V0cyBgc2tiID0gZmlyc3Q7YC4gV2FpdCBhIG1pbnV0ZSwgbXkgYGdyZXBgIG91dHB1dCBmcm9tIHRoZSBjdXJyZW50IHRyZWUgc2hvd3MgYGZpcnN0ID0gc2tiX3NoaW5mbyhzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlZnJhZ19saXN0O2AuIEFoLCB0aGF0J3MgaXQhIE15IGdyZXAgaXMgc2hvd2luZyB0aGUgY29kZSAqYWZ0ZXIqIHRoaXMgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCBvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGl0LiBTbyB0aGUgY3VycmVudCBjb2RlIGRvZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgZnJhZ21lbnQgbGlzdCBhY2Nlc3MsIGFuZCB0aGlzIGRpZmYgaXMgc2hvd2luZyB0aGUgY2hhbmdlLlxuXG5CdXQsIGlmIGBmaXJzdGAgaXMgYXNzaWduZWQgYHN0cnAtXHUwMDNlYW5jaG9yYCwgdGhlbiBgc2tiYCBpcyBhbHNvIGBzdHJwLVx1MDAzZWFuY2hvcmAsIGFuZCB0aGVuIHdlIHJlYWQgYFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXFgLiBOb3csIHRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgcHJvYmxlbS4gYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBhbGxvY2F0ZWQgd2l0aCBgYWxsb2Nfc2tiKDAsIEdGUF9LRVJORUwpYC4gSXRzIGNvbnRyb2wgYmxvY2sgKGBjYmApIGlzICpub3QqIGluaXRpYWxpemVkLiBUaGF0J3MgYSBzZXJpb3VzIGJ1ZyEgYGFsbG9jX3NrYmAgdXNlcyBga21lbV9jYWNoZV9hbGxvY19ub2RlYCBvciBzaW1pbGFyLCB3aGljaCB2ZXJ5IGxpa2VseSBkb2Vzbid0IHplcm8gdGhlIGBjYmAgZmllbGQgdW5sZXNzIGBfX0dGUF9aRVJPYCBpcyBleHBsaWNpdGx5IHVzZWQuIEkgbmVlZCB0byBjb25maXJtIGlmIGBhbGxvY19za2JgIGFjdHVhbGx5IHplcm9lcyB0aGUgYGNiYCBmaWVsZCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMgaXNzdWUgaGVyZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBhbGxvY19za2JgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozNS42MzczMzY5MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTE3NDk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKmNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODozNS42ODI4NjA1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTkyNDE1MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBndXRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgYWxsb2NhdGVkLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNvcmUgb2YgaG93IG91ciBuZXR3b3JraW5nIGRhdGEgaXMgbWFuYWdlZCBhdCB0aGUgcGFja2V0IGxldmVsLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnkgaW5jb21pbmcgYW5kIG91dGdvaW5nIG5ldHdvcmsgcGFja2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaW50aW1hdGVseSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcsIGRlYnVnZ2luZyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMsIGFuZCBwb3RlbnRpYWxseSwgY3JhZnRpbmcgYW55IGN1c3RvbSBuZXR3b3JraW5nIHNvbHV0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIHdpdGggdG9kYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDEuODc1Mjc4OTQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1MTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0MS45MjIxMzc2NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxNjc5NTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX3NrYmAgdG8gVmFsaWRhdGUgQ29udHJvbCBCbG9jayBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBfX2FsbG9jX3NrYmAgaGFuZGxlcyB0aGUgY29udHJvbCBibG9jayAoYGNiYCkuIFdlIGtub3cgdGhhdCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMgbGlrZSBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiBgX19hbGxvY19za2JgIGV4cGxpY2l0bHkgemVyb2VzIHRoaXMgYGNiYCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMg4oCTIGlmIGl0ICpkb2Vzbid0KiB6ZXJvIGl0LCB3ZSdyZSBsaWtlbHkgcmVseWluZyBvbiBzb21lIG90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBsYXRlciBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHN1YnRsZSBidWdzIGlmIHRob3NlIG1lY2hhbmlzbXMgYXJlIG1pc3NlZCBvciBpZiBtZW1vcnkgaXMgbm90IG1hbmFnZWQgYXBwcm9wcmlhdGVseS4gSWYgaXQgKmRvZXMqIHplcm8gaXQsIHRoYXQgZ2l2ZXMgYSBiYXNlbGluZSBmb3Igb3RoZXIgb3BlcmF0aW9ucyB0byB3b3JrIG9mZiBvZi4gVWx0aW1hdGVseSBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG91ciBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBtZW1vcnkgcmVnaW9uIGFyZSBjb3JyZWN0LCBhbmQgcG90ZW50aWFsbHkgdG8gaWRlbnRpZnkgYSBoaWRkZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiB0aGVyZSBpcyBtb3JlIGluaXRpYWxpemF0aW9uIHRoYW4gbmVjZXNzYXJ5LiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo0Ni43Mzg5MzY0NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NDYuNzM5MjIxMzE0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTY5NTE1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgQ29ycnVwdGlvbiBpbiB0aGUgU0tCIENvbnRyb2wgQmxvY2sqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gU29tZXRoaW5nIGZlZWxzIG9mZiwgYW5kIEkgc3VzcGVjdCBhIHN1YnRsZSBjb3JydXB0aW9uIG1pZ2h0IGJlIGx1cmtpbmcgc29tZXdoZXJlIGluIHRoZSBgc2tiYCBjb250cm9sIGJsb2NrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgYGNiYCBmaWVsZCBpcyBoYW5kbGVkLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGhvdyBgY2JgIGlzIGJlaW5nIHplcm9lZCBvdXQgb3IgaGFuZGxlZCBpbiBnZW5lcmFsLiBJ4oCZbSB0aGlua2luZyBgc2tidWZmX2NsZWFyYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50OyB0aGF0J3Mgd2hlcmUgd2UgdHlwaWNhbGx5IGV4cGVjdCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciB3aGVuIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCBvciByZWN5Y2xlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIGV4cGxpY2l0bHkgemVyb2luZyBgY2JgIHRoZXJlLCB3aGljaCB0aGV5ICpzaG91bGQqIGJlLlxuXG5Ib3dldmVyLCBpZiBpdCdzIG5vdCBoYW5kbGVkIHRoZXJlIGRpcmVjdGx5LCBvciBpZiB0aGVyZSdzIGEgbW9yZSBudWFuY2VkIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHRoZW4gSSBzaG91bGQgZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIG1heWJlIHRoZXJlJ3MgYW4gaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIHByZXBwZWQuIFBlcmhhcHMgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIGluc3RlYWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIGluaXRpYWxpemF0aW9uLCBhcyBzb21ldGltZXMgaW5pdGlhbGl6YXRpb24gd2lsbCBoYXBwZW4gaW4gYSBzcG90IHdoZXJlIGl0J3MgZWFzeSB0byBvdmVybG9vay4gVGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcgdXAgc29tZSBTS0Igb3BlcmF0aW9ucy4gSXQncyBwb3NzaWJsZSB0aGUgemVyb2luZyBpc24ndCBoYXBwZW5pbmcgd2hlcmUgSSBleHBlY3QuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYm90aCBmdW5jdGlvbnMsIGJlY2F1c2UgaWYgYGNiYCBpc24ndCBjb25zaXN0ZW50bHkgY2xlYXJlZCwgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGJsZWVkaW5nIG92ZXIsIGNhdXNpbmcgYWxsIHNvcnRzIG9mIGVycmF0aWMgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gSSBrbm93IHRoZSBTS0IgYW5kIGl0cyBjb250cm9sIGJsb2NrIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IHNwb3QgaWYgc29tZXRoaW5nJ3MgYW1pc3Mgd2l0aCBob3cgYGNiYCBpcyBiZWluZyBoYW5kbGVkLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgc2ltcGxlIG92ZXJzaWdodCwgb3IgYSBtb3JlIGRlZXBseSByb290ZWQgaXNzdWUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgZWxpbWluYXRlIHBvc3NpYmxlIGlzc3VlcywgYW5kIGNvbmZpcm0gaWYgYGNiYCBpcyBjb25zaXN0ZW50bHkgc2V0IHRvIHplcm8uIFRoaXMgaXMgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NTMuOTU2MTc2MjE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI2NjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1ODo1NC4wMDU0NDg3OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3OTQ5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tidWZmX2NsZWFyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUsIFwiTGV0J3MgcmVhZCBgc2tidWZmX2NsZWFyYCxcIiBpbmRpY2F0ZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBnaXZlbiB0aGUgYHNrYnVmZmAgcHJlZml4LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UnbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHN0cnVjdHVyZSB1c2VkIGZvciBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMg4oCTIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGl0c2VsZi5cblxuVGhlIGdvYWwgaXMgbGlrZWx5IHRvIGRlY29uc3RydWN0IGl0cyBvcGVyYXRpb247IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgaGFwcGVucyB3aGVuIGFuIGBza2J1ZmZgIGluc3RhbmNlIGlzIFwiY2xlYXJlZC5cIiBUaGlzIGNvdWxkIGludm9sdmUgemVyb2luZyBvdXQgbWVtb3J5LCByZWxlYXNpbmcgYXNzb2NpYXRlZCByZXNvdXJjZXMgbGlrZSBkYXRhIGJ1ZmZlcnMgYW5kIG1ldGFkYXRhLCBwb3NzaWJseSB1cGRhdGluZyBpbnRlcm5hbCBmbGFncywgYW5kIG1heWJlIGV2ZW4gcmV0dXJuaW5nIHRoZSBgc2tidWZmYCB0byBhIHBvb2wgZm9yIHJldXNlLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBrZnJlZV9za2JgLCBgc2tiX3JlbGVhc2VfZGF0YWAsIGFueSBtYW5pcHVsYXRpb24gb2YgYGRhdGFgLCBgdGFpbGAsIGBsZW5gLCBgaGVhZGAsIGBuZXh0YCwgYHByZXZgIHBvaW50ZXJzLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyBlZmZpY2llbnQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGNvbmN1cnJlbnRseSBpbiBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQuIEEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYHNrYnVmZl9jbGVhcmAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGludGVycnVwdCBjb250ZXh0cyB3aWxsIGJlIGNydWNpYWwuIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMgd2l0aGluIHRoZSBjb2RlLCBhbmQgbWF5YmUgYWxzbyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaG9zZW4gaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBpZiBhbnkgb3B0aW1pemF0aW9ucyBhcmUgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTg6NTguNjgzNDAxMDY2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTY6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMTc6XFx0e1xcbiAzMTg6XFx0XFx0LyogUmVwbGFjZSBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpXFxuIDMxOTpcXHRcXHQgKiB3aXRoIHR3byBzbWFsbGVyIG1lbXNldCgpLCB3aXRoIGEgYmFycmllcigpIGJldHdlZW4gdGhlbS5cXG4gMzIwOlxcdFxcdCAqIFRoaXMgZm9yY2VzIHRoZSBjb21waWxlciB0byBpbmxpbmUgYm90aCBjYWxscy5cXG4gMzIxOlxcdFxcdCAqL1xcbiAzMjI6XFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSBcXHUwMDNjPSAxMjgpO1xcbiAzMjM6XFx0XFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcXG4gMzI0OlxcdFxcdGJhcnJpZXIoKTtcXG4gMzI1OlxcdFxcdG1lbXNldCgodm9pZCAqKXNrYiArIDEyOCwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIC0gMTI4KTtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0LyoqXFxuIDMyOTpcXHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXFxuIDMzMDpcXHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXFxuIDMzMTpcXHQgKiBAbjogbnVtYmVyIG9mIGVudHJpZXMgdG8gcHJvdmlkZVxcbiAzMzI6XFx0ICpcXG4gMzMzOlxcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcXG4gMzM0OlxcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xcbiAzMzU6XFx0ICogYXZhaWxhYmxlLCB0cmllcyB0byByZXBsZW5pc2ggdGhlIGNhY2hlIGFuZCBidWxrLWFsbG9jYXRlcyB0aGUgZGlmZiBmcm9tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU4OjU4LjY4MzY0NDE4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU2NTM5NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAgYW5kIHRoZSBTdHJ1Y3R1cmUgTGF5b3V0KipcblxuUmlnaHQsIHNvIGBza2J1ZmZfY2xlYXJgIGlzIHdpcGluZyBvdXQgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSDigJMgYWxsIHRoZSB3YXkgdXAgdG8gd2hlcmUgdGhlIGB0YWlsYCBwb2ludGVyIGlzIGxvY2F0ZWQsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHNrX2J1ZmZgIGlzIGluaXRpYWxpemVkIGFuZCBob3cgbXVjaCBzdGF0ZSBpcyB0eXBpY2FsbHkgcmVzZXQuXG5cbk5vdywgbXkgbmV4dCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggdGhlc2UgbG93LWxldmVsIHN0cnVjdHVyZXMsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBvZmZzZXQgb2YgdGhlIENvbnRyb2wgQmxvY2ssIG9yIGBjYmAuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGRhdGEgcmVzaWRlcyByZWxhdGl2ZSB0byB0aGUgYHRhaWxgIHBvaW50ZXIsIGFuZCB0aGVyZWZvcmUgaG93IG11Y2ggb2YgdGhlIENvbnRyb2wgQmxvY2sgSSBzaG91bGQgZXhwZWN0IHRvIGJlIHplcm9lZCBieSBgc2tidWZmX2NsZWFyYC4gSXMgaXQgYmVpbmcgY2xlYXJlZD8gUGFydGlhbGx5IGNsZWFyZWQ/IFRoaXMgaGFzIHJhbWlmaWNhdGlvbnMgZm9yIGluaXRpYWxpemF0aW9uLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGljaCBwYXJ0cyBvZiB0aGUgYnVmZmVyIEkgbmVlZCB0byByZXBvcHVsYXRlIGFmdGVyIHRoaXMgY2xlYXIgb3BlcmF0aW9uLiBJIG5lZWQgdGhhdCBgY2JgIG9mZnNldCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgb3IgdGhhdCBJJ20gc2V0dGluZyB1cCB0aGUgcmlnaHQgcGFydHMgYmVmb3JlIGhhbmRpbmcgaXQgb2ZmIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSByZWFsbHkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjbGVhcmluZyBhbmQgaWYgbXkgYXNzdW1wdGlvbnMgYXJlIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MDMuOTQwMTg3NDIxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyNDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFyLipjYlxcXFxbXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MTgtXFx0ICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5MTk6XFx0Y2hhclxcdFxcdFxcdGNiWzQ4XSBfX2FsaWduZWQoOCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjAzLjk4NDIxNzUyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg5MDI0MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc3RydWN0IHNrX2J1ZmZgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGF0YSBsYXlvdXQgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGZpZWxkcyByZWxhdGUgdG8gZWFjaCBvdGhlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGFpbGAgaXMgZGVmaW5lZCBpbiByZWxhdGlvbiB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVW5kZXJzdGFuZGluZyBpdHMgcG9zaXRpb25pbmcgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0IGlzIGNydWNpYWwgZm9yIGFueSBzb3J0IG9mIGxvdy1sZXZlbCBwYWNrZXQgcHJvY2Vzc2luZyBvciBvcHRpbWl6YXRpb24gSSdtIHdvcmtpbmcgb24gcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjA3Ljc3MzI0Mzg5NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjU5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFpbDtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwOTEtXFx0LyogVGhlc2UgZWxlbWVudHMgbXVzdCBiZSBhdCB0aGUgZW5kLCBzZWUgYWxsb2Nfc2tiKCkgZm9yIGRldGFpbHMuICAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTA5MjpcXHRza19idWZmX2RhdGFfdFxcdFxcdHRhaWw7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDkzLVxcdHNrX2J1ZmZfZGF0YV90XFx0XFx0ZW5kO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yNzE2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RhaWxfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjcxNy17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzE4OlxcdHJldHVybiBza2ItXFx1MDAzZWhlYWQgKyBza2ItXFx1MDAzZXRhaWw7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjczMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90YWlsX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3MzQte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjczNTpcXHRyZXR1cm4gc2tiLVxcdTAwM2V0YWlsO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjczNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI5MTM9c3RhdGljIGlubGluZSBpbnQgc2tiX3RhaWxyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yOTE0LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI5MTU6XFx0cmV0dXJuIHNrYl9pc19ub25saW5lYXIoc2tiKSA/IDAgOiBza2ItXFx1MDAzZWVuZCAtIHNrYi1cXHUwMDNldGFpbDtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI5MTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTowNy44MTc2MTQ2ODJaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjQ0NTU2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIFF1ZXVlIGluIHRoZSBUTFMgU3RyaW5nIFBhcnNlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3Mgd29ya2luZyB3aXRoIHRoZSBgc2tfYnVmZmAgcXVldWUuIE15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklmIGBjYmAgaXMgemVyb2VkIG91dCBieSBgc2tidWZmX2NsZWFyYCwgdGhlbiBgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcWAgd291bGQgYmUgemVybyxcIiB3aGljaCBzZWVtcyBsaWtlIGEgcHJvYmxlbS4gQnV0IHRoZW4sIEkgc2VlIHRoYXQgYHNrYmAgaXMgc2V0IHRvIGBmaXJzdGAsIHdoaWNoIGlzIGBza2Jfc2hpbmZvKHN0cnAtXHUwMDNlYW5jaG9yKS1cdTAwM2VmcmFnX2xpc3RgLiAgSG1tLCB3YWl0IGEgbWludXRlLCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIHdhcyBhIGNoYW5nZSB0byB0aGlzIGxpbmUsIGJ1dCBhZnRlciByZS1yZWFkaW5nIHRoZSBwcm92aWRlZCBkaWZmLCBJIHNlZSB0aGF0IHRoZSBsaW5lIGBmaXJzdCA9IHN0cnAtXHUwMDNlYW5jaG9yO2AgaXMgTk9UIGNoYW5nZWQgaW4gdGhpcyBkaWZmIVxuXG5Pa2F5LCBzbyB0aGF0IG1lYW5zIGBmaXJzdGAgaXMgc2V0IHRvIGBzdHJwLVx1MDAzZWFuY2hvcmAsIGFuZCB0aHVzIGBza2JgIGdldHMgc2V0IHRvIGBzdHJwLVx1MDAzZWFuY2hvcmAuIFRoaXMgbWVhbnMgYHNlcSA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXE7YCBpcyByZWFkaW5nIGZyb20gYHN0cnAtXHUwMDNlYW5jaG9yYC4gQnV0IEkga25vdyB0aGF0IGBzdHJwLVx1MDAzZWFuY2hvcmAncyBgY2JgIGlzIHplcm9lZCB3aGVuIGl0J3MgYWxsb2NhdGVkLCB3aGljaCBpcyB3aHkgSSBzdGFydGVkIHRvIHdvcnJ5IVxuXG5BaGEhIE5vdyBJIHJlbWVtYmVyIHRoYXQgYHRsc19zdHJwX2xvYWRfYW5jaG9yX3dpdGhfcXVldWVgIGNhbGxzIGB0Y3BfcmVjdl9za2JgIHdoaWNoIGFsbG9jYXRlcyBgZmlyc3RgLCBhbmQgdGhlbiBgc2tiX2NvcHlfaGVhZGVyKHN0cnAtXHUwMDNlYW5jaG9yLCBmaXJzdCk7YCBpcyBjYWxsZWQhIEFuZCB0aGF0IG1lYW5zIHRoZSBgY2JgIGlzIGNvcGllZCBmcm9tIGBmaXJzdGAgdG8gYHN0cnAtXHUwMDNlYW5jaG9yYCEgT2ssIHRoYXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYHNrYl9jb3B5X2hlYWRlcmAgZnVuY3Rpb24gbm93LCB0byBlbnN1cmUgSSdtIGNvcnJlY3QgaW4gbXkgdW5kZXJzdGFuZGluZywgYnV0IEkgdGhpbmsgSSd2ZSBnb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjE3Ljg4MjA3MzU5NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzUyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3B5X2hlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz05NDI9aW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05NjctXFx0c2tiX3Jlc2VydmUobnNrYiwgaGVhZHJvb20pO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjk2ODpcXHRza2JfY29weV9oZWFkZXIobnNrYiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy05NjktXFx0c2tiX21hcmtfZm9yX3JlY3ljbGUobnNrYik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMTQxPUVYUE9SVF9TWU1CT0woc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjE0Mi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTQzOnZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMTUwLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTUxOkVYUE9SVF9TWU1CT0woc2tiX2NvcHlfaGVhZGVyKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTUyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjAyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMDM6XFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjIwNC1cXHRyZXR1cm4gbjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjY3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNjg6XFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjI2OS1vdXQ6XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNTAyPXN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDEtXFxubmV0L2NvcmUvc2tidWZmLmM6MjU0MjpcXHRza2JfY29weV9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToxOC4wMDE4MzUyMjRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDEwNDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tiX2NvcHlfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBmb3IgYHNrYl9jb3B5X2hlYWRlcmAuIEknbSBnb2luZyB0byBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGl0cyByb2xlIGluIGNyZWF0aW5nIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlci4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgYSBjbG9uaW5nIG9wZXJhdGlvbiwgb3IgcGVyaGFwcyBmb3Igc2VnbWVudGF0aW9uIG9mZmxvYWQsIG9yIGlzIHRoaXMgYmVpbmcgY2FsbGVkIGZyb20gYSBkZXZpY2UgZHJpdmVyPyBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBzbyBJJ2xsIGV4cGVjdCB0byBzZWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9ucyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBpZiBhcHBsaWNhYmxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYHNrYi1cdTAwM2VkYXRhYCwgYHNrYi1cdTAwM2VsZW5gLCBgc2tiLVx1MDAzZW1hY19oZWFkZXJgLCBhbmQgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0cy4gSXMgaXQgcGVyZm9ybWluZyBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgaW5wdXQgU0tCIHRvIGVuc3VyZSBpdCdzIGluIGEgZ29vZCBzdGF0ZSBiZWZvcmUgY29weWluZz8gTGV0J3MgY2hlY2sgaG93IHRoZSBuZXcgU0tCIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdHMgbWV0YWRhdGEgaXMgY29waWVkIG92ZXIuIEFueSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbj8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSBjaGVja3N1bSBvZmZsb2FkIGRldGFpbHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBvbiB0aGUgb3ZlcmFsbCBkYXRhcGF0aCBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvcHkgb3ZlcmhlYWQgaW4gZGlmZmVyZW50IHVzZS1jYXNlcy4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3Mgb3B0aW1pemVkIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU5OjIzLjA4MTk0MjM4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTQzOlxcdHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuMjE0NDpcXHR7XFxuMjE0NTpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7XFxuMjE0NjpcXHRcXG4yMTQ3OlxcdFxcdHNrYl9zaGluZm8obmV3KS1cXHUwMDNlZ3NvX3NpemUgPSBza2Jfc2hpbmZvKG9sZCktXFx1MDAzZWdzb19zaXplO1xcbjIxNDg6XFx0XFx0c2tiX3NoaW5mbyhuZXcpLVxcdTAwM2Vnc29fc2VncyA9IHNrYl9zaGluZm8ob2xkKS1cXHUwMDNlZ3NvX3NlZ3M7XFxuMjE0OTpcXHRcXHRza2Jfc2hpbmZvKG5ldyktXFx1MDAzZWdzb190eXBlID0gc2tiX3NoaW5mbyhvbGQpLVxcdTAwM2Vnc29fdHlwZTtcXG4yMTUwOlxcdH1cXG4yMTUxOlxcdEVYUE9SVF9TWU1CT0woc2tiX2NvcHlfaGVhZGVyKTtcXG4yMTUyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OToyMy4wODIxNjM5NjlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0NDk5NzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19jb3B5X3NrYl9oZWFkZXJgKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgX19jb3B5X3NrYl9oZWFkZXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgbWVjaGFuaWNzIGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXNzZW50aWFsIHRhc2sgb2YgY29weWluZyB0aGUgaGVhZGVyIGRhdGEgZnJvbSBvbmUgU0tCIHRvIGFub3RoZXIuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLCBvZnRlbiBlbXBsb3llZCBkdXJpbmcgcGFja2V0IGNsb25pbmcgb3Igd2hlbiBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgbnVhbmNlcyByZWdhcmRpbmcgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhlYWRlciBMZW5ndGg6KiogSG93IGRvZXMgaXQgZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgZGF0YSB0byBjb3B5LCBhbmQgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBpbiBkaWZmZXJpbmcgaGVhZGVyIGxlbmd0aHMgYmV0d2VlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBTS0JzPyBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb3V0IGZvciBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbiogICAqKlNLQiBNZXRhZGF0YToqKiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWV0YWRhdGEgZmllbGRzIHRoYXQgKmFyZSogYW5kICphcmUgbm90KiBjb3BpZWQuIFRoaW5ncyBsaWtlIGNoZWNrc3VtIHN0YXR1cywgVkxBTiB0YWdzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGZsYWdzIGFyZSBpbXBvcnRhbnQuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaW5ncyB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBBcmUgYW55IGFzcGVjdHMgb2YgdGhlIGRlc3RpbmF0aW9uIFNLQidzIG1ldGFkYXRhICp1cGRhdGVkKiBpbiB0aGUgcHJvY2Vzcz9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdtIHdvbmRlcmluZyBob3cgdGhlIGZ1bmN0aW9uIG1hbmFnZXMgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBkdXJpbmcgaGVhZGVyIGNvcHkuIElzIHRoZXJlIGEgYmFjay1vZmYgc3RyYXRlZ3k/XG4qICAgKipQZXJmb3JtYW5jZSBDb25zaWRlcmF0aW9uczoqKiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG9uIHRoZSBjcml0aWNhbCBwYXRoLCBJIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGFueSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB1c2VkIGhlcmUuIElzIHRoZXJlIGFueSBhbGlnbm1lbnQgcGFkZGluZz8gVmVjdG9yaXphdGlvbj9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgY29weSBmYWlscz8gV2hhdCBzaWduYWxzIGFyZSByZXR1cm5lZCwgYW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0/IEFyZSB0aGVyZSBhbnkgaW52YXJpYW50cyBtYWludGFpbmVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIHJhcGlkbHkgZW5zdXJlIHRoYXQgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgZnVuY3Rpb24gcmVtYWlucyBhY2N1cmF0ZSBhbmQsIHBlcmhhcHMsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSBhIGRlZXBlciBkaXZlIG1heSBiZSB3YXJyYW50ZWQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNvZGViYXNlIGFuZCB0aGUga2VybmVsJ3MgaW5oZXJlbnQgY29tcGxleGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjguODI3MTYzODQyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg4OTg1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3B5X3NrYl9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1NS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1Ny17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDU6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTItXFx0bi1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTM6XFx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY1Ny1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjU5LVxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDU6XFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzMyLVxcdFxcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzMzOlxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDczNC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk2MjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDk2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MjkuMTE2MDcwMzUyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg2MTQ2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fY29weV9za2JfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgYF9fY29weV9za2JfaGVhZGVyYC4gSXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBpc24ndCBpdD8gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU6IHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBjYWNoZSBsaW5lIGJlaGF2aW9yLCBhbmQgdGhlIGludGVycGxheSB3aXRoIERNQSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBXaGF0J3MgdGhlIHRhcmdldCBwbGF0Zm9ybT8gQXJlIHdlIHg4NiwgQVJNLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGltcGxpY2F0aW9ucyBvZiBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2xzIGFyZSBhbHJlYWR5IGJ1YmJsaW5nIHVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZhbHNlIHNoYXJpbmcsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBoZWF2aWx5IG11bHRpLXRocmVhZGVkLCB3aGljaCwgZ2l2ZW4gaXRzIG5hdHVyZSwgaXMgbGlrZWx5LlxuXG5UaGUgY29yZSBvZiBpdCwgdGhvdWdoLCBpcyBlc3NlbnRpYWxseSBhIG1lbWNweSwgYnV0IHRhaWxvcmVkIGZvciBTS0JzLiBJIG5lZWQgdG8gYmUgYXNraW5nIG15c2VsZiB0aGUgcXVlc3Rpb24gYWJvdXQgaWYgaXQncyB1c2luZyB0aGUgcmlnaHQgbWVtY3B5IHZhcmlhbnQuIElzIGl0IGBtZW1jcHlgLCBgX19tZW1jcHlgLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgdmVjdG9yaXplZCBpbnN0cnVjdGlvbiwgc3VjaCBhcyBgbWVtY3B5X25lb25gPyBJcyBpdCB0YWtpbmcgYWR2YW50YWdlIG9mIGFueSBwcmVmZXRjaGluZz8gTWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvbiB0aGUga2VybmVsIGFyZSB2ZXJ5IGltcG9ydGFudC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgY29weSBlbmdpbmUgY2FwYWJpbGl0aWVzIGlmIHdlJ3JlIGxvb2tpbmcgYXQgTklDIG9yIERNQSBhY2NlbGVyYXRpb24uIEhvdyBhcmUgd2UgaGFuZGxpbmcgaGVhZGVyIG9mZnNldHMsIGFuZCB3aGF0J3MgdGhlIHR5cGljYWwgc2l6ZSBvZiB0aGUgaGVhZGVyIGJlaW5nIGNvcGllZD8gQW55IGNoYW5jZSBvZiBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuYWxpZ25lZCBhY2Nlc3MgYW5kIHNlZSBpZiBhbnkgY2xldmVyIHRyaWNrcyBhcmUgdXNlZCB0byBtaXRpZ2F0ZSB0aGF0LlxuXG5JJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBTS0IgaXMgbWFsZm9ybWVkPyBEbyB3ZSBoYXZlIHN1ZmZpY2llbnQgY2hlY2tzIGluIHBsYWNlIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzPyBUaGlzIGlzIGtlcm5lbC1sZXZlbCBjb2RlLCBhZnRlciBhbGw7IHN0YWJpbGl0eSBpcyBwYXJhbW91bnQuXG5cbkZpbmFsbHksIHdoYXQncyB0aGUgY2FsbGluZyBjb250ZXh0PyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgc29mdGlycSwgb3IgYSBwcm9jZXNzIGNvbnRleHQ/IFRoaXMgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2VzIHRoZSBhbGxvd2VkIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBmb3IgY29udGV4dCBzd2l0Y2hlcy4gVGhpcydsbCBpbXBhY3Qgb3VyIGFuYWx5c2lzIG9uIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIGZvciBhbnkgb3B0aW1pemF0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhvc2UgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1OTozNC40OTQ2ODc5OTJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTY6XFx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4xNTU3OlxcdHtcXG4xNTU4OlxcdFxcdG5ldy1cXHUwMDNldHN0YW1wXFx0XFx0PSBvbGQtXFx1MDAzZXRzdGFtcDtcXG4xNTU5OlxcdFxcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cXHUwMDNlc2sgKi9cXG4xNTYwOlxcdFxcdG5ldy1cXHUwMDNlZGV2XFx0XFx0PSBvbGQtXFx1MDAzZWRldjtcXG4xNTYxOlxcdFxcdG1lbWNweShuZXctXFx1MDAzZWNiLCBvbGQtXFx1MDAzZWNiLCBzaXplb2Yob2xkLVxcdTAwM2VjYikpO1xcbjE1NjI6XFx0XFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcXG4xNTYzOlxcdFxcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcXG4xNTY0OlxcdFxcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xcbjE1NjU6XFx0XFxuMTU2NjpcXHRcXHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cXG4xNTY3OlxcdFxcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcXG4xNTY4OlxcdFxcdCAqL1xcbjE1Njk6XFx0XFx0bmV3LVxcdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVxcdTAwM2VxdWV1ZV9tYXBwaW5nO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRtZW1jcHkoXFx1MDAyNm5ldy1cXHUwMDNlaGVhZGVycywgXFx1MDAyNm9sZC1cXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cXHUwMDNlaGVhZGVycykpO1xcbjE1NzI6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcXG4xNTczOlxcdFxcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcXG4xNTc0OlxcdFxcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcXG4xNTc1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XFxuMTU3NjpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XFxuMTU3NzpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XFxuMTU3ODpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xcbjE1Nzk6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODA6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcXG4xNTgxOlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcXG4xNTgyOlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XFxuMTU4MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XFxuMTU4NDpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xcbjE1ODU6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xcbjE1ODY6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xcbjE1ODc6XFx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcXG4xNTg4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcXG4xNTg5OlxcdCNlbmRpZlxcbjE1OTA6XFx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuMTU5MTpcXHRcXHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XFxuMTU5MjpcXHQjZW5kaWZcXG4xNTkzOlxcdFxcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xcbjE1OTQ6XFx0I2lmZGVmIENPTkZJR19YUFNcXG4xNTk1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTk6MzQuNDk0OTIyOTcyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODQ3MTczMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFN0cmVhbSBQYXJzZXIgQnVnIGFuZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbuKAlGxvb2tzIGxpa2Ugd2UncmUgY29weWluZyB0aGUgVENQIGNvbnRyb2wgYmxvY2sgKGBjYmApIGZyb20gYW4gb2xkIFNLQiBpbnRvIGEgbmV3IG9uZS4gVGhlIGBjYmAgaW4gdGhlIGBmaXJzdGAgU0tCIGlzIHNldCB1cCBieSB0aGUgVENQIHN0YWNrIGl0c2VsZi4gVGhpcyBtZWFucyBgVENQX1NLQl9DQihzdHJwLVx1MDAzZWFuY2hvciktXHUwMDNlc2VxYCBzaG91bGQgYmUgdmFsaWQgYW5kIGluaXRpYWxpemVkLiBCdXQgd2hlcmUncyB0aGUgYnVnPyBJdCBoYXMgdG8gYmUgaW4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYC4gTGV0IG1lIHNlZS4uLlxuXG5BaCwgcmlnaHQhIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGxvb3AgaW4gYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBjYW4gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIgaWYgYHJlbWFpbmluZ2AgZXhjZWVkcyB0aGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0aGUgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoZSBsaXN0IGVuZHMgdXAgYmVpbmcgZXhoYXVzdGVkLCBgc2tiYCBiZWNvbWVzIE5VTEwuICBgVENQX1NLQl9DQihza2IpYCB0aGVuIHRyaWVzIHRvIGFjY2VzcyBgXHUwMDI2TlVMTC1cdTAwM2VjYlswXWAsIHJlc3VsdGluZyBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBrZXJuZWwgb29wcywgZWFzeS4gSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gTm8sIEl0J3MgZWl0aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQgb2YgYm91bmRzIHJlYWQsIGRlcGVuZGluZyBvbiB3aGF0IGBza2ItXHUwMDNlbmV4dGAgcG9pbnRzIHRvLiAgVGhlIGBmcmFnX2xpc3RgIGlzIE5VTEwtdGVybWluYXRlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLiBJdCBhZGRzIGNoZWNrcyB3aXRoIGBUTFNfSEVBREVSX1NJWkVgIGFuZCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHRsc19yeF9tc2dfc2l6ZWAgd2FzIGNhbGxlZCBkaXJlY3RseS4gVGhpcyBmdW5jdGlvbiB0aGVuIHZhbGlkYXRlcyBoZWFkZXIgc2l6ZSBieSBjaGVja2luZyB0aGUgYHNrYi1cdTAwM2VsZW5gLiAgVGhlIGBza2ItXHUwMDNlbGVuYCBoZXJlIGlzIGRldGVybWluZWQgYnkgYHN0cnAtXHUwMDNlYW5jaG9yLVx1MDAzZWxlbmAsIGFuZCB0aGF0IGlzIGluaXRpYWxpemVkIGJ5IGBpbnFgICh0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUpLCBhbmQgdGhpcyBjYW4gYmUgbGVzcyB0aGFuIGBUTFNfSEVBREVSX1NJWkVgLCBhbmQgYHRsc19yeF9tc2dfc2l6ZWAgbWlnaHQgcmV0dXJuIDAgKGlmIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIHRoZXJlKS5cblxuYHNrYl9jb3B5X2JpdHNgIGlzIHRoZSBpc3N1ZSwgaXQgaGFzIHRoZSBhYmlsaXR5IHRvIHRyYXZlcnNlIHRoZSBxdWV1ZSB0aHJvdWdoIGBmcmFnX2xpc3RgLiAgSWYgYGZyYWdfbGlzdGAgZG9lcyBub3QgaGF2ZSBlbm91Z2ggYnl0ZXMsIGl0IHJldHVybnMgYW4gZXJyb3Igc3VjaCBhcyBgLUVGQVVMVGAgLiAgQW5kIGB0bHNfcnhfbXNnX3NpemVgIGFsc28gaGFuZGxlcyB0aGlzIGNhc2UgYW5kIHdvdWxkIHJldHVybiBgLUVGQVVMVGAuIFNvIGl0IHNlZW1zIGB0bHNfcnhfbXNnX3NpemVgIGl0c2VsZiB3YXMgaGFuZGxpbmcgY2FzZXMgd2hlcmUgbm90IGVub3VnaCBieXRlcyB3ZXJlIGF2YWlsYWJsZSwgcmlnaHQ/IFRoZW4gd2hhdCdzIHRoZSBwb2ludCBvZiB0aGUgbmV3IGNoZWNrcz9cblxuVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcGF0Y2ggaXMgYWRkaW5nIGEgY2hlY2sgZm9yICpjb250aWd1b3VzKiBzZXF1ZW5jZSBzcGFjZSB3aXRoaW4gdGhlIFNLQnMsIHdoaWNoIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgaXMgcmVzcG9uc2libGUgZm9yLiAgYHNrYl9jb3B5X2JpdHNgIGNvcGllcyB3aXRob3V0IGFueSBjaGVja3Mgb24gc2VxdWVuY2UgbnVtYmVyLiBJdCBpcyBjaGVja2luZyB0aGF0IHRoZSBTS0JzIGFyZSBjb250aWd1b3VzLCBhbmQgbm90IG92ZXJsYXBwaW5nLiBJdCBhbHNvIGNoZWNrcyB0aGF0IHRoZSBTS0JzIGFyZSBvZiB0aGUgc2FtZSBkZWNyeXB0ZWQgc3RhdGUuICBJZiBub3QsIHRoZSBkYXRhIGNvcGllZCB3b3VsZCBiZSBhIG1lc3MuICBCdXQgdGhlc2UgY2hlY2tzIGp1c3QgZW5zdXJlIHRoYXQgdGhlIGJ5dGVzIGFyZSBub3QgbWl4ZWQuXG5cbldhaXQsIGlzIHRoZXJlIGFueSBjYXNlIHdoZXJlIGBza2JfY29weV9iaXRzYCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGBza2JfY29weV9iaXRzYCByZWFkcyBmcm9tIHRoZSBza2IgZGF0YSBidWZmZXJzLCB3aGljaCBjb250YWluIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsuIFRoaXMgZGF0YSBpcyBpbml0aWFsaXplZC5cblxuSGFuZyBvbi4gV2hhdCBpZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlzIGNhbGxlZCAqd2l0aCogYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYCAodGhlIGZ1bGwgZXhwZWN0ZWQgbWVzc2FnZSBsZW5ndGgpPyBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3YXMgY2FsbGVkICphZnRlciogYHRsc19yeF9tc2dfc2l6ZWAgYW5kIGNoZWNrZWQgdGhlIGVudGlyZSBtZXNzYWdlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb25kaXRpb24gYHJlbWFpbmluZ2AgKHdoaWNoIGlzIGBvZmZzZXQgKyBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmApIGNhbiBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgU0tCIHF1ZXVlIGxlbmd0aC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgc2FtZSBOVUxMIGRlcmVmZXJlbmNlLlxuXG5Ib3dldmVyLCB0aGUgbG9naWMgKmJlZm9yZSogY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGluY2x1ZGVzIHNvbWUgY2hlY2tzOiBgc3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc3RycC1cdTAwM2VhbmNob3IpYCBhbmQgYGlmIChzeiBcdTAwM2UgaW5xKSByZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO2AuICBTbywgaWYgYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYCAobm93IGBzemApIGlzIGdyZWF0ZXIgdGhhbiBgaW5xYCwgdGhlbiBgdGxzX3N0cnBfcmVhZF9jb3B5YCBnZXRzIGNhbGxlZCwgYW5kIHdlICphdm9pZCogY2FsbGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGF0IGFsbCEgVGhpcyBtZWFucyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHdpbGwgKm9ubHkqIGdldCBjYWxsZWQgd2hlbiB3ZSAqZG8qIGhhdmUgYXQgbGVhc3QgZW5vdWdoIGRhdGEsIG1ha2luZyB0aGUgTlVMTCBwb2ludGVyIHNjZW5hcmlvIGltcG9zc2libGUuXG5cblNvIHdoeSB0aGUgY2hhbmdlPyBBaCEgVGhleSd2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB0byB0YWtlIGBsZW5gIGFzIGFuIGFyZ3VtZW50IHNvIHRoZXkgY2FuIGNhbGwgaXQgd2l0aCBgVExTX0hFQURFUl9TSVpFYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnXG5cbiIsIklucHV0VG9rZW5zIjoyNTUzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoxMS4zNDIwOTkxNjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MDpcXHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBxc2hvcnQpXFxuIDM5MTpcXHR7XFxuIDM5MjpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMzk0OlxcdFxcdGludCBuZWVkX3NwYywgbGVuO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBJZiB0aGUgcmJ1ZiBpcyBzbWFsbCBvciByY3Ygd2luZG93IGhhcyBjb2xsYXBzZWQgdG8gMCB3ZSBuZWVkXFxuIDM5NzpcXHRcXHQgKiB0byByZWFkIHRoZSBkYXRhIG91dC4gT3RoZXJ3aXNlIHRoZSBjb25uZWN0aW9uIHdpbGwgc3RhbGwuXFxuIDM5ODpcXHRcXHQgKiBXaXRob3V0IHByZXNzdXJlIHRocmVzaG9sZCBvZiBJTlRfTUFYIHdpbGwgbmV2ZXIgYmUgcmVhZHkuXFxuIDM5OTpcXHRcXHQgKi9cXG4gNDAwOlxcdFxcdGlmIChsaWtlbHkocXNob3J0IFxcdTAwMjZcXHUwMDI2ICF0Y3BfZXBvbGxpbl9yZWFkeShzdHJwLVxcdTAwM2VzaywgSU5UX01BWCkpKVxcbiA0MDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdHNoaW5mbyA9IHNrYl9zaGluZm8oc3RycC1cXHUwMDNlYW5jaG9yKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0LyogSWYgd2UgZG9uJ3Qga25vdyB0aGUgbGVuZ3RoIGdvIG1heCBwbHVzIHBhZ2UgZm9yIGNpcGhlciBvdmVyaGVhZCAqL1xcbiA0MDY6XFx0XFx0bmVlZF9zcGMgPSBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gPzogVExTX01BWF9QQVlMT0FEX1NJWkUgKyBQQUdFX1NJWkU7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdGZvciAobGVuID0gbmVlZF9zcGM7IGxlbiBcXHUwMDNlIDA7IGxlbiAtPSBQQUdFX1NJWkUpIHtcXG4gNDA5OlxcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKHN0cnAtXFx1MDAzZXNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4gNDEwOlxcdFxcdFxcdGlmICghcGFnZSkge1xcbiA0MTE6XFx0XFx0XFx0XFx0dGxzX3N0cnBfZmx1c2hfYW5jaG9yX2NvcHkoc3RycCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDEzOlxcdFxcdFxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0XFx0c2tiX2ZpbGxfcGFnZV9kZXNjKHN0cnAtXFx1MDAzZWFuY2hvciwgc2hpbmZvLVxcdTAwM2Vucl9mcmFncysrLFxcbiA0MTY6XFx0XFx0XFx0XFx0XFx0ICAgcGFnZSwgMCwgMCk7XFxuIDQxNzpcXHRcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdHNoaW5mby1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0c3RycC1cXHUwMDNlY29weV9tb2RlID0gMTtcXG4gNDIyOlxcdFxcdHN0cnAtXFx1MDAzZXN0bS5vZmZzZXQgPSAwO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWxlbiA9IDA7XFxuIDQyNTpcXHRcXHRzdHJwLVxcdTAwM2VhbmNob3ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4gNDI2OlxcdFxcdHN0cnAtXFx1MDAzZWFuY2hvci1cXHUwMDNldHJ1ZXNpemUgPSByb3VuZF91cChuZWVkX3NwYywgUEFHRV9TSVpFKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0dGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XFxuIDQyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MTEuMzQyMTg2NzM2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjYzOTIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyZWFtIFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBgdGxzX3N0cnBfcmVhZF9jb3B5YCBpcyBhbGxvY2F0aW5nIG1lbW9yeSBwYWdlcywgYW5kIGNydWNpYWxseSwgaXQncyBzZXR0aW5nIGBzdHJwLVx1MDAzZWNvcHlfbW9kZSA9IDFgLiBUaGF0J3MgdGhlIGZpcnN0IGtleSwgSSBzZWUuIFRoZW4gaXQgaW1tZWRpYXRlbHkgY2FsbHMgYHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApYC4gUmlnaHQsIHNvIHRoaXMgYGNvcHlpbmAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGRhdGEgdHJhbnNmZXIgZnJvbSB0aGUgVENQIHJlY2VpdmUgcXVldWUgKmFjdHVhbGx5KiB0YWtlcyBwbGFjZSwgZmVlZGluZyB0aGUgYWxsb2NhdGVkIHBhZ2VzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgYHRsc19zdHJwX3JlYWRfY29weWluYCBmdW5jdGlvbiB0byBjb25maXJtIG15IHRoaW5raW5nLiBHb3R0YSB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBjb3B5IG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoxNS44Njg1ODE0MTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTU4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zdHJwX3JlYWRfY29weWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19zdHJwLmM9MzQyPXN0YXRpYyBpbnQgdGxzX3N0cnBfY29weWluKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTM3NS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6Mzc2OnN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTM3Ny17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9MzkwPXN0YXRpYyBpbnQgdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIHFzaG9ydClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy00MjctXFxubmV0L3Rscy90bHNfc3RycC5jOjQyODpcXHR0bHNfc3RycF9yZWFkX2NvcHlpbihzdHJwKTtcXG5uZXQvdGxzL3Rsc19zdHJwLmMtNDI5LVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01MjEtXFx0aWYgKHVubGlrZWx5KHN0cnAtXFx1MDAzZWNvcHlfbW9kZSkpXFxubmV0L3Rscy90bHNfc3RycC5jOjUyMjpcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5aW4oc3RycCk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MTUuOTExNzQ0MzEyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTgwNzA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwuIFwidGxzXCIgc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UsIGFuZCBcInN0cnBcIiBsaWtlbHkgaW1wbGllcyBzb21lIHN0cmluZyBwcm9jZXNzaW5nIG9yIGNvcHlpbmcgb3BlcmF0aW9uLiBcIlJlYWRcIiBpbmRpY2F0ZXMgdGhpcyBpcyBhYm91dCBwdWxsaW5nIGRhdGEgaW4uIEFuZCBcImNvcHlpblwiIGlzIGludGVyZXN0aW5nIC0gaXQgaW1wbGllcyBjb3B5aW5nIGRhdGEgKmludG8qIGEgc3BlY2lmaWMgbG9jYXRpb24sIHBlcmhhcHMgYSBidWZmZXIgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLlxuXG5NeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggcmVhZGluZyBzdHJpbmcgZGF0YSBmcm9tIHNvbWUgc291cmNlLCBsaWtlbHkgaW50byB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZW5zdXJpbmcgdGhyZWFkLXNhZmV0eSB3aGVuIGhhbmRsaW5nIHN0cmluZ3MsIHBlcmhhcHMgd2hlbiBkZWFsaW5nIHdpdGggdGhpbmdzIGxpa2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGNvbmZpZ3VyYXRpb24gZGF0YSB3aXRoaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBUaGUgXCJjb3B5aW5cIiBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgcHJvdGVjdGlvbiBpbiBwbGFjZSB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciB0byBzZWUgKndoZXJlKiB0aGlzIGRhdGEgaXMgY29waWVkIGFuZCAqaG93KiB0aGF0IGNvcHkgb3BlcmF0aW9uIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgdGhyZWFkLXNhZmV0eS4gSXMgaXQgYSBkZWVwIGNvcHk/IERvZXMgaXQgdXNlIGEgbG9jaz8gQXJlIHRoZXJlIGFueSBzaXplIGxpbWl0cyBvciBlcnJvciBoYW5kbGluZyBpbnZvbHZlZD8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoyMC44MDk4MTcxNjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NjpcXHRzdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfY29weWluKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbiAzNzc6XFx0e1xcbiAzNzg6XFx0XFx0cmVhZF9kZXNjcmlwdG9yX3QgZGVzYztcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGVzYy5hcmcuZGF0YSA9IHN0cnA7XFxuIDM4MTpcXHRcXHRkZXNjLmVycm9yID0gMDtcXG4gMzgyOlxcdFxcdGRlc2MuY291bnQgPSAxOyAvKiBnaXZlIG1vcmUgdGhhbiBvbmUgc2tiIHBlciBjYWxsICovXFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdC8qIHNrIHNob3VsZCBiZSBsb2NrZWQgaGVyZSwgc28gb2theSB0byBkbyByZWFkX3NvY2sgKi9cXG4gMzg1OlxcdFxcdHRjcF9yZWFkX3NvY2soc3RycC1cXHUwMDNlc2ssIFxcdTAwMjZkZXNjLCB0bHNfc3RycF9jb3B5aW4pO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRyZXR1cm4gZGVzYy5lcnJvcjtcXG4gMzg4OlxcdH1cXG4gMzg5OlxcdFxcbiAzOTA6XFx0c3RhdGljIGludCB0bHNfc3RycF9yZWFkX2NvcHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgcXNob3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMDoyMC44MDk4OTkyMjRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MDkzMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdGxzX3N0cnBfY29weWluYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGB0Y3BfcmVhZF9zb2NrYCBjYWxscyBgdGxzX3N0cnBfY29weWluYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZGF0YSB0cmFuc2ZlciByZWxhdGVkIHRvIFRMUyB3aXRoaW4gdGhlIFRDUCBsYXllci4gSXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpbmJvdW5kIFRMUyBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBUQ1AgY29ubmVjdGlvbi4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4gTGV0J3MgZGlnIGludG8gdGhlIGB0bHNfc3RycF9jb3B5aW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyBkYXRhIGlzIGJlaW5nIGNvcGllZCBpbiBhbmQgcHJvY2Vzc2VkLiBUaGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSBlbmNyeXB0ZWQgVExTIGRhdGEgaXMgYmVpbmcgZGVjcnlwdGVkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGl0cyBtZW1vcnkgaGFuZGxpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVExTIGxpYnJhcnkuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MjYuNDUwODM1MTQ3WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX3N0cnAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDI6XFx0c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW4ocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDM0MzpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgaW5fbGVuKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAgPSAoc3RydWN0IHRsc19zdHJwYXJzZXIgKilkZXNjLVxcdTAwM2VhcmcuZGF0YTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM0NzpcXHRcXHRpbnQgcmV0O1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRpZiAoc3RycC1cXHUwMDNlbXNnX3JlYWR5KVxcbiAzNTA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdHNrYiA9IHN0cnAtXFx1MDAzZWFuY2hvcjtcXG4gMzUzOlxcdFxcdGlmICghc2tiLVxcdTAwM2VsZW4pXFxuIDM1NDpcXHRcXHRcXHRza2JfY29weV9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xcbiAzNTU6XFx0XFx0ZWxzZVxcbiAzNTY6XFx0XFx0XFx0c3RycC1cXHUwMDNlbWl4ZWRfZGVjcnlwdGVkIHw9ICEhc2tiX2NtcF9kZWNyeXB0ZWQoc2tiLCBpbl9za2IpO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgc3RycC1cXHUwMDNlbWl4ZWRfZGVjcnlwdGVkKVxcbiAzNTk6XFx0XFx0XFx0cmV0ID0gdGxzX3N0cnBfY29weWluX3NrYihzdHJwLCBza2IsIGluX3NrYiwgb2Zmc2V0LCBpbl9sZW4pO1xcbiAzNjA6XFx0XFx0ZWxzZVxcbiAzNjE6XFx0XFx0XFx0cmV0ID0gdGxzX3N0cnBfY29weWluX2ZyYWcoc3RycCwgc2tiLCBpbl9za2IsIG9mZnNldCwgaW5fbGVuKTtcXG4gMzYyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDM2MzpcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IHJldDtcXG4gMzY0OlxcdFxcdFxcdHJldCA9IDA7XFxuIDM2NTpcXHRcXHR9XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmIChzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gXFx1MDAyNlxcdTAwMjYgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDM2ODpcXHRcXHRcXHRkZXNjLVxcdTAwM2Vjb3VudCA9IDA7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG4gMzcxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6MjYuNDUwOTExNjk4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTUyMzk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgU3RyaXAgQ29weS1JbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGB0bHNfc3RycF9jb3B5aW5gIHdvcmtzLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0cyBwcmltYXJ5IGpvYiBpcyB0byBnZXQgZGF0YSBmcm9tIGBpbl9za2JgIGFuZCBwdXQgaXQgaW50byB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGhpbiBgc3RycC1cdTAwM2VhbmNob3JgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IElmIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAgaGFwcGVucyB0byBiZSB6ZXJvIGF0IHRoZSBzdGFydCwgYHRsc19zdHJwX2NvcHlpbmAgZG9lc24ndCBqdXN0IGNvcHkgdGhlIGRhdGEuIEl0ICphbHNvKiBjYWxscyBgdGxzX3J4X21zZ19zaXplYC4gIFRoYXQgY2FsbCB0YWtlcyBwbGFjZSB3aXRoaW4gZWl0aGVyIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2Agb3IgYHRsc19zdHJwX2NvcHlpbl9za2JgLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcy5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBob3cgYHRsc19zdHJwX2NvcHlpbl9mcmFnYCB3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93IGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTcyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAwOjMyLjUwNjE1NDUyOVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRzdGF0aWMgaW50IHRsc19zdHJwX2NvcHlpbl9mcmFnKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgdW5zaWduZWQgaW50IG9mZnNldCxcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdHNpemVfdCBpbl9sZW4pXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHR1bnNpZ25lZCBpbnQgbmZyYWcgPSBza2ItXFx1MDAzZWxlbiAvIFBBR0VfU0laRTtcXG4gMjE1OlxcdFxcdHNpemVfdCBsZW4sIGNodW5rO1xcbiAyMTY6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMjE3OlxcdFxcdGludCBzejtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0aWYgKHVubGlrZWx5KG5mcmFnIFxcdTAwM2U9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3MpKSB7XFxuIDIyMDpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZnJhZyA9IFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdzW25mcmFnXTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0bGVuID0gaW5fbGVuO1xcbiAyMjc6XFx0XFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlIGdvdCB0aGUgaGVhZGVyICovXFxuIDIyODpcXHRcXHRpZiAoIXN0cnAtXFx1MDAzZXN0bS5mdWxsX2xlbikge1xcbiAyMjk6XFx0XFx0XFx0LyogQXNzdW1lIG9uZSBwYWdlIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGhlYWRlcnMgKi9cXG4gMjMwOlxcdFxcdFxcdGNodW5rID1cXHRtaW5fdChzaXplX3QsIGxlbiwgUEFHRV9TSVpFIC0gc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XFxuIDIzMTpcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2tiX2NvcHlfYml0cyhpbl9za2IsIG9mZnNldCxcXG4gMjMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9mcmFnX2FkZHJlc3MoZnJhZykgK1xcbiAyMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcXG4gMjM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNodW5rKSk7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGNodW5rO1xcbiAyMzc6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhX2xlbiArPSBjaHVuaztcXG4gMjM4OlxcdFxcdFxcdHNrYl9mcmFnX3NpemVfYWRkKGZyYWcsIGNodW5rKTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0XFx0c3ogPSB0bHNfcnhfbXNnX3NpemUoc3RycCwgc2tiKTtcXG4gMjQxOlxcdFxcdFxcdGlmIChzeiBcXHUwMDNjIDApXFxuIDI0MjpcXHRcXHRcXHRcXHRyZXR1cm4gc3o7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdFxcdC8qIFdlIG1heSBoYXZlIG92ZXItcmVhZCwgc3ogPT0gMCBpcyBndWFyYW50ZWVkIHVuZGVyLXJlYWQgKi9cXG4gMjQ1OlxcdFxcdFxcdGlmICh1bmxpa2VseShzeiBcXHUwMDI2XFx1MDAyNiBzeiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSkge1xcbiAyNDY6XFx0XFx0XFx0XFx0aW50IG92ZXIgPSBza2ItXFx1MDAzZWxlbiAtIHN6O1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uob3ZlciBcXHUwMDNlIGNodW5rKTtcXG4gMjQ5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuIC09IG92ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAwOjMyLjUwNjI4NDUwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQ5NDMyNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTdHJlYW0gUHJvY2Vzc2luZyBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIHNpemUgb2YgaW5jb21pbmcgVExTIG1lc3NhZ2VzIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgVENQIHJlY2VpdmUgcXVldWUuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGB0bHNfc3RycF9yZWFkX2NvcHlgIGdldHMgY2FsbGVkLCBjb3BpZXMgZGF0YSBpbnRvIHBhZ2VzLCBhbmQgdGhlbiBjYWxscyBgdGxzX3J4X21zZ19zaXplYCBvbiB0aGlzIGNvcGllZCBkYXRhLiBUaGF0J3MgZmluZSDigJMgdGhlIHBhZ2VzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGFuZCBjb250aWd1b3VzIGJlY2F1c2UgYHNrYl9jb3B5X2JpdHNgIGRvZXMgdGhlIGNvcHkgcHJvcGVybHkuIFRoZSBsb2dpYyBnb2VzIGxpa2UgdGhpczogaWYgIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgZmFpbHMgKG1lYW5pbmcgc2ticyBpbiB0aGUgcXVldWUgYXJlIGRpc2NvbnRpbnVvdXMgb3IgaGF2ZSBkaWZmZXJpbmcgZGVjcnlwdGVkIHN0YXRlcyksIHdlIGZhbGwgYmFjayB0byBgdGxzX3N0cnBfcmVhZF9jb3B5YC4gVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFnZXMgYW5kIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHJlYXNzZW1ibGUgdGhlIGRhdGEuIGB0Y3BfcmVhZF9zb2NrYCBpcyB0aGUgcmlnaHQgdG9vbDsgaXQgY29ycmVjdGx5IGhhbmRsZXMgYW55IFRDUCBpZGlvc3luY3Jhc2llcyBsaWtlIG91dC1vZi1vcmRlciBzZWdtZW50cyBvciBvdmVybGFwcy4gU28sIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCBnZXRzIHVzIHRoZSBwcm9wZXIsIHJlYXNzZW1ibGVkIFRDUCBzdHJlYW0uIFRoZW4sIGB0bHNfcnhfbXNnX3NpemVgIGNhbiByZWFkIHRoZSBjb3JyZWN0IFRMUyBoZWFkZXIgZnJvbSB0aGVzZSBwYWdlcy5cblxuTm93LCBiZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZGlyZWN0bHkgY2FsbGluZyBgdGxzX3J4X21zZ19zaXplYCBvbiBgc3RycC1cdTAwM2VhbmNob3JgLCB3aGljaCB3YXMgc2ltcGx5IGEgYGZyYWdfbGlzdGAgcG9pbnRpbmcgdG8gdGhlIFRDUCByZWNlaXZlIHF1ZXVlLiBUaGUgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIHRoYXQgYHNrYl9jb3B5X2JpdHNgIHdvdWxkIGJsaW5kbHkgY29weSBkYXRhIGZyb20gdGhlIHNrYnMgaW4gdGhhdCBsaXN0LCBpZ25vcmluZyBUQ1Agc2VxdWVuY2UgbnVtYmVycy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgaGFkIG92ZXJsYXBwaW5nLCBvdXQtb2Ytb3JkZXIsIG9yIGRpZmZlcmVudGx5IGRlY3J5cHRlZCBza2JzICh3aGljaCAqc2hvdWxkbid0KiBoYXBwZW4sIGJ1dCBtaWdodCB3aXRoIHVyZ2VudCBkYXRhIG9yIHNvbWUgZWRnZSBjYXNlKSBgc2tiX2NvcHlfYml0c2Agd291bGQgcHVsbCB0aGUgd3JvbmcgZGF0YS4gVGhlbiBgdGxzX3J4X21zZ19zaXplYCB3b3VsZCBwYXJzZSB0aGlzIGNvcnJ1cHRlZCBkYXRhIGFzIGEgVExTIGhlYWRlciwgcG9zc2libHkgY2FsY3VsYXRpbmcgdGhlIG1lc3NhZ2Ugc2l6ZSBpbmNvcnJlY3RseSBhbmQgY29ycnVwdGluZyB0aGUgc3RyZWFtLiBUaGUgZml4IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBjaGVjazpcblxuYGBgY1xuK1x0XHRpZiAoaW5xIFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXG4rXHRcdFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcbitcdFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKVxuK1x0XHRcdHJldHVybiB0bHNfc3RycF9yZWFkX2NvcHkoc3RycCwgZmFsc2UpO1xuYGBgXG5cblRoaXMgKmVuc3VyZXMqIHRoZSBmaXJzdCBgVExTX0hFQURFUl9TSVpFYCBieXRlcyBhcmUgY29udGlndW91cywgYW5kIHRoYXQgdGhlaXIgZGVjcnlwdGVkIHN0YXRlIGlzIGNvbnNpc3RlbnQuICBJZiBub3QsIGl0IGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIHVzaW5nIGB0Y3BfcmVhZF9zb2NrYCB0byByZWFzc2VtYmxlIHRoZSBkYXRhIGJlZm9yZSBwYXJzaW5nLlxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYHNrYl9jb3B5X2JpdHNgIHJlYWRzIGZyb20gdGhlIGRhdGEgYnVmZmVycyBvZiB0aGUgc2ticywgd2hpY2ggY29udGFpbiBuZXR3b3JrIGRhdGE7IHRoZXNlIGJ1ZmZlcnMgYXJlICphbHdheXMqIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0IHJlYWRzIHRoZSB3cm9uZyBkYXRhIChkdWUgdG8gc2VxdWVuY2UgbnVtYmVyIGlzc3VlcyksIHRoZSBkYXRhICppdHNlbGYqIGlzIGluaXRpYWxpemVkLCBqdXN0IGluY29ycmVjdC4gIGB0bHNfcnhfbXNnX3NpemVgIGNhbGN1bGF0ZXMgYGRhdGFfbGVuYCB0aGVuIHNldHMgYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuID0gc3pgLiBBZnRlcndhcmRzLCBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIHZhbGlkYXRlcyB0aGUgY29udGlndW91c25lc3Mgb2YgdGhlIGRhdGEgdXAgdG8gYHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuYC4gSWYgdGhhdCBmYWlscywgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHdvdWxkIGRpc2NhcmQgdGhlIGJhZCBjYWxjdWxhdGVkIHNpemUuXG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBzdWNjZWVkcywgYnV0IGB0bHNfcnhfbXNnX3NpemVgIHNvbWVob3cgc3RpbGwgcmVhZHMgZ2FyYmFnZS4gSG93IGNvdWxkIHRoaXMgaGFwcGVuPyBJZiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgICpzdWNjZWVkcyosIGl0IG1lYW5zIHRoZSBza2JzIHVwIHRvIHRoZSBjYWxjdWxhdGVkIGBzemAgYXJlIGNvbnRpZ3VvdXMuIFNpbmNlIGBzemAgaXMgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCBgVExTX0hFQURFUl9TSVpFYCwgdGhlIGZpcnN0IGhlYWRlciBieXRlcyB3ZXJlIGFsc28gY29udGlndW91cywgd2hpY2ggbWVhbnMgYHRsc19yeF9tc2dfc2l6ZWAgc2hvdWxkIGhhdmUgcmVhZCB0aGUgY29ycmVjdCBoZWFkZXIuIFNvLCB3aHkgdGhlIGFkZGVkIGNoZWNrICpiZWZvcmUqIGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWA/XG5cbkFoYSEgIFdoYXQgYWJvdXQgYSBjcmFzaCBpbiBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGlmIGByZW1haW5pbmdgIGV4Y2VlZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHF1ZXVlZCBza2JzPyBMZXQncyBjaGVjazpcbmBgYGNcblx0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHJlbWFpbmluZykge1xuXHRcdHNlcSArPSBza2ItXHUwMDNlbGVuO1xuXHRcdHJlbWFpbmluZyAtPSBza2ItXHUwMDNlbGVuO1xuXHRcdHNrYiA9IHNrYi1cdTAwM2VuZXh0O1xuXG5cdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuYGBgXG5JZiBgcmVtYWluaW5nYCBpcyBncmVhdGVyLCB0aGUgbG9vcCAqbWlnaHQqIGRlcmVmZXJlbmNlIGEgTlVMTCBgc2tiYC4gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IFJlbWVtYmVyIHRoYXQgYHJlbWFpbmluZyA9IHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHN0cnAtXHUwMDNlc3RtLmZ1bGxfbGVuO2AsIHdoZXJlIGBzdHJwLVx1MDAzZXN0bS5mdWxsX2xlbmAgaXMganVzdCB0aGUgYHN6YFxuXG4iLCJJbnB1dFRva2VucyI6MzI3NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6NTkuMDAwNjE1NDg3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIwMDcxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5xID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTE2LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo1MTc6XFx0aW5xID0gdGNwX2lucShzdHJwLVxcdTAwM2Vzayk7XFxubmV0L3Rscy90bHNfc3RycC5jLTUxOC1cXHRpZiAoaW5xIFxcdTAwM2MgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDA6NTkuMjgyNjI5MjE4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDc3NjA0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFJlY2VpdmUgUXVldWUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0Y3BfaW5xYCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0IGl0J3MgdGVsbGluZyBtZSBhYm91dCB0aGUgYW1vdW50IG9mIGRhdGEgcmVhZHkgdG8gYmUgcmVhZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQsIFwiV2FpdCwgYHRjcF9pbnFgIGdpdmVzIG1lIHRoZSBJTi1TRVFVRU5DRSBkYXRhP1wiIE15IGltbWVkaWF0ZSByZWFjdGlvbiB3YXMgYSBzbGlnaHQgd29ycnkgYWJvdXQgb3V0LW9mLW9yZGVyIFNLQnMgaW4gdGhlIHJlY2VpdmUgcXVldWUsIGJ1dCB0aGVuIGl0IGhpdHMgbWUuICBgdGNwX2lucWAgaXMgYWN0dWFsbHkgcHJvdmlkaW5nIGB0cC1cdTAwM2VyY3Zfbnh0IC0gdHAtXHUwMDNlY29waWVkX3NlcWAsIHdoaWNoICppcyogdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgYHNrX3JlY2VpdmVfcXVldWVgIHN0cmljdGx5IGNvbnRhaW5zIGluLXNlcXVlbmNlIFNLQnMuIFRoZSBvdXQtb2Ytb3JkZXIgb25lcyBhcmUgc2FmZWx5IHR1Y2tlZCBhd2F5IGluIHRoZSBgb3V0X29mX29yZGVyX3F1ZXVlYC4gIFNvLCAqYWx3YXlzKiBpbi1zZXF1ZW5jZS4gQnV0IHRoZW4sIEknbSBxdWVzdGlvbmluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGFuZCB3b25kZXJpbmcgd2h5IGl0J3MgZXZlbiBjb21wYXJpbmcgc2VxdWVuY2UgbnVtYmVycyAoYFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgIT0gc2VxYCkuIElzIGl0IGZvciB1cmdlbnQgZGF0YSBzY2VuYXJpb3M/IEVkZ2UgY2FzZXMgd2l0aCBvdmVybGFwcGluZyBTS0JzP1xuXG5BbmQgdGhlbiBJIHJlbWVtYmVyOiBvdmVybGFwcGluZyBTS0JzICpjYW4qIGV4aXN0IGluIHRoZSByZWNlaXZlIHF1ZXVlIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGNvbGxhcHNlZCB5ZXQuIFRoYXQncyBhIGdvb2QgZ290Y2hhISAgVGhpcyByYWlzZXMgYW5vdGhlciBjb25jZXJuOiBpZiBhbiBTS0IncyBgbGVuYCBpbmNsdWRlcyBvdmVybGFwcGluZyBkYXRhLCBpdHMgbGVuZ3RoIG1pZ2h0IGJlICpsYXJnZXIqIHRoYW4gdGhlIGFjdHVhbCBpbi1zZXF1ZW5jZSBkYXRhIGl0IHByb3ZpZGVzISAgSWYgc28sIHRoZSBzdW0gb2YgYHNrYi1cdTAwM2VsZW5gIGZvciBhbGwgU0tCcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBtaWdodCBhY3R1YWxseSBleGNlZWQgd2hhdCBgdGNwX2lucWAgcmVwb3J0cyBhcyB0aGUgaW4tc2VxdWVuY2UgZGF0YSFcblxuSWYgdGhpcyBpcyB0cnVlLCB0aGVuIGByZW1haW5pbmdgICh3aGljaCBpcyBsaW1pdGVkIGJ5IGBvZmZzZXQgKyBpbnFgKSB3b3VsZCBiZSAqc21hbGxlciogdGhhbiB0aGUgc3VtIG9mIGBza2ItXHUwMDNlbGVuYC4gIFNvLCB0aGUgYHNrYmAgd291bGRuJ3QgYmVjb21lIG51bGwsIGFuZCBpdCBhbGwgY2hlY2tzIG91dC5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBhbm90aGVyIHBvc3NpYmlsaXR5LiAgV2hhdCBpZiBhbiBTS0IgaXMgc29tZWhvdyAqc21hbGxlciogdGhhbiB0aGUgc2VxdWVuY2Ugc3BhY2UgaXQgY292ZXJzPyAobGlrZSwgaWYgaXQgaGFzIFwiaG9sZXNcIiBzb21laG93PyBObywgVENQIHNrYnMgZG9uJ3QgaGF2ZSBob2xlcy4pIFdoYXQgaWYgYGlucWAgd2VyZSBzb21laG93ICpsYXJnZXIqIHRoYW4gdGhlIHN1bSBvZiBgc2tiLVx1MDAzZWxlbmAgaW4gYHNrX3JlY2VpdmVfcXVldWVgPyBIb3cgY291bGQgdGhhdCBoYXBwZW4/IEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGBpbnFgIGlz4oCmIGl04oCZcyBgdHAtXHUwMDNlcmN2X254dCAtIHRwLVx1MDAzZWNvcGllZF9zZXFgLiBBbmQgaWYgdGhlcmUncyBhIEZJTiwgYGlucWAgbWlnaHQgaW5jbHVkZSBpdCwgYnV0IHRoZSBkYXRhIGNhbGN1bGF0aW9uIHdvdWxkbid0LiBIYW5nIG9uLCBkb2VzIGB0Y3BfaW5xYCBldmVuIGluY2x1ZGUgdGhlIEZJTj8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgdGNwX2lucWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAxOjEwLjc2MDIzNTYwNVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NzEyNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9pbnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9NjM5PWludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy02NTAtXFx0XFx0c2xvdyA9IGxvY2tfc29ja19mYXN0KHNrKTtcXG5uZXQvaXB2NC90Y3AuYzo2NTE6XFx0XFx0YW5zdyA9IHRjcF9pbnEoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTY1Mi1cXHRcXHR1bmxvY2tfc29ja19mYXN0KHNrLCBzbG93KTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE4MjM9aW50IHRjcF9wZWVrX2xlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9pcHY0L3RjcC5jLTE4MjQte1xcbm5ldC9pcHY0L3RjcC5jOjE4MjU6XFx0cmV0dXJuIHRjcF9pbnEoc29jay1cXHUwMDNlc2spO1xcbm5ldC9pcHY0L3RjcC5jLTE4MjYtfVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5NT1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyMDktXFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcXG5uZXQvaXB2NC90Y3AuYzoyMjEwOlxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy0yMjExLVxcdGJvb2wgbW1hcF9sb2NrZWQ7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMzQ2PXZvaWQgdGNwX3JlY3ZfdGltZXN0YW1wKHN0cnVjdCBtc2doZHIgKm1zZywgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjQxMi1cXG5uZXQvaXB2NC90Y3AuYzoyNDEzOnN0YXRpYyBpbnQgdGNwX2lucV9oaW50KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0yNDE0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI5MzA9aW50IHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTUwLVxcdFxcdGlmICgoY21zZ19mbGFncyBcXHUwMDI2IFRDUF9DTVNHX0lOUSkgfCBtc2ctXFx1MDAzZW1zZ19nZXRfaW5xKSB7XFxubmV0L2lwdjQvdGNwLmM6Mjk1MTpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19pbnEgPSB0Y3BfaW5xX2hpbnQoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTI5NTItXFx0XFx0XFx0aWYgKGNtc2dfZmxhZ3MgXFx1MDAyNiBUQ1BfQ01TR19JTlEpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3OTgtemVyb2NvcHlfcmN2X2lucTpcXG5uZXQvaXB2NC90Y3AuYzo0Nzk5OlxcdFxcdHpjLmlucSA9IHRjcF9pbnFfaGludChzayk7XFxubmV0L2lwdjQvdGNwLmMtNDgwMC16ZXJvY29weV9yY3Zfb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMToxMC45ODU5NTIyOTJaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMTg0NzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgUXVldWUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBUQ1AgcmVjZWl2ZSBxdWV1ZSBpcyBtYW5hZ2VkIGludGVybmFsbHksIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWZpbml0aW9uIG9mIGB0Y3BfaW5xYC4gSSBrbm93IGl0J3MgYSBrZXkgZWxlbWVudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpbmNvbWluZyBkYXRhIGlzIGhhbmRsZWQsIGFuZCBgaW5jbHVkZS9uZXQvdGNwLmhgIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgd2hhdCBmaWVsZHMgaXQgY29udGFpbnMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc2tfcmVjZWl2ZV9xdWV1ZWAuIFRoYXQnbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIGRlZXBlciBkaXZlcywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25nZXN0aW9uIGNvbnRyb2wgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljIGxhdGVyIG9uLiBObyBwb2ludCBpbiBidWlsZGluZyBhbnkgYXNzdW1wdGlvbnMgYmVmb3JlIEkgcmVmcmVzaCB0aGUgZm91bmRhdGlvbiBrbm93bGVkZ2UuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMToxNS4xODc4MDI1MjZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjgwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9pbnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MjczNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90Y3BfcHVyZV9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI3NDAtXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjc0MTpzdGF0aWMgaW5saW5lIGludCB0Y3BfaW5xKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90Y3AuaC0yNzQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDE6MTUuMjc3MDg4NzI3WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTUyNDc5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBzcGVha2luZyBhcyBpZiBpdCB3ZXJlIG15IG93biwgYW5kIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHRjcF9pbnFgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gZGlnIGludG8gYHRjcF9pbnFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmc7IGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLCBob3cgaXQgYWZmZWN0cyB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suIElzIHRoaXMgYSBwYWNrZXQgcmVjZWl2ZSBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgc29ydCBvZiBpbnRlcm5hbCBidWZmZXI/IElzIGl0IHVzZWQgZm9yIGNvbmdlc3Rpb24gY29udHJvbCwgZmxvdyBjb250cm9sLCBvciBzaW1wbHkgYSBkZWJ1Z2dpbmcgbWV0cmljPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgZXhhY3RseSBhbSBJIGxvb2tpbmcgZm9yPyBJJ20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgd2hlcmUgdGhpcyBpcyBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIG1hbmlwdWxhdGluZy4gSSdtIGdvaW5nIHRvIHdhdGNoIG91dCBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIGBza19idWZmYCBvciByZWxhdGVkIG5ldHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFzIHRob3NlIGFyZSBnb2luZyB0byBiZSBrZXkgdG8gdGhlIGZ1bmN0aW9uLiBBbnkgb2J2aW91cyBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gVGhhdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gbm90ZSB3aXRoIG5ldHdvcmtpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGlzIGlzIHdlbGwtY29tbWVudGVkLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMTozMC40Mjk1NzEzMTJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NDE6XFx0c3RhdGljIGlubGluZSBpbnQgdGNwX2lucShzdHJ1Y3Qgc29jayAqc2spXFxuMjc0MjpcXHR7XFxuMjc0MzpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4yNzQ0OlxcdFxcdGludCBhbnN3O1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX1NZTl9TRU5UIHwgVENQRl9TWU5fUkVDVikpIHtcXG4yNzQ3OlxcdFxcdFxcdGFuc3cgPSAwO1xcbjI3NDg6XFx0XFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVVJHSU5MSU5FKSB8fFxcbjI3NDk6XFx0XFx0XFx0ICAgIXRwLVxcdTAwM2V1cmdfZGF0YSB8fFxcbjI3NTA6XFx0XFx0XFx0ICAgYmVmb3JlKHRwLVxcdTAwM2V1cmdfc2VxLCB0cC1cXHUwMDNlY29waWVkX3NlcSkgfHxcXG4yNzUxOlxcdFxcdFxcdCAgICFiZWZvcmUodHAtXFx1MDAzZXVyZ19zZXEsIHRwLVxcdTAwM2VyY3Zfbnh0KSkge1xcbjI3NTI6XFx0XFxuMjc1MzpcXHRcXHRcXHRhbnN3ID0gdHAtXFx1MDAzZXJjdl9ueHQgLSB0cC1cXHUwMDNlY29waWVkX3NlcTtcXG4yNzU0OlxcdFxcbjI3NTU6XFx0XFx0XFx0LyogU3VidHJhY3QgMSwgaWYgRklOIHdhcyByZWNlaXZlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMTozMC40Mjk3ODA5MTJaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MzkwODg3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gVExTIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFRDUCByZWNlaXZlIHF1ZXVlIChgaW5xYCkgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGFkanVzdHMgYGlucWAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBGSU4gcGFja2V0IHdhcyByZWNlaXZlZCwgb3IgaWYgd2UncmUgZGVhbGluZyB3aXRoIHVyZ2VudCBkYXRhLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGJ5dGVzICphdmFpbGFibGUqIGluIHRoZSBxdWV1ZSBhbmQgdGhlIGJ5dGVzICpjbGFpbWVkKiB0byBiZSBhdmFpbGFibGUuICBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYHNrYmBzLCBhbmQgaGFzIGEgbG9vcCB0aGF0IHRlcm1pbmF0ZXMgd2hlbiBgc2tiLVx1MDAzZWxlbmAgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHJlYWQgKGByZW1haW5pbmdgKS5cblxuSSBpbml0aWFsbHkgd29ycmllZCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIGByZW1haW5pbmdgIGNvdWxkIHNvbWVob3cgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBkYXRhIGluIHRoZSBxdWV1ZSBhbmQgYHNrYmAgYmVjb21lcyBgTlVMTGAsIGJ1dCBJIGNhcmVmdWxseSBhbmFseXplZCB0aGUgaW52YXJpYW50cyBhbmQgY29uc3RyYWludHMuIFRoZSBjb2RlICpzaG91bGRuJ3QqIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIgd2hlbiByZWFkaW5nIGZyb20gdGhlIHJlY2VpdmUgcXVldWUgYmVjYXVzZSBgcmVtYWluaW5nYCBpcyBjb3JyZWN0bHkgY2FsY3VsYXRlZCBiYXNlZCBvbiBgaW5xYCBhbmQgdGhlIGxvb3AgY29uZGl0aW9uIHByZXZlbnRzIHRoaXMuIFRoZSB0b3RhbCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlIG11c3QgKmFsd2F5cyogYmUgXHUwMDNlPSBgcmVtYWluaW5nYCwgYW5kIHNvIHRoZSBsb29wIG11c3QgYWx3YXlzIHRlcm1pbmF0ZSBiZWZvcmUgc2tiIGJlY29tZXMgYE5VTExgLlxuXG5UaGVuIG15IGZvY3VzIHNoaWZ0ZWQgdG8gd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgaXMuIEkgdGhlbiBsb29rZWQgYXQgdGhlIG5ldyBhZGRpdGlvbiB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2tgIGJlZm9yZSBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBiYW5kLWFpZCBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYWRkZWQuXG5cbkl0IGJlY2FtZSBjbGVhciB0aGF0IHRoZSByZWFsIGlzc3VlIGlzIG5vdCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYnV0IHJhdGhlciAqaW5jb3JyZWN0KiBoYW5kbGluZyBvZiBvdmVybGFwcGluZyBvciBmcmFnbWVudGVkIGRhdGEgaW4gdGhlIHJlY2VpdmUgcXVldWUsIGFuZCB0aGUgYWRkaXRpb24gb2YgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBiZWZvcmUgYHRsc19yeF9tc2dfc2l6ZWAgaXMgYSByZXN1bHQgb2YgdGhhdC4gYHRsc19yeF9tc2dfc2l6ZWAgY2FuIHJldHVybiBhbiBlcnJvciAoYC1FQkFETVNHYCwgYC1FTVNHU0laRWAsIG9yIGAtRUlOVkFMYCkgaWYgdGhlIFRMUyBoZWFkZXIgaXMgY29ycnVwdGVkIGR1ZSB0byBkdXBsaWNhdGUgb3IgbWl4ZWQgZGVjcnlwdGVkIGRhdGEuICBUaGlzIGluIHR1cm4gd291bGQgYWJvcnQgYSBwb3RlbnRpYWxseSB2YWxpZCBUTFMgY29ubmVjdGlvbiBkdWUgdG8gaG93IHRoZSBzaXplIGlzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQuIENhbGxpbmcgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCBiZWZvcmVoYW5kIGhlbHBzIHRvIGVuc3VyZSB0aGF0IGB0bHNfcnhfbXNnX3NpemVgIGdldHMgdmFsaWQgZGF0YSwgb3Igd2lsbCBmYWxsIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAuIFRoaXMgdGhlbiBsZXRzIFRDUCBoYW5kbGUgdGhlIHJlYXNzZW1ibHksIGFuZCB0aGVuIHJlYWQgdGhlIHZhbGlkIGhlYWRlci5cblxuSSBydWxlZCBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBjb2RlIG9wZXJhdGVzIG9uIG5ldHdvcmsgYnVmZmVycywgd2hpY2gsIHdoaWxlIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nLCBhcmUgYXNzdW1lZCB0byBiZSBpbml0aWFsaXplZC4gVGhlIGJ1ZmZlcnMgYXJlIHNvdXJjZWQgZnJvbSB0aGUgbmV0d29yaywgYW5kIHRoZSBkYXRhIGluIHRoZSBidWZmZXJzIGFyZSBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJIHRoZW4gcnVsZWQgb3V0IGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBkdWUgdG8gdGhlIGNoZWNrcyBpbiB0aGUgdmFyaW91cyBmdW5jdGlvbnMgaW52b2x2ZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGNhbGxpbmcgYHRsc19yeF9tc2dfc2l6ZWAgZGlyZWN0bHkgb24gYSByYXcgVENQIHJlY2VpdmUgcXVldWUgbWlnaHQgbGVhZCB0byBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0cyB3aGVuIFRMUyBkYXRhIGlzIGZyYWdtZW50ZWQgb3IgcmV0cmFuc21pdHRlZCwgb3IgaXMgdGhlIHJlc3VsdCBvZiBtaXhlZCBoYXJkd2FyZS9zb2Z0d2FyZSBkZWNyeXB0aW9uLiBUaGUgZml4IGludm9sdmVzIGNoZWNraW5nIHRoZSBxdWV1ZSBmb3Igb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIGNvbnNpc3RlbnQgZGVjcnlwdGlvbiBzdGF0dXMgKmJlZm9yZSogdHJ5aW5nIHRvIHBhcnNlIHRoZSBUTFMgaGVhZGVyIHNpemUuICBUaGlzIHBhdGNoIHByZXZlbnRzIHRoZSBtaXNjYWxjdWxhdGlvbiBvZiB0aGUgc2l6ZSBhbmQgdGhlIHBvdGVudGlhbCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgYSB2YWxpZCBjb25uZWN0aW9uLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBmaXggdG8gY29ycmVjdGx5IGhhbmRsZSBUTFMgZGF0YSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHJldHJhbnNtaXNzaW9ucywgb3ZlcmxhcHBpbmcgc2VnbWVudHMgYW5kIG1peGVkIGRlY3J5cHRpb24gc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODYxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMjowNS44Njg4NzE4MjJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzk2NDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXUklURV9PTkNFXFxcXChzdHJwLVxcdTAwM2Vtc2dfcmVhZHksIDFcXFxcKTtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX3N0cnAuYz0zNDI9c3RhdGljIGludCB0bHNfc3RycF9jb3B5aW4ocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtMzY5LVxcbm5ldC90bHMvdGxzX3N0cnAuYzozNzA6XFx0XFx0V1JJVEVfT05DRShzdHJwLVxcdTAwM2Vtc2dfcmVhZHksIDEpO1xcbm5ldC90bHMvdGxzX3N0cnAuYy0zNzEtXFx0fVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy01NDYtXFxubmV0L3Rscy90bHNfc3RycC5jOjU0NzpcXHRXUklURV9PTkNFKHN0cnAtXFx1MDAzZW1zZ19yZWFkeSwgMSk7XFxubmV0L3Rscy90bHNfc3RycC5jLTU0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDI6MDYuMTU2ODQ0MDMyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDk4MDI2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGxzX3N0cnBfcmVhZF9zb2NrYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIFRMUyBzb2NrZXQgcmVhZGluZyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGB0bHNfc3RycF9yZWFkX3NvY2tgLCB3b3Jrcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDU0Ny4gSSdsbCBwcm9iYWJseSB3YW50IHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGVyZSwgc2VlIGhvdyBpdCBoYW5kbGVzIGVycm9ycywgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBvciBwZXJoYXBzIGZvciBzZWN1cml0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgd2FycmFudGVkLiBMZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowMjoxMC43MDY2NTA5N1oiLCJTZXEiOjc2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfc3RycC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXG4gNTIxOlxcdFxcdGlmICh1bmxpa2VseShzdHJwLVxcdTAwM2Vjb3B5X21vZGUpKVxcbiA1MjI6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weWluKHN0cnApO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRpZiAoaW5xIFxcdTAwM2Mgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKVxcbiA1MjU6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0dGxzX3N0cnBfbG9hZF9hbmNob3Jfd2l0aF9xdWV1ZShzdHJwLCBpbnEpO1xcbiA1Mjg6XFx0XFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pIHtcXG4gNTI5OlxcdFxcdFxcdGlmIChpbnEgXFx1MDAzYyBUTFNfSEVBREVSX1NJWkUpXFxuIDUzMDpcXHRcXHRcXHRcXHRyZXR1cm4gdGxzX3N0cnBfcmVhZF9jb3B5KHN0cnAsIHRydWUpO1xcbiA1MzE6XFx0XFx0XFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBUTFNfSEVBREVSX1NJWkUpKVxcbiA1MzI6XFx0XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuIDUzMzpcXHRcXG4gNTM0OlxcdFxcdFxcdHN6ID0gdGxzX3J4X21zZ19zaXplKHN0cnAsIHN0cnAtXFx1MDAzZWFuY2hvcik7XFxuIDUzNTpcXHRcXHRcXHRpZiAoc3ogXFx1MDAzYyAwKVxcbiA1MzY6XFx0XFx0XFx0XFx0cmV0dXJuIHN6O1xcbiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRcXHRzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gPSBzejtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0XFx0aWYgKCFzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4gfHwgaW5xIFxcdTAwM2Mgc3RycC1cXHUwMDNlc3RtLmZ1bGxfbGVuKVxcbiA1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCB0cnVlKTtcXG4gNTQyOlxcdFxcdH1cXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKCF0bHNfc3RycF9jaGVja19xdWV1ZV9vayhzdHJwLCBzdHJwLVxcdTAwM2VzdG0uZnVsbF9sZW4pKVxcbiA1NDU6XFx0XFx0XFx0cmV0dXJuIHRsc19zdHJwX3JlYWRfY29weShzdHJwLCBmYWxzZSk7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdFdSSVRFX09OQ0Uoc3RycC1cXHUwMDNlbXNnX3JlYWR5LCAxKTtcXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0cmV0dXJuIDA7XFxuIDU1MDpcXHR9XFxuIDU1MTpcXHRcXG4gNTUyOlxcdC8qIFBhcnNlIHF1ZXVlZCBkYXRhLiBXaGVuIEBhbm5vdW5jZSBpcyB0cnVlIGFuZCBwYXJzaW5nIHByb2R1Y2VzIGFcXG4gNTUzOlxcdCAqIG5ld2x5LXJlYWR5IHJlY29yZCwgZmlyZSB0aGUgY29uc3VtZXIgbm90aWZpY2F0aW9uLiBDYWxsZXJzIHRoYXRcXG4gNTU0OlxcdCAqIG5lZWQgdG8gbm90aWZ5IGEgd2FpdGVyIGFib3V0IGEgcmVjb3JkIHBhcnNlZCBieSBhbm90aGVyIHBhdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDI6MTAuNzA2ODEyODdaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyMTY0OTY3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFRMUyBDb2RlIFBhdGNoOiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBsb2dpYyBmbG93IHdhczogbG9hZCB0aGUgYW5jaG9yLCBmaWd1cmUgb3V0IHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBUTFMgbWVzc2FnZSwgYW5kICp0aGVuKiBjaGVjayBpZiB0aGUgcXVldWUncyBzdGF0ZSBpcyB2YWxpZC4gSSBjYW4gc2VlIHRoZSBwcm9ibGVtIGltbWVkaWF0ZWx5OiBpZiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiwgYHRsc19yeF9tc2dfc2l6ZWAsIGlzIHBlcmZvcm1lZCAqYmVmb3JlKiBjaGVja2luZyB0aGUgcXVldWUncyBpbnRlZ3JpdHksIGl0J3MgcG9zc2libGUgdG8gcmVhZCBhIGNvcnJ1cHRlZCBoZWFkZXIsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBhIG1peCBvZiBkZWNyeXB0ZWQgYW5kIGVuY3J5cHRlZCBkYXRhLiBUaGlzIGNhbiBlYXNpbHkgbGVhZCB0byBgLUVCQURNU0dgIG9yIGAtRU1TR1NJWkVgIGVycm9ycywgY2F1c2luZyBjb25uZWN0aW9uIGFib3J0cy5cblxuSSBzZWUgdGhlIGZpeCBpcyB0byBhZGQgYHRsc19zdHJwX2NoZWNrX3F1ZXVlX29rYCAqYmVmb3JlKiBjYWxsaW5nIGB0bHNfcnhfbXNnX3NpemVgLiBUaGlzIG1ha2VzIHNlbnNlLiBJZiB0aGUgcXVldWUgaXMgaW4gYSBiYWQgc3RhdGUsIHdlIHNraXAgdGhlIHNpemUgY2FsY3VsYXRpb24gYWx0b2dldGhlciBhbmQgZmFsbCBiYWNrIHRvIGB0bHNfc3RycF9yZWFkX2NvcHlgLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHdoaWNoIHRoZW4gcmVhc3NlbWJsZXMgdGhlIFRDUCBzdHJlYW0sIGRpc2NhcmRzIG92ZXJsYXBwaW5nIHNlZ21lbnRzLCAqdGhlbiogcGFyc2VzIHRoZSBoZWFkZXIgY29ycmVjdGx5LiBUaGUgc3B1cmlvdXMgY29ubmVjdGlvbiBhYm9ydHMgYXJlIGF2b2lkZWQgdGhpcyB3YXkuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyB0cmFjZSBpdCB0aHJvdWdoOiBgdGxzX3J4X21zZ19zaXplYCByZWFkcyBUQ1AgZGF0YSwgd2hpY2ggaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGRhdGEsIHNvIG5vIGlzc3VlcyB0aGVyZS4gVGhlIGBjYmAgZmllbGQgb2YgYHN0cnAtXHUwMDNlYW5jaG9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNrYl9jb3B5X2hlYWRlcmAsIG5vIHdvcnJpZXMgdGhlcmUuIEFuZCB0aGUgYHNrYi1cdTAwM2VkZWNyeXB0ZWRgIGZpZWxkIGlzIGFsc28gaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBieSBgdGxzX3N0cnBfcmVhZF9jb3B5YCBhcmUgZmlsbGVkIGJ5IGB0Y3BfcmVhZF9zb2NrYCwgYW5kIHNwZWNpZmljYWxseSwgYHNrYl9jb3B5X2JpdHNgLCBlbnN1cmVzIHRoYXQgdGhlIG9ubHkgZGF0YSBleHBvc2VkIGluIHRoZSBza2IgaXMgaW5pdGlhbGl6ZWQuIEV2ZW4gaWYgYHRjcF9yZWFkX3NvY2tgIGRvZXNuJ3QgZmlsbCB0aGUgd2hvbGUgcGFnZSwgYHNrYl9mcmFnX3NpemVfYWRkYCBvbmx5IHVwZGF0ZXMgdGhlIGxlbmd0aCB3aXRoIHRoZSB2YWxpZCwgY29waWVkIGRhdGEuXG5cbkhvbGQgb24sIGNvdWxkIGBza2JfY29weV9iaXRzYCByZWFkIHBhc3QgdGhlIGVuZCBvZiBhbiBza2IgYW5kIHRodXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgaGFzIGJ1aWx0LWluIGJvdW5kcyBjaGVja2luZzsgaWYgdGhlIHJlcXVlc3RlZCBkYXRhIGxlbmd0aCBpcyB1bmF2YWlsYWJsZSwgaXQgcmV0dXJucyBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9tc2dfc2l6ZWAgZG9lcyBpdHMgb3duIGxlbmd0aCBjaGVja3Mgd2l0aCBgaWYgKHN0cnAtXHUwMDNlc3RtLm9mZnNldCArIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplIFx1MDAzZSBza2ItXHUwMDNlbGVuKSByZXR1cm4gMDtgIGJlZm9yZSBjYWxsaW5nIGBza2JfY29weV9iaXRzYC4gU28sIG5vIG1lbW9yeSBpcyBiZWluZyByZWFkIHBhc3QgdGhlIGVuZC5cblxuQW5kIGB0bHNfc3RycF9jaGVja19xdWV1ZV9va2AgLSBjb3VsZCBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgY2hlY2sgaW52b2x2ZXMgYHJlbWFpbmluZ2AgdmFsdWVzIGJ1dCwgYXMgSSBjYW4gc2VlIGZyb20gdHJhY2luZywgdGhlIGByZW1haW5pbmdgIHZhbHVlcyBhcmUgYWx3YXlzIGNvcnJlY3RseSBjYWxjdWxhdGVkLiBBbmQsIGV2ZW4gaWYgYSBwcm9ibGVtYXRpYyB2YWx1ZSBvZiByZW1haW5pbmcgdmFsdWUgZXhpc3RlZCwgdGhlIGNvZGUgaXMgc3VjaCB0aGF0IGFueSByZWFkcyBpbiB0aGlzIHNpdHVhdGlvbiB3b3VsZCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBlcnJvciBhbmQsIHRoZXJlZm9yZSwgZ29vZC5cblxuU28sIHRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgZml4aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBJdCdzIHN0cmljdGx5IGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhhbmRsaW5nIGZyYWdtZW50ZWQgb3IgbWl4ZWQgZGVjcnlwdGlvbiBzdGF0ZXMgaW4gdGhlIFRDUCBzdHJlYW0uIFRoZSBidWcgaXMgdGhhdCBgdGxzX3J4X21zZ19zaXplYCB3YXMgY2FsbGVkIGJlZm9yZSBjaGVja2luZyB0aGUgcXVldWUgc3RhdGUuIFRoZSBmaXggY29ycmVjdHMgdGhpcy5cblxuT25lIG1vcmUgcXVpY2sgY2hlY2s6IHdoYXQgYWJvdXQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzPyBMZXQncyBzYXkgYHRsc19yeF9tc2dfc2l6ZWAgcmVwb3J0cyBhIGh1Z2Ugc2l6ZSBhbmQgYHRsc19zdHJwX3JlYWRfY29weWAgdHJpZXMgdG8gYWxsb2NhdGUgYSBodWdlIGFtb3VudCBvZiBtZW1vcnk/IFRoZSBtYXhpbXVtIHNpemUgYHN6YCByZXR1cm5lZCBieSBgdGxzX3J4X21zZ19zaXplYCBpcyBib3VuZCBieSBgVExTX01BWF9QQVlMT0FEX1NJWkUgKyBjaXBoZXJfb3ZlcmhlYWQgKyBwcm90LVx1MDAzZXRhaWxfc2l6ZSArIFRMU19IRUFERVJfU0laRWAsIHdoaWNoIGlzIGFyb3VuZCAxNktCLiBUaGF0IG1lYW5zIGEgbWF4aW11bSBvZiBhYm91dCA1IHBhZ2VzLiBUaGF0J3Mgbm90IGEgbG90LCBhbmQgdGhlcmUncyBhIGxpbWl0LlxuXG5XaGF0IGFib3V0IGB0bHNfc3RycF9yZWFkX2NvcHlgIGFsbG9jYXRpbmcgcGFnZXMsIGFuZCB0aGVuIG5vdCBpbml0aWFsaXppbmcgdGhlbT8gSXQgYWxsb2NhdGVzIHBhZ2VzIHdpdGhvdXQgYF9fR0ZQX1pFUk9gIGJ1dCB0aGVuIGNhbGxzIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAuIGB0bHNfc3RycF9yZWFkX2NvcHlpbmAgdXNlcyBgdGNwX3JlYWRfc29ja2Agd2hpY2ggY2FsbHMgYHRsc19zdHJwX2NvcHlpbmAsIGFuZCB0aGVuIGB0bHNfc3RycF9jb3B5aW5fZnJhZ2AsIHdoaWNoIGNhbGxzIGBza2JfY29weV9iaXRzYC4gQ3J1Y2lhbGx5LCBgc2tiX2NvcHlfYml0c2AgKm9ubHkqIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2tiIChgc2tiLVx1MDAzZWxlbmApIGFuZCB0aGUgZnJhZ21lbnQgc2l6ZSAoYHNrYl9mcmFnX3NpemVgKSB3aXRoIHRoZSBhbW91bnQgb2YgZGF0YSAqYWN0dWFsbHkqIGNvcGllZC4gVGhlIHNrYidzIGRhdGEgbGVuZ3RoICpvbmx5KiByZXByZXNlbnRzIHRoZSBpbml0aWFsaXplZCBkYXRhISBBbnkgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBwYWdlIGlzIG5vdCBleHBvc2VkIHRvIHRoZSBuZXR3b3JrIGNvZGUuXG5cbioqSW4gY29uY2x1c2lvbjogdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNhdXNlc1xuXG4iLCJJbnB1dFRva2VucyI6NDM0MzYsIk91dHB1dFRva2VucyI6MzAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjAyOjM2LjkyMzMxMjk1N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFRMUyBzdHJwYXJzZXIgd2hlcmUgYHRsc19yeF9tc2dfc2l6ZWAgY291bGQgYmUgY2FsbGVkIG9uIHRoZSByYXcgVENQIHJlY2VpdmUgcXVldWUgYmVmb3JlIHZlcmlmeWluZyB0aGF0IHRoZSBza2JzIGZvcm1pbmcgdGhlIFRMUyBoZWFkZXIgYXJlIGNvbnRpZ3VvdXMgaW4gc2VxdWVuY2Ugc3BhY2UgYW5kIGhhdmUgbWF0Y2hpbmcgZGVjcnlwdGVkIHN0YXR1cy4gSWYgdGhlIHJlY2VpdmUgcXVldWUgY29udGFpbmVkIG92ZXJsYXBwaW5nIFRDUCBzZWdtZW50cyBvciBzZWdtZW50cyB3aXRoIG1peGVkIGhhcmR3YXJlL3NvZnR3YXJlIGRlY3J5cHRlZCBzdGF0dXMsIGB0bHNfcnhfbXNnX3NpemVgIHdvdWxkIHJlYWQgYSBjb3JydXB0ZWQgaGVhZGVyIGFuZCBwb3RlbnRpYWxseSByZXR1cm4gYW4gZXJyb3IgKGxpa2UgYC1FQkFETVNHYCksIGNhdXNpbmcgYSBzcHVyaW91cyBjb25uZWN0aW9uIGFib3J0LlxcblxcbkJ5IGFkZGluZyBgdGxzX3N0cnBfY2hlY2tfcXVldWVfb2soc3RycCwgVExTX0hFQURFUl9TSVpFKWAgYmVmb3JlIHBhcnNpbmcgdGhlIGhlYWRlciwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBkZXRlY3RzIHRoZXNlIGVkZ2UgY2FzZXMgYW5kIGZhbGxzIGJhY2sgdG8gYHRsc19zdHJwX3JlYWRfY29weWAsIHdoaWNoIHVzZXMgYHRjcF9yZWFkX3NvY2tgIHRvIHByb3Blcmx5IHJlYXNzZW1ibGUgdGhlIFRDUCBzdHJlYW0gaW50byBhIGxpbmVhciBidWZmZXIgYmVmb3JlIHBhcnNpbmcuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBmdW5jdGlvbmFsIGJ1ZyBmaXguIFRoZSBkYXRhIHJlYWQgYnkgYHRsc19yeF9tc2dfc2l6ZWAgY29tZXMgZnJvbSBmdWxseSBpbml0aWFsaXplZCBuZXR3b3JrIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGlzIGFjY2Vzc2VkLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGZhbGxiYWNrIHBhdGggYXJlIG9ubHkgZXhwb3NlZCB1cCB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIHRoZSBuZXR3b3JrIHN0cmVhbSwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowx26vb[1] Phase: Succeeded StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 14:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 14:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2] Phase: Succeeded StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","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-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 14:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 14:02:48 +0000 UTC FinishedAt: 2026-08-13 14:02:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-workflowx26vb/series-workflowx26vb-convert-artifact-3807775707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 14:02:58 +0000 UTC FinishedAt: 2026-08-13 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 14:02:58 +0000 UTC FinishedAt: 2026-08-13 14:22:28 +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:*9aec34d5-f5c4-4c6f-b2c5-5cea0e96a751,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-workflowx26vb/series-workflowx26vb-convert-artifact-3807775707/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": "c037316a-347d-42ca-9245-1a5797fe0827", "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-workflowx26vb/series-workflowx26vb-build-action-685623577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:02:58 +0000 UTC FinishedAt: 2026-08-13 14:22:16 +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:*9aec34d5-f5c4-4c6f-b2c5-5cea0e96a751,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-workflowx26vb/series-workflowx26vb-convert-artifact-3807775707/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": "c037316a-347d-42ca-9245-1a5797fe0827", "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-workflowx26vb/series-workflowx26vb-build-action-685623577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 14:22:28 +0000 UTC FinishedAt: 2026-08-13 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 14:22:28 +0000 UTC FinishedAt: 2026-08-13 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 14:22:28 +0000 UTC FinishedAt: 2026-08-13 14:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 14:22:28 +0000 UTC FinishedAt: 2026-08-13 14:22:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","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-workflowx26vb/series-workflowx26vb-convert-artifact-393109298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 14:22:40 +0000 UTC FinishedAt: 2026-08-13 14:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 14:22:40 +0000 UTC FinishedAt: 2026-08-13 14:24:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c037316a-347d-42ca-9245-1a5797fe0827,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-workflowx26vb/series-workflowx26vb-build-action-685623577/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-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 14:24:36 +0000 UTC FinishedAt: 2026-08-13 14:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:24:36 +0000 UTC FinishedAt: 2026-08-13 14:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 14:24:36 +0000 UTC FinishedAt: 2026-08-13 14:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 14:24:36 +0000 UTC FinishedAt: 2026-08-13 14:43:53 +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:*9aec34d5-f5c4-4c6f-b2c5-5cea0e96a751,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-workflowx26vb/series-workflowx26vb-convert-artifact-393109298/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": "58090c0a-1c9c-4f77-87e7-4490249a7109", "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-workflowx26vb/series-workflowx26vb-build-action-1034637510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:24:36 +0000 UTC FinishedAt: 2026-08-13 14:43:43 +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:*9aec34d5-f5c4-4c6f-b2c5-5cea0e96a751,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-workflowx26vb/series-workflowx26vb-convert-artifact-393109298/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": "58090c0a-1c9c-4f77-87e7-4490249a7109", "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-workflowx26vb/series-workflowx26vb-build-action-1034637510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 14:43:53 +0000 UTC FinishedAt: 2026-08-13 14:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 14:43:53 +0000 UTC FinishedAt: 2026-08-13 14:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 14:43:53 +0000 UTC FinishedAt: 2026-08-13 14:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 14:43:53 +0000 UTC FinishedAt: 2026-08-13 14:45:50 +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:*58090c0a-1c9c-4f77-87e7-4490249a7109,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-workflowx26vb/series-workflowx26vb-build-action-1034637510/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-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"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:*c037316a-347d-42ca-9245-1a5797fe0827,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58090c0a-1c9c-4f77-87e7-4490249a7109,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-workflowx26vb/series-workflowx26vb-build-action-685623577/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-workflowx26vb/series-workflowx26vb-build-action-1034637510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 14:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 14:46:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"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-workflowx26vb/series-workflowx26vb-convert-artifact-3839369607/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 14:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 14:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:46:00 +0000 UTC FinishedAt: 2026-08-13 14:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 14:46:10 +0000 UTC FinishedAt: 2026-08-13 17:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx26vb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_strp_check_rcv","tls_sw_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"e0deb464-9865-4255-afb7-075e1eb09752","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 14:46:10 +0000 UTC FinishedAt: 2026-08-13 17:49:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c037316a-347d-42ca-9245-1a5797fe0827,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58090c0a-1c9c-4f77-87e7-4490249a7109,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-workflowx26vb/series-workflowx26vb-build-action-685623577/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-workflowx26vb/series-workflowx26vb-build-action-1034637510/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-workflowx26vb/series-workflowx26vb-convert-artifact-3839369607/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,}