Name: series-workflowdclp7 Phase: Succeeded StartedAt: 2026-07-30 14:41:21 +0000 UTC FinishedAt: 2026-07-30 15:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[0] Phase: Succeeded StartedAt: 2026-07-30 14:41:21 +0000 UTC FinishedAt: 2026-07-30 14:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 14:41:21 +0000 UTC FinishedAt: 2026-07-30 14:45:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78bc8af4affb9a732504eb22eeac7d1e50883853", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB_KUNIT_TEST", "KUNIT", "PERF_EVENTS", "KPROBES", "SMP", "SLUB_DEBUG", "KVFREE_RCU_BATCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78bc8af4affb9a732504eb22eeac7d1e50883853", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB_KUNIT_TEST", "KUNIT", "PERF_EVENTS", "KPROBES", "SMP", "SLUB_DEBUG", "KVFREE_RCU_BATCHED" ], "series_id": "6d1aad55-daea-4ccd-aa48-4bb7f4fe591d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "kfree_call_rcu_nolock", "kvfree_call_rcu", "__kfree_rcu_sheaf", "defer_kfree_rcu", "deferred_work_barrier", "kvfree_rcu_barrier", "kvfree_rcu_barrier_on_cache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUJfS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtLVU5JVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7LAogICAgJiMzNDtTTFVCX0RFQlVHJiMzNDssCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7LAogICAgJiMzNDtrdmZyZWVfY2FsbF9yY3UmIzM0OywKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7ZGVmZXJfa2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3dvcmtfYmFycmllciYjMzQ7LAogICAgJiMzNDtrdmZyZWVfcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2YmI3NTY1YThlY2Y0N2M5ZjUyMjU4ZjE2YzU0MDgxMmIzMzgzM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNDo0MzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhcbmluZGV4IDVlOTVhY2MzMzk4OWIuLmFlZGU3N2JkMDM4NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuQEAgLTEwOTgsMTkgJiM0MzsxMDk4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfbWlncmF0ZSh2b2lkKVxuIC8qXG4gICogSW4gbW0vc2xhYl9jb21tb24uYywgbm8gc3VpdGFibGUgaGVhZGVyIHRvIGluY2x1ZGUgaGVyZS5cbiAgKi9cbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4mIzQzO3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4mIzQzO3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4gXG4gLypcbiAgKiBUaGUgQlVJTERfQlVHX09OKCkgbWFrZXMgc3VyZSB0aGUgcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBoYW5kbGVkLiBTZWUgdGhlXG4gICogY29tbWVudCBvZiBrZnJlZV9yY3UoKSBmb3IgZGV0YWlscy5cbiAgKi9cbi0jZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCByaGYpXHRcdFx0XHRcdFxcXG4mIzQzOyNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIGt2cmhmKVx0XHRcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0dHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwgcmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbi1cdFx0a3ZmcmVlX2NhbGxfcmN1KFx1MDAyNigoX19fcCktXHUwMDNlcmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4mIzQzO1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbiYjNDM7XHRcdF9fX2hlYWQgPSAoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqKSBcdTAwMjYoX19fcCktXHUwMDNla3ZyaGY7XHRcXFxuJiM0MztcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0xMTIyLDYgJiM0MzsxMTI1LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXG4mIzQzOyAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbiYjNDM7ICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci5cbiYjNDM7ICpcbiYjNDM7ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuJiM0MzsgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4mIzQzOyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXHRcdFx0XHRcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoX19fcCkge1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXHUwMDNlPSA0MDk2KTtcdFx0XFxcbiYjNDM7XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuIC8qXG4gICogUGxhY2UgdGhpcyBhZnRlciBhIGxvY2stYWNxdWlzaXRpb24gcHJpbWl0aXZlIHRvIGd1YXJhbnRlZSB0aGF0XG4gICogYW4gVU5MT0NLJiM0MztMT0NLIHBhaXIgYWN0cyBhcyBhIGZ1bGwgYmFycmllci4gIFRoaXMgZ3VhcmFudGVlIGFwcGxpZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5pbmRleCBlMTkxNTAyNmUwMzA0Li5jZGExMjZkZWY2N2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5AQCAtMTQzMCwyNSAmIzQzOzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcbiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiBcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4te1xuLVx0cmN1X2JhcnJpZXIoKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi17XG4tXHRyY3VfYmFycmllcigpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuICNlbHNlXG4mIzQzO3ZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XG4gXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpO1xuIFxuLXZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuLSNlbmRpZlxuLVxuIC8qKlxuICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplXG4gICpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaFxuQEAgLTI1Nyw2ICYjNDM7MjU3LDE0IEBAIHN0cnVjdCBjYWxsYmFja19oZWFkIHtcbiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSk7XG4gI2RlZmluZSByY3VfaGVhZCBjYWxsYmFja19oZWFkXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG4mIzQzO3N0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKm5leHQ7XG4mIzQzO307XG4mIzQzOyNlbHNlXG4mIzQzOyNkZWZpbmUga3ZmcmVlX3JjdV9oZWFkIHJjdV9oZWFkXG4mIzQzOyNlbmRpZlxuJiM0MztcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiB0eXBlZGVmIHZvaWQgKCpjYWxsX3JjdV9mdW5jX3QpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuaW5kZXggNWZiZGFiZTNmYWVhZC4uYTc0MDI3MTI2YTJmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuQEAgLTYyNSw3ICYjNDM7NjI1LDcgQEAgVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2VfY2FsbGJhY2ssXG4gICovXG4gVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2Vfa3ZmcmVlX2NhbGxiYWNrLFxuIFxuLVx0VFBfUFJPVE8oY29uc3QgY2hhciAqcmN1bmFtZSwgc3RydWN0IHJjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcbiYjNDM7XHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcbiBcbiBcdFRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLFxuIFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmMgYi9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jXG5pbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2twcm9iZXMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0Oy4uL21tL3NsYWIuaFwmIzM0O1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XG5AQCAtMTYxLDcgJiM0MzsxNjIsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX3JlZHpvbmVfYWNjZXNzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB9XG4gXG4gc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIGt2cmN1O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2tmcmVlX3JjdShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMjkyLDE5ICYjNDM7Mjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGttZW1fY2FjaGVfZGVzdHJveShzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcbiAjZGVmaW5lIE5SX0lURVJBVElPTlMgMTAwMFxuICNkZWZpbmUgTlJfT0JKRUNUUyAxMDAwXG4tc3RhdGljIHZvaWQgKm9iamVjdHNbTlJfT0JKRUNUU107XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdO1xuIFxuIHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IHtcbiBcdHN0cnVjdCBrdW5pdCAqdGVzdDtcbiBcdGludCBjYWxsYmFja19jb3VudDtcbiBcdGludCBhbGxvY19vaztcbiBcdGludCBhbGxvY19mYWlsO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7XHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XHRib29sIGNhbl91c2Vfa2ZyZWVfcmN1ID0gIUlTX0JVSUxUSU4oQ09ORklHX1NMVUJfS1VOSVRfVEVTVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRnZnBfdCBnZnAgPSAoaSBcdTAwMjYgMSkgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xuJiM0MztcbiYjNDM7XHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xuJiM0MztcdFx0XHRpZiAoIW9iamVjdHNbal0pIHtcbiYjNDM7XHRcdFx0XHRqLS07XG4mIzQzO1x0XHRcdFx0d2hpbGUgKGogXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWUob2JqZWN0c1tqLS1dKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiAyKSlcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3Uob2JqZWN0c1tqXSwgcmN1KTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7XG4mIzQzO1x0Z2ZwX3QgZ2ZwO1xuJiM0MztcdGJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTtcbiYjNDM7XG4mIzQzO1x0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4mIzQzO1x0Z2ZwID0gKGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCBcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcbiYjNDM7XHRvYmpwID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKCpvYmpwKSwgZ2ZwLCBOVU1BX05PX05PREUpO1xuJiM0MztcbiYjNDM7XHRpZiAob2JqcClcbiYjNDM7XHRcdGN0eC1cdTAwM2VhbGxvY19vayYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y3R4LVx1MDAzZWFsbG9jX2ZhaWwmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQgXHUwMDI2IDIpKVxuJiM0MztcdFx0a2ZyZWVfcmN1X25vbG9jayhvYmpwLCBrdnJjdSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a2ZyZWVfbm9sb2NrKG9ianApO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQmIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbiBcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG5AQCAtMzE1LDY3ICYjNDM7Mzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQuc2FtcGxlX2ZyZXEgPSAxMDAwMDAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3N0YXRpYyB2b2lkIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHZvaWQgKm9ianA7XG4tXHRnZnBfdCBnZnA7XG4gXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xuIFxuLVx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4tXHRnZnAgPSAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcbi1cdG9ianAgPSBrbWFsbG9jX25vbG9jayg2NCwgZ2ZwLCBOVU1BX05PX05PREUpO1xuLVxuLVx0aWYgKG9ianApXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19vayYjNDM7JiM0Mzs7XG4tXHRlbHNlXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19mYWlsJiM0MzsmIzQzOztcbi1cbi1cdGtmcmVlX25vbG9jayhvYmpwKTtcbi1cdGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0dGVzdF9ub2xvY2soY3R4KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3N0YXRpYyBib29sIGVuYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuIHtcbi1cdGludCBpLCBqO1xuLVx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbi1cdGJvb2wgYWxsb2NfZmFpbCA9IGZhbHNlO1xuIFxuIFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcdTAwMjZod19hdHRyLCAtMSwgY3VycmVudCxcbi1cdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrLFxuLVx0XHRcdFx0XHRcdCBcdTAwMjZjdHgpO1xuJiM0MztcdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0IGN0eCk7XG4mIzQzO1xuIFx0aWYgKElTX0VSUihldmVudCkpXG4tXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwZXJmIGV2ZW50XCYjMzQ7KTtcbi1cdGN0eC5ldmVudCA9IGV2ZW50O1xuLVx0cGVyZl9ldmVudF9lbmFibGUoY3R4LmV2ZW50KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z2ZwX3QgZ2ZwID0gKGkgJSAyKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XG4tXHRcdFx0aWYgKCFvYmplY3RzW2pdKSB7XG4tXHRcdFx0XHRqLS07XG4tXHRcdFx0XHR3aGlsZSAoaiBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdGtmcmVlKG9iamVjdHNbai0tXSk7XG4tXHRcdFx0XHRhbGxvY19mYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfT0JKRUNUUzsgaiYjNDM7JiM0MzspXG4tXHRcdFx0a2ZyZWUob2JqZWN0c1tqXSk7XG4tXHR9XG4mIzQzO1x0Y3R4LVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4mIzQzO1x0cGVyZl9ldmVudF9lbmFibGUoY3R4LVx1MDAzZWV2ZW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0a3VuaXRfaW5mbyhjdHgtXHUwMDNldGVzdCwgXCYjMzQ7SFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4mIzQzO1xuJiM0MztcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuJiM0MztcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LVx1MDAzZWV2ZW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXG4tY2xlYW51cDpcbi1cdHBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpO1xuLVx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHguZXZlbnQpO1xuJiM0MztcdGlmICghZW5hYmxlX3BlcmZfZXZlbnRzKFx1MDAyNmN0eCkpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcJiMzNDspO1xuIFxuLVx0a3VuaXRfaW5mbyh0ZXN0LCBcJiMzNDtjYWxsYmFja19jb3VudDogJWQsIGFsbG9jX29rOiAlZCwgYWxsb2NfZmFpbDogJWRcXG5cJiMzNDssXG4tXHRcdCAgIGN0eC5jYWxsYmFja19jb3VudCwgY3R4LmFsbG9jX29rLCBjdHguYWxsb2NfZmFpbCk7XG4mIzQzO1x0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XG4gXG4tXHRpZiAoYWxsb2NfZmFpbClcbi1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtBbGxvY2F0aW9uIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0ZGlzYWJsZV9wZXJmX2V2ZW50cyhcdTAwMjZjdHgpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLCBzbGFiX2Vycm9ycyk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7c3RhdGljIGludCBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHg7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCwga3Byb2JlKTtcbiYjNDM7XHR0ZXN0X25vbG9jayhjdHgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCByZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGN0eC1cdTAwM2VrcHJvYmUuc3ltYm9sX25hbWUgPSBcJiMzNDtzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkXCYjMzQ7O1xuJiM0MztcdGN0eC1cdTAwM2VrcHJvYmUucHJlX2hhbmRsZXIgPSBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ2lzdGVyX2twcm9iZShcdTAwMjZjdHgtXHUwMDNla3Byb2JlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGt1bml0X2luZm8oY3R4LVx1MDAzZXRlc3QsIFwmIzM0O2twcm9iZXM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9rcHJvYmUoXHUwMDI2Y3R4LVx1MDAzZWtwcm9iZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4mIzQzO1xuJiM0MztcdGlmICghcmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCkpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBrcHJvYmUsIHNraXBwaW5nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuIH1cbiAjZW5kaWZcbkBAIC00MDUsNyAmIzQzOzQ5MCwxMCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2xlYWtfZGVzdHJveSksXG4gXHRLVU5JVF9DQVNFKHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKSxcbiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4tXHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayksXG4mIzQzO1x0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZiksXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7XHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19rcHJvYmUpLFxuICNlbmRpZlxuIFx0e31cbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxuaW5kZXggZTAxYzEwMTViOGM4ZC4uOGZkNjgzNWU0MjM1MiAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYi5oXG5AQCAtMjQsMTEgJiM0MzsyNCwyNyBAQFxuICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xuICNkZWZpbmUgU0xBQl9BTExPQ19OT19PQkpfRVhUXHQweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqL1xuIFxuJiM0MzsjZGVmaW5lIFNMQUJfRlJFRV9ERUZBVUxUXHQweDAwIC8qIG5vIGZsYWdzICovXG4mIzQzOyNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1x0MHgwMSAvKiBzcGlubmluZyBub3QgYWxsb3dlZCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdG9fYWxsb2NfZmxhZ3ModW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcbiYjNDM7XHRcdHJldHVybiBTTEFCX0FMTE9DX05PTE9DSztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0cmV0dXJuICEoYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTk9MT0NLKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuIFx0XHRcdFx0ICBfX2Fzc3VtZV9rbWFsbG9jX2FsaWdubWVudCBfX2FsbG9jX3NpemUoMSk7XG5AQCAtMzMxLDYgJiM0MzszNDcsMzcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX3RvX2luZGV4KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbiBcdHJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICoga3ZmcmVlX3JjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplLlxuJiM0MzsgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprdm1hbGxvY19vYmpfc3RhcnRfYWRkcih2b2lkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIoaGVhZCkpKSB7XG4mIzQzO1x0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIoaGVhZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzbGFiKSB7XG4mIzQzO1x0XHRcdG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkge1xuJiM0MztcdFx0XHRvZmZzZXQgPSBoZWFkIC0ga2ZlbmNlX29iamVjdF9zdGFydChoZWFkKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgaWR4ID0gX19vYmpfdG9faW5kZXgocywgc2xhYl9hZGRyZXNzKHNsYWIpLCBoZWFkKTtcbiYjNDM7XHRcdFx0dm9pZCAqb2JqID0gc2xhYl9hZGRyZXNzKHNsYWIpICYjNDM7IHMtXHUwMDNlc2l6ZSAqIGlkeDtcbiYjNDM7XG4mIzQzO1x0XHRcdG9iaiA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9iaik7XG4mIzQzO1x0XHRcdG9iaiA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuJiM0MztcdFx0XHRvZmZzZXQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCkgLSBvYmo7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaGVhZCAtIG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cbiAgKlxuQEAgLTQzMSw3ICYjNDM7NDc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0cmV0dXJuICEocy1cdTAwM2VmbGFncyBcdTAwMjYgKFNMQUJfQ0FDSEVfRE1BfFNMQUJfQUNDT1VOVHxTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX05PX09CSl9FWFQpKTtcbiB9XG4gXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKTtcbiYjNDM7Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG4gdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gXG5AQCAtODk5LDcgJiM0Mzs5NDYsOCBAQCB2b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxuIHZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbiBcdFx0XHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcik7XG4gXG4tdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZCk7XG4mIzQzO3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpO1xuJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2x1Yl9kZWJ1Z19vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAxZTFkM2ZlZWMzNTM1Li5iOGYyMWVhYmNjY2MyIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgdm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHR9XG4gXG4gXHQvKiBXYWl0IGZvciBkZWZlcnJlZCB3b3JrIGZyb20ga21hbGxvYy9rZnJlZV9ub2xvY2soKSAqL1xuLVx0ZGVmZXJfZnJlZV9iYXJyaWVyKCk7XG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4gXG4gXHRjcHVzX3JlYWRfbG9jaygpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbGFiX211dGV4KTtcbkBAIC0xMjk2LDYgJiM0MzsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTtcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xuIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xuIFxuJiM0Mzt2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQpKVxuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihwdHIpKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdHNsYWIgPSB2aXJ0X3RvX3NsYWIocHRyKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXNsYWIpKVxuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2ZhbGxiYWNrOlxuJiM0MztcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xuJiM0MztcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbiBcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbkBAIC0xMzEzLDYgJiM0MzsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xuIFxuJiM0Mzt2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1x0cmN1X2JhcnJpZXIoKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4mIzQzO3tcbiYjNDM7XHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcbiYjNDM7XHRyY3VfYmFycmllcigpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG4mIzQzO1xuIHZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxuIHtcbiB9XG5AQCAtMTM3OSw3ICYjNDM7MTQyMCw3IEBAIHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSB7XG4gXG4gc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XG4gXHRzdHJ1Y3QgcmN1X3dvcmsgcmN1X3dvcms7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfZnJlZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX2ZyZWU7XG4gXHRzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZnJlZV9ncF9zbmFwO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRfZnJlZVtGUkVFX05fQ0hBTk5FTFNdO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7XG5AQCAtMTQxNSw3ICYjNDM7MTQ1Niw3IEBAIHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsge1xuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcbiBcdC8vIE9iamVjdHMgcXVldWVkIG9uIGEgbGlua2VkIGxpc3RcbiBcdC8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy5cbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkO1xuIFx0dW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7XG4gXHRhdG9taWNfdCBoZWFkX2NvdW50O1xuIFxuQEAgLTE1NTYsMTIgJiM0MzsxNTk3LDEyIEBAIGt2ZnJlZV9yY3VfYnVsayhzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCxcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1rdmZyZWVfcmN1X2xpc3Qoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0MztrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcbiBcbiBcdGZvciAoOyBoZWFkOyBoZWFkID0gbmV4dCkge1xuLVx0XHR2b2lkICpwdHIgPSAodm9pZCAqKSBoZWFkLVx1MDAzZWZ1bmM7XG4mIzQzO1x0XHR2b2lkICpwdHIgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSAodm9pZCAqKSBoZWFkIC0gcHRyO1xuIFxuIFx0XHRuZXh0ID0gaGVhZC1cdTAwM2VuZXh0O1xuQEAgLTE1ODUsNyAmIzQzOzE2MjYsNyBAQCBzdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZFtGUkVFX05fQ0hBTk5FTFNdO1xuLVx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7XG4gXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsgKmtyd3A7XG4gXHRzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZ3Bfc25hcDtcbkBAIC0xNjI4LDYgJiM0MzsxNjY5LDE0IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbiYjNDM7XHQgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTYzOCw3ICYjNDM7MTY4Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4gXG4gXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuIFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG4tXHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmopO1xuJiM0MztcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE3MDgsNyAmIzQzOzE3NTcsNyBAQCBrdmZyZWVfcmN1X2RyYWluX3JlYWR5KHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwKVxuIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYnVsa19yZWFkeVtGUkVFX05fQ0hBTk5FTFNdO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuIFxuQEAgLTE5NzEsNyAmIzQzOzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcbiAgKiBiZSBmcmVlJiMzOTtkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG9cbiAgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIGR1cmluZyBoZWF2eSBrZnJlZV9yY3UoKS9rdmZyZWVfcmN1KCkgbG9hZC5cbiAgKi9cbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiYjNDM7dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcbkBAIC0xOTg3LDcgJiM0MzsyMDM2LDcgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gXHRpZiAoIWhlYWQpXG4gXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiYjNDM7XHRpZiAoa2ZyZWVfcmN1X3NoZWFmKHB0cikpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8vIFF1ZXVlIHRoZSBvYmplY3QgYnV0IGRvbiYjMzk7dCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxuQEAgLTIwMDksNyAmIzQzOzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdFx0XHQvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLlxuIFx0XHRcdGdvdG8gdW5sb2NrX3JldHVybjtcbiBcbi1cdFx0aGVhZC1cdTAwM2VmdW5jID0gcHRyO1xuIFx0XHRoZWFkLVx1MDAzZW5leHQgPSBrcmNwLVx1MDAzZWhlYWQ7XG4gXHRcdFdSSVRFX09OQ0Uoa3JjcC1cdTAwM2VoZWFkLCBoZWFkKTtcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZrcmNwLVx1MDAzZWhlYWRfY291bnQpO1xuQEAgLTIxNDIsMTcgJiM0MzsyMTkwLDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XG4gICovXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuJiM0MztcdC8qIGtmcmVlX3JjdV9ub2xvY2soKSBtaWdodCBoYXZlIGRlZmVycmVkIGZyZWVzIGV2ZW4gd2l0aG91dCBzaGVhdmVzICovXG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1xuIFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XG4gXHRcdGNwdXNfcmVhZF9sb2NrKCk7XG4gXHRcdGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpO1xuIFx0XHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJjdV9iYXJyaWVyKCk7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVE9ETzogSW50cm9kdWNlIGEgdmVyc2lvbiBvZiBfX2t2ZnJlZV9yY3VfYmFycmllcigpIHRoYXQgd29ya3Ncbi1cdCAqIG9uIGEgc3BlY2lmaWMgc2xhYiBjYWNoZS5cbi1cdCAqL1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4gXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYWRlMTdmODRlNTgzMi4uYmEyZjIwODI2MmJmNiAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtNDI0LDYgJiM0Mzs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7XG4mIzQzO1x0XHQvKiBvbmx5IHVzZWQgdG8gZGVmZXIgY2FsbF9yY3UoKSBpbiB1bmtub3duIGNvbnRleHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcbiBcdFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0dW5zaWduZWQgaW50IGNhcGFjaXR5O1xuQEAgLTkwNiw2ICYjNDM7OTA4LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIG5vLW9wIGZ1bmN0aW9uIHVzZWQgdG8gYXR0YWNoIGtwcm9iZSBoYW5kbGVycyBpbiBzbHViX2t1bml0IHRlc3RzLlxuJiM0MzsgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIG91dCBjYWxsc2l0ZXMuXG4mIzQzOyAqL1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfVk0pIHx8IGRlZmluZWQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGJhcnJpZXIoKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChsb2NrKSBkbyB7XHRcXFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XHRcdFxcXG4mIzQzO1x0c2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCgpO1x0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG4gXG4gLypcbkBAIC0xNjYzLDcgJiM0MzsxNjgzLDcgQEAgc3RhdGljIHZvaWQgYWRkX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIFx1MDAyNm4tXHUwMDNlZnVsbCk7XG4gfVxuIFxuQEAgLTE2NzIsNyAmIzQzOzE2OTIsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0XG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QpO1xuIH1cbiBcbkBAIC0yODE2LDcgJiM0MzsyODM2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYWxsb2NfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdC8qXG4gXHQgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0c1xuQEAgLTI4MjgsMTEgJiM0MzsyODQ5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbiBcdFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uoc2hlYWYtXHUwMDNlc2l6ZSBcdTAwM2UgMCk7XG4tXHRrZnJlZShzaGVhZik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcbiYjNDM7XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a2ZyZWUoc2hlYWYpO1xuIFxuIFx0c3RhdChzLCBTSEVBRl9GUkVFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbiYjNDM7e1xuJiM0MztcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnRcbiByZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbiBcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbkBAIC0yODg1LDcgJiM0MzsyOTE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHR2b2lkICpvYmplY3RzW1BDU19CQVRDSF9NQVhdO1xuIFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmO1xuIFxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiBcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcdHNoZWFmID0gcGNzLVx1MDAzZW1haW47XG5AQCAtMzU3MCw3ICYjNDM7MzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdF9fYWRkX3BhcnRpYWwobiwgc2xhYiwgbW9kZSk7XG4gfVxuIFxuQEAgLTM1ODQsNyAmIzQzOzM2MTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gXHRcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuQEAgLTM2MDAsNyAmIzQzOzM2MzAsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiB7XG4gXHR2b2lkICpvYmplY3Q7XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XG5AQCAtNDA2OSw2ICYjNDM7NDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsge1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgcmN1X3NoZWF2ZXM7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0ge1xuJiM0MztcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuJiM0MztcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4mIzQzO1x0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiYjNDM7XHQud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5AQCAtNDEyOCw2ICYjNDM7NDE3NCw4IEBAIHZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXG4ge1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1xuIFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c2xhYl9tdXRleCk7XG4gXG5AQCAtNDY2NSw3ICYjNDM7NDcxMyw3IEBAIF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG4gXHRib29sIGFsbG93X3NwaW47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xuIFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC01NzgzLDcgJiM0Mzs1ODMxLDcgQEAgc3RhdGljIHZvaWQgX19wY3NfaW5zdGFsbF9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcywgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LFxuIFx0XHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHQvKiBUaGlzIGlzIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgaWYgbm9ib2R5IGludGVycnVwdGVkIHVzLiAqL1xuIFx0aWYgKGxpa2VseSghcGNzLVx1MDAzZXNwYXJlKSkge1xuQEAgLTU4MzQsNyAmIzQzOzU4ODIsNyBAQCBfX3Bjc19yZXBsYWNlX2Z1bGxfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdGJvb2wgcHV0X2ZhaWw7XG4gXG4gcmVzdGFydDpcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG4gXHRpZiAodW5saWtlbHkoIWNhY2hlX2hhc19zaGVhdmVzKHMpKSkge1xuQEAgLTYwMzUsMjQgJiM0Mzs2MDgzLDI2IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcbiAgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbiAgKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xuLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC5cbiYjNDM7ICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4gICogc3Bpbm5pbmcgbG9jay4gVGVsbCBsb2NrZGVwIHRoYXQgYWNxdWlyaW5nIHNwaW5sb2NrX3QgaXMgdmFsaWQgaGVyZVxuLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy5cbiYjNDM7ICogYnkgdGVtcG9yYXJpbHkgcmFpc2luZyB0aGUgd2FpdC10eXBlIHRvIExEX1dBSVRfQ09ORklHLiBTa2lwIHRoZSBsb2NrZGVwIG1hcFxuJiM0MzsgKiBvbiBQUkVFTVBUX1JUIHRvIGF2b2lkIHN1cHByZXNzaW5nIHZhbGlkIGxvY2tkZXAgd2FybmluZ3MuXG4gICovXG4gc3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG4gXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuJiM0Mztib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmO1xuJiM0MztcdGJvb2wgYWxsb3dfc3BpbiA9IGZyZWVfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZnJlZV9mbGFncyk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYgYWxsb3dfc3Bpbik7XG4gXG4tXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuJiM0MztcdFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXG4gXHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbiBcdFx0Z290byBmYWlsO1xuQEAgLTYwNjAsOSAmIzQzOzYxMTAsMTAgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwY3MtXHUwMDNlcmN1X2ZyZWUpKSB7XG4tXG4gXHRcdHN0cnVjdCBzbGFiX3NoZWFmICplbXB0eTtcbiBcdFx0c3RydWN0IG5vZGVfYmFybiAqYmFybjtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwID0gYWxsb3dfc3BpbiA/IEdGUF9OT1dBSVQgOiBfX0dGUF9OT1dBUk47XG4gXG4gXHRcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovXG4gXHRcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5AQCAtNjA4Miw3ICYjNDM7NjEzMyw3IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbi1cdFx0ZW1wdHkgPSBiYXJuX2dldF9lbXB0eV9zaGVhZihiYXJuLCB0cnVlKTtcbiYjNDM7XHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7XG4gXG4gXHRcdGlmIChlbXB0eSkge1xuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuQEAgLTYwOTEsMjAgJiM0Mzs2MTQyLDIwIEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcbiBcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTtcbiYjNDM7XHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XG4gXG4gXHRcdGlmICghZW1wdHkpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuIFx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSkge1xuLVx0XHRcdGJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTtcbiYjNDM7XHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbiBcdFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocGNzLVx1MDAzZXJjdV9mcmVlKSlcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4mIzQzO1x0XHRcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRwY3MtXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcbiBcdH1cbkBAIC02MTMwLDE4ICYjNDM7NjE4MSwzNCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4gXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xuIFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24mIzM5O3QgbWlzcyB0aGlzIHNoZWFmXG4gXHQgKi9cbi1cdGlmIChyY3Vfc2hlYWYpXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuJiM0MztcdGlmIChyY3Vfc2hlYWYpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCkmIzM5O3NcbiYjNDM7XHRcdCAqIElSUS1kaXNhYmxlZCBjcml0aWNhbCBzZWN0aW9uLiBJZiBJUlFzIGFyZSBub3QgZGlzYWJsZWQsXG4mIzQzO1x0XHQgKiB3ZSBrbm93IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1xuJiM0MztcdFx0XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VyY3Vfc2hlYXZlcykpXG4mIzQzO1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y2FsbF9yY3UoXHUwMDI2cmN1X3NoZWFmLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4gXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiBcbiBmYWlsOlxuIFx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRl9GQUlMKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuQEAgLTYzMzAsMzEgJiM0Mzs2Mzk3LDIyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGRlZmVyX2ZyZWUge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcbi1cdHN0cnVjdCBpcnFfd29yayB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4tXG4tc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcl9mcmVlLCBkZWZlcl9mcmVlX29iamVjdHMpID0ge1xuLVx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXG4tXHQud29yayA9IElSUV9XT1JLX0lOSVQoZnJlZV9kZWZlcnJlZF9vYmplY3RzKSxcbi19O1xuLVxuIC8qXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQmIzM5O3Mgc2FmZVxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXG4gICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuLVx0c3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpvYmpzID0gXHUwMDI2ZGYtXHUwMDNlb2JqZWN0cztcbiYjNDM7XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiYjNDM7XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xuIFxuLVx0aWYgKGxsaXN0X2VtcHR5KG9ianMpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0ZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7XG4mIzQzO1x0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4mIzQzO1x0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuJiM0MztcdG9ianNfYnlfcmN1ID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1O1xuIFxuIFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbkBAIC02Mzc4LDI3ICYjNDM7NjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xuIFx0XHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHR2b2lkICpoZWFkID0gcG9zO1xuJiM0MztcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuJiM0MztcbiYjNDM7XHRcdGt2ZnJlZV9jYWxsX3JjdShoZWFkLCBvYmpwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxuJiM0MztcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4gXG4gXHRndWFyZChwcmVlbXB0KSgpO1xuIFxuIFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcbiBcbi1cdGRmID0gdGhpc19jcHVfcHRyKFx1MDAyNmRlZmVyX2ZyZWVfb2JqZWN0cyk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgJiM0Mzsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRmLVx1MDAzZW9iamVjdHMpKVxuLVx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkZi1cdTAwM2V3b3JrKTtcbiYjNDM7XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdGlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLVx1MDAzZW9mZnNldCwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHByZWVtcHQpKCk7XG4mIzQzO1xuJiM0MztcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3UpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuIH1cbiBcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xuJiM0Mzt2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKVxuIHtcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuLVx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNmRlZmVyX2ZyZWVfb2JqZWN0cywgY3B1KS1cdTAwM2V3b3JrKTtcbiYjNDM7XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmssIGNwdSktXHUwMDNld29yayk7XG4gfVxuIFxuIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxuQEAgLTY2NTcsNDMgJiM0Mzs2NzM5LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuICAqL1xuIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0dm9pZCAqb2JqID0gaGVhZDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbi1cdHZvaWQgKnNsYWJfYWRkcjtcbiYjNDM7XHR2b2lkICpvYmo7XG4mIzQzO1xuJiM0MztcdG9iaiA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKSB7XG4tXHRcdG9iaiA9ICh2b2lkICopIFBBR0VfQUxJR05fRE9XTigodW5zaWduZWQgbG9uZylvYmopO1xuIFx0XHR2ZnJlZShvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4tXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0aWYgKCFzbGFiKSB7XG4tXHRcdC8qXG4tXHRcdCAqIHJjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplIHNvIG5vIG5lZWQgdG9cbi1cdFx0ICogY29uc2lkZXIgYWxsb2NhdGlvbiBvcmRlclxuLVx0XHQgKi9cbi1cdFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuLVx0c2xhYl9hZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLVxuLVx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbi1cdFx0b2JqID0ga2ZlbmNlX29iamVjdF9zdGFydChvYmopO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcbi1cdFx0b2JqID0gc2xhYl9hZGRyICYjNDM7IHMtXHUwMDNlc2l6ZSAqIGlkeDtcbi1cdFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcbiYjNDM7XHRcdGlmIChzbGFiKVxuJiM0MztcdFx0XHRzbGFiX2ZyZWUoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XG4gXHR9XG4tXG4tXHRzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7S1VOSVQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U0xVQl9ERUJVRyYjMzQ7LAogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAgICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDssCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF93b3JrX2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O2t2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmJiNzU2NWE4ZWNmNDdjOWY1MjI1OGYxNmM1NDA4MTJiMzM4MzNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTQ6NDM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNWU5NWFjYzMzOTg5Yi4uYWVkZTc3YmQwMzg3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtMTA5OCwxOSAmIzQzOzEwOTgsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpCiAvKgogICogSW4gbW0vc2xhYl9jb21tb24uYywgbm8gc3VpdGFibGUgaGVhZGVyIHRvIGluY2x1ZGUgaGVyZS4KICAqLwotdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpOwomIzQzO3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7CiYjNDM7dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTsKIAogLyoKICAqIFRoZSBCVUlMRF9CVUdfT04oKSBtYWtlcyBzdXJlIHRoZSByY3VfaGVhZCBvZmZzZXQgY2FuIGJlIGhhbmRsZWQuIFNlZSB0aGUKICAqIGNvbW1lbnQgb2Yga2ZyZWVfcmN1KCkgZm9yIGRldGFpbHMuCiAgKi8KLSNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIHJoZikJCQkJCVwKJiM0MzsjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZikJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJdHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTsJCQkJCVwKJiM0MzsJc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqX19faGVhZDsJCQkJXAogCQkJCQkJCQkJXAogCWlmIChfX19wKSB7CQkJCQkJCVwKLQkJQlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCByaGYpICZndDs9IDQwOTYpOwlcCi0JCWt2ZnJlZV9jYWxsX3JjdSgmYW1wOygoX19fcCktJmd0O3JoZiksICh2b2lkICopIChfX19wKSk7CVwKJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpICZndDs9IDQwOTYpOwlcCiYjNDM7CQlfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgJmFtcDsoX19fcCktJmd0O2t2cmhmOwlcCiYjNDM7CQlrdmZyZWVfY2FsbF9yY3UoX19faGVhZCwgKHZvaWQgKikgKF9fX3ApKTsJCVwKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0xMTIyLDYgJiM0MzsxMTI1LDI3IEBAIGRvIHsJCQkJCQkJCVwKIAkJa3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7CQlcCiB9IHdoaWxlICgwKQogCiYjNDM7LyoqCiYjNDM7ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC4KJiM0MzsgKiBAcHRyOiBwb2ludGVyIHRvIGtmcmVlIGZvciBkb3VibGUtYXJndW1lbnQgaW52b2NhdGlvbnMuCiYjNDM7ICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci4KJiM0MzsgKgomIzQzOyAqIFdpdGggS1ZGUkVFX1JDVV9CQVRDSEVELCBrZnJlZV9yY3Vfbm9sb2NrKCkgdHJpZXMgaGFyZCB0byBmcmVlIG9iamVjdHMKJiM0MzsgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuCiYjNDM7ICogTGFyZ2Uga21hbGxvYyBhbmQgdm1hbGxvYyBvYmplY3RzIGFyZSBhbHdheXMgZGVmZXJyZWQuCiYjNDM7ICoKJiM0MzsgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUga2ZyZWVfcmN1X25vbG9jayhwdHIsIGt2cmhmKQkJCQkJCVwKJiM0MztkbyB7CQkJCQkJCQkJCVwKJiM0MzsJdHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCVwKJiM0MzsJaWYgKF9fX3ApIHsJCQkJCQkJCVwKJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpICZndDs9IDQwOTYpOwkJXAomIzQzOwkJa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKCZhbXA7KChfX19wKS0mZ3Q7a3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpOwlcCiYjNDM7CX0JCQkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKIC8qCiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXQKICAqIGFuIFVOTE9DSyYjNDM7TE9DSyBwYWlyIGFjdHMgYXMgYSBmdWxsIGJhcnJpZXIuICBUaGlzIGd1YXJhbnRlZSBhcHBsaWVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IGUxOTE1MDI2ZTAzMDQuLmNkYTEyNmRlZjY3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0xNDMwLDI1ICYjNDM7MTQzMCwxNSBAQCBleHRlcm4gdm9pZCBrdmZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOwogdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7CiAKICNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRAotc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKQotewotCXJjdV9iYXJyaWVyKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpCi17Ci0JcmN1X2JhcnJpZXIoKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKSB7IH0KICNlbHNlCiYjNDM7dm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKTsKIAogdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpOwogCi12b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKTsKLSNlbmRpZgotCiAvKioKICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTI1Nyw2ICYjNDM7MjU3LDE0IEBAIHN0cnVjdCBjYWxsYmFja19oZWFkIHsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTsKICNkZWZpbmUgcmN1X2hlYWQgY2FsbGJhY2tfaGVhZAogCiYjNDM7I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQKJiM0MztzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHsKJiM0MzsJc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDsKJiM0Mzt9OwomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWQKJiM0MzsjZW5kaWYKJiM0MzsKIHR5cGVkZWYgdm9pZCAoKnJjdV9jYWxsYmFja190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpOwogdHlwZWRlZiB2b2lkICgqY2FsbF9yY3VfZnVuY190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCmluZGV4IDVmYmRhYmUzZmFlYWQuLmE3NDAyNzEyNmEyZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCkBAIC02MjUsNyAmIzQzOzYyNSw3IEBAIFRSQUNFX0VWRU5UX1JDVShyY3VfaW52b2tlX2NhbGxiYWNrLAogICovCiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssCiAKLQlUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLAomIzQzOwlUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSwKIAogCVRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLAogCmRpZmYgLS1naXQgYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jIGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuYwppbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NAotLS0gYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2twcm9iZXMuaCZndDsKICNpbmNsdWRlICYjMzQ7Li4vbW0vc2xhYi5oJiMzNDsKIAogc3RhdGljIHN0cnVjdCBrdW5pdF9yZXNvdXJjZSByZXNvdXJjZTsKQEAgLTE2MSw3ICYjNDM7MTYyLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19yZWR6b25lX2FjY2VzcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiB9CiAKIHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgewotCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CQlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIGt2cmN1OwomIzQzOwl9OwogfTsKIAogc3RhdGljIHZvaWQgdGVzdF9rZnJlZV9yY3Uoc3RydWN0IGt1bml0ICp0ZXN0KQpAQCAtMjkyLDE5ICYjNDM7Mjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1NNUCkpCiAjZGVmaW5lIE5SX0lURVJBVElPTlMgMTAwMAogI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDAKLXN0YXRpYyB2b2lkICpvYmplY3RzW05SX09CSkVDVFNdOwomIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdOwogCiBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCB7CiAJc3RydWN0IGt1bml0ICp0ZXN0OwogCWludCBjYWxsYmFja19jb3VudDsKIAlpbnQgYWxsb2Nfb2s7CiAJaW50IGFsbG9jX2ZhaWw7CiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsjZW5kaWYKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19TTVApCiYjNDM7CXN0cnVjdCBrcHJvYmUga3Byb2JlOwomIzQzOyNlbmRpZgogfTsKIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcyh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGksIGo7CiYjNDM7CWJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgTlJfT0JKRUNUUzsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlnZnBfdCBnZnAgPSAoaSAmYW1wOyAxKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7CiYjNDM7CiYjNDM7CQkJb2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApOwomIzQzOwkJCWlmICghb2JqZWN0c1tqXSkgewomIzQzOwkJCQlqLS07CiYjNDM7CQkJCXdoaWxlIChqICZndDs9IDApCiYjNDM7CQkJCQlrZnJlZShvYmplY3RzW2otLV0pOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGNhbl91c2Vfa2ZyZWVfcmN1ICZhbXA7JmFtcDsgKGkgJmFtcDsgMikpCiYjNDM7CQkJCWtmcmVlX3JjdShvYmplY3RzW2pdLCByY3UpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJa2ZyZWUob2JqZWN0c1tqXSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7CiYjNDM7CWdmcF90IGdmcDsKJiM0MzsJYm9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpOwomIzQzOwomIzQzOwkvKiBfX0dGUF9BQ0NPVU5UIHRvIHRlc3Qga21hbGxvY19ub2xvY2soKSBpbiBhbGxvY19zbGFiX29ial9leHRzKCkgKi8KJiM0MzsJZ2ZwID0gKGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQgJmFtcDsgMSkgPyAwIDogX19HRlBfQUNDT1VOVDsKJiM0MzsJb2JqcCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZigqb2JqcCksIGdmcCwgTlVNQV9OT19OT0RFKTsKJiM0MzsKJiM0MzsJaWYgKG9ianApCiYjNDM7CQljdHgtJmd0O2FsbG9jX29rJiM0MzsmIzQzOzsKJiM0MzsJZWxzZQomIzQzOwkJY3R4LSZndDthbGxvY19mYWlsJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKGNhbl91c2Vfa2ZyZWVfcmN1ICZhbXA7JmFtcDsgKGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQgJmFtcDsgMikpCiYjNDM7CQlrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTsKJiM0MzsJZWxzZQomIzQzOwkJa2ZyZWVfbm9sb2NrKG9ianApOwomIzQzOwomIzQzOwljdHgtJmd0O2NhbGxiYWNrX2NvdW50JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgaHdfYXR0ciA9IHsKIAkudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwKIAkuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLApAQCAtMzE1LDY3ICYjNDM7Mzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7CiAJLnNhbXBsZV9mcmVxID0gMTAwMDAwLAogfTsKIAotc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0MztzdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKJiM0MzsJCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl2b2lkICpvYmpwOwotCWdmcF90IGdmcDsKIAlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtJmd0O292ZXJmbG93X2hhbmRsZXJfY29udGV4dDsKIAotCS8qIF9fR0ZQX0FDQ09VTlQgdG8gdGVzdCBrbWFsbG9jX25vbG9jaygpIGluIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqLwotCWdmcCA9IChjdHgtJmd0O2NhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDsKLQlvYmpwID0ga21hbGxvY19ub2xvY2soNjQsIGdmcCwgTlVNQV9OT19OT0RFKTsKLQotCWlmIChvYmpwKQotCQljdHgtJmd0O2FsbG9jX29rJiM0MzsmIzQzOzsKLQllbHNlCi0JCWN0eC0mZ3Q7YWxsb2NfZmFpbCYjNDM7JiM0Mzs7Ci0KLQlrZnJlZV9ub2xvY2sob2JqcCk7Ci0JY3R4LSZndDtjYWxsYmFja19jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CXRlc3Rfbm9sb2NrKGN0eCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3N0YXRpYyBib29sIGVuYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQogewotCWludCBpLCBqOwotCXN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwotCWJvb2wgYWxsb2NfZmFpbCA9IGZhbHNlOwogCiAJZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcigmYW1wO2h3X2F0dHIsIC0xLCBjdXJyZW50LAotCQkJCQkJIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jaywKLQkJCQkJCSAmYW1wO2N0eCk7CiYjNDM7CQkJCQkJIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2ssCiYjNDM7CQkJCQkJIGN0eCk7CiYjNDM7CiAJaWYgKElTX0VSUihldmVudCkpCi0JCWt1bml0X3NraXAodGVzdCwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBlcmYgZXZlbnQmIzM0Oyk7Ci0JY3R4LmV2ZW50ID0gZXZlbnQ7Ci0JcGVyZl9ldmVudF9lbmFibGUoY3R4LmV2ZW50KTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlJfSVRFUkFUSU9OUzsgaSYjNDM7JiM0MzspIHsKLQkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7Ci0JCQlnZnBfdCBnZnAgPSAoaSAlIDIpID8gR0ZQX0tFUk5FTCA6IEdGUF9LRVJORUxfQUNDT1VOVDsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCQkJb2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7Ci0JCQlpZiAoIW9iamVjdHNbal0pIHsKLQkJCQlqLS07Ci0JCQkJd2hpbGUgKGogJmd0Oz0gMCkKLQkJCQkJa2ZyZWUob2JqZWN0c1tqLS1dKTsKLQkJCQlhbGxvY19mYWlsID0gdHJ1ZTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCX0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KQotCQkJa2ZyZWUob2JqZWN0c1tqXSk7Ci0JfQomIzQzOwljdHgtJmd0O2V2ZW50ID0gZXZlbnQ7CiYjNDM7CXBlcmZfZXZlbnRfZW5hYmxlKGN0eC0mZ3Q7ZXZlbnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJa3VuaXRfaW5mbyhjdHgtJmd0O3Rlc3QsICYjMzQ7SFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxuJiMzNDssCiYjNDM7CQkgICBjdHgtJmd0O2NhbGxiYWNrX2NvdW50LCBjdHgtJmd0O2FsbG9jX29rLCBjdHgtJmd0O2FsbG9jX2ZhaWwpOwomIzQzOwomIzQzOwlwZXJmX2V2ZW50X2Rpc2FibGUoY3R4LSZndDtldmVudCk7CiYjNDM7CXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LSZndDtldmVudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9OwogCi1jbGVhbnVwOgotCXBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpOwotCXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LmV2ZW50KTsKJiM0MzsJaWYgKCFlbmFibGVfcGVyZl9ldmVudHMoJmFtcDtjdHgpKQomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmcmIzM0Oyk7CiAKLQlrdW5pdF9pbmZvKHRlc3QsICYjMzQ7Y2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXG4mIzM0OywKLQkJICAgY3R4LmNhbGxiYWNrX2NvdW50LCBjdHguYWxsb2Nfb2ssIGN0eC5hbGxvY19mYWlsKTsKJiM0MzsJdGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7CiAKLQlpZiAoYWxsb2NfZmFpbCkKLQkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O0FsbG9jYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwlkaXNhYmxlX3BlcmZfZXZlbnRzKCZhbXA7Y3R4KTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tQUk9CRVMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU01QKQomIzQzO3N0YXRpYyBpbnQgc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4OwomIzQzOwomIzQzOwljdHggPSBjb250YWluZXJfb2YocCwgc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQsIGtwcm9iZSk7CiYjNDM7CXRlc3Rfbm9sb2NrKGN0eCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCByZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CWN0eC0mZ3Q7a3Byb2JlLnN5bWJvbF9uYW1lID0gJiMzNDtzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkJiMzNDs7CiYjNDM7CWN0eC0mZ3Q7a3Byb2JlLnByZV9oYW5kbGVyID0gc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXI7CiYjNDM7CiYjNDM7CWlmIChyZWdpc3Rlcl9rcHJvYmUoJmFtcDtjdHgtJmd0O2twcm9iZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJa3VuaXRfaW5mbyhjdHgtJmd0O3Rlc3QsICYjMzQ7a3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXG4mIzM0OywKJiM0MzsJCSAgIGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQsIGN0eC0mZ3Q7YWxsb2Nfb2ssIGN0eC0mZ3Q7YWxsb2NfZmFpbCk7CiYjNDM7CXVucmVnaXN0ZXJfa3Byb2JlKCZhbXA7Y3R4LSZndDtrcHJvYmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9OwomIzQzOwomIzQzOwlpZiAoIXJlZ2lzdGVyX3NsYWJfa3Byb2JlcygmYW1wO2N0eCkpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSwgc2tpcHBpbmcmIzM0Oyk7CiYjNDM7CiYjNDM7CXRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcygpOwomIzQzOwomIzQzOwl1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcygmYW1wO2N0eCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTsKIH0KICNlbmRpZgpAQCAtNDA1LDcgJiM0Mzs0OTAsMTAgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSwKIAlLVU5JVF9DQVNFKHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKSwKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKLQlLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayksCiYjNDM7CUtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYpLAomIzQzOyNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1NNUCkKJiM0MzsJS1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKSwKICNlbmRpZgogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IGUwMWMxMDE1YjhjOGQuLjhmZDY4MzVlNDIzNTIgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTI0LDExICYjNDM7MjQsMjcgQEAKICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFCTB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovCiAjZGVmaW5lIFNMQUJfQUxMT0NfTk9fT0JKX0VYVAkweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqLwogCiYjNDM7I2RlZmluZSBTTEFCX0ZSRUVfREVGQVVMVAkweDAwIC8qIG5vIGZsYWdzICovCiYjNDM7I2RlZmluZSBTTEFCX0ZSRUVfTk9MT0NLCTB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX2ZsYWdzICZhbXA7IFNMQUJfRlJFRV9OT0xPQ0spCiYjNDM7CQlyZXR1cm4gU0xBQl9BTExPQ19OT0xPQ0s7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBTTEFCX0FMTE9DX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAlyZXR1cm4gIShhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05PTE9DSyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSyk7CiYjNDM7fQomIzQzOwogdm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLAogCQkJCSAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSkKIAkJCQkgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTsKQEAgLTMzMSw2ICYjNDM7MzQ3LDM3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJcmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIGt2ZnJlZV9yY3VfaGVhZCBvZmZzZXQgY2FuIGJlIG9ubHkgbGVzcyB0aGFuIHBhZ2Ugc2l6ZS4KJiM0MzsgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqa3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIodm9pZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKGhlYWQpKSkgewomIzQzOwkJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGVhZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihoZWFkKTsKJiM0MzsKJiM0MzsJCWlmICghc2xhYikgewomIzQzOwkJCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpOwomIzQzOwkJfSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkgewomIzQzOwkJCW9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiYjNDM7CQkJdW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgaGVhZCk7CiYjNDM7CQkJdm9pZCAqb2JqID0gc2xhYl9hZGRyZXNzKHNsYWIpICYjNDM7IHMtJmd0O3NpemUgKiBpZHg7CiYjNDM7CiYjNDM7CQkJb2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTsKJiM0MzsJCQlvYmogPSBrYXNhbl9yZXNldF90YWcob2JqKTsKJiM0MzsJCQlvZmZzZXQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCkgLSBvYmo7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGhlYWQgLSBvZmZzZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci4KICAqCkBAIC00MzEsNyAmIzQzOzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAlyZXR1cm4gIShzLSZndDtmbGFncyAmYW1wOyAoU0xBQl9DQUNIRV9ETUF8U0xBQl9BQ0NPVU5UfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTk9fT0JKX0VYVCkpOwogfQogCi1ib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopOwomIzQzO2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpOwogdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7CiB2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKTsKIApAQCAtODk5LDcgJiM0Mzs5NDYsOCBAQCB2b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKQogdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLAogCQkJIGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiLCBib29sIHRvX3VzZXIpOwogCi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTsKJiM0Mzt2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKTsKJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTsKIAogc3RhdGljIGlubGluZSBib29sIHNsdWJfZGVidWdfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewpkaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmMKaW5kZXggMWUxZDNmZWVjMzUzNS4uYjhmMjFlYWJjY2NjMiAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC01NTgsNyAmIzQzOzU1OCw3IEBAIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCX0KIAogCS8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovCi0JZGVmZXJfZnJlZV9iYXJyaWVyKCk7CiYjNDM7CWRlZmVycmVkX3dvcmtfYmFycmllcigpOwogCiAJY3B1c19yZWFkX2xvY2soKTsKIAltdXRleF9sb2NrKCZhbXA7c2xhYl9tdXRleCk7CkBAIC0xMjk2LDYgJiM0MzsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrZnJlZSk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTsKIAomIzQzO3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzbGFiICpzbGFiOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpCiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKHB0cikpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJc2xhYiA9IHZpcnRfdG9fc2xhYihwdHIpOwomIzQzOwlpZiAodW5saWtlbHkoIXNsYWIpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpICZhbXA7JmFtcDsgc2xhYl9uaWQoc2xhYikgIT0gbnVtYV9tZW1faWQoKSkpCiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItJmd0O3NsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2ZhbGxiYWNrOgomIzQzOwlkZWZlcl9rZnJlZV9yY3UoaGVhZCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7CiYjNDM7CiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQKIAogdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCkBAIC0xMzEzLDYgJiM0MzsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX2NhbGxfcmN1KTsKIAomIzQzO3ZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTsKJiM0MzsJcmN1X2JhcnJpZXIoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTsKJiM0MzsKJiM0Mzt2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKJiM0Mzt7CiYjNDM7CWRlZmVycmVkX3dvcmtfYmFycmllcigpOwomIzQzOwlyY3VfYmFycmllcigpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpOwomIzQzOwogdm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpCiB7CiB9CkBAIC0xMzc5LDcgJiM0MzsxNDIwLDcgQEAgc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhIHsKIAogc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7CiAJc3RydWN0IHJjdV93b3JrIHJjdV93b3JrOwotCXN0cnVjdCByY3VfaGVhZCAqaGVhZF9mcmVlOwomIzQzOwlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX2ZyZWU7CiAJc3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZF9mcmVlW0ZSRUVfTl9DSEFOTkVMU107CiAJc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7CkBAIC0xNDE1LDcgJiM0MzsxNDU2LDcgQEAgc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7CiBzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSB7CiAJLy8gT2JqZWN0cyBxdWV1ZWQgb24gYSBsaW5rZWQgbGlzdAogCS8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy4KLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7CiAJdW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7CiAJYXRvbWljX3QgaGVhZF9jb3VudDsKIApAQCAtMTU1NiwxMiAmIzQzOzE1OTcsMTIgQEAga3ZmcmVlX3JjdV9idWxrKHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwLAogfQogCiBzdGF0aWMgdm9pZAota3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0MztrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCkKIHsKLQlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKm5leHQ7CiAKIAlmb3IgKDsgaGVhZDsgaGVhZCA9IG5leHQpIHsKLQkJdm9pZCAqcHRyID0gKHZvaWQgKikgaGVhZC0mZ3Q7ZnVuYzsKJiM0MzsJCXZvaWQgKnB0ciA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpOwogCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh2b2lkICopIGhlYWQgLSBwdHI7CiAKIAkJbmV4dCA9IGhlYWQtJmd0O25leHQ7CkBAIC0xNTg1LDcgJiM0MzsxNjI2LDcgQEAgc3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47CiAJc3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRbRlJFRV9OX0NIQU5ORUxTXTsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7CiAJc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDsKIAlzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZ3Bfc25hcDsKQEAgLTE2MjgsNiAmIzQzOzE2NjksMTQgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKJiM0MzsJdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSXQgaXMgbm90IHNhZmUgdG8gc3BpbiBvbiBQUkVFTVBUX1JUIGJlY2F1c2UgdGhlIGtlcm5lbCBtaWdodCBiZQomIzQzOwkgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7CiAKIAlpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE2MzgsNyAmIzQzOzE2ODcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKQogCiAJcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiAJaWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpCi0JCXJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmopOwomIzQzOwkJcmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzA4LDcgJiM0MzsxNzU3LDcgQEAga3ZmcmVlX3JjdV9kcmFpbl9yZWFkeShzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfcmVhZHlbRlJFRV9OX0NIQU5ORUxTXTsKIAlzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCkBAIC0xOTcxLDcgJiM0MzsyMDIwLDcgQEAgdm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpCiAgKiBiZSBmcmVlJiMzOTtkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG8KICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGhlYXZ5IGtmcmVlX3JjdSgpL2t2ZnJlZV9yY3UoKSBsb2FkLgogICovCi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKJiM0Mzt2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDsKQEAgLTE5ODcsNyAmIzQzOzIwMzYsNyBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKIAlpZiAoIWhlYWQpCiAJCW1pZ2h0X3NsZWVwKCk7CiAKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsga2ZyZWVfcmN1X3NoZWFmKHB0cikpCiYjNDM7CWlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSkKIAkJcmV0dXJuOwogCiAJLy8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guCkBAIC0yMDA5LDcgJiM0MzsyMDU4LDYgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCiAJCQkvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLgogCQkJZ290byB1bmxvY2tfcmV0dXJuOwogCi0JCWhlYWQtJmd0O2Z1bmMgPSBwdHI7CiAJCWhlYWQtJmd0O25leHQgPSBrcmNwLSZndDtoZWFkOwogCQlXUklURV9PTkNFKGtyY3AtJmd0O2hlYWQsIGhlYWQpOwogCQlhdG9taWNfaW5jKCZhbXA7a3JjcC0mZ3Q7aGVhZF9jb3VudCk7CkBAIC0yMTQyLDE3ICYjNDM7MjE5MCwxNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpOwogICovCiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKJiM0MzsJLyoga2ZyZWVfcmN1X25vbG9jaygpIG1pZ2h0IGhhdmUgZGVmZXJyZWQgZnJlZXMgZXZlbiB3aXRob3V0IHNoZWF2ZXMgKi8KJiM0MzsJZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7CiYjNDM7CiAJaWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7CiAJCWNwdXNfcmVhZF9sb2NrKCk7CiAJCWZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpOwogCQljcHVzX3JlYWRfdW5sb2NrKCk7Ci0JCXJjdV9iYXJyaWVyKCk7CiAJfQogCi0JLyoKLQkgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3JrcwotCSAqIG9uIGEgc3BlY2lmaWMgc2xhYiBjYWNoZS4KLQkgKi8KJiM0MzsJcmN1X2JhcnJpZXIoKTsKIAlfX2t2ZnJlZV9yY3VfYmFycmllcigpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBhZGUxN2Y4NGU1ODMyLi5iYTJmMjA4MjYyYmY2IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC00MjQsNiAmIzQzOzQyNCw4IEBAIHN0cnVjdCBzbGFiX3NoZWFmIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAkJc3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7CiYjNDM7CQkvKiBvbmx5IHVzZWQgdG8gZGVmZXIgY2FsbF9yY3UoKSBpbiB1bmtub3duIGNvbnRleHQgKi8KJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTsKIAkJLyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovCiAJCXN0cnVjdCB7CiAJCQl1bnNpZ25lZCBpbnQgY2FwYWNpdHk7CkBAIC05MDYsNiAmIzQzOzkwOCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogfQogI2VuZGlmCiAKJiM0MzsvKgomIzQzOyAqIEEgbm8tb3AgZnVuY3Rpb24gdXNlZCB0byBhdHRhY2gga3Byb2JlIGhhbmRsZXJzIGluIHNsdWJfa3VuaXQgdGVzdHMuCiYjNDM7ICogVGhlIGJhcnJpZXIgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gb3B0aW1pemluZyBvdXQgY2FsbHNpdGVzLgomIzQzOyAqLwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19WTSkgfHwgZGVmaW5lZChDT05GSUdfUFJPVkVfTE9DS0lORykKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpCiYjNDM7ewomIzQzOwliYXJyaWVyKCk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQobG9jaykgZG8gewlcCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7CQlcCiYjNDM7CXNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQoKTsJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIAogLyoKQEAgLTE2NjMsNyAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAoIShzLSZndDtmbGFncyAmYW1wOyBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgJmFtcDtuLSZndDtmdWxsKTsKIH0KIApAQCAtMTY3Miw3ICYjNDM7MTY5Miw3IEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3QKIAlpZiAoIShzLSZndDtmbGFncyAmYW1wOyBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCk7CiB9CiAKQEAgLTI4MTYsNyAmIzQzOzI4MzYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiX3NoZWFmICphbGxvY19lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLSZndDtzaGVhZl9jYXBhY2l0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZikKJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJLyoKIAkgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0cwpAQCAtMjgyOCwxMSAmIzQzOzI4NDksMjAgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKQogCQltYXJrX29ial9jb2RldGFnX2VtcHR5KHNoZWFmKTsKIAogCVZNX1dBUk5fT05fT05DRShzaGVhZi0mZ3Q7c2l6ZSAmZ3Q7IDApOwotCWtmcmVlKHNoZWFmKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSykpCiYjNDM7CQlrZnJlZV9ub2xvY2soc2hlYWYpOwomIzQzOwllbHNlCiYjNDM7CQlrZnJlZShzaGVhZik7CiAKIAlzdGF0KHMsIFNIRUFGX0ZSRUUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKQomIzQzO3sKJiM0MzsJX19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGludAogcmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sCiAJICAgICAgIHVuc2lnbmVkIGludCBtYXgpOwpAQCAtMjg4NSw3ICYjNDM7MjkxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCXZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07CiAJc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmOwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spKTsKIAogCXBjcyA9IHRoaXNfY3B1X3B0cihzLSZndDtjcHVfc2hlYXZlcyk7CiAJc2hlYWYgPSBwY3MtJmd0O21haW47CkBAIC0zNTcwLDcgJiM0MzszNjAwLDcgQEAgX19hZGRfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZW51bSBhZGRfbW9kZSBtb2RlKQogc3RhdGljIGlubGluZSB2b2lkIGFkZF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sCiAJCQkJc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSkKIHsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlfX2FkZF9wYXJ0aWFsKG4sIHNsYWIsIG1vZGUpOwogfQogCkBAIC0zNTg0LDcgJiM0MzszNjE0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAogc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sCiAJCQkJCXN0cnVjdCBzbGFiICpzbGFiKQogewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwogCWxpc3RfZGVsKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0KTsKIAljbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7CiB9CkBAIC0zNjAwLDcgJiM0MzszNjMwLDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsCiB7CiAJdm9pZCAqb2JqZWN0OwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWlmIChzLSZndDtmbGFncyAmYW1wOyBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykgewpAQCAtNDA2OSw2ICYjNDM7NDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJY3B1c19yZWFkX3VubG9jaygpOwogfQogCiYjNDM7c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0czsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzOwomIzQzOwlzdHJ1Y3QgaXJxX3dvcmsgd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0gewomIzQzOwkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKJiM0MzsJLm9iamVjdHNfYnlfcmN1ID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfYnlfcmN1KSwKJiM0MzsJLnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSwKJiM0MzsJLndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIHsKIAlzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzOwpAQCAtNDEyOCw2ICYjNDM7NDE3NCw4IEBAIHZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKJiM0MzsJZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7CiYjNDM7CiAJY3B1c19yZWFkX2xvY2soKTsKIAltdXRleF9sb2NrKCZhbXA7c2xhYl9tdXRleCk7CiAKQEAgLTQ2NjUsNyAmIzQzOzQ3MTMsNyBAQCBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsCiAJc3RydWN0IG5vZGVfYmFybiAqYmFybjsKIAlib29sIGFsbG93X3NwaW47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwogCiAJLyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqLwogCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC01NzgzLDcgJiM0Mzs1ODMxLDcgQEAgc3RhdGljIHZvaWQgX19wY3NfaW5zdGFsbF9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcywgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LAogCQlzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKQogewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiAKIAkvKiBUaGlzIGlzIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgaWYgbm9ib2R5IGludGVycnVwdGVkIHVzLiAqLwogCWlmIChsaWtlbHkoIXBjcy0mZ3Q7c3BhcmUpKSB7CkBAIC01ODM0LDcgJiM0Mzs1ODgyLDcgQEAgX19wY3NfcmVwbGFjZV9mdWxsX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsCiAJYm9vbCBwdXRfZmFpbDsKIAogcmVzdGFydDoKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwogCiAJLyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqLwogCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC02MDM1LDI0ICYjNDM7NjA4MywyNiBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2UKICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLAogICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHMKLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC4KJiM0MzsgKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuCiAgKgogICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdAogICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGEKICAqIHNwaW5uaW5nIGxvY2suIFRlbGwgbG9ja2RlcCB0aGF0IGFjcXVpcmluZyBzcGlubG9ja190IGlzIHZhbGlkIGhlcmUKLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy4KJiM0MzsgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwCiYjNDM7ICogb24gUFJFRU1QVF9SVCB0byBhdm9pZCBzdXBwcmVzc2luZyB2YWxpZCBsb2NrZGVwIHdhcm5pbmdzLgogICovCiBzdGF0aWMgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKGtmcmVlX3JjdV9zaGVhZl9tYXAsIExEX1dBSVRfQ09ORklHKTsKIAotYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQomIzQzO2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjczsKIAlzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmOwomIzQzOwlib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpOwogCi0JaWYgKFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsgYWxsb3dfc3Bpbik7CiAKLQlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO2tmcmVlX3JjdV9zaGVhZl9tYXApOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAogCWlmICghbG9jYWxfdHJ5bG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSkKIAkJZ290byBmYWlsOwpAQCAtNjA2MCw5ICYjNDM7NjExMCwxMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiAJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIAogCWlmICh1bmxpa2VseSghcGNzLSZndDtyY3VfZnJlZSkpIHsKLQogCQlzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7CiAJCXN0cnVjdCBub2RlX2Jhcm4gKmJhcm47CiYjNDM7CQl1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSB0b19hbGxvY19mbGFncyhmcmVlX2ZsYWdzKTsKJiM0MzsJCWdmcF90IGdmcCA9IGFsbG93X3NwaW4gPyBHRlBfTk9XQUlUIDogX19HRlBfTk9XQVJOOwogCiAJCS8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovCiAJCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC02MDgyLDcgJiM0Mzs2MTMzLDcgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQogCQkJZ290byBmYWlsOwogCQl9CiAKLQkJZW1wdHkgPSBiYXJuX2dldF9lbXB0eV9zaGVhZihiYXJuLCB0cnVlKTsKJiM0MzsJCWVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7CiAKIAkJaWYgKGVtcHR5KSB7CiAJCQlwY3MtJmd0O3JjdV9mcmVlID0gZW1wdHk7CkBAIC02MDkxLDIwICYjNDM7NjE0MiwyMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiAKIAkJbG9jYWxfdW5sb2NrKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spOwogCi0JCWVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTsKJiM0MzsJCWVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7CiAKIAkJaWYgKCFlbXB0eSkKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAoIWxvY2FsX3RyeWxvY2soJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpIHsKLQkJCWJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTsKJiM0MzsJCQlfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpOwogCQkJZ290byBmYWlsOwogCQl9CiAKIAkJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIAogCQlpZiAodW5saWtlbHkocGNzLSZndDtyY3VfZnJlZSkpCi0JCQliYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7CiYjNDM7CQkJX19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTsKIAkJZWxzZQogCQkJcGNzLSZndDtyY3VfZnJlZSA9IGVtcHR5OwogCX0KQEAgLTYxMzAsMTggJiM0Mzs2MTgxLDM0IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaikKIAkgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZwogCSAqIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpIGRvZXNuJiMzOTt0IG1pc3MgdGhpcyBzaGVhZgogCSAqLwotCWlmIChyY3Vfc2hlYWYpCi0JCWNhbGxfcmN1KCZhbXA7cmN1X3NoZWFmLSZndDtyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpOwomIzQzOwlpZiAocmN1X3NoZWFmKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2l0aCAhYWxsb3dfc3Bpbiwgd2UgbWlnaHQgaGF2ZSBpbnRlcnJ1cHRlZCBjYWxsX3JjdSgpJiMzOTtzCiYjNDM7CQkgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLAomIzQzOwkJICogd2Uga25vdyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHVubGlrZWx5KCFhbGxvd19zcGluICZhbXA7JmFtcDsgaXJxc19kaXNhYmxlZCgpKSkgewomIzQzOwkJCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwomIzQzOwkJCWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJCQlpZiAobGxpc3RfYWRkKCZhbXA7cmN1X3NoZWFmLSZndDtsbG5vZGUsICZhbXA7ZHB3LSZndDtyY3Vfc2hlYXZlcykpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY2FsbF9yY3UoJmFtcDtyY3Vfc2hlYWYtJmd0O3JjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKIAogCXN0YXQocywgRlJFRV9SQ1VfU0hFQUYpOwotCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAlyZXR1cm4gdHJ1ZTsKIAogZmFpbDoKIAlzdGF0KHMsIEZSRUVfUkNVX1NIRUFGX0ZBSUwpOwotCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYzMzAsMzEgJiM0Mzs2Mzk3LDIyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIAl9CiB9CiAKLXN0cnVjdCBkZWZlcl9mcmVlIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzOwotCXN0cnVjdCBpcnFfd29yayB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yayk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHsKLQkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKLQkud29yayA9IElSUV9XT1JLX0lOSVQoZnJlZV9kZWZlcnJlZF9vYmplY3RzKSwKLX07Ci0KIC8qCiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCYjMzk7cyBzYWZlCiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLgogICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS4KICAqLwotc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yaykKJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspCiB7Ci0Jc3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcyA9ICZhbXA7ZGYtJmd0O29iamVjdHM7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7CiAJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgKnBvcywgKnQ7CiYjNDM7CXN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7CiAKLQlpZiAobGxpc3RfZW1wdHkob2JqcykpCi0JCXJldHVybjsKJiM0MzsJZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7CiYjNDM7CXJjdV9zaGVhdmVzID0gJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzOwomIzQzOwlvYmpzID0gJmFtcDtkcHctJmd0O29iamVjdHM7CiYjNDM7CW9ianNfYnlfcmN1ID0gJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1OwogCiAJbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTsKIAlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CkBAIC02Mzc4LDI3ICYjNDM7NjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pOwogCQlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOwogCX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKJiM0MzsJCXZvaWQgKmhlYWQgPSBwb3M7CiYjNDM7CQl2b2lkICpvYmpwID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7CiYjNDM7CiYjNDM7CQlrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtzaGVhZi0mZ3Q7cmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTsKIH0KIAogc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZCkKIHsKLQlzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwogCiAJZ3VhcmQocHJlZW1wdCkoKTsKIAogCWhlYWQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCk7CiAKLQlkZiA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVyX2ZyZWVfb2JqZWN0cyk7Ci0JaWYgKGxsaXN0X2FkZChoZWFkICYjNDM7IHMtJmd0O29mZnNldCwgJmFtcDtkZi0mZ3Q7b2JqZWN0cykpCi0JCWlycV93b3JrX3F1ZXVlKCZhbXA7ZGYtJmd0O3dvcmspOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLSZndDtvZmZzZXQsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1KSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKIH0KIAotdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZCkKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqLwomIzQzO3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCWlycV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1X3B0cigmYW1wO2RlZmVyX2ZyZWVfb2JqZWN0cywgY3B1KS0mZ3Q7d29yayk7CiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yaywgY3B1KS0mZ3Q7d29yayk7CiB9CiAKIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZQpAQCAtNjY1Nyw0MyAmIzQzOzY3MzksMjEgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiAgKi8KIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7Ci0Jdm9pZCAqb2JqID0gaGVhZDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3Qgc2xhYiAqc2xhYjsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKLQl2b2lkICpzbGFiX2FkZHI7CiYjNDM7CXZvaWQgKm9iajsKJiM0MzsKJiM0MzsJb2JqID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7CiAKIAlpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpIHsKLQkJb2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7CiAJCXZmcmVlKG9iaik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKG9iaik7Ci0Jc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKLQlpZiAoIXNsYWIpIHsKLQkJLyoKLQkJICogcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUgc28gbm8gbmVlZCB0bwotCQkgKiBjb25zaWRlciBhbGxvY2F0aW9uIG9yZGVyCi0JCSAqLwotCQlvYmogPSAodm9pZCAqKSBQQUdFX0FMSUdOX0RPV04oKHVuc2lnbmVkIGxvbmcpb2JqKTsKLQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzID0gc2xhYi0mZ3Q7c2xhYl9jYWNoZTsKLQlzbGFiX2FkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7Ci0KLQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkgewotCQlvYmogPSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KG9iaik7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKG9iaik7CiYjNDM7CQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKIAotCQlvYmogPSBzbGFiX2FkZHIgJiM0Mzsgcy0mZ3Q7c2l6ZSAqIGlkeDsKLQkJb2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTsKJiM0MzsJCWlmIChzbGFiKQomIzQzOwkJCXNsYWJfZnJlZShzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTsKIAl9Ci0KLQlzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJDVS9TTFVCIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGNvbXBvbmVudHMgbGlrZSBgbW0vc2xhYmAsIGBtbS9zbGFiX2NvbW1vbi5jYCwgYG1tL3NsdWIuY2AsIGFuZCB0aGUgUkNVIGNvZGUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGtmcmVlX3JjdV9ub2xvY2tgIGFuZCB0aGUgdHdlYWtzIHRvIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSB0aGUgZm9jYWwgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBrdmZyZWVfY2FsbF9yY3VgIGlzIG5vdyBhY2NlcHRpbmcgYSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqYCByYXRoZXIgdGhhbiB0aGUgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgcmN1X2hlYWQgKmAuIEFuZCB3ZSYjMzk7dmUgZ290IGEgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYmVpbmcgYWRkZWQsIHdoaWNoIHVzZXMgZWl0aGVyIGBkZWZlcl9rZnJlZV9yY3VgIG9yIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCB0aGF0IGBTTEFCX0ZSRUVfTk9MT0NLYCBmbGFnLiBHb29kIHRvIHNlZSB0aGVyZSBhcmUgcGVyZiBhbmQga3Byb2JlIHRlc3RzIGluIGBsaWIvdGVzdHMvc2x1Yl9rdW5pdC5jYCB0b287IGFsd2F5cyBjcnVjaWFsLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgZ2VudWluZWx5IGZ1bmN0aW9uYWwsIGFuZCB0aGF0IGl0IGlzbiYjMzk7dCBhbiB1bnJlYWNoYWJsZSBkZWFkIGVuZCBvZiBhIHBhdGNoLiBHaXZlbiB0aGUgYXJlYXMgaXQgdG91Y2hlcywgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQmIzM5O3MgYm90aCBmdW5jdGlvbmFsIGFuZCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2luZyBpdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFyZSBjbGVhci4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgYmVpbmcgdXNlZCBpbiBgbW0vc2xhYl9jb21tb24uY2AgaW4gcmVsYXRpb24gdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuIFRoYXQgcmFpc2VzIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gb2YgaG93IHRoYXQgY29uZmlnIGlzIGRlZmluZWQgYW5kIGVuYWJsZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBpbiBgaW5pdC9LY29uZmlnYCwgYG1tL0tjb25maWdgLCBvciBwZXJoYXBzIGV2ZW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgY29tcGxldGUgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMjE9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMyLSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzMzogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzNC0gKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTE0MzEtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxNDMyOiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaD0yNTQ9c3RydWN0IGNhbGxiYWNrX2hlYWQge1xuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaC0yNTktXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmg6MjYwOiNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuLS1cbm1tL0tjb25maWc9MTY0PWNvbmZpZyBTTFVCXG4tLVxubW0vS2NvbmZpZy0xNjctXG5tbS9LY29uZmlnOjE2ODpjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMwMi1cbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMwNC1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNjojaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzNTc9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzYwLVxubW0vc2xhYl9jb21tb24uYzoxMzYxOiNlbHNlIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cbm1tL3NsYWJfY29tbW9uLmMtMTM2Mi1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIyNDg9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMzAwLVxubW0vc2xhYl9jb21tb24uYzoyMzAxOiNlbmRpZiAvKiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUkNVIEJhdGNoZWQgRnJlZWQgd2l0aCBTTFVCIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZmxhZ2dlZCBhcyBhIGRlZmF1bHQgYm9vbGVhbiAmIzM5O3llcyYjMzk7IOKAkyB0aGF0JiMzOTtzIGdvb2QsIGxpa2VseSBpbmRpY2F0aW5nIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCB1bmRlciB0aGUgcmlnaHQgY2lyY3Vtc3RhbmNlcy4gVGhlIGNsdWUgaGVyZSBpcyBgU0xVQmAuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIG9wdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGBTTFVCYCBhbGxvY2F0b3IuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9mIGBLVkZSRUVfUkNVX0JBVENIRURgIHRvIG5haWwgZG93biB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IG9uIGBTTFVCYCwgYW5kIGFueSBvdGhlciBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBjb25maXJtaW5nIGhvdyB0aGlzIG9wdGlvbiBpbXBhY3RzIFJDVSBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVkZSRUVfUkNVX0JBVENIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcbi0tXG5tbS9LY29uZmlnLTE2Ny1cbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcbm1tL0tjb25maWctMTY5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoaW5nZXMgb24gd2hldGhlciBvciBub3Qgd2UmIzM5O3JlIHVzaW5nIGBTTFVCYC4gUmlnaHQsIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYG1tL0tjb25maWdgLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBkb3duIHRvIGxpbmUgMTY4LiBIb3BlZnVsbHksIGl0JiMzOTtsbCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG1tL0tjb25maWdgIHRlbGxzIG1lIGFib3V0IGBTTFVCYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdGVuZG1lbnVcbiAxNjE6XHRcbiAxNjI6XHRtZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbiAxNjM6XHRcbiAxNjQ6XHRjb25maWcgU0xVQlxuIDE2NTpcdFx0ZGVmX2Jvb2wgeVxuIDE2NjpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMTY3Olx0XG4gMTY4Olx0Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxuIDE2OTpcdFx0ZGVmX2Jvb2wgeVxuIDE3MDpcdFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFx1MDAyNlx1MDAyNiAhVElOWV9SQ1VcbiAxNzE6XHRcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4gMTcyOlx0XG4gMTczOlx0Y29uZmlnIFNMVUJfVElOWVxuIDE3NDpcdFx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuIDE3NTpcdFx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2ICFDT01QSUxFX1RFU1RcbiAxNzY6XHRcdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcbiAxNzc6XHRcdGhlbHBcbiAxNzg6XHRcdCAgIENvbmZpZ3VyZXMgdGhlIHNsYWIgYWxsb2NhdG9yIGluIGEgd2F5IHRvIGFjaGlldmUgbWluaW1hbCBtZW1vcnlcbiAxNzk6XHRcdCAgIGZvb3RwcmludCwgc2FjcmlmaWNpbmcgc2NhbGFiaWxpdHksIGRlYnVnZ2luZyBhbmQgb3RoZXIgZmVhdHVyZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLVkZSRUVfUkNVX0JBVENIRUQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGp1c3QgcXVpY2tseSByZXZpZXdpbmcgaG93IGBLVkZSRUVfUkNVX0JBVENIRURgIGlzIGhhbmRsZWQgaW4gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZGVmYXVsdCBpcyB0byBoYXZlIGl0IGVuYWJsZWQgdW5sZXNzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNMVUJfVElOWWAsIGBUSU5ZX1JDVWAsIG9yIGlmIGBSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRGAgaXMgYWxzbyB0dXJuZWQgb24uIFRoYXQgbWFrZXMgc2Vuc2UsIG5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLgoKU28sIEkgY291bGQganVzdCByZWx5IG9uIHRoZSBkZWZhdWx0cyBhbmQgbm90IGV4cGxpY2l0bHkgZW5hYmxlIGBLVkZSRUVfUkNVX0JBVENIRURgLCBidXQgSSBjb3VsZCBhbHNvIGFkZCBpdCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSYjMzk7cyBzYWtlLCBvciBtYXliZSBub3QuIERvZXNuJiMzOTt0IHNlZW0gc3RyaWN0bHkgbmVjZXNzYXJ5LgoKSGFuZyBvbiBhIHNlY29uZOKApiBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgYFNMVUJfS1VOSVRfVEVTVGAgaXMgdG91Y2hlZCBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyb3VuZCB0aGF0LiBOZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbGlua2FnZSBvciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGludG8gYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBgbGliL3Rlc3RzL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xVQl9LVU5JVF9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI5NjU9Y29uZmlnIFNIREkzX0tVTklUX1RFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc0LVxubGliL0tjb25maWcuZGVidWc6Mjk3NTpjb25maWcgU0xVQl9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc2LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3IgU0xVQiBjYWNoZSBlcnJvciBkZXRlY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBLY29uZmlnIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBiZXR0ZXIgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBpdCBhZmZlY3RzIGRlYnVnZ2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIG9wdGlvbnMgZGlyZWN0bHkgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyOTc1LiBUaGF0IHNob3VsZCBiZSB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCBzb21lIHVzZWZ1bCBjbHVlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gc3ltYm9scyBvciBkZXBlbmRlbmNpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzA6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHVuaXQgdGVzdCBmb3IgX19hc2hsZGkzKCksIF9fYXNocmRpMygpLCBhbmRcbjI5NzE6XHRcdCAgX19sc2hyZGkzKCkgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIHRvIGltcGxlbWVudCA2NC1iaXQgYXJpdGhtZXRpY1xuMjk3MjpcdFx0ICBzaGlmdCBsZWZ0LCBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0IGFuZCBsb2dpY2FsIHNoaWZ0IHJpZ2h0LFxuMjk3MzpcdFx0ICByZXNwZWN0aXZlbHksIG9uIGEgMzItYml0IENQVXMuXG4yOTc0Olx0XG4yOTc1Olx0Y29uZmlnIFNMVUJfS1VOSVRfVEVTVFxuMjk3NjpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3IgU0xVQiBjYWNoZSBlcnJvciBkZXRlY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMjk3NzpcdFx0ZGVwZW5kcyBvbiBTTFVCX0RFQlVHIFx1MDAyNlx1MDAyNiBLVU5JVFxuMjk3ODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbjI5Nzk6XHRcdGhlbHBcbjI5ODA6XHRcdCAgVGhpcyBidWlsZHMgU0xVQiBhbGxvY2F0b3IgdW5pdCB0ZXN0LlxuMjk4MTpcdFx0ICBUZXN0cyBTTFVCIGNhY2hlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LlxuMjk4MjpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuMjk4MzpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4yOTg0Olx0XG4yOTg1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4yOTg2Olx0XG4yOTg3Olx0Y29uZmlnIFJBVElPTkFMX0tVTklUX1RFU1RcbjI5ODg6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3QgZm9yIHJhdGlvbmFsLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMjk4OTpcdFx0ZGVwZW5kcyBvbiBLVU5JVCBcdTAwMjZcdTAwMjYgUkFUSU9OQUxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTFVCIFJDVSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgZW5hYmxpbmcgYFNMVUJfS1VOSVRfVEVTVGAgc2VlbXMgbGlrZSB0aGUgcmlnaHQgbW92ZSBmb3IgdGVzdGluZywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBhIGRlZGljYXRlZCB0ZXN0IGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIGFkZGluZyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBhbmQgYGRlZmVyX2tmcmVlX3JjdWAuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgUkNVIG1hY2hpbmVyeSBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpbXBsaWNhdGlvbnMuCgpTbyB0aGUgbWFpbiBzeW1ib2xzIGludm9sdmVkIGFyZSBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBgZGVmZXJfa2ZyZWVfcmN1YC4gSSBrbm93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgbW9kaWZpZWQuIEkgcXVpY2tseSBjb25maXJtZWQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IG1vcmUgcmVhZGlseSB1c2FibGUuIEhvd2V2ZXIsIGBkZWZlcl9rZnJlZV9yY3VgIGlzIGludGVybmFsIHRvIHRoZSBTTFVCIGNvZGUsIG9ubHkgZGVjbGFyZWQgaW4gYG1tL3NsYWIuaGAuIFNhbWUgc3Rvcnkgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBga3ZmcmVlX2NhbGxfcmN1YCBpcyBleHBvcnRlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKewoJc3RydWN0IHNsYWIgKnNsYWI7CgoJaWYgKCFJU19FTkFCTEVEKENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQpKQoJCWdvdG8gZmFsbGJhY2s7CgoJaWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihwdHIpKSkKCQlnb3RvIGZhbGxiYWNrOwoKCXNsYWIgPSB2aXJ0X3RvX3NsYWIocHRyKTsKCWlmICh1bmxpa2VseSghc2xhYikpCgkJZ290byBmYWxsYmFjazsKCglpZiAodW5saWtlbHkoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgJmFtcDsmYW1wOyBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSkKCQlnb3RvIGZhbGxiYWNrOwoKCWlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpCgkJZ290byBmYWxsYmFjazsKCglyZXR1cm47CgpmYWxsYmFjazoKCWRlZmVyX2tmcmVlX3JjdShoZWFkKTsKfQpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spOwpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2VlbXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIGhhdmUgdG8gcmVhbGx5IHRoaW5rIGFib3V0IHRoZSBgZmFsbGJhY2tgIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgcGVyZm9ybWFuY2UuIFRoZSBgZmFsbGJhY2tgIG1lYW5zIGl0IGdvZXMgdG8gYGRlZmVyX2tmcmVlX3JjdWAuIFNvLCBpZiBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgbm90IGVuYWJsZWQsIG9yIGlmIGl0IGlzIGEgYHZtYWxsb2NgIGFkZHJlc3MsIG9yIGlmIGB2aXJ0X3RvX3NsYWJgIGZhaWxzLCBpZiBOVU1BIGlzIGVuYWJsZWQgYW5kIHRoZSBzbGFiIGlzbiYjMzk7dCBsb2NhbCwgb3IgaWYgYF9fa2ZyZWVfcmN1X3NoZWFmYCByZXR1cm5zIGZhbHNlLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBSQ1UgZGVmZXJyYWwuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIFJDVSBiYXRjaGluZyBtZWNoYW5pY3MgbGF0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGxpa2VseSBzY2VuYXJpb3MgYW5kIHdoYXQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbGJhY2sgaXMgaW4gdGVybXMgb2YgbGF0ZW5jeSBhbmQgUkNVIHVzYWdlLgoKSSBub3RlIHRoZSBhZGRpdGlvbmFsIGZvY3VzIHN5bWJvbHM6IGBkZWZlcnJlZF93b3JrX2JhcnJpZXJgIGFuZCBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gLiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIGlzIHN0YXRpYyB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKVGhlbiwgSSBjaGVjayB0aGUgbmV3IHRlc3RzLiBJIHNlZSBgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmYCBhbmQgYHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlYCBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AsIEtVbml0IHRlc3RzLCBzbyBlbmFibGluZyBgU0xVQl9LVU5JVF9URVNUYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjaG9pY2UuIEhvd2V2ZXIsIHRoZXNlIHRlc3RzIGRlcGVuZCBvbiBgQ09ORklHX1BFUkZfRVZFTlRTYCBhbmQgYENPTkZJR19LUFJPQkVTYCB0byBydW4uCgpgYGBjCiNpZiBkZWZpbmVkKENPTkZJR19QRVJGX0VWRU5UUykgfHwgKGRlZmluZWQoQ09ORklHX0tQUk9CRVMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU01QKSkKYGBgCgpMb29rcyBsaWtlIEkgY2FuIGVuYWJsZSBgUEVSRl9FVkVOVFNgIGFuZCBgS1BST0JFU2AsIG9yIGp1c3QgYEtQUk9CRVNgIGlmIGBDT05GSUdfU01QYCBpcyBhbHNvIGVuYWJsZWQsIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyB0aGVzZSBvcHRpb25zIG9uIHRoZSBidWlsZCBhbmQgcnVudGltZS4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBga2ZyZWVfcmN1X25vbG9ja2AgKHR5cG8hKSBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZSwgYXMgYSBzYW5pdHkgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMjE9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTI4LS8qKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMjk6ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC5cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMwLSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzMi0gKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzM6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzQtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM2LSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzNzogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzgtICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzOTojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDAtZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVx0aWYgKGNhbl91c2Vfa2ZyZWVfcmN1IFx1MDAyNlx1MDAyNiAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50IFx1MDAyNiAyKSlcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlx0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE5MT12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE5Mi17XG5tbS9zbGFiX2NvbW1vbi5jOjIxOTM6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTk0LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipGdXp6aW5nIFRoYXQgTmV3IEFQSTogQWJzb2x1dGVseSBXb3J0aCB0aGUgRWZmb3J0KioKCkFscmlnaHQsIGV2ZW4gdGhvdWdoIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0JiMzOTtzIGRvaW5nLCBpcyBvbmx5IHNwZWNpZmljYWxseSBjYWxsZWQgaW4gdGhlIHRlc3QgY29kZSAqcmlnaHQgbm93KiwgdGhlIGZhY3QgdGhhdCBhIG5ldyBBUEkgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoaXMgdGVzdCBhY3R1YWxseSAqdXNlcyogaXQsIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOZXcgQVBJcyBhbHdheXMgY2FycnkgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciB1bmZvcmVzZWVuIGlzc3Vlcy4gSXQmIzM5O3MgYSBrZXkgZXhlcmNpc2Ugb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LCBzbyBnZXR0aW5nIGEgZnV6emluZyB0ZXN0IGluIHBsYWNlIGVhcmx5IHdpbGwgYmUgYSBwcm9hY3RpdmUgbW92ZS4gTm8gYnJhaW5lciwgcmVhbGx5LgoKSSBzdXBwb3NlIEkgc2hvdWxkIGNoZWNrIG91dCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gc2VlIGhvdyBpdCBvcGVyYXRlcy4gVGhlIHRlc3QgaXMgaW52b2tpbmcgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3Mgd29ydGggc2VlaW5nIHdoYXQgaXQgZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIHdpbGwgYWxsb3cgdXMgdG8gZGV2aXNlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwMT12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMDI6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTAzLVxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0xMTQwPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDQtXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NTpcdFx0a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKFx1MDAyNigoX19fcCktXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1x0XFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ2LVx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xubW0vc2xhYl9jb21tb24uYy0xMjk4LVxubW0vc2xhYl9jb21tb24uYzoxMjk5OnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzIzLX1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xubW0vc2xhYl9jb21tb24uYy0xMzI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgTXlzdGVyeSoqCgpBbHJpZ2h0LCBzbyB0aGUgbWFjcm8gZXhwYW5kcyBvdXQgdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIGdvb2QuIFRoYXQmIzM5O3MgdGhlIGFjdHVhbCB3b3JraG9yc2UgZnVuY3Rpb24uIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYF9fa2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2x1Yi5jYC4gSSBleHBlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBSQ1Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgaW5pdGlhdGVkLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIHNsdWIgYWxsb2NhdG9yJiMzOTtzIGludGVybmFsIHN0cnVjdHVyZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjY4PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjg5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2OTA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xubW0vc2xhYl9jb21tb24uYy0xNjkxLVxuLS1cbm1tL3NsdWIuYz00MTQyPXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTQxNTQtXHRcdCAqIHdlIGRvbiYjMzk7dCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcbm1tL3NsdWIuYzo0MTU1Olx0XHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0LlxubW0vc2x1Yi5jLTQxNTYtXHRcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2Vcbm1tL3NsdWIuYzo0MTU3Olx0XHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXG5tbS9zbHViLmMtNDE1OC1cdFx0ICovXG4tLVxubW0vc2x1Yi5jPTYwMjU9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3NsdWIuYy02MDgzLSAqIGt2ZnJlZV9jYWxsX3JjdSgpIGNhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHJhd19zcGlubG9ja190LiBTaW5jZVxubW0vc2x1Yi5jOjYwODQ6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG5tbS9zbHViLmMtNjA4NS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xuLS1cbm1tL3NsdWIuYz02MDk0PXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYwOTUtXG5tbS9zbHViLmM6NjA5Njpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYwOTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAzNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVsdmluZyBpbnRvIHRoZSBgX19rZnJlZV9yY3Vfc2hlYWZgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBfX2tmcmVlX3JjdV9zaGVhZmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgaXNuJiMzOTt0IGl0PyBJdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCBzdWdnZXN0aW5nIGl0cyBpbnZvbHZlbWVudCBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZS4KCk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBgZGVmZXJfa2ZyZWVfcmN1YCBpbiBgbW0vc2x1Yi5jYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBjYW4gcXVpY2tseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIHRoZXJlIHRvIGZpZ3VyZSBvdXQgaG93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYmVpbmcgY2FsbGVkIGFuZCBnZXQgYSBzZW5zZSBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9OTQ5PXZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpO1xubW0vc2xhYi5oOjk1MDp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbm1tL3NsYWIuaC05NTEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjEtZmFsbGJhY2s6XG5tbS9zbGFiX2NvbW1vbi5jOjEzMjI6XHRkZWZlcl9rZnJlZV9yY3UoaGVhZCk7XG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxuLS1cbm1tL3NsdWIuYz02NDUzPXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTY0NjUtXG5tbS9zbHViLmM6NjQ2Njp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxubW0vc2x1Yi5jLTY0Njcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IGBkZWZlcl9rZnJlZV9yY3VgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBwcm9iYWJseSBjcnVjaWFsIGZvciBkZWZlcnJpbmcgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggUkNVLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZD8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCwgc3RhcnRpbmcgd2l0aCBga3ZmcmVlX2NhbGxfcmN1YCBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgc29saWQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaD05ODU9c3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDAtICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEwMTp2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDItdm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExNS1cdFx0X19faGVhZCA9IChzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICopIFx1MDAyNihfX19wKS1cdTAwM2VrdnJoZjtcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTExNjpcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExNy1cdH1cdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjQtXHRpZiAoX19fcClcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMjU6XHRcdGt2ZnJlZV9jYWxsX3JjdShOVUxMLCAodm9pZCAqKSAoX19fcCkpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjYtfSB3aGlsZSAoMClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjctXG5tbS9zbGFiX2NvbW1vbi5jOjEzMjg6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjkte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTM0MC19XG5tbS9zbGFiX2NvbW1vbi5jOjEzNDE6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX2NhbGxfcmN1KTtcbm1tL3NsYWJfY29tbW9uLmMtMTM0Mi1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE5OTk9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMDE3LSAqXG5tbS9zbGFiX2NvbW1vbi5jOjIwMTg6ICogRWFjaCBrdmZyZWVfY2FsbF9yY3UoKSByZXF1ZXN0IGlzIGFkZGVkIHRvIGEgYmF0Y2guIFRoZSBiYXRjaCB3aWxsIGJlIGRyYWluZWRcbm1tL3NsYWJfY29tbW9uLmMtMjAxOS0gKiBldmVyeSBLRlJFRV9EUkFJTl9KSUZGSUVTIG51bWJlciBvZiBqaWZmaWVzLiBBbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJhdGNoIHdpbGxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMjItICovXG5tbS9zbGFiX2NvbW1vbi5jOjIwMjM6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0yMDI0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwOTUtfVxubW0vc2xhYl9jb21tb24uYzoyMDk2OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XG5tbS9zbGFiX2NvbW1vbi5jLTIwOTctXG4tLVxubW0vc2x1Yi5jPTYwMjU9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3NsdWIuYy02MDgyLS8qXG5tbS9zbHViLmM6NjA4MzogKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYy02MDg0LSAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jOjYwODU6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbm1tL3NsdWIuYy02MDg2LSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC5cbi0tXG5tbS9zbHViLmM9NjQwNT1zdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4tLVxubW0vc2x1Yi5jLTY0NDQtXG5tbS9zbHViLmM6NjQ0NTpcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xubW0vc2x1Yi5jLTY0NDYtXHR9XG4tLVxucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzPTE2Mj0gICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuLS1cbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzQtICAgICAgICAvLyBTQUZFVFk6IFRoaXMgd2FzIGFsbG9jYXRlZCB1c2luZyBgS0JveDo6cGluX2luaXRgLCBzbyBpdCBjYW4gYmUgZnJlZWQgd2l0aCBga3ZmcmVlYC5cbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5yczoxNzU6ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6a3ZmcmVlX2NhbGxfcmN1KCgqcHRyKS5yY3UuZ2V0KCksIHB0ci5jYXN0OjpcdTAwM2NmZmk6OmNfdm9pZFx1MDAzZSgpKSB9O1xucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzLTE3Ni0gICAgfVxuLS1cbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g9MjA9ZmlcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g6MjE6YnBmdHJhY2UgLWUgJiMzOTtrcHJvYmU6a3ZmcmVlX2NhbGxfcmN1LFxudG9vbHMvcmN1L3JjdS11cGRhdGVycy5zaC0yMi1cdCAgICAga3Byb2JlOmNhbGxfcmN1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk4MwoJCQkJCQkJb3V0cHV0OiAyODAKCQkJCQkJCXRob3VnaHRzOiAxNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgYW5kIFNMVUIgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIGFkZGluZyBga2ZyZWVfcmN1X25vbG9ja2AsIGVzc2VudGlhbGx5IGFsbG93aW5nIGZvciBsb2NrbGVzcyBvYmplY3QgZnJlZWluZyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgYWRqdXN0bWVudHMgdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIHRoZSBzbGFiIGZyZWVpbmcgcGF0aC4KCkxvb2tpbmcgaW50byBpdCwgdGhlIGBrZnJlZV9yY3Vfbm9sb2NrYCBtYWNybyBsZXZlcmFnZXMgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHdoaWNoIHRoZW4gcHJvYmFibHkgd29ya3Mgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLCBhbmQgdGhlIHBhdGNoaW5nIGludHJvZHVjZXMgYSBgZnJlZV9mbGFnc2AgcGFyYW1ldGVyIHRvIGl0LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBmbGV4aWJsZSBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGZvciBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgYFNMQUJfRlJFRV9OT0xPQ0tgIGluIHRoZSBgUFJFRU1QVF9SVGAgY2FzZS4gVGhlIHVzZSBvZiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtgIGFuZCB0aGUgY2hlY2tzIHdpdGggYGlycXNfZGlzYWJsZWQoKWAgaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGNsZXZlcmx5IGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIHRoZSBpbW1lZGlhdGUgZnJlZWluZyBvZiB0aGUgb2JqZWN0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgc3ltYm9scywgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIHRoZSBwcmltYXJ5IEFQSSBlbnRyeSBwb2ludHM6CiogICBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCAoVGhpcyBpcyBleHBvcnRlZCkKKiAgIGBrdmZyZWVfY2FsbF9yY3VgCiogICBgX19rZnJlZV9yY3Vfc2hlYWZgCiogICBgZGVmZXJfa2ZyZWVfcmN1YAoqICAgYGRlZmVycmVkX3dvcmtfYmFycmllcmAKKiAgIGBrdmZyZWVfcmN1X2JhcnJpZXJgCiogICBga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlYAoKSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgdGVzdCBzdWl0ZSwgYFNMVUJfS1VOSVRfVEVTVGAsIHVzZXMgYFBFUkZfRVZFTlRTYCBhbmQgYEtQUk9CRVNgIGluIGFkZGl0aW9uIHRvIGBTTVBgIHRvIGNvdmVyIHRoZSBuZXcgbG9ja2xlc3MgZnJlZWluZyBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgdGVzdHMgdXNlIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzIGluZGljYXRlcyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3MuIEFuZCwgc2luY2UgaXQmIzM5O3MgYW4gUkNVLXJlbGF0ZWQgY2hhbmdlLCB3ZSBzaG91bGQgYmUgdXNpbmcgUkNVIGluIGFuIFNNUCBlbnZpcm9ubWVudC4KClNvLCBmb3IgZnVsbCBjb3ZlcmFnZSwgSSB3aWxsIGluY2x1ZGUgdGhlc2UgY29uZmlnczoKKiAgIGBTTFVCX0tVTklUX1RFU1RgCiogICBgS1VOSVRgCiogICBgU0xVQl9ERUJVR2AKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBLUFJPQkVTYAoqICAgYFNNUGAKKiAgIGBLVkZSRUVfUkNVX0JBVENIRURgIChFdmVuIHRob3VnaCBpdCYjMzk7cyB0aGUgZGVmYXVsdCwgbGV0JiMzOTtzIGJlIGV4cGxpY2l0KQoKR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIG1lY2hhbmlzbXMsIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHRoaXMgc2V0IG9mIGNvbmZpZ3MgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7S1VOSVQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U0xVQl9ERUJVRyYjMzQ7LAogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAgICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDssCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF93b3JrX2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O2t2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUJfS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtLVU5JVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7LAogICAgJiMzNDtTTFVCX0RFQlVHJiMzNDssCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7LAogICAgJiMzNDtrdmZyZWVfY2FsbF9yY3UmIzM0OywKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7ZGVmZXJfa2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3dvcmtfYmFycmllciYjMzQ7LAogICAgJiMzNDtrdmZyZWVfcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjE0LjgyMDk3MDI5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTgwNzc2ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTFVCX0tVTklUX1RFU1RcIixcbiAgICBcIktVTklUXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiU01QXCIsXG4gICAgXCJTTFVCX0RFQlVHXCIsXG4gICAgXCJLVkZSRUVfUkNVX0JBVENIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9jYWxsX3JjdV9ub2xvY2tcIixcbiAgICBcImt2ZnJlZV9jYWxsX3JjdVwiLFxuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImRlZmVyX2tmcmVlX3JjdVwiLFxuICAgIFwiZGVmZXJyZWRfd29ya19iYXJyaWVyXCIsXG4gICAgXCJrdmZyZWVfcmN1X2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MTQuODIwOTc2OTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAxNDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NmJiNzU2NWE4ZWNmNDdjOWY1MjI1OGYxNmM1NDA4MTJiMzM4MzNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE0OjQzOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxcbmluZGV4IDVlOTVhY2MzMzk4OWIuLmFlZGU3N2JkMDM4NzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXFxuQEAgLTEwOTgsMTkgKzEwOTgsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpXFxuIC8qXFxuICAqIEluIG1tL3NsYWJfY29tbW9uLmMsIG5vIHN1aXRhYmxlIGhlYWRlciB0byBpbmNsdWRlIGhlcmUuXFxuICAqL1xcbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuIFxcbiAvKlxcbiAgKiBUaGUgQlVJTERfQlVHX09OKCkgbWFrZXMgc3VyZSB0aGUgcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBoYW5kbGVkLiBTZWUgdGhlXFxuICAqIGNvbW1lbnQgb2Yga2ZyZWVfcmN1KCkgZm9yIGRldGFpbHMuXFxuICAqL1xcbi0jZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCByaGYpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAoX19fcCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCByaGYpIFxcdTAwM2U9IDQwOTYpO1xcdFxcXFxcXG4tXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KFxcdTAwMjYoKF9fX3ApLVxcdTAwM2VyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG4rXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFxcXFxcbitcXHRcXHRfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgXFx1MDAyNihfX19wKS1cXHUwMDNla3ZyaGY7XFx0XFxcXFxcbitcXHRcXHRrdmZyZWVfY2FsbF9yY3UoX19faGVhZCwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXHRcXFxcXFxuIFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0gd2hpbGUgKDApXFxuIFxcbkBAIC0xMTIyLDYgKzExMjUsMjcgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7XFx0XFx0XFxcXFxcbiB9IHdoaWxlICgwKVxcbiBcXG4rLyoqXFxuKyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXFxuKyAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cXG4rICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci5cXG4rICpcXG4rICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbisgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXFxuKyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxcbisgKlxcbisgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxcbisgKi9cXG4rI2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoX19fcCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbitcXHRcXHRrZnJlZV9jYWxsX3JjdV9ub2xvY2soXFx1MDAyNigoX19fcCktXFx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXFxcXFxuK1xcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXRcXG4gICogYW4gVU5MT0NLK0xPQ0sgcGFpciBhY3RzIGFzIGEgZnVsbCBiYXJyaWVyLiAgVGhpcyBndWFyYW50ZWUgYXBwbGllc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuaW5kZXggZTE5MTUwMjZlMDMwNC4uY2RhMTI2ZGVmNjdhZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTE0MzAsMjUgKzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcXG4gdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbi17XFxuLVxcdHJjdV9iYXJyaWVyKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLXtcXG4tXFx0cmN1X2JhcnJpZXIoKTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKSB7IH1cXG4gI2Vsc2VcXG4rdm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7XFxuKyNlbmRpZlxcbitcXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XFxuIFxcbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbi12b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKTtcXG4tI2VuZGlmXFxuLVxcbiAvKipcXG4gICoga21hbGxvY19zaXplX3JvdW5kdXAgLSBSZXBvcnQgYWxsb2NhdGlvbiBidWNrZXQgc2l6ZSBmb3IgdGhlIGdpdmVuIHNpemVcXG4gICpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oXFxuaW5kZXggYmM1ZGRhMmEzZDg2MS4uNzliZjQxOWM2OWU0NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcXG5AQCAtMjU3LDYgKzI1NywxNCBAQCBzdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTtcXG4gI2RlZmluZSByY3VfaGVhZCBjYWxsYmFja19oZWFkXFxuIFxcbisjaWZkZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbitzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHtcXG4rXFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcXG4rfTtcXG4rI2Vsc2VcXG4rI2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWRcXG4rI2VuZGlmXFxuK1xcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gdHlwZWRlZiB2b2lkICgqY2FsbF9yY3VfZnVuY190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxcbmluZGV4IDVmYmRhYmUzZmFlYWQuLmE3NDAyNzEyNmEyZmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxcbkBAIC02MjUsNyArNjI1LDcgQEAgVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2VfY2FsbGJhY2ssXFxuICAqL1xcbiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssXFxuIFxcbi1cXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLFxcbitcXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcXG4gXFxuIFxcdFRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLFxcbiBcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL3NsdWJfa3VuaXQuYyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcXG5pbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcXG4rKysgYi9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2twcm9iZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIi4uL21tL3NsYWIuaFxcXCJcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XFxuQEAgLTE2MSw3ICsxNjIsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX3JlZHpvbmVfYWNjZXNzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gfVxcbiBcXG4gc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCB7XFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0XFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCBrdnJjdTtcXG4rXFx0fTtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3Rfa2ZyZWVfcmN1KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5AQCAtMjkyLDE5ICsyOTYsNzYgQEAgc3RhdGljIHZvaWQgdGVzdF9rcmVhbGxvY19yZWR6b25lX3plcm9pbmcoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocyk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4rI2lmIGRlZmluZWQoQ09ORklHX1BFUkZfRVZFTlRTKSB8fCAoZGVmaW5lZChDT05GSUdfS1BST0JFUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcXG4gI2RlZmluZSBOUl9JVEVSQVRJT05TIDEwMDBcXG4gI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDBcXG4tc3RhdGljIHZvaWQgKm9iamVjdHNbTlJfT0JKRUNUU107XFxuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdO1xcbiBcXG4gc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQge1xcbiBcXHRzdHJ1Y3Qga3VuaXQgKnRlc3Q7XFxuIFxcdGludCBjYWxsYmFja19jb3VudDtcXG4gXFx0aW50IGFsbG9jX29rO1xcbiBcXHRpbnQgYWxsb2NfZmFpbDtcXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuKyNlbmRpZlxcbisjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxcbitcXHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHModm9pZClcXG4re1xcbitcXHRpbnQgaSwgajtcXG4rXFx0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lURVJBVElPTlM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfT0JKRUNUUzsgaisrKSB7XFxuK1xcdFxcdFxcdGdmcF90IGdmcCA9IChpIFxcdTAwMjYgMSkgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xcbitcXG4rXFx0XFx0XFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xcbitcXHRcXHRcXHRpZiAoIW9iamVjdHNbal0pIHtcXG4rXFx0XFx0XFx0XFx0ai0tO1xcbitcXHRcXHRcXHRcXHR3aGlsZSAoaiBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRcXHRrZnJlZShvYmplY3RzW2otLV0pO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xcbitcXHRcXHRcXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGkgXFx1MDAyNiAyKSlcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KG9iamVjdHNbal0sIHJjdSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0a2ZyZWUob2JqZWN0c1tqXSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7XFxuK1xcdGdmcF90IGdmcDtcXG4rXFx0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xcbitcXG4rXFx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXFxuK1xcdGdmcCA9IChjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50IFxcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcXG4rXFx0b2JqcCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZigqb2JqcCksIGdmcCwgTlVNQV9OT19OT0RFKTtcXG4rXFxuK1xcdGlmIChvYmpwKVxcbitcXHRcXHRjdHgtXFx1MDAzZWFsbG9jX29rKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3R4LVxcdTAwM2VhbGxvY19mYWlsKys7XFxuK1xcbitcXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2FsbGJhY2tfY291bnQgXFx1MDAyNiAyKSlcXG4rXFx0XFx0a2ZyZWVfcmN1X25vbG9jayhvYmpwLCBrdnJjdSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCsrO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBod19hdHRyID0ge1xcbiBcXHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcXG4gXFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcXG5AQCAtMzE1LDY3ICszNzYsOTEgQEAgc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgaHdfYXR0ciA9IHtcXG4gXFx0LnNhbXBsZV9mcmVxID0gMTAwMDAwLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3N0YXRpYyB2b2lkIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbi1cXHR2b2lkICpvYmpwO1xcbi1cXHRnZnBfdCBnZnA7XFxuIFxcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHggPSBldmVudC1cXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xcbiBcXG4tXFx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXFxuLVxcdGdmcCA9IChjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcXG4tXFx0b2JqcCA9IGttYWxsb2Nfbm9sb2NrKDY0LCBnZnAsIE5VTUFfTk9fTk9ERSk7XFxuLVxcbi1cXHRpZiAob2JqcClcXG4tXFx0XFx0Y3R4LVxcdTAwM2VhbGxvY19vaysrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGN0eC1cXHUwMDNlYWxsb2NfZmFpbCsrO1xcbi1cXG4tXFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbi1cXHRjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XFxuK1xcdHRlc3Rfbm9sb2NrKGN0eCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgYm9vbCBlbmFibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4tXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcXG4gXFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xcbi1cXHRib29sIGFsbG9jX2ZhaWwgPSBmYWxzZTtcXG4gXFxuIFxcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXFx1MDAyNmh3X2F0dHIsIC0xLCBjdXJyZW50LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmN0eCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfbm9sb2NrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3R4KTtcXG4rXFxuIFxcdGlmIChJU19FUlIoZXZlbnQpKVxcbi1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHBlcmYgZXZlbnRcXFwiKTtcXG4tXFx0Y3R4LmV2ZW50ID0gZXZlbnQ7XFxuLVxcdHBlcmZfZXZlbnRfZW5hYmxlKGN0eC5ldmVudCk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9JVEVSQVRJT05TOyBpKyspIHtcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xcbi1cXHRcXHRcXHRnZnBfdCBnZnAgPSAoaSAlIDIpID8gR0ZQX0tFUk5FTCA6IEdGUF9LRVJORUxfQUNDT1VOVDtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0XFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XFxuLVxcdFxcdFxcdGlmICghb2JqZWN0c1tqXSkge1xcbi1cXHRcXHRcXHRcXHRqLS07XFxuLVxcdFxcdFxcdFxcdHdoaWxlIChqIFxcdTAwM2U9IDApXFxuLVxcdFxcdFxcdFxcdFxcdGtmcmVlKG9iamVjdHNbai0tXSk7XFxuLVxcdFxcdFxcdFxcdGFsbG9jX2ZhaWwgPSB0cnVlO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfT0JKRUNUUzsgaisrKVxcbi1cXHRcXHRcXHRrZnJlZShvYmplY3RzW2pdKTtcXG4tXFx0fVxcbitcXHRjdHgtXFx1MDAzZWV2ZW50ID0gZXZlbnQ7XFxuK1xcdHBlcmZfZXZlbnRfZW5hYmxlKGN0eC1cXHUwMDNlZXZlbnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGt1bml0X2luZm8oY3R4LVxcdTAwM2V0ZXN0LCBcXFwiSFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgY3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVxcdTAwM2VhbGxvY19vaywgY3R4LVxcdTAwM2VhbGxvY19mYWlsKTtcXG4rXFxuK1xcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXFx1MDAzZWV2ZW50KTtcXG4rXFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHgtXFx1MDAzZWV2ZW50KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9O1xcbiBcXG4tY2xlYW51cDpcXG4tXFx0cGVyZl9ldmVudF9kaXNhYmxlKGN0eC5ldmVudCk7XFxuLVxcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LmV2ZW50KTtcXG4rXFx0aWYgKCFlbmFibGVfcGVyZl9ldmVudHMoXFx1MDAyNmN0eCkpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcIkZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcXFwiKTtcXG4gXFxuLVxcdGt1bml0X2luZm8odGVzdCwgXFxcImNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgY3R4LmNhbGxiYWNrX2NvdW50LCBjdHguYWxsb2Nfb2ssIGN0eC5hbGxvY19mYWlsKTtcXG4rXFx0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XFxuIFxcbi1cXHRpZiAoYWxsb2NfZmFpbClcXG4tXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiQWxsb2NhdGlvbiBmYWlsZWRcXFwiKTtcXG4rXFx0ZGlzYWJsZV9wZXJmX2V2ZW50cyhcXHUwMDI2Y3R4KTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuK3N0YXRpYyBpbnQgc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eDtcXG4rXFxuK1xcdGN0eCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCwga3Byb2JlKTtcXG4rXFx0dGVzdF9ub2xvY2soY3R4KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGN0eC1cXHUwMDNla3Byb2JlLnN5bWJvbF9uYW1lID0gXFxcInNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWRcXFwiO1xcbitcXHRjdHgtXFx1MDAzZWtwcm9iZS5wcmVfaGFuZGxlciA9IHNsYWJfa3Byb2JlX3ByZV9oYW5kbGVyO1xcbitcXG4rXFx0aWYgKHJlZ2lzdGVyX2twcm9iZShcXHUwMDI2Y3R4LVxcdTAwM2VrcHJvYmUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGt1bml0X2luZm8oY3R4LVxcdTAwM2V0ZXN0LCBcXFwia3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50LCBjdHgtXFx1MDAzZWFsbG9jX29rLCBjdHgtXFx1MDAzZWFsbG9jX2ZhaWwpO1xcbitcXHR1bnJlZ2lzdGVyX2twcm9iZShcXHUwMDI2Y3R4LVxcdTAwM2VrcHJvYmUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcXG4rXFxuK1xcdGlmICghcmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFxcdTAwMjZjdHgpKVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIga3Byb2JlLCBza2lwcGluZ1xcXCIpO1xcbitcXG4rXFx0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XFxuK1xcbitcXHR1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhcXHUwMDI2Y3R4KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTtcXG4gfVxcbiAjZW5kaWZcXG5AQCAtNDA1LDcgKzQ5MCwxMCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSxcXG4gXFx0S1VOSVRfQ0FTRSh0ZXN0X2tyZWFsbG9jX3JlZHpvbmVfemVyb2luZyksXFxuICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4tXFx0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2spLFxcbitcXHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKSxcXG4rI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuK1xcdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZSksXFxuICNlbmRpZlxcbiBcXHR7fVxcbiB9O1xcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcXG5pbmRleCBlMDFjMTAxNWI4YzhkLi44ZmQ2ODM1ZTQyMzUyIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC0yNCwxMSArMjQsMjcgQEBcXG4gI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xcbiAjZGVmaW5lIFNMQUJfQUxMT0NfTk9fT0JKX0VYVFxcdDB4MDggLyogcHJldmVudCBvYmpfZXh0cyBhcnJheSBhbGxvY2F0aW9uICovXFxuIFxcbisjZGVmaW5lIFNMQUJfRlJFRV9ERUZBVUxUXFx0MHgwMCAvKiBubyBmbGFncyAqL1xcbisjZGVmaW5lIFNMQUJfRlJFRV9OT0xPQ0tcXHQweDAxIC8qIHNwaW5uaW5nIG5vdCBhbGxvd2VkICovXFxuK1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4re1xcbitcXHRpZiAoZnJlZV9mbGFncyBcXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXFxuK1xcdFxcdHJldHVybiBTTEFCX0FMTE9DX05PTE9DSztcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAhKGFsbG9jX2ZsYWdzIFxcdTAwMjYgU0xBQl9BTExPQ19OT0xPQ0spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gIShmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSyk7XFxuK31cXG4rXFxuIHZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbiBcXHRcXHRcXHRcXHQgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTtcXG5AQCAtMzMxLDYgKzM0NywzNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbiBcXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4gfVxcbiBcXG4rLypcXG4rICoga3ZmcmVlX3JjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplLlxcbisgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkICprdm1hbGxvY19vYmpfc3RhcnRfYWRkcih2b2lkICpoZWFkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihoZWFkKSkpIHtcXG4rXFx0XFx0b2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGVhZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKGhlYWQpO1xcbitcXG4rXFx0XFx0aWYgKCFzbGFiKSB7XFxuK1xcdFxcdFxcdG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlzX2tmZW5jZV9hZGRyZXNzKGhlYWQpKSB7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBpZHggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIGhlYWQpO1xcbitcXHRcXHRcXHR2b2lkICpvYmogPSBzbGFiX2FkZHJlc3Moc2xhYikgKyBzLVxcdTAwM2VzaXplICogaWR4O1xcbitcXG4rXFx0XFx0XFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcXG4rXFx0XFx0XFx0b2JqID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKSAtIG9iajtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaGVhZCAtIG9mZnNldDtcXG4rfVxcbitcXG4gLypcXG4gICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLlxcbiAgKlxcbkBAIC00MzEsNyArNDc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXHRyZXR1cm4gIShzLVxcdTAwM2VmbGFncyBcXHUwMDI2IChTTEFCX0NBQ0hFX0RNQXxTTEFCX0FDQ09VTlR8U0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9OT19PQkpfRVhUKSk7XFxuIH1cXG4gXFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaik7XFxuK2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xcbiB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbkBAIC04OTksNyArOTQ2LDggQEAgdm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxcbiBcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcik7XFxuIFxcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTtcXG4rdm9pZCBkZWZlcnJlZF93b3JrX2JhcnJpZXIodm9pZCk7XFxuK3ZvaWQgZGVmZXJfa2ZyZWVfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHNsdWJfZGVidWdfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggMWUxZDNmZWVjMzUzNS4uYjhmMjFlYWJjY2NjMiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC01NTgsNyArNTU4LDcgQEAgdm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXFxuLVxcdGRlZmVyX2ZyZWVfYmFycmllcigpO1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4gXFxuIFxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNsYWJfbXV0ZXgpO1xcbkBAIC0xMjk2LDYgKzEyOTYsMzMgQEAgRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpO1xcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTtcXG4gXFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4re1xcbitcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcXG4rXFx0XFx0Z290byBmYWxsYmFjaztcXG4rXFxuK1xcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIocHRyKSkpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRzbGFiID0gdmlydF90b19zbGFiKHB0cik7XFxuK1xcdGlmICh1bmxpa2VseSghc2xhYikpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgc2xhYl9uaWQoc2xhYikgIT0gbnVtYV9tZW1faWQoKSkpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxcbitcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXG4rXFx0cmV0dXJuO1xcbitcXG4rZmFsbGJhY2s6XFxuK1xcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbitcXG4gI2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuIFxcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG5AQCAtMTMxMyw2ICsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XFxuIFxcbit2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbit7XFxuK1xcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbitcXHRyY3VfYmFycmllcigpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxuK1xcbit2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4re1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4rXFx0cmN1X2JhcnJpZXIoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xcbitcXG4gdm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXFxuIHtcXG4gfVxcbkBAIC0xMzc5LDcgKzE0MjAsNyBAQCBzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEge1xcbiBcXG4gc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XFxuIFxcdHN0cnVjdCByY3Vfd29yayByY3Vfd29yaztcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpoZWFkX2ZyZWU7XFxuK1xcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWRfZnJlZTtcXG4gXFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRfZnJlZVtGUkVFX05fQ0hBTk5FTFNdO1xcbiBcXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcXG5AQCAtMTQxNSw3ICsxNDU2LDcgQEAgc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XFxuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcXG4gXFx0Ly8gT2JqZWN0cyBxdWV1ZWQgb24gYSBsaW5rZWQgbGlzdFxcbiBcXHQvLyB0aHJvdWdoIHRoZWlyIHJjdV9oZWFkIHN0cnVjdHVyZXMuXFxuLVxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcXG4rXFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7XFxuIFxcdGF0b21pY190IGhlYWRfY291bnQ7XFxuIFxcbkBAIC0xNTU2LDEyICsxNTk3LDEyIEBAIGt2ZnJlZV9yY3VfYnVsayhzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG4ta3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ra3ZmcmVlX3JjdV9saXN0KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpXFxuIHtcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpuZXh0O1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpuZXh0O1xcbiBcXG4gXFx0Zm9yICg7IGhlYWQ7IGhlYWQgPSBuZXh0KSB7XFxuLVxcdFxcdHZvaWQgKnB0ciA9ICh2b2lkICopIGhlYWQtXFx1MDAzZWZ1bmM7XFxuK1xcdFxcdHZvaWQgKnB0ciA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh2b2lkICopIGhlYWQgLSBwdHI7XFxuIFxcbiBcXHRcXHRuZXh0ID0gaGVhZC1cXHUwMDNlbmV4dDtcXG5AQCAtMTU4NSw3ICsxNjI2LDcgQEAgc3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRbRlJFRV9OX0NIQU5ORUxTXTtcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkO1xcbiBcXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcXG4gXFx0c3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDtcXG4gXFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2dwX3NuYXA7XFxuQEAgLTE2MjgsNiArMTY2OSwxNCBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFx0dW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcXG4rXFx0ICogaG9sZGluZyBhIHJhdyBzcGlubG9jayBhbmQgc2xhYiBhY3F1aXJlcyBzbGVlcGluZyBsb2Nrcy5cXG4rXFx0ICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XFxuIFxcbiBcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTYzOCw3ICsxNjg3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4gXFxuIFxcdHMgPSBzbGFiLVxcdTAwM2VzbGFiX2NhY2hlO1xcbiBcXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG4tXFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaik7XFxuK1xcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuQEAgLTE3MDgsNyArMTc1Nyw3IEBAIGt2ZnJlZV9yY3VfZHJhaW5fcmVhZHkoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXFxuIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX3JlYWR5W0ZSRUVfTl9DSEFOTkVMU107XFxuIFxcdHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqYm5vZGUsICpuO1xcbi1cXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC0xOTcxLDcgKzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcXG4gICogYmUgZnJlZSdkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG9cXG4gICogcmVkdWNlIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcyBkdXJpbmcgaGVhdnkga2ZyZWVfcmN1KCkva3ZmcmVlX3JjdSgpIGxvYWQuXFxuICAqL1xcbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4rdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xcbkBAIC0xOTg3LDcgKzIwMzYsNyBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiBcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcXG4rXFx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxcbkBAIC0yMDA5LDcgKzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0XFx0XFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cXG4gXFx0XFx0XFx0Z290byB1bmxvY2tfcmV0dXJuO1xcbiBcXG4tXFx0XFx0aGVhZC1cXHUwMDNlZnVuYyA9IHB0cjtcXG4gXFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IGtyY3AtXFx1MDAzZWhlYWQ7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoa3JjcC1cXHUwMDNlaGVhZCwgaGVhZCk7XFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmtyY3AtXFx1MDAzZWhlYWRfY291bnQpO1xcbkBAIC0yMTQyLDE3ICsyMTkwLDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxuICAqL1xcbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbitcXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4rXFxuIFxcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbiBcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbiBcXHRcXHRmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzKTtcXG4gXFx0XFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyY3VfYmFycmllcigpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3Jrc1xcbi1cXHQgKiBvbiBhIHNwZWNpZmljIHNsYWIgY2FjaGUuXFxuLVxcdCAqL1xcbitcXHRyY3VfYmFycmllcigpO1xcbiBcXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IGFkZTE3Zjg0ZTU4MzIuLmJhMmYyMDgyNjJiZjYgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQyNCw2ICs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGJhcm5fbGlzdDtcXG4rXFx0XFx0Lyogb25seSB1c2VkIHRvIGRlZmVyIGNhbGxfcmN1KCkgaW4gdW5rbm93biBjb250ZXh0ICovXFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcXG4gXFx0XFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBjYXBhY2l0eTtcXG5AQCAtOTA2LDYgKzkwOCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogQSBuby1vcCBmdW5jdGlvbiB1c2VkIHRvIGF0dGFjaCBrcHJvYmUgaGFuZGxlcnMgaW4gc2x1Yl9rdW5pdCB0ZXN0cy5cXG4rICogVGhlIGJhcnJpZXIgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gb3B0aW1pemluZyBvdXQgY2FsbHNpdGVzLlxcbisgKi9cXG4rI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXFxuK3tcXG4rXFx0YmFycmllcigpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuKyNkZWZpbmUgc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKGxvY2spIGRvIHtcXHRcXFxcXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XFx0XFx0XFxcXFxcbitcXHRzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKCk7XFx0XFxcXFxcbit9IHdoaWxlICgwKVxcbitcXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxuIFxcbiAvKlxcbkBAIC0xNjYzLDcgKzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0aWYgKCEocy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QsIFxcdTAwMjZuLVxcdTAwM2VmdWxsKTtcXG4gfVxcbiBcXG5AQCAtMTY3Miw3ICsxNjkyLDcgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdFxcbiBcXHRpZiAoIShzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCk7XFxuIH1cXG4gXFxuQEAgLTI4MTYsNyArMjgzNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4rc3RhdGljIHZvaWQgX19mcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0c1xcbkBAIC0yODI4LDExICsyODQ5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4gXFx0XFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0Uoc2hlYWYtXFx1MDAzZXNpemUgXFx1MDAzZSAwKTtcXG4tXFx0a2ZyZWUoc2hlYWYpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG4rXFx0XFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrZnJlZShzaGVhZik7XFxuIFxcbiBcXHRzdGF0KHMsIFNIRUFGX0ZSRUUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuK3tcXG4rXFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnRcXG4gcmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuIFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcXG5AQCAtMjg4NSw3ICsyOTE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XFxuIFxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG4gXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaykpO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaykpO1xcbiBcXG4gXFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG4gXFx0c2hlYWYgPSBwY3MtXFx1MDAzZW1haW47XFxuQEAgLTM1NzAsNyArMzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGFkZF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXFxuIHtcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbiBcXHRfX2FkZF9wYXJ0aWFsKG4sIHNsYWIsIG1vZGUpO1xcbiB9XFxuIFxcbkBAIC0zNTg0LDcgKzM2MTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbiBcXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XFxuIH1cXG5AQCAtMzYwMCw3ICszNjMwLDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIHtcXG4gXFx0dm9pZCAqb2JqZWN0O1xcbiBcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbiBcXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxuIFxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XFxuQEAgLTQwNjksNiArNDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHtcXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XFxuK1xcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxcbitcXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxcbitcXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxcbitcXHQud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbkBAIC00MTI4LDYgKzQxNzQsOCBAQCB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbiBcXG4rXFx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XFxuK1xcbiBcXHRjcHVzX3JlYWRfbG9jaygpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGFiX211dGV4KTtcXG4gXFxuQEAgLTQ2NjUsNyArNDcxMyw3IEBAIF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcXG4gXFx0c3RydWN0IG5vZGVfYmFybiAqYmFybjtcXG4gXFx0Ym9vbCBhbGxvd19zcGluO1xcbiBcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuIFxcbiBcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXFxuIFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTU3ODMsNyArNTgzMSw3IEBAIHN0YXRpYyB2b2lkIF9fcGNzX2luc3RhbGxfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsIHN0cnVjdCBzbGFiX3NoZWFmICplbXB0eSxcXG4gXFx0XFx0c3RydWN0IG5vZGVfYmFybiAqYmFybilcXG4ge1xcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG4gXFxuIFxcdC8qIFRoaXMgaXMgd2hhdCB3ZSBleHBlY3QgdG8gZmluZCBpZiBub2JvZHkgaW50ZXJydXB0ZWQgdXMuICovXFxuIFxcdGlmIChsaWtlbHkoIXBjcy1cXHUwMDNlc3BhcmUpKSB7XFxuQEAgLTU4MzQsNyArNTg4Miw3IEBAIF9fcGNzX3JlcGxhY2VfZnVsbF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbiBcXHRib29sIHB1dF9mYWlsO1xcbiBcXG4gcmVzdGFydDpcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuIFxcbiBcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXFxuIFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTYwMzUsMjQgKzYwODMsMjYgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxuICAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXFxuLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC5cXG4rICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxcbiAgKlxcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXFxuICAqIHNwaW5uaW5nIGxvY2suIFRlbGwgbG9ja2RlcCB0aGF0IGFjcXVpcmluZyBzcGlubG9ja190IGlzIHZhbGlkIGhlcmVcXG4tICogYnkgdGVtcG9yYXJpbHkgcmFpc2luZyB0aGUgd2FpdC10eXBlIHRvIExEX1dBSVRfQ09ORklHLlxcbisgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwXFxuKyAqIG9uIFBSRUVNUFRfUlQgdG8gYXZvaWQgc3VwcHJlc3NpbmcgdmFsaWQgbG9ja2RlcCB3YXJuaW5ncy5cXG4gICovXFxuIHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbiBcXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbitib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxuIFxcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XFxuK1xcdGJvb2wgYWxsb3dfc3BpbiA9IGZyZWVfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZnJlZV9mbGFncyk7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbik7XFxuIFxcbi1cXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4gXFxuIFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTYwNjAsOSArNjExMCwxMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuIFxcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBjcy1cXHUwMDNlcmN1X2ZyZWUpKSB7XFxuLVxcbiBcXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XFxuIFxcdFxcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XFxuK1xcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xcbitcXHRcXHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcXG4gXFxuIFxcdFxcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovXFxuIFxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTYwODIsNyArNjEzMyw3IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIHRydWUpO1xcbitcXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xcbiBcXG4gXFx0XFx0aWYgKGVtcHR5KSB7XFxuIFxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcXG5AQCAtNjA5MSwyMCArNjE0MiwyMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuIFxcbiBcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdFxcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTtcXG4rXFx0XFx0ZW1wdHkgPSBhbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmICghZW1wdHkpXFxuIFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gXFxuIFxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKSB7XFxuLVxcdFxcdFxcdGJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTtcXG4rXFx0XFx0XFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHBjcy1cXHUwMDNlcmN1X2ZyZWUpKVxcbi1cXHRcXHRcXHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XFxuK1xcdFxcdFxcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cGNzLVxcdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xcbiBcXHR9XFxuQEAgLTYxMzAsMTggKzYxODEsMzQgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbiBcXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xcbiBcXHQgKiBmbHVzaF9hbGxfcmN1X3NoZWF2ZXMoKSBkb2Vzbid0IG1pc3MgdGhpcyBzaGVhZlxcbiBcXHQgKi9cXG4tXFx0aWYgKHJjdV9zaGVhZilcXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9zaGVhZi1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcXG4rXFx0aWYgKHJjdV9zaGVhZikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCknc1xcbitcXHRcXHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxcbitcXHRcXHQgKiB3ZSBrbm93IHRoYXQncyBub3QgdGhlIGNhc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFxuK1xcdFxcdFxcdGRwdyA9IHRoaXNfY3B1X3B0cihcXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZyY3Vfc2hlYWYtXFx1MDAzZWxsbm9kZSwgXFx1MDAyNmRwdy1cXHUwMDNlcmN1X3NoZWF2ZXMpKVxcbitcXHRcXHRcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2ZHB3LVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9zaGVhZi1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUYpO1xcbi1cXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiBcXG4gZmFpbDpcXG4gXFx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRl9GQUlMKTtcXG4tXFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTYzMzAsMzEgKzYzOTcsMjIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0cnVjdCBkZWZlcl9mcmVlIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcXG4tXFx0c3RydWN0IGlycV93b3JrIHdvcms7XFxuLX07XFxuLVxcbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKTtcXG4tXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHtcXG4tXFx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXFxuLVxcdC53b3JrID0gSVJRX1dPUktfSU5JVChmcmVlX2RlZmVycmVkX29iamVjdHMpLFxcbi19O1xcbi1cXG4gLypcXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQncyBzYWZlXFxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXFxuICAqIEluICFQUkVFTVBUX1JUIGlycV93b3JrIHdpbGwgcnVuIGFmdGVyIGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbitzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuIHtcXG4tXFx0c3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKm9ianMgPSBcXHUwMDI2ZGYtXFx1MDAzZW9iamVjdHM7XFxuK1xcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XFxuIFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xcbitcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xcbiBcXG4tXFx0aWYgKGxsaXN0X2VtcHR5KG9ianMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xcbitcXHRyY3Vfc2hlYXZlcyA9IFxcdTAwMjZkcHctXFx1MDAzZXJjdV9zaGVhdmVzO1xcbitcXHRvYmpzID0gXFx1MDAyNmRwdy1cXHUwMDNlb2JqZWN0cztcXG4rXFx0b2Jqc19ieV9yY3UgPSBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdTtcXG4gXFxuIFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcXG5AQCAtNjM3OCwyNyArNjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbiBcXHRcXHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xcbiBcXHRcXHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xcbiBcXHR9XFxuK1xcbitcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xcbitcXHRcXHR2b2lkICpoZWFkID0gcG9zO1xcbitcXHRcXHR2b2lkICpvYmpwID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XFxuK1xcbitcXHRcXHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XFxuK1xcdH1cXG4rXFxuK1xcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcXG4rXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnNoZWFmLVxcdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbiB7XFxuLVxcdHN0cnVjdCBkZWZlcl9mcmVlICpkZjtcXG4rXFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XFxuIFxcbiBcXHRndWFyZChwcmVlbXB0KSgpO1xcbiBcXG4gXFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcXG4gXFxuLVxcdGRmID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcl9mcmVlX29iamVjdHMpO1xcbi1cXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVxcdTAwM2VvZmZzZXQsIFxcdTAwMjZkZi1cXHUwMDNlb2JqZWN0cykpXFxuLVxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkZi1cXHUwMDNld29yayk7XFxuK1xcdGRwdyA9IHRoaXNfY3B1X3B0cihcXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xcbitcXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVxcdTAwM2VvZmZzZXQsIFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHMpKVxcbitcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2ZHB3LVxcdTAwM2V3b3JrKTtcXG4rfVxcbitcXG4rdm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG4re1xcbitcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFxuK1xcdGd1YXJkKHByZWVtcHQpKCk7XFxuK1xcbitcXHRkcHcgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcXG4rXFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdSkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKVxcbisvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xcbit2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbi1cXHRcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZwZXJfY3B1X3B0cihcXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzLCBjcHUpLVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cGVyX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrLCBjcHUpLVxcdTAwM2V3b3JrKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxuQEAgLTY2NTcsNDMgKzY3MzksMjEgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuICAqL1xcbiB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdHZvaWQgKm9iaiA9IGhlYWQ7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuLVxcdHZvaWQgKnNsYWJfYWRkcjtcXG4rXFx0dm9pZCAqb2JqO1xcbitcXG4rXFx0b2JqID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XFxuIFxcbiBcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpIHtcXG4tXFx0XFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XFxuIFxcdFxcdHZmcmVlKG9iaik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmopO1xcbi1cXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi1cXHRpZiAoIXNsYWIpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUgc28gbm8gbmVlZCB0b1xcbi1cXHRcXHQgKiBjb25zaWRlciBhbGxvY2F0aW9uIG9yZGVyXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRvYmogPSAodm9pZCAqKSBQQUdFX0FMSUdOX0RPV04oKHVuc2lnbmVkIGxvbmcpb2JqKTtcXG4tXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuLVxcdHNsYWJfYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tXFxuLVxcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmopKSB7XFxuLVxcdFxcdG9iaiA9IGtmZW5jZV9vYmplY3Rfc3RhcnQob2JqKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqKTtcXG4rXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuIFxcbi1cXHRcXHRvYmogPSBzbGFiX2FkZHIgKyBzLVxcdTAwM2VzaXplICogaWR4O1xcbi1cXHRcXHRvYmogPSBmaXh1cF9yZWRfbGVmdChzLCBvYmopO1xcbitcXHRcXHRpZiAoc2xhYilcXG4rXFx0XFx0XFx0c2xhYl9mcmVlKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9iaiwgX1JFVF9JUF8pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xcbiBcXHR9XFxuLVxcbi1cXHRzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0MzoxNS4zNDIyMzgxNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDEyODY0ODc0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQl9LVU5JVF9URVNUXCIsXG4gICAgXCJLVU5JVFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU0xVQl9ERUJVR1wiLFxuICAgIFwiS1ZGUkVFX1JDVV9CQVRDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCIsXG4gICAgXCJrdmZyZWVfY2FsbF9yY3VcIixcbiAgICBcIl9fa2ZyZWVfcmN1X3NoZWFmXCIsXG4gICAgXCJkZWZlcl9rZnJlZV9yY3VcIixcbiAgICBcImRlZmVycmVkX3dvcmtfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyXCIsXG4gICAgXCJrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2YmI3NTY1YThlY2Y0N2M5ZjUyMjU4ZjE2YzU0MDgxMmIzMzgzM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNDo0MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuaW5kZXggNWU5NWFjYzMzOTg5Yi4uYWVkZTc3YmQwMzg3MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXG5AQCAtMTA5OCwxOSArMTA5OCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrX21pZ3JhdGUodm9pZClcbiAvKlxuICAqIEluIG1tL3NsYWJfY29tbW9uLmMsIG5vIHN1aXRhYmxlIGhlYWRlciB0byBpbmNsdWRlIGhlcmUuXG4gICovXG4tdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4rdm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbiBcbiAvKlxuICAqIFRoZSBCVUlMRF9CVUdfT04oKSBtYWtlcyBzdXJlIHRoZSByY3VfaGVhZCBvZmZzZXQgY2FuIGJlIGhhbmRsZWQuIFNlZSB0aGVcbiAgKiBjb21tZW50IG9mIGtmcmVlX3JjdSgpIGZvciBkZXRhaWxzLlxuICAqL1xuLSNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIHJoZilcdFx0XHRcdFx0XFxcbisjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZilcdFx0XHRcdFx0XFxcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XHRcdFx0XHRcdFxcXG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwgcmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbi1cdFx0a3ZmcmVlX2NhbGxfcmN1KFx1MDAyNigoX19fcCktXHUwMDNlcmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4rXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcXFxuK1x0XHRfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgXHUwMDI2KF9fX3ApLVx1MDAzZWt2cmhmO1x0XFxcbitcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0xMTIyLDYgKzExMjUsMjcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRrdmZyZWVfY2FsbF9yY3UoTlVMTCwgKHZvaWQgKikgKF9fX3ApKTtcdFx0XFxcbiB9IHdoaWxlICgwKVxuIFxuKy8qKlxuKyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXG4rICogQHB0cjogcG9pbnRlciB0byBrZnJlZSBmb3IgZG91YmxlLWFyZ3VtZW50IGludm9jYXRpb25zLlxuKyAqIEBrdnJoZjogdGhlIG5hbWUgb2YgdGhlIHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgd2l0aGluIHRoZSB0eXBlIG9mIEBwdHIuXG4rICpcbisgKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG4rICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuKyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxuKyAqXG4rICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cbisgKi9cbisjZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXHUwMDNlPSA0MDk2KTtcdFx0XFxcbitcdFx0a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKFx1MDAyNigoX19fcCktXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1x0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gLypcbiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXRcbiAgKiBhbiBVTkxPQ0srTE9DSyBwYWlyIGFjdHMgYXMgYSBmdWxsIGJhcnJpZXIuICBUaGlzIGd1YXJhbnRlZSBhcHBsaWVzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuaW5kZXggZTE5MTUwMjZlMDMwNC4uY2RhMTI2ZGVmNjdhZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTE0MzAsMjUgKzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcbiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiBcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4te1xuLVx0cmN1X2JhcnJpZXIoKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi17XG4tXHRyY3VfYmFycmllcigpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuICNlbHNlXG4rdm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7XG4rI2VuZGlmXG4rXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XG4gXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpO1xuIFxuLXZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuLSNlbmRpZlxuLVxuIC8qKlxuICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplXG4gICpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaFxuQEAgLTI1Nyw2ICsyNTcsMTQgQEAgc3RydWN0IGNhbGxiYWNrX2hlYWQge1xuIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTtcbiAjZGVmaW5lIHJjdV9oZWFkIGNhbGxiYWNrX2hlYWRcbiBcbisjaWZkZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuK3N0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcbit9O1xuKyNlbHNlXG4rI2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWRcbisjZW5kaWZcbitcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiB0eXBlZGVmIHZvaWQgKCpjYWxsX3JjdV9mdW5jX3QpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuaW5kZXggNWZiZGFiZTNmYWVhZC4uYTc0MDI3MTI2YTJmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuQEAgLTYyNSw3ICs2MjUsNyBAQCBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9jYWxsYmFjayxcbiAgKi9cbiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssXG4gXG4tXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLFxuK1x0VFBfUFJPVE8oY29uc3QgY2hhciAqcmN1bmFtZSwgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqcmhwLCB1bnNpZ25lZCBsb25nIG9mZnNldCksXG4gXG4gXHRUUF9BUkdTKHJjdW5hbWUsIHJocCwgb2Zmc2V0KSxcbiBcbmRpZmYgLS1naXQgYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jIGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuaW5kZXggZmE2ZDMxZGJjYTE2Ni4uZTNiNjNmMDMzOGQ1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcbisrKyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3Byb2Jlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXCIuLi9tbS9zbGFiLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XG5AQCAtMTYxLDcgKzE2MiwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2NfcmVkem9uZV9hY2Nlc3Moc3RydWN0IGt1bml0ICp0ZXN0KVxuIH1cbiBcbiBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0IHtcbi1cdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQga3ZyY3U7XG4rXHR9O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9rZnJlZV9yY3Uoc3RydWN0IGt1bml0ICp0ZXN0KVxuQEAgLTI5MiwxOSArMjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGttZW1fY2FjaGVfZGVzdHJveShzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuKyNpZiBkZWZpbmVkKENPTkZJR19QRVJGX0VWRU5UUykgfHwgKGRlZmluZWQoQ09ORklHX0tQUk9CRVMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApKVxuICNkZWZpbmUgTlJfSVRFUkFUSU9OUyAxMDAwXG4gI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDBcbi1zdGF0aWMgdm9pZCAqb2JqZWN0c1tOUl9PQkpFQ1RTXTtcbitzdGF0aWMgc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCAqb2JqZWN0c1tOUl9PQkpFQ1RTXTtcbiBcbiBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCB7XG4gXHRzdHJ1Y3Qga3VuaXQgKnRlc3Q7XG4gXHRpbnQgY2FsbGJhY2tfY291bnQ7XG4gXHRpbnQgYWxsb2Nfb2s7XG4gXHRpbnQgYWxsb2NfZmFpbDtcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4rI2VuZGlmXG4rI2lmIGRlZmluZWQoQ09ORklHX0tQUk9CRVMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXG4rXHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcbisjZW5kaWZcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcyh2b2lkKVxuK3tcbitcdGludCBpLCBqO1xuK1x0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSVRFUkFUSU9OUzsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xuK1x0XHRcdGdmcF90IGdmcCA9IChpIFx1MDAyNiAxKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7XG4rXG4rXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xuK1x0XHRcdGlmICghb2JqZWN0c1tqXSkge1xuK1x0XHRcdFx0ai0tO1xuK1x0XHRcdFx0d2hpbGUgKGogXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHRrZnJlZShvYmplY3RzW2otLV0pO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqKyspIHtcbitcdFx0XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiAyKSlcbitcdFx0XHRcdGtmcmVlX3JjdShvYmplY3RzW2pdLCByY3UpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXG4re1xuK1x0c3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCAqb2JqcDtcbitcdGdmcF90IGdmcDtcbitcdGJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTtcbitcbitcdC8qIF9fR0ZQX0FDQ09VTlQgdG8gdGVzdCBrbWFsbG9jX25vbG9jaygpIGluIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqL1xuK1x0Z2ZwID0gKGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCBcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcbitcdG9ianAgPSBrbWFsbG9jX25vbG9jayhzaXplb2YoKm9ianApLCBnZnAsIE5VTUFfTk9fTk9ERSk7XG4rXG4rXHRpZiAob2JqcClcbitcdFx0Y3R4LVx1MDAzZWFsbG9jX29rKys7XG4rXHRlbHNlXG4rXHRcdGN0eC1cdTAwM2VhbGxvY19mYWlsKys7XG4rXG4rXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQgXHUwMDI2IDIpKVxuK1x0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbitcdGVsc2VcbitcdFx0a2ZyZWVfbm9sb2NrKG9ianApO1xuK1xuK1x0Y3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBod19hdHRyID0ge1xuIFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4gXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuQEAgLTMxNSw2NyArMzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQuc2FtcGxlX2ZyZXEgPSAxMDAwMDAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4rc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbitcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHZvaWQgKm9ianA7XG4tXHRnZnBfdCBnZnA7XG4gXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xuIFxuLVx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4tXHRnZnAgPSAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcbi1cdG9ianAgPSBrbWFsbG9jX25vbG9jayg2NCwgZ2ZwLCBOVU1BX05PX05PREUpO1xuLVxuLVx0aWYgKG9ianApXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19vaysrO1xuLVx0ZWxzZVxuLVx0XHRjdHgtXHUwMDNlYWxsb2NfZmFpbCsrO1xuLVxuLVx0a2ZyZWVfbm9sb2NrKG9ianApO1xuLVx0Y3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XG4rXHR0ZXN0X25vbG9jayhjdHgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgYm9vbCBlbmFibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiB7XG4tXHRpbnQgaSwgajtcbi1cdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4tXHRib29sIGFsbG9jX2ZhaWwgPSBmYWxzZTtcbiBcbiBcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2aHdfYXR0ciwgLTEsIGN1cnJlbnQsXG4tXHRcdFx0XHRcdFx0IG92ZXJmbG93X2hhbmRsZXJfdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayxcbi1cdFx0XHRcdFx0XHQgXHUwMDI2Y3R4KTtcbitcdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayxcbitcdFx0XHRcdFx0XHQgY3R4KTtcbitcbiBcdGlmIChJU19FUlIoZXZlbnQpKVxuLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwiRmFpbGVkIHRvIGNyZWF0ZSBwZXJmIGV2ZW50XCIpO1xuLVx0Y3R4LmV2ZW50ID0gZXZlbnQ7XG4tXHRwZXJmX2V2ZW50X2VuYWJsZShjdHguZXZlbnQpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSVRFUkFUSU9OUzsgaSsrKSB7XG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xuLVx0XHRcdGdmcF90IGdmcCA9IChpICUgMikgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XG4tXHRcdFx0aWYgKCFvYmplY3RzW2pdKSB7XG4tXHRcdFx0XHRqLS07XG4tXHRcdFx0XHR3aGlsZSAoaiBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdGtmcmVlKG9iamVjdHNbai0tXSk7XG4tXHRcdFx0XHRhbGxvY19mYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfT0JKRUNUUzsgaisrKVxuLVx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuLVx0fVxuK1x0Y3R4LVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4rXHRwZXJmX2V2ZW50X2VuYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRpc2FibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbit7XG4rXHRrdW5pdF9pbmZvKGN0eC1cdTAwM2V0ZXN0LCBcIkhXIHBlcmYgZXZlbnRzOiBjYWxsYmFja19jb3VudDogJWQsIGFsbG9jX29rOiAlZCwgYWxsb2NfZmFpbDogJWRcXG5cIixcbitcdFx0ICAgY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50LCBjdHgtXHUwMDNlYWxsb2Nfb2ssIGN0eC1cdTAwM2VhbGxvY19mYWlsKTtcbitcbitcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuK1x0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHgtXHUwMDNlZXZlbnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXG4tY2xlYW51cDpcbi1cdHBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpO1xuLVx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHguZXZlbnQpO1xuK1x0aWYgKCFlbmFibGVfcGVyZl9ldmVudHMoXHUwMDI2Y3R4KSlcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcIkZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcIik7XG4gXG4tXHRrdW5pdF9pbmZvKHRlc3QsIFwiY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIGN0eC5jYWxsYmFja19jb3VudCwgY3R4LmFsbG9jX29rLCBjdHguYWxsb2NfZmFpbCk7XG4rXHR0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHMoKTtcbiBcbi1cdGlmIChhbGxvY19mYWlsKVxuLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwiQWxsb2NhdGlvbiBmYWlsZWRcIik7XG4rXHRkaXNhYmxlX3BlcmZfZXZlbnRzKFx1MDAyNmN0eCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuK31cbisjZW5kaWZcbitcbisjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbitzdGF0aWMgaW50IHNsYWJfa3Byb2JlX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHg7XG4rXG4rXHRjdHggPSBjb250YWluZXJfb2YocCwgc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQsIGtwcm9iZSk7XG4rXHR0ZXN0X25vbG9jayhjdHgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuK3tcbitcdGN0eC1cdTAwM2VrcHJvYmUuc3ltYm9sX25hbWUgPSBcInNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWRcIjtcbitcdGN0eC1cdTAwM2VrcHJvYmUucHJlX2hhbmRsZXIgPSBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcjtcbitcbitcdGlmIChyZWdpc3Rlcl9rcHJvYmUoXHUwMDI2Y3R4LVx1MDAzZWtwcm9iZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuK3tcbitcdGt1bml0X2luZm8oY3R4LVx1MDAzZXRlc3QsIFwia3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxuXCIsXG4rXHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4rXHR1bnJlZ2lzdGVyX2twcm9iZShcdTAwMjZjdHgtXHUwMDNla3Byb2JlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19rcHJvYmUoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4rXG4rXHRpZiAoIXJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhcdTAwMjZjdHgpKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSwgc2tpcHBpbmdcIik7XG4rXG4rXHR0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHMoKTtcbitcbitcdHVucmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuIH1cbiAjZW5kaWZcbkBAIC00MDUsNyArNDkwLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSxcbiBcdEtVTklUX0NBU0UodGVzdF9rcmVhbGxvY19yZWR6b25lX3plcm9pbmcpLFxuICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbi1cdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKSxcbitcdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYpLFxuKyNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxuK1x0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKSxcbiAjZW5kaWZcbiBcdHt9XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IGUwMWMxMDE1YjhjOGQuLjhmZDY4MzVlNDIzNTIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTI0LDExICsyNCwyNyBAQFxuICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xuICNkZWZpbmUgU0xBQl9BTExPQ19OT19PQkpfRVhUXHQweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqL1xuIFxuKyNkZWZpbmUgU0xBQl9GUkVFX0RFRkFVTFRcdDB4MDAgLyogbm8gZmxhZ3MgKi9cbisjZGVmaW5lIFNMQUJfRlJFRV9OT0xPQ0tcdDB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi9cbitcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbit7XG4rXHRpZiAoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcbitcdFx0cmV0dXJuIFNMQUJfQUxMT0NfTk9MT0NLO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05PTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuK3tcbitcdHJldHVybiAhKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spO1xuK31cbitcbiB2b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4gXHRcdFx0XHQgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTtcbkBAIC0zMzEsNiArMzQ3LDM3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4gXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbiB9XG4gXG4rLypcbisgKiBrdmZyZWVfcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUuXG4rICogQ2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNzIHdoaWxlIHByZXNlcnZpbmcgdGhlIEtBU0FOIHRhZy5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgKmt2bWFsbG9jX29ial9zdGFydF9hZGRyKHZvaWQgKmhlYWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKGhlYWQpKSkge1xuK1x0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbitcdH0gZWxzZSB7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKGhlYWQpO1xuK1xuK1x0XHRpZiAoIXNsYWIpIHtcbitcdFx0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbitcdFx0fSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkge1xuK1x0XHRcdG9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuK1x0XHRcdHVuc2lnbmVkIGludCBpZHggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIGhlYWQpO1xuK1x0XHRcdHZvaWQgKm9iaiA9IHNsYWJfYWRkcmVzcyhzbGFiKSArIHMtXHUwMDNlc2l6ZSAqIGlkeDtcbitcbitcdFx0XHRvYmogPSBmaXh1cF9yZWRfbGVmdChzLCBvYmopO1xuK1x0XHRcdG9iaiA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuK1x0XHRcdG9mZnNldCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKSAtIG9iajtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGhlYWQgLSBvZmZzZXQ7XG4rfVxuK1xuIC8qXG4gICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLlxuICAqXG5AQCAtNDMxLDcgKzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdHJldHVybiAhKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX0NBQ0hFX0RNQXxTTEFCX0FDQ09VTlR8U0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9OT19PQkpfRVhUKSk7XG4gfVxuIFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaik7XG4rYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG4gdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gXG5AQCAtODk5LDcgKzk0Niw4IEBAIHZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG4gdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKTtcbiBcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTtcbit2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKTtcbit2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2x1Yl9kZWJ1Z19vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAxZTFkM2ZlZWMzNTM1Li5iOGYyMWVhYmNjY2MyIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXG4tXHRkZWZlcl9mcmVlX2JhcnJpZXIoKTtcbitcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xuIFxuIFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c2xhYl9tdXRleCk7XG5AQCAtMTI5Niw2ICsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTtcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xuIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xuIFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbit7XG4rXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIocHRyKSkpXG4rXHRcdGdvdG8gZmFsbGJhY2s7XG4rXG4rXHRzbGFiID0gdmlydF90b19zbGFiKHB0cik7XG4rXHRpZiAodW5saWtlbHkoIXNsYWIpKVxuK1x0XHRnb3RvIGZhbGxiYWNrO1xuK1xuK1x0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdHJldHVybjtcbitcbitmYWxsYmFjazpcbitcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbitcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbiBcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbkBAIC0xMzEzLDYgKzEzNDAsMjAgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XG4gXG4rdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZClcbit7XG4rXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcbitcdHJjdV9iYXJyaWVyKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XG4rXG4rdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4re1xuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXHRyY3VfYmFycmllcigpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xuK1xuIHZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxuIHtcbiB9XG5AQCAtMTM3OSw3ICsxNDIwLDcgQEAgc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhIHtcbiBcbiBzdHJ1Y3Qga2ZyZWVfcmN1X2NwdV93b3JrIHtcbiBcdHN0cnVjdCByY3Vfd29yayByY3Vfd29yaztcbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZF9mcmVlO1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZF9mcmVlO1xuIFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYnVsa19oZWFkX2ZyZWVbRlJFRV9OX0NIQU5ORUxTXTtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xuQEAgLTE0MTUsNyArMTQ1Niw3IEBAIHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsge1xuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcbiBcdC8vIE9iamVjdHMgcXVldWVkIG9uIGEgbGlua2VkIGxpc3RcbiBcdC8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy5cbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7XG4gXHR1bnNpZ25lZCBsb25nIGhlYWRfZ3Bfc25hcDtcbiBcdGF0b21pY190IGhlYWRfY291bnQ7XG4gXG5AQCAtMTU1NiwxMiArMTU5NywxMiBAQCBrdmZyZWVfcmN1X2J1bGsoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3AsXG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4ta3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbitrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7XG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpuZXh0O1xuIFxuIFx0Zm9yICg7IGhlYWQ7IGhlYWQgPSBuZXh0KSB7XG4tXHRcdHZvaWQgKnB0ciA9ICh2b2lkICopIGhlYWQtXHUwMDNlZnVuYztcbitcdFx0dm9pZCAqcHRyID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHZvaWQgKikgaGVhZCAtIHB0cjtcbiBcbiBcdFx0bmV4dCA9IGhlYWQtXHUwMDNlbmV4dDtcbkBAIC0xNTg1LDcgKzE2MjYsNyBAQCBzdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZFtGUkVFX05fQ0hBTk5FTFNdO1xuLVx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZDtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDtcbiBcdHN0cnVjdCByY3VfZ3Bfb2xkc3RhdGUgaGVhZF9ncF9zbmFwO1xuQEAgLTE2MjgsNiArMTY2OSwxNCBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4rXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuK1xuK1x0LypcbitcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbitcdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4rXHQgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjM4LDcgKzE2ODcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIFxuIFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbiBcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxuLVx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqKTtcbitcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE3MDgsNyArMTc1Nyw3IEBAIGt2ZnJlZV9yY3VfZHJhaW5fcmVhZHkoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXG4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX3JlYWR5W0ZSRUVfTl9DSEFOTkVMU107XG4gXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjtcbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZF9yZWFkeSA9IE5VTEw7XG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgaTtcbiBcbkBAIC0xOTcxLDcgKzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcbiAgKiBiZSBmcmVlJ2QgaW4gd29ya3F1ZXVlIGNvbnRleHQuIFRoaXMgYWxsb3dzIHVzIHRvOiBiYXRjaCByZXF1ZXN0cyB0b2dldGhlciB0b1xuICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGhlYXZ5IGtmcmVlX3JjdSgpL2t2ZnJlZV9yY3UoKSBsb2FkLlxuICAqL1xuLXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7XG5AQCAtMTk4Nyw3ICsyMDM2LDcgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gXHRpZiAoIWhlYWQpXG4gXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbitcdGlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbkBAIC0yMDA5LDcgKzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdFx0XHQvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLlxuIFx0XHRcdGdvdG8gdW5sb2NrX3JldHVybjtcbiBcbi1cdFx0aGVhZC1cdTAwM2VmdW5jID0gcHRyO1xuIFx0XHRoZWFkLVx1MDAzZW5leHQgPSBrcmNwLVx1MDAzZWhlYWQ7XG4gXHRcdFdSSVRFX09OQ0Uoa3JjcC1cdTAwM2VoZWFkLCBoZWFkKTtcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZrcmNwLVx1MDAzZWhlYWRfY291bnQpO1xuQEAgLTIxNDIsMTcgKzIxOTAsMTYgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcbiAgKi9cbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiB7XG4rXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXG4gXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbiBcdFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdFx0Zmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUocyk7XG4gXHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbi1cdFx0cmN1X2JhcnJpZXIoKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3Jrc1xuLVx0ICogb24gYSBzcGVjaWZpYyBzbGFiIGNhY2hlLlxuLVx0ICovXG4rXHRyY3VfYmFycmllcigpO1xuIFx0X19rdmZyZWVfcmN1X2JhcnJpZXIoKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGFkZTE3Zjg0ZTU4MzIuLmJhMmYyMDgyNjJiZjYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTQyNCw2ICs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7XG4rXHRcdC8qIG9ubHkgdXNlZCB0byBkZWZlciBjYWxsX3JjdSgpIGluIHVua25vd24gY29udGV4dCAqL1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XG4gXHRcdC8qIG9ubHkgdXNlZCBmb3IgcHJlZmlsbGVkIHNoZWFmcyAqL1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHVuc2lnbmVkIGludCBjYXBhY2l0eTtcbkBAIC05MDYsNiArOTA4LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuICNlbmRpZlxuIFxuKy8qXG4rICogQSBuby1vcCBmdW5jdGlvbiB1c2VkIHRvIGF0dGFjaCBrcHJvYmUgaGFuZGxlcnMgaW4gc2x1Yl9rdW5pdCB0ZXN0cy5cbisgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIG91dCBjYWxsc2l0ZXMuXG4rICovXG4rI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZClcbit7XG4rXHRiYXJyaWVyKCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4rI2RlZmluZSBzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQobG9jaykgZG8ge1x0XFxcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XHRcdFxcXG4rXHRzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKCk7XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG4gXG4gLypcbkBAIC0xNjYzLDcgKzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmICghKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybjtcbiBcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZuLVx1MDAzZWZ1bGwpO1xuIH1cbiBcbkBAIC0xNjcyLDcgKzE2OTIsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0XG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gfVxuIFxuQEAgLTI4MTYsNyArMjgzNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbitzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbitcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4ge1xuIFx0LypcbiBcdCAqIElmIHRoZSBzaGVhZiB3YXMgY3JlYXRlZCB3aXRoIFNMQUJfQUxMT0NfTk9fUkVDVVJTRSBmbGFnIHRoZW4gaXRzXG5AQCAtMjgyOCwxMSArMjg0OSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4gXHRcdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoc2hlYWYpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHNoZWFmLVx1MDAzZXNpemUgXHUwMDNlIDApO1xuLVx0a2ZyZWUoc2hlYWYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxuK1x0XHRrZnJlZV9ub2xvY2soc2hlYWYpO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShzaGVhZik7XG4gXG4gXHRzdGF0KHMsIFNIRUFGX0ZSRUUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4re1xuK1x0X19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4rfVxuK1xuIHN0YXRpYyB1bnNpZ25lZCBpbnRcbiByZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbiBcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbkBAIC0yODg1LDcgKzI5MTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcyk7XG4gXHRzaGVhZiA9IHBjcy1cdTAwM2VtYWluO1xuQEAgLTM1NzAsNyArMzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0X19hZGRfcGFydGlhbChuLCBzbGFiLCBtb2RlKTtcbiB9XG4gXG5AQCAtMzU4NCw3ICszNjE0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuQEAgLTM2MDAsNyArMzYzMCw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIHtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbiBcdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuQEAgLTQwNjksNiArNDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuK3N0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzO1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlcztcbitcdHN0cnVjdCBpcnFfd29yayB3b3JrO1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XG4rXHQub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSxcbitcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4rXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxuK1x0LndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSxcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGZsdXNoX3JjdV9zaGVhZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuIFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbkBAIC00MTI4LDYgKzQxNzQsOCBAQCB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFxuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXG4gXHRjcHVzX3JlYWRfbG9jaygpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbGFiX211dGV4KTtcbiBcbkBAIC00NjY1LDcgKzQ3MTMsNyBAQCBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuIFx0Ym9vbCBhbGxvd19zcGluO1xuIFxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xuIFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC01NzgzLDcgKzU4MzEsNyBAQCBzdGF0aWMgdm9pZCBfX3Bjc19pbnN0YWxsX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHksXG4gXHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4pXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogVGhpcyBpcyB3aGF0IHdlIGV4cGVjdCB0byBmaW5kIGlmIG5vYm9keSBpbnRlcnJ1cHRlZCB1cy4gKi9cbiBcdGlmIChsaWtlbHkoIXBjcy1cdTAwM2VzcGFyZSkpIHtcbkBAIC01ODM0LDcgKzU4ODIsNyBAQCBfX3Bjc19yZXBsYWNlX2Z1bGxfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdGJvb2wgcHV0X2ZhaWw7XG4gXG4gcmVzdGFydDpcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiBcbiBcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgYmFjayBvZmYgKi9cbiBcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5AQCAtNjAzNSwyNCArNjA4MywyNiBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4gICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGVudGlyZWx5IG9uIFBSRUVNUFRfUlQuXG4rICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4gICogc3Bpbm5pbmcgbG9jay4gVGVsbCBsb2NrZGVwIHRoYXQgYWNxdWlyaW5nIHNwaW5sb2NrX3QgaXMgdmFsaWQgaGVyZVxuLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy5cbisgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwXG4rICogb24gUFJFRU1QVF9SVCB0byBhdm9pZCBzdXBwcmVzc2luZyB2YWxpZCBsb2NrZGVwIHdhcm5pbmdzLlxuICAqL1xuIHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xuIFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbitib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmO1xuK1x0Ym9vbCBhbGxvd19zcGluID0gZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhmcmVlX2ZsYWdzKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW4pO1xuIFxuLVx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiBcbiBcdGlmICghbG9jYWxfdHJ5bG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNjA2MCw5ICs2MTEwLDEwIEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcbiBcdGlmICh1bmxpa2VseSghcGNzLVx1MDAzZXJjdV9mcmVlKSkge1xuLVxuIFx0XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XG4gXHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG4rXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuK1x0XHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcbiBcbiBcdFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cbiBcdFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC02MDgyLDcgKzYxMzMsNyBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4gXG4tXHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgdHJ1ZSk7XG4rXHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7XG4gXG4gXHRcdGlmIChlbXB0eSkge1xuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuQEAgLTYwOTEsMjAgKzYxNDIsMjAgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFxuIFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0ZW1wdHkgPSBhbGxvY19lbXB0eV9zaGVhZihzLCBHRlBfTk9XQUlULCBTTEFCX0FMTE9DX0RFRkFVTFQpO1xuK1x0XHRlbXB0eSA9IGFsbG9jX2VtcHR5X3NoZWFmKHMsIGdmcCwgYWxsb2NfZmxhZ3MpO1xuIFxuIFx0XHRpZiAoIWVtcHR5KVxuIFx0XHRcdGdvdG8gZmFpbDtcbiBcbiBcdFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpIHtcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4rXHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbiBcdFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocGNzLVx1MDAzZXJjdV9mcmVlKSlcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4rXHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuIFx0fVxuQEAgLTYxMzAsMTggKzYxODEsMzQgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFx0ICogd2UgZmx1c2ggYmVmb3JlIGxvY2FsX3VubG9jayB0byBtYWtlIHN1cmUgYSByYWNpbmdcbiBcdCAqIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpIGRvZXNuJ3QgbWlzcyB0aGlzIHNoZWFmXG4gXHQgKi9cbi1cdGlmIChyY3Vfc2hlYWYpXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuK1x0aWYgKHJjdV9zaGVhZikge1xuK1x0XHQvKlxuK1x0XHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCknc1xuK1x0XHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxuK1x0XHQgKiB3ZSBrbm93IHRoYXQncyBub3QgdGhlIGNhc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbitcdFx0XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcbitcdFx0XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2cmN1X3NoZWFmLVx1MDAzZWxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzKSlcbitcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjYWxsX3JjdShcdTAwMjZyY3Vfc2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4gXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuIFx0cmV0dXJuIHRydWU7XG4gXG4gZmFpbDpcbiBcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUZfRkFJTCk7XG4tXHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG5AQCAtNjMzMCwzMSArNjM5NywyMiBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBkZWZlcl9mcmVlIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4tXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcbi19O1xuLVxuLXN0YXRpYyB2b2lkIGZyZWVfZGVmZXJyZWRfb2JqZWN0cyhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuLVxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHtcbi1cdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuLVx0LndvcmsgPSBJUlFfV09SS19JTklUKGZyZWVfZGVmZXJyZWRfb2JqZWN0cyksXG4tfTtcbi1cbiAvKlxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0J3Mgc2FmZVxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXG4gICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuK3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVyX2ZyZWUsIHdvcmspO1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKm9ianMgPSBcdTAwMjZkZi1cdTAwM2VvYmplY3RzO1xuK1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbitcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4tXHRpZiAobGxpc3RfZW1wdHkob2JqcykpXG4tXHRcdHJldHVybjtcbitcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xuK1x0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4rXHRvYmpzID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHM7XG4rXHRvYmpzX2J5X3JjdSA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdTtcbiBcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG5AQCAtNjM3OCwyNyArNjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xuIFx0XHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xuIFx0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4rXHRcdHZvaWQgKmhlYWQgPSBwb3M7XG4rXHRcdHZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbitcbitcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuK1x0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcbitcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4gXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuIFxuLVx0ZGYgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzKTtcbi1cdGlmIChsbGlzdF9hZGQoaGVhZCArIHMtXHUwMDNlb2Zmc2V0LCBcdTAwMjZkZi1cdTAwM2VvYmplY3RzKSlcbi1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZGYtXHUwMDNld29yayk7XG4rXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuK31cbitcbit2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdSkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiB9XG4gXG4tdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZClcbisvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xuK3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4tXHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzLCBjcHUpLVx1MDAzZXdvcmspO1xuK1x0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrLCBjcHUpLVx1MDAzZXdvcmspO1xuIH1cbiBcbiBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbkBAIC02NjU3LDQzICs2NzM5LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuICAqL1xuIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0dm9pZCAqb2JqID0gaGVhZDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbi1cdHZvaWQgKnNsYWJfYWRkcjtcbitcdHZvaWQgKm9iajtcbitcbitcdG9iaiA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKSB7XG4tXHRcdG9iaiA9ICh2b2lkICopIFBBR0VfQUxJR05fRE9XTigodW5zaWduZWQgbG9uZylvYmopO1xuIFx0XHR2ZnJlZShvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4tXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0aWYgKCFzbGFiKSB7XG4tXHRcdC8qXG4tXHRcdCAqIHJjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplIHNvIG5vIG5lZWQgdG9cbi1cdFx0ICogY29uc2lkZXIgYWxsb2NhdGlvbiBvcmRlclxuLVx0XHQgKi9cbi1cdFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuLVx0c2xhYl9hZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLVxuLVx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbi1cdFx0b2JqID0ga2ZlbmNlX29iamVjdF9zdGFydChvYmopO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqKTtcbitcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXG4tXHRcdG9iaiA9IHNsYWJfYWRkciArIHMtXHUwMDNlc2l6ZSAqIGlkeDtcbi1cdFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcbitcdFx0aWYgKHNsYWIpXG4rXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4rXHRcdGVsc2VcbitcdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbiBcdH1cbi1cbi1cdHNsYWJfZnJlZShzLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiB9XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0MzoxNS4zNDIyNDA2NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY4OTY5ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkNVL1NMVUIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBrZXJuZWwgY29tcG9uZW50cyBsaWtlIGBtbS9zbGFiYCwgYG1tL3NsYWJfY29tbW9uLmNgLCBgbW0vc2x1Yi5jYCwgYW5kIHRoZSBSQ1UgY29kZS4gVGhlIGludHJvZHVjdGlvbiBvZiBga2ZyZWVfcmN1X25vbG9ja2AgYW5kIHRoZSB0d2Vha3MgdG8gYGt2ZnJlZV9jYWxsX3JjdWAgYXJlIHRoZSBmb2NhbCBwb2ludHMuIEl0IGxvb2tzIGxpa2UgYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbm93IGFjY2VwdGluZyBhIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpgIHJhdGhlciB0aGFuIHRoZSBtb3JlIGdlbmVyaWMgYHN0cnVjdCByY3VfaGVhZCAqYC4gQW5kIHdlJ3ZlIGdvdCBhIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGJlaW5nIGFkZGVkLCB3aGljaCB1c2VzIGVpdGhlciBgZGVmZXJfa2ZyZWVfcmN1YCBvciBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggdGhhdCBgU0xBQl9GUkVFX05PTE9DS2AgZmxhZy4gR29vZCB0byBzZWUgdGhlcmUgYXJlIHBlcmYgYW5kIGtwcm9iZSB0ZXN0cyBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AgdG9vOyBhbHdheXMgY3J1Y2lhbC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgZ2VudWluZWx5IGZ1bmN0aW9uYWwsIGFuZCB0aGF0IGl0IGlzbid0IGFuIHVucmVhY2hhYmxlIGRlYWQgZW5kIG9mIGEgcGF0Y2guIEdpdmVuIHRoZSBhcmVhcyBpdCB0b3VjaGVzLCBJJ20gZ29pbmcgdG8gYXNzdW1lIGl0J3MgYm90aCBmdW5jdGlvbmFsIGFuZCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2luZyBpdC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgY2xlYXIuIFNwZWNpZmljYWxseSwgSSBzZWUgYENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURgIGJlaW5nIHVzZWQgaW4gYG1tL3NsYWJfY29tbW9uLmNgIGluIHJlbGF0aW9uIHRvIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLiBUaGF0IHJhaXNlcyB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIG9mIGhvdyB0aGF0IGNvbmZpZyBpcyBkZWZpbmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBpbiBgaW5pdC9LY29uZmlnYCwgYG1tL0tjb25maWdgLCBvciBwZXJoYXBzIGV2ZW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIEknbGwgc2VhcmNoIGZvciBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBnZXQgYSBjb21wbGV0ZSB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjIxLjkxMTIxNDIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwMjk4MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzItICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzMzogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzQtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xNDMxLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjE0MzI6I2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC90eXBlcy5oPTI1ND1zdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjU5LVxcbmluY2x1ZGUvbGludXgvdHlwZXMuaDoyNjA6I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xcbi0tXFxubW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzAyLVxcbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXFxubW0vc2xhYl9jb21tb24uYy0xMzA0LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjUtXFxubW0vc2xhYl9jb21tb24uYzoxMzI2OiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM1Nz12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNjE6I2Vsc2UgLyogQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMTM2Mi1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjI0OD12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjMwMC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIzMDE6I2VuZGlmIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MjQuNjIxNTIwNjM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTUxNjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgUkNVIEJhdGNoZWQgRnJlZWQgd2l0aCBTTFVCIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBmbGFnZ2VkIGFzIGEgZGVmYXVsdCBib29sZWFuICd5ZXMnIOKAkyB0aGF0J3MgZ29vZCwgbGlrZWx5IGluZGljYXRpbmcgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgdW5kZXIgdGhlIHJpZ2h0IGNpcmN1bXN0YW5jZXMuIFRoZSBjbHVlIGhlcmUgaXMgYFNMVUJgLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhpcyBvcHRpb24gaXMgZGVwZW5kZW50IG9uIHRoZSBgU0xVQmAgYWxsb2NhdG9yLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9mIGBLVkZSRUVfUkNVX0JBVENIRURgIHRvIG5haWwgZG93biB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IG9uIGBTTFVCYCwgYW5kIGFueSBvdGhlciBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBjb25maXJtaW5nIGhvdyB0aGlzIG9wdGlvbiBpbXBhY3RzIFJDVSBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA2MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjI4LjE2NzAzOTkxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg4NzIzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjMwLjU1NTc2NzkxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzk4MjgyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoaW5nZXMgb24gd2hldGhlciBvciBub3Qgd2UncmUgdXNpbmcgYFNMVUJgLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBtbS9LY29uZmlnYCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBkb3duIHRvIGxpbmUgMTY4LiBIb3BlZnVsbHksIGl0J2xsIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgbWUgYWJvdXQgYFNMVUJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjM0Ljg5NTU5ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ZW5kbWVudVxcbiAxNjE6XFx0XFxuIDE2MjpcXHRtZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbiAxNjM6XFx0XFxuIDE2NDpcXHRjb25maWcgU0xVQlxcbiAxNjU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAxNjY6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4gMTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBTTFVCX1RJTllcXG4gMTc0OlxcdFxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAxNzY6XFx0XFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxcbiAxNzk6XFx0XFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MzQuODk2MDc2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTUyMTAyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS1ZGUkVFX1JDVV9CQVRDSEVEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20ganVzdCBxdWlja2x5IHJldmlld2luZyBob3cgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBkZWZhdWx0IGlzIHRvIGhhdmUgaXQgZW5hYmxlZCB1bmxlc3Mgd2UncmUgZGVhbGluZyB3aXRoIGBTTFVCX1RJTllgLCBgVElOWV9SQ1VgLCBvciBpZiBgUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIGlzIGFsc28gdHVybmVkIG9uLiBUaGF0IG1ha2VzIHNlbnNlLCBubyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncy5cblxuU28sIEkgY291bGQganVzdCByZWx5IG9uIHRoZSBkZWZhdWx0cyBhbmQgbm90IGV4cGxpY2l0bHkgZW5hYmxlIGBLVkZSRUVfUkNVX0JBVENIRURgLCBidXQgSSBjb3VsZCBhbHNvIGFkZCBpdCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSdzIHNha2UsIG9yIG1heWJlIG5vdC4gRG9lc24ndCBzZWVtIHN0cmljdGx5IG5lY2Vzc2FyeS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJJ20gcmVtZW1iZXJpbmcgdGhhdCBgU0xVQl9LVU5JVF9URVNUYCBpcyB0b3VjaGVkIGluIGBsaWIvdGVzdHMvc2x1Yl9rdW5pdC5jYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIHRoYXQuIE5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGxpbmthZ2Ugb3IgZGVwZW5kZW5jaWVzLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGludG8gYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBgbGliL3Rlc3RzL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCdzIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NDcuODQ4MTgyODc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5MTMyMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCX0tVTklUX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mjk2NT1jb25maWcgU0hESTNfS1VOSVRfVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjk3NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyOTc1OmNvbmZpZyBTTFVCX0tVTklUX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc2LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBTTFVCIGNhY2hlIGVycm9yIGRldGVjdGlvblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0Mzo1MC4xMjczMjM0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1ODk2NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtjb25maWcgRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGJldHRlciBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0IGFmZmVjdHMgZGVidWdnaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSwgcHJvYmFibHkgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgb3B0aW9ucyBkaXJlY3RseSB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjk3NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJpZ2h0IHBsYWNlIHRvIGZpbmQgc29tZSB1c2VmdWwgY2x1ZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gc3ltYm9scyBvciBkZXBlbmRlbmNpZXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NTMuODg2MjkyOTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTcwOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHVuaXQgdGVzdCBmb3IgX19hc2hsZGkzKCksIF9fYXNocmRpMygpLCBhbmRcXG4yOTcxOlxcdFxcdCAgX19sc2hyZGkzKCkgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIHRvIGltcGxlbWVudCA2NC1iaXQgYXJpdGhtZXRpY1xcbjI5NzI6XFx0XFx0ICBzaGlmdCBsZWZ0LCBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0IGFuZCBsb2dpY2FsIHNoaWZ0IHJpZ2h0LFxcbjI5NzM6XFx0XFx0ICByZXNwZWN0aXZlbHksIG9uIGEgMzItYml0IENQVXMuXFxuMjk3NDpcXHRcXG4yOTc1OlxcdGNvbmZpZyBTTFVCX0tVTklUX1RFU1RcXG4yOTc2OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBTTFVCIGNhY2hlIGVycm9yIGRldGVjdGlvblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbjI5Nzc6XFx0XFx0ZGVwZW5kcyBvbiBTTFVCX0RFQlVHIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuMjk3ODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbjI5Nzk6XFx0XFx0aGVscFxcbjI5ODA6XFx0XFx0ICBUaGlzIGJ1aWxkcyBTTFVCIGFsbG9jYXRvciB1bml0IHRlc3QuXFxuMjk4MTpcXHRcXHQgIFRlc3RzIFNMVUIgY2FjaGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuXFxuMjk4MjpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuMjk4MzpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4yOTg0OlxcdFxcbjI5ODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjI5ODY6XFx0XFxuMjk4NzpcXHRjb25maWcgUkFUSU9OQUxfS1VOSVRfVEVTVFxcbjI5ODg6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3QgZm9yIHJhdGlvbmFsLmNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4yOTg5OlxcdFxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgUkFUSU9OQUxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NTMuODg2NTY5Mjc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDA4NzAyMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBSQ1UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBlbmFibGluZyBgU0xVQl9LVU5JVF9URVNUYCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYSBkZWRpY2F0ZWQgdGVzdCBjb25maWd1cmF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgLCBhZGRpbmcgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIGBkZWZlcl9rZnJlZV9yY3VgLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGNoYW5nZXMgaW50ZWdyYXRlIHdpdGggdGhlIGV4aXN0aW5nIFJDVSBtYWNoaW5lcnkgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wbGljYXRpb25zLlxuXG5TbyB0aGUgbWFpbiBzeW1ib2xzIGludm9sdmVkIGFyZSBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBgZGVmZXJfa2ZyZWVfcmN1YC4gSSBrbm93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgbW9kaWZpZWQuIEkgcXVpY2tseSBjb25maXJtZWQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IG1vcmUgcmVhZGlseSB1c2FibGUuIEhvd2V2ZXIsIGBkZWZlcl9rZnJlZV9yY3VgIGlzIGludGVybmFsIHRvIHRoZSBTTFVCIGNvZGUsIG9ubHkgZGVjbGFyZWQgaW4gYG1tL3NsYWIuaGAuIFNhbWUgc3Rvcnkgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBga3ZmcmVlX2NhbGxfcmN1YCBpcyBleHBvcnRlZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHNwZWNpZmljYWxseTpcblxuYGBgY1xudm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxue1xuXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcblxuXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXG5cdFx0Z290byBmYWxsYmFjaztcblxuXHRpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKHB0cikpKVxuXHRcdGdvdG8gZmFsbGJhY2s7XG5cblx0c2xhYiA9IHZpcnRfdG9fc2xhYihwdHIpO1xuXHRpZiAodW5saWtlbHkoIXNsYWIpKVxuXHRcdGdvdG8gZmFsbGJhY2s7XG5cblx0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcblx0XHRnb3RvIGZhbGxiYWNrO1xuXG5cdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcblx0XHRnb3RvIGZhbGxiYWNrO1xuXG5cdHJldHVybjtcblxuZmFsbGJhY2s6XG5cdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbn1cbkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byByZWFsbHkgdGhpbmsgYWJvdXQgdGhlIGBmYWxsYmFja2AgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zIGZvciBwZXJmb3JtYW5jZS4gVGhlIGBmYWxsYmFja2AgbWVhbnMgaXQgZ29lcyB0byBgZGVmZXJfa2ZyZWVfcmN1YC4gU28sIGlmIGBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBub3QgZW5hYmxlZCwgb3IgaWYgaXQgaXMgYSBgdm1hbGxvY2AgYWRkcmVzcywgb3IgaWYgYHZpcnRfdG9fc2xhYmAgZmFpbHMsIGlmIE5VTUEgaXMgZW5hYmxlZCBhbmQgdGhlIHNsYWIgaXNuJ3QgbG9jYWwsIG9yIGlmIGBfX2tmcmVlX3JjdV9zaGVhZmAgcmV0dXJucyBmYWxzZSwgaXQgZmFsbHMgYmFjayB0byB0aGUgUkNVIGRlZmVycmFsLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIFJDVSBiYXRjaGluZyBtZWNoYW5pY3MgbGF0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGxpa2VseSBzY2VuYXJpb3MgYW5kIHdoYXQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbGJhY2sgaXMgaW4gdGVybXMgb2YgbGF0ZW5jeSBhbmQgUkNVIHVzYWdlLlxuXG5JIG5vdGUgdGhlIGFkZGl0aW9uYWwgZm9jdXMgc3ltYm9sczogYGRlZmVycmVkX3dvcmtfYmFycmllcmAgYW5kIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAuIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgc3RhdGljIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cblRoZW4sIEkgY2hlY2sgdGhlIG5ldyB0ZXN0cy4gSSBzZWUgYHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZmAgYW5kIGB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZWAgaW4gYGxpYi90ZXN0cy9zbHViX2t1bml0LmNgLCBLVW5pdCB0ZXN0cywgc28gZW5hYmxpbmcgYFNMVUJfS1VOSVRfVEVTVGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY2hvaWNlLiBIb3dldmVyLCB0aGVzZSB0ZXN0cyBkZXBlbmQgb24gYENPTkZJR19QRVJGX0VWRU5UU2AgYW5kIGBDT05GSUdfS1BST0JFU2AgdG8gcnVuLlxuXG5gYGBjXG4jaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcbmBgYFxuXG5Mb29rcyBsaWtlIEkgY2FuIGVuYWJsZSBgUEVSRl9FVkVOVFNgIGFuZCBgS1BST0JFU2AsIG9yIGp1c3QgYEtQUk9CRVNgIGlmIGBDT05GSUdfU01QYCBpcyBhbHNvIGVuYWJsZWQsIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIHRoZXNlIG9wdGlvbnMgb24gdGhlIGJ1aWxkIGFuZCBydW50aW1lLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGtmcmVlX3JjdV9ub2xvY2tgICh0eXBvISkgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UsIGFzIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjA2Ljg5NTI3NDQzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0OTA1NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZnJlZV9yY3Vfbm9sb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0xMTIxPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEyOC0vKipcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEyOTogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgLSBhIHZlcnNpb24gb2Yga2ZyZWVfcmN1KCkgdGhhdCBjYW4gYmUgY2FsbGVkIGluIGFueSBjb250ZXh0LlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMwLSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMyLSAqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzM6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM0LSAqIHdpdGhvdXQgYW55IGRlZmVycmVkIHByb2Nlc3NpbmcsIGJ1dCBtYXkgc3RpbGwgZGVmZXIgZnJlZWluZy5cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM2LSAqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzc6ICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzOC0gKi9cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzOTojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDAtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM9MzQ0PXN0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXFxuLS1cXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM1OS1cXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2FsbGJhY2tfY291bnQgXFx1MDAyNiAyKSlcXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jOjM2MDpcXHRcXHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM2MS1cXHRlbHNlXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIxOTE9dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy0yMTkyLXtcXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTM6XFx0Lyoga2ZyZWVfcmN1X25vbG9jaygpIG1pZ2h0IGhhdmUgZGVmZXJyZWQgZnJlZXMgZXZlbiB3aXRob3V0IHNoZWF2ZXMgKi9cXG5tbS9zbGFiX2NvbW1vbi5jLTIxOTQtXFx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjA5LjM0NDMzNTc3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyNTE1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkZ1enppbmcgVGhhdCBOZXcgQVBJOiBBYnNvbHV0ZWx5IFdvcnRoIHRoZSBFZmZvcnQqKlxuXG5BbHJpZ2h0LCBldmVuIHRob3VnaCB0aGlzIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCdzIGRvaW5nLCBpcyBvbmx5IHNwZWNpZmljYWxseSBjYWxsZWQgaW4gdGhlIHRlc3QgY29kZSAqcmlnaHQgbm93KiwgdGhlIGZhY3QgdGhhdCBhIG5ldyBBUEkgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoaXMgdGVzdCBhY3R1YWxseSAqdXNlcyogaXQsIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOZXcgQVBJcyBhbHdheXMgY2FycnkgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciB1bmZvcmVzZWVuIGlzc3Vlcy4gSXQncyBhIGtleSBleGVyY2lzZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHNvIGdldHRpbmcgYSBmdXp6aW5nIHRlc3QgaW4gcGxhY2UgZWFybHkgd2lsbCBiZSBhIHByb2FjdGl2ZSBtb3ZlLiBObyBicmFpbmVyLCByZWFsbHkuXG5cbkkgc3VwcG9zZSBJIHNob3VsZCBjaGVjayBvdXQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaW4gYG1tL3NsYWJfY29tbW9uLmNgIHRvIHNlZSBob3cgaXQgb3BlcmF0ZXMuIFRoZSB0ZXN0IGlzIGludm9raW5nIHRoYXQgZnVuY3Rpb24sIGl0J3Mgd29ydGggc2VlaW5nIHdoYXQgaXQgZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIHdpbGwgYWxsb3cgdXMgdG8gZGV2aXNlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzM0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MTIuOTA2ODUzMzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEzMjk1NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwMT12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTAyOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDQtXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTQ1OlxcdFxcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcXHUwMDI2KChfX19wKS1cXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0Ni1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEyOTk6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MTUuMTIwMTUzODQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTA2MDk2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgTXlzdGVyeSoqXG5cbkFscmlnaHQsIHNvIHRoZSBtYWNybyBleHBhbmRzIG91dCB0byBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgZ29vZC4gVGhhdCdzIHRoZSBhY3R1YWwgd29ya2hvcnNlIGZ1bmN0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYF9fa2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2x1Yi5jYC4gSSBleHBlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBSQ1Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgaW5pdGlhdGVkLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIHNsdWIgYWxsb2NhdG9yJ3MgaW50ZXJuYWwgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDE1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MjAuNTMwNzc1NzU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMTMwOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa2ZyZWVfcmN1X3NoZWFmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD00NzM9c3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTQ4MC1cXG5tbS9zbGFiLmg6NDgxOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTMxNjpcXHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNy1cXHRcXHRnb3RvIGZhbGxiYWNrO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xNjY4PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjkwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY5MS1cXG4tLVxcbm1tL3NsdWIuYz00MTQyPXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNDE1NC1cXHRcXHQgKiB3ZSBkb24ndCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcXG5tbS9zbHViLmM6NDE1NTpcXHRcXHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0Llxcbm1tL3NsdWIuYy00MTU2LVxcdFxcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2VcXG5tbS9zbHViLmM6NDE1NzpcXHRcXHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXFxubW0vc2x1Yi5jLTQxNTgtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9NjAyNT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjA4My0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG5tbS9zbHViLmM6NjA4NDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcXG5tbS9zbHViLmMtNjA4NS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xcbi0tXFxubW0vc2x1Yi5jPTYwOTQ9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYwOTUtXFxubW0vc2x1Yi5jOjYwOTY6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjA5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjIyLjY3MjkxMjA1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc4NTkzNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIGBfX2tmcmVlX3JjdV9zaGVhZmAuLi4gdGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBpc24ndCBpdD8gSXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCBzdWdnZXN0aW5nIGl0cyBpbnZvbHZlbWVudCBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIGBkZWZlcl9rZnJlZV9yY3VgIGluIGBtbS9zbHViLmNgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gdGhlcmUgdG8gZmlndXJlIG91dCBob3cgYF9fa2ZyZWVfcmN1X3NoZWFmYCBpcyBiZWluZyBjYWxsZWQgYW5kIGdldCBhIHNlbnNlIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0NDozMC4zNTE1MDgyMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzY5NzY0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJfa2ZyZWVfcmN1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD05NDk9dm9pZCBkZWZlcnJlZF93b3JrX2JhcnJpZXIodm9pZCk7XFxubW0vc2xhYi5oOjk1MDp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcXG5tbS9zbGFiLmgtOTUxLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyMS1mYWxsYmFjazpcXG5tbS9zbGFiX2NvbW1vbi5jOjEzMjI6XFx0ZGVmZXJfa2ZyZWVfcmN1KGhlYWQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XFxuLS1cXG5tbS9zbHViLmM9NjQ1Mz1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY0NjUtXFxubW0vc2x1Yi5jOjY0NjY6dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjQ2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjMyLjU4ODQ5MDMzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5MTEzNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgd3JpdHRlbiBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBgZGVmZXJfa2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSBpdCdzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBwcm9iYWJseSBjcnVjaWFsIGZvciBkZWZlcnJpbmcgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggUkNVLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZD8gTGV0J3MgY2hlY2sgd2hlcmUgaXQncyBjYWxsZWQsIHN0YXJ0aW5nIHdpdGggYGt2ZnJlZV9jYWxsX3JjdWAgaW4gYG1tL3NsYWJfY29tbW9uLmNgLiBJIGV4cGVjdCB0byBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzbGFiIGFsbG9jYXRvci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIHNvbGlkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MzUuODU3NjA1Nzc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyODk2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2ZnJlZV9jYWxsX3JjdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9OTg1PXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfbWlncmF0ZSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDAtICovXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMDE6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEwMi12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMDk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTE1LVxcdFxcdF9fX2hlYWQgPSAoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqKSBcXHUwMDI2KF9fX3ApLVxcdTAwM2VrdnJoZjtcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMTY6XFx0XFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTE3LVxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjQtXFx0aWYgKF9fX3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTI1OlxcdFxcdGt2ZnJlZV9jYWxsX3JjdShOVUxMLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEyNi19IHdoaWxlICgwKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMzI0PUVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjctXFxubW0vc2xhYl9jb21tb24uYzoxMzI4OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyOS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzNDAtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTM0MTpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTM0Mi1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTk5OT12b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjAxNy0gKlxcbm1tL3NsYWJfY29tbW9uLmM6MjAxODogKiBFYWNoIGt2ZnJlZV9jYWxsX3JjdSgpIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSBiYXRjaC4gVGhlIGJhdGNoIHdpbGwgYmUgZHJhaW5lZFxcbm1tL3NsYWJfY29tbW9uLmMtMjAxOS0gKiBldmVyeSBLRlJFRV9EUkFJTl9KSUZGSUVTIG51bWJlciBvZiBqaWZmaWVzLiBBbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJhdGNoIHdpbGxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjAyMi0gKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjIwMjM6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAyNC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIwOTUtfVxcbm1tL3NsYWJfY29tbW9uLmM6MjA5NjpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjA5Ny1cXG4tLVxcbm1tL3NsdWIuYz02MDI1PXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDgyLS8qXFxubW0vc2x1Yi5jOjYwODM6ICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jLTYwODQtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jOjYwODU6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcXG5tbS9zbHViLmMtNjA4Ni0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXFxuLS1cXG5tbS9zbHViLmM9NjQwNT1zdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuLS1cXG5tbS9zbHViLmMtNjQ0NC1cXG5tbS9zbHViLmM6NjQ0NTpcXHRcXHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XFxubW0vc2x1Yi5jLTY0NDYtXFx0fVxcbi0tXFxucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzPTE2Mj0gICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4tLVxcbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzQtICAgICAgICAvLyBTQUZFVFk6IFRoaXMgd2FzIGFsbG9jYXRlZCB1c2luZyBgS0JveDo6cGluX2luaXRgLCBzbyBpdCBjYW4gYmUgZnJlZWQgd2l0aCBga3ZmcmVlYC5cXG5ydXN0L2tlcm5lbC9zeW5jL3BvbGwucnM6MTc1OiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Omt2ZnJlZV9jYWxsX3JjdSgoKnB0cikucmN1LmdldCgpLCBwdHIuY2FzdDo6XFx1MDAzY2ZmaTo6Y192b2lkXFx1MDAzZSgpKSB9O1xcbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzYtICAgIH1cXG4tLVxcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g9MjA9ZmlcXG50b29scy9yY3UvcmN1LXVwZGF0ZXJzLnNoOjIxOmJwZnRyYWNlIC1lICdrcHJvYmU6a3ZmcmVlX2NhbGxfcmN1LFxcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2gtMjItXFx0ICAgICBrcHJvYmU6Y2FsbF9yY3UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjM4LjIxMDUwODMwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI4MDc1OTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkNVIGFuZCBTTFVCIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGBrdmZyZWVfY2FsbF9yY3VgIGFuZCBhZGRpbmcgYGtmcmVlX3JjdV9ub2xvY2tgLCBlc3NlbnRpYWxseSBhbGxvd2luZyBmb3IgbG9ja2xlc3Mgb2JqZWN0IGZyZWVpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGFkanVzdG1lbnRzIHRvIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCB0aGUgc2xhYiBmcmVlaW5nIHBhdGguXG5cbkxvb2tpbmcgaW50byBpdCwgdGhlIGBrZnJlZV9yY3Vfbm9sb2NrYCBtYWNybyBsZXZlcmFnZXMgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHdoaWNoIHRoZW4gcHJvYmFibHkgd29ya3Mgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLCBhbmQgdGhlIHBhdGNoaW5nIGludHJvZHVjZXMgYSBgZnJlZV9mbGFnc2AgcGFyYW1ldGVyIHRvIGl0LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBmbGV4aWJsZSBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGZvciBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgYFNMQUJfRlJFRV9OT0xPQ0tgIGluIHRoZSBgUFJFRU1QVF9SVGAgY2FzZS4gVGhlIHVzZSBvZiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtgIGFuZCB0aGUgY2hlY2tzIHdpdGggYGlycXNfZGlzYWJsZWQoKWAgaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGNsZXZlcmx5IGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIHRoZSBpbW1lZGlhdGUgZnJlZWluZyBvZiB0aGUgb2JqZWN0IG1pZ2h0IGJlIHByb2JsZW1hdGljLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyB0aGUgcHJpbWFyeSBBUEkgZW50cnkgcG9pbnRzOlxuKiAgIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIChUaGlzIGlzIGV4cG9ydGVkKVxuKiAgIGBrdmZyZWVfY2FsbF9yY3VgXG4qICAgYF9fa2ZyZWVfcmN1X3NoZWFmYFxuKiAgIGBkZWZlcl9rZnJlZV9yY3VgXG4qICAgYGRlZmVycmVkX3dvcmtfYmFycmllcmBcbiogICBga3ZmcmVlX3JjdV9iYXJyaWVyYFxuKiAgIGBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGVgXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgdGVzdCBzdWl0ZSwgYFNMVUJfS1VOSVRfVEVTVGAsIHVzZXMgYFBFUkZfRVZFTlRTYCBhbmQgYEtQUk9CRVNgIGluIGFkZGl0aW9uIHRvIGBTTVBgIHRvIGNvdmVyIHRoZSBuZXcgbG9ja2xlc3MgZnJlZWluZyBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgdGVzdHMgdXNlIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzIGluZGljYXRlcyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3MuIEFuZCwgc2luY2UgaXQncyBhbiBSQ1UtcmVsYXRlZCBjaGFuZ2UsIHdlIHNob3VsZCBiZSB1c2luZyBSQ1UgaW4gYW4gU01QIGVudmlyb25tZW50LlxuXG5TbywgZm9yIGZ1bGwgY292ZXJhZ2UsIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGNvbmZpZ3M6XG4qICAgYFNMVUJfS1VOSVRfVEVTVGBcbiogICBgS1VOSVRgXG4qICAgYFNMVUJfREVCVUdgXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBLUFJPQkVTYFxuKiAgIGBTTVBgXG4qICAgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgKEV2ZW4gdGhvdWdoIGl0J3MgdGhlIGRlZmF1bHQsIGxldCdzIGJlIGV4cGxpY2l0KVxuXG5HaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgbWVjaGFuaXNtcywgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUgdGhpcyBzZXQgb2YgY29uZmlncyB0byB0aG9yb3VnaGx5IHRlc3QgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5ODMsIk91dHB1dFRva2VucyI6MjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0NDo1Ni40OTEyNzA0NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc0NTA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJfS1VOSVRfVEVTVFwiLFxuICAgIFwiS1VOSVRcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNMVUJfREVCVUdcIixcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiLFxuICAgIFwia3ZmcmVlX2NhbGxfcmN1XCIsXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwiZGVmZXJfa2ZyZWVfcmN1XCIsXG4gICAgXCJkZWZlcnJlZF93b3JrX2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBga2ZyZWVfcmN1X25vbG9jaygpYCBBUEkgd2hpY2ggYWxsb3dzIGRlZmVycmluZyBmcmVlaW5nIG9mIG9iamVjdHMgaW4gYW55IGNvbnRleHQgd2l0aG91dCBsb2Nrcy4gSXQgbW9kaWZpZXMgYGt2ZnJlZV9jYWxsX3JjdSgpYCB0byB1c2UgYHN0cnVjdCBrdmZyZWVfcmN1X2hlYWRgIGFuZCBpbXBsZW1lbnRzIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKWAgd2hpY2ggcmVsaWVzIG9uIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBhbmQgYGRlZmVyX2tmcmVlX3JjdSgpYC4gSXQgYWxzbyBhZGRzIEtVbml0IHRlc3RzIGZvciB0aGVzZSBuZXcgQVBJcyB1c2luZyBwZXJmIGV2ZW50cyBhbmQga3Byb2Jlcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSBjaGFuZ2UgdGhhdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJfS1VOSVRfVEVTVFwiLFxuICAgIFwiS1VOSVRcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNMVUJfREVCVUdcIixcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiLFxuICAgIFwia3ZmcmVlX2NhbGxfcmN1XCIsXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwiZGVmZXJfa2ZyZWVfcmN1XCIsXG4gICAgXCJkZWZlcnJlZF93b3JrX2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBga2ZyZWVfcmN1X25vbG9jaygpYCBBUEkgd2hpY2ggYWxsb3dzIGRlZmVycmluZyBmcmVlaW5nIG9mIG9iamVjdHMgaW4gYW55IGNvbnRleHQgd2l0aG91dCBsb2Nrcy4gSXQgbW9kaWZpZXMgYGt2ZnJlZV9jYWxsX3JjdSgpYCB0byB1c2UgYHN0cnVjdCBrdmZyZWVfcmN1X2hlYWRgIGFuZCBpbXBsZW1lbnRzIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKWAgd2hpY2ggcmVsaWVzIG9uIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBhbmQgYGRlZmVyX2tmcmVlX3JjdSgpYC4gSXQgYWxzbyBhZGRzIEtVbml0IHRlc3RzIGZvciB0aGVzZSBuZXcgQVBJcyB1c2luZyBwZXJmIGV2ZW50cyBhbmQga3Byb2Jlcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSBjaGFuZ2UgdGhhdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 14:41:21 +0000 UTC FinishedAt: 2026-07-30 14:44:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78bc8af4affb9a732504eb22eeac7d1e50883853", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB_KUNIT_TEST", "KUNIT", "PERF_EVENTS", "KPROBES", "SMP", "SLUB_DEBUG", "KVFREE_RCU_BATCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78bc8af4affb9a732504eb22eeac7d1e50883853", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLUB_KUNIT_TEST", "KUNIT", "PERF_EVENTS", "KPROBES", "SMP", "SLUB_DEBUG", "KVFREE_RCU_BATCHED" ], "series_id": "6d1aad55-daea-4ccd-aa48-4bb7f4fe591d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "kfree_call_rcu_nolock", "kvfree_call_rcu", "__kfree_rcu_sheaf", "defer_kfree_rcu", "deferred_work_barrier", "kvfree_rcu_barrier", "kvfree_rcu_barrier_on_cache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUJfS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtLVU5JVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7LAogICAgJiMzNDtTTFVCX0RFQlVHJiMzNDssCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7LAogICAgJiMzNDtrdmZyZWVfY2FsbF9yY3UmIzM0OywKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7ZGVmZXJfa2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3dvcmtfYmFycmllciYjMzQ7LAogICAgJiMzNDtrdmZyZWVfcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2YmI3NTY1YThlY2Y0N2M5ZjUyMjU4ZjE2YzU0MDgxMmIzMzgzM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNDo0MzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhcbmluZGV4IDVlOTVhY2MzMzk4OWIuLmFlZGU3N2JkMDM4NzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuQEAgLTEwOTgsMTkgJiM0MzsxMDk4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfbWlncmF0ZSh2b2lkKVxuIC8qXG4gICogSW4gbW0vc2xhYl9jb21tb24uYywgbm8gc3VpdGFibGUgaGVhZGVyIHRvIGluY2x1ZGUgaGVyZS5cbiAgKi9cbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4mIzQzO3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4mIzQzO3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4gXG4gLypcbiAgKiBUaGUgQlVJTERfQlVHX09OKCkgbWFrZXMgc3VyZSB0aGUgcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBoYW5kbGVkLiBTZWUgdGhlXG4gICogY29tbWVudCBvZiBrZnJlZV9yY3UoKSBmb3IgZGV0YWlscy5cbiAgKi9cbi0jZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCByaGYpXHRcdFx0XHRcdFxcXG4mIzQzOyNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIGt2cmhmKVx0XHRcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0dHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwgcmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbi1cdFx0a3ZmcmVlX2NhbGxfcmN1KFx1MDAyNigoX19fcCktXHUwMDNlcmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4mIzQzO1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbiYjNDM7XHRcdF9fX2hlYWQgPSAoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqKSBcdTAwMjYoX19fcCktXHUwMDNla3ZyaGY7XHRcXFxuJiM0MztcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0xMTIyLDYgJiM0MzsxMTI1LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0a3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXG4mIzQzOyAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbiYjNDM7ICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci5cbiYjNDM7ICpcbiYjNDM7ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuJiM0MzsgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4mIzQzOyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXHRcdFx0XHRcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoX19fcCkge1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXHUwMDNlPSA0MDk2KTtcdFx0XFxcbiYjNDM7XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuIC8qXG4gICogUGxhY2UgdGhpcyBhZnRlciBhIGxvY2stYWNxdWlzaXRpb24gcHJpbWl0aXZlIHRvIGd1YXJhbnRlZSB0aGF0XG4gICogYW4gVU5MT0NLJiM0MztMT0NLIHBhaXIgYWN0cyBhcyBhIGZ1bGwgYmFycmllci4gIFRoaXMgZ3VhcmFudGVlIGFwcGxpZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5pbmRleCBlMTkxNTAyNmUwMzA0Li5jZGExMjZkZWY2N2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5AQCAtMTQzMCwyNSAmIzQzOzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcbiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiBcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4te1xuLVx0cmN1X2JhcnJpZXIoKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi17XG4tXHRyY3VfYmFycmllcigpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuICNlbHNlXG4mIzQzO3ZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XG4gXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpO1xuIFxuLXZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuLSNlbmRpZlxuLVxuIC8qKlxuICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplXG4gICpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaFxuQEAgLTI1Nyw2ICYjNDM7MjU3LDE0IEBAIHN0cnVjdCBjYWxsYmFja19oZWFkIHtcbiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSk7XG4gI2RlZmluZSByY3VfaGVhZCBjYWxsYmFja19oZWFkXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG4mIzQzO3N0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKm5leHQ7XG4mIzQzO307XG4mIzQzOyNlbHNlXG4mIzQzOyNkZWZpbmUga3ZmcmVlX3JjdV9oZWFkIHJjdV9oZWFkXG4mIzQzOyNlbmRpZlxuJiM0MztcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiB0eXBlZGVmIHZvaWQgKCpjYWxsX3JjdV9mdW5jX3QpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuaW5kZXggNWZiZGFiZTNmYWVhZC4uYTc0MDI3MTI2YTJmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuQEAgLTYyNSw3ICYjNDM7NjI1LDcgQEAgVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2VfY2FsbGJhY2ssXG4gICovXG4gVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2Vfa3ZmcmVlX2NhbGxiYWNrLFxuIFxuLVx0VFBfUFJPVE8oY29uc3QgY2hhciAqcmN1bmFtZSwgc3RydWN0IHJjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcbiYjNDM7XHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcbiBcbiBcdFRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLFxuIFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmMgYi9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jXG5pbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2twcm9iZXMuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0Oy4uL21tL3NsYWIuaFwmIzM0O1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XG5AQCAtMTYxLDcgJiM0MzsxNjIsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX3JlZHpvbmVfYWNjZXNzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB9XG4gXG4gc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIGt2cmN1O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2tmcmVlX3JjdShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMjkyLDE5ICYjNDM7Mjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGttZW1fY2FjaGVfZGVzdHJveShzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcbiAjZGVmaW5lIE5SX0lURVJBVElPTlMgMTAwMFxuICNkZWZpbmUgTlJfT0JKRUNUUyAxMDAwXG4tc3RhdGljIHZvaWQgKm9iamVjdHNbTlJfT0JKRUNUU107XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdO1xuIFxuIHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IHtcbiBcdHN0cnVjdCBrdW5pdCAqdGVzdDtcbiBcdGludCBjYWxsYmFja19jb3VudDtcbiBcdGludCBhbGxvY19vaztcbiBcdGludCBhbGxvY19mYWlsO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7XHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XHRib29sIGNhbl91c2Vfa2ZyZWVfcmN1ID0gIUlTX0JVSUxUSU4oQ09ORklHX1NMVUJfS1VOSVRfVEVTVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRnZnBfdCBnZnAgPSAoaSBcdTAwMjYgMSkgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xuJiM0MztcbiYjNDM7XHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xuJiM0MztcdFx0XHRpZiAoIW9iamVjdHNbal0pIHtcbiYjNDM7XHRcdFx0XHRqLS07XG4mIzQzO1x0XHRcdFx0d2hpbGUgKGogXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWUob2JqZWN0c1tqLS1dKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiAyKSlcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3Uob2JqZWN0c1tqXSwgcmN1KTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7XG4mIzQzO1x0Z2ZwX3QgZ2ZwO1xuJiM0MztcdGJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTtcbiYjNDM7XG4mIzQzO1x0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4mIzQzO1x0Z2ZwID0gKGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCBcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcbiYjNDM7XHRvYmpwID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKCpvYmpwKSwgZ2ZwLCBOVU1BX05PX05PREUpO1xuJiM0MztcbiYjNDM7XHRpZiAob2JqcClcbiYjNDM7XHRcdGN0eC1cdTAwM2VhbGxvY19vayYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y3R4LVx1MDAzZWFsbG9jX2ZhaWwmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQgXHUwMDI2IDIpKVxuJiM0MztcdFx0a2ZyZWVfcmN1X25vbG9jayhvYmpwLCBrdnJjdSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a2ZyZWVfbm9sb2NrKG9ianApO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQmIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbiBcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG5AQCAtMzE1LDY3ICYjNDM7Mzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQuc2FtcGxlX2ZyZXEgPSAxMDAwMDAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3N0YXRpYyB2b2lkIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHZvaWQgKm9ianA7XG4tXHRnZnBfdCBnZnA7XG4gXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xuIFxuLVx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4tXHRnZnAgPSAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcbi1cdG9ianAgPSBrbWFsbG9jX25vbG9jayg2NCwgZ2ZwLCBOVU1BX05PX05PREUpO1xuLVxuLVx0aWYgKG9ianApXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19vayYjNDM7JiM0Mzs7XG4tXHRlbHNlXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19mYWlsJiM0MzsmIzQzOztcbi1cbi1cdGtmcmVlX25vbG9jayhvYmpwKTtcbi1cdGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0dGVzdF9ub2xvY2soY3R4KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3N0YXRpYyBib29sIGVuYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuIHtcbi1cdGludCBpLCBqO1xuLVx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbi1cdGJvb2wgYWxsb2NfZmFpbCA9IGZhbHNlO1xuIFxuIFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcdTAwMjZod19hdHRyLCAtMSwgY3VycmVudCxcbi1cdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrLFxuLVx0XHRcdFx0XHRcdCBcdTAwMjZjdHgpO1xuJiM0MztcdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0IGN0eCk7XG4mIzQzO1xuIFx0aWYgKElTX0VSUihldmVudCkpXG4tXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwZXJmIGV2ZW50XCYjMzQ7KTtcbi1cdGN0eC5ldmVudCA9IGV2ZW50O1xuLVx0cGVyZl9ldmVudF9lbmFibGUoY3R4LmV2ZW50KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z2ZwX3QgZ2ZwID0gKGkgJSAyKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XG4tXHRcdFx0aWYgKCFvYmplY3RzW2pdKSB7XG4tXHRcdFx0XHRqLS07XG4tXHRcdFx0XHR3aGlsZSAoaiBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdGtmcmVlKG9iamVjdHNbai0tXSk7XG4tXHRcdFx0XHRhbGxvY19mYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfT0JKRUNUUzsgaiYjNDM7JiM0MzspXG4tXHRcdFx0a2ZyZWUob2JqZWN0c1tqXSk7XG4tXHR9XG4mIzQzO1x0Y3R4LVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4mIzQzO1x0cGVyZl9ldmVudF9lbmFibGUoY3R4LVx1MDAzZWV2ZW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0a3VuaXRfaW5mbyhjdHgtXHUwMDNldGVzdCwgXCYjMzQ7SFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4mIzQzO1xuJiM0MztcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuJiM0MztcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LVx1MDAzZWV2ZW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXG4tY2xlYW51cDpcbi1cdHBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpO1xuLVx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHguZXZlbnQpO1xuJiM0MztcdGlmICghZW5hYmxlX3BlcmZfZXZlbnRzKFx1MDAyNmN0eCkpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcJiMzNDspO1xuIFxuLVx0a3VuaXRfaW5mbyh0ZXN0LCBcJiMzNDtjYWxsYmFja19jb3VudDogJWQsIGFsbG9jX29rOiAlZCwgYWxsb2NfZmFpbDogJWRcXG5cJiMzNDssXG4tXHRcdCAgIGN0eC5jYWxsYmFja19jb3VudCwgY3R4LmFsbG9jX29rLCBjdHguYWxsb2NfZmFpbCk7XG4mIzQzO1x0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XG4gXG4tXHRpZiAoYWxsb2NfZmFpbClcbi1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtBbGxvY2F0aW9uIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0ZGlzYWJsZV9wZXJmX2V2ZW50cyhcdTAwMjZjdHgpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAwLCBzbGFiX2Vycm9ycyk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7c3RhdGljIGludCBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHg7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCwga3Byb2JlKTtcbiYjNDM7XHR0ZXN0X25vbG9jayhjdHgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCByZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGN0eC1cdTAwM2VrcHJvYmUuc3ltYm9sX25hbWUgPSBcJiMzNDtzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkXCYjMzQ7O1xuJiM0MztcdGN0eC1cdTAwM2VrcHJvYmUucHJlX2hhbmRsZXIgPSBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZ2lzdGVyX2twcm9iZShcdTAwMjZjdHgtXHUwMDNla3Byb2JlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGt1bml0X2luZm8oY3R4LVx1MDAzZXRlc3QsIFwmIzM0O2twcm9iZXM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9rcHJvYmUoXHUwMDI2Y3R4LVx1MDAzZWtwcm9iZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4mIzQzO1xuJiM0MztcdGlmICghcmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCkpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBrcHJvYmUsIHNraXBwaW5nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuIH1cbiAjZW5kaWZcbkBAIC00MDUsNyAmIzQzOzQ5MCwxMCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2xlYWtfZGVzdHJveSksXG4gXHRLVU5JVF9DQVNFKHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKSxcbiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4tXHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayksXG4mIzQzO1x0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZiksXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbiYjNDM7XHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19rcHJvYmUpLFxuICNlbmRpZlxuIFx0e31cbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaFxuaW5kZXggZTAxYzEwMTViOGM4ZC4uOGZkNjgzNWU0MjM1MiAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYi5oXG5AQCAtMjQsMTEgJiM0MzsyNCwyNyBAQFxuICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xuICNkZWZpbmUgU0xBQl9BTExPQ19OT19PQkpfRVhUXHQweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqL1xuIFxuJiM0MzsjZGVmaW5lIFNMQUJfRlJFRV9ERUZBVUxUXHQweDAwIC8qIG5vIGZsYWdzICovXG4mIzQzOyNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1x0MHgwMSAvKiBzcGlubmluZyBub3QgYWxsb3dlZCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdG9fYWxsb2NfZmxhZ3ModW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcbiYjNDM7XHRcdHJldHVybiBTTEFCX0FMTE9DX05PTE9DSztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0cmV0dXJuICEoYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTk9MT0NLKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuIFx0XHRcdFx0ICBfX2Fzc3VtZV9rbWFsbG9jX2FsaWdubWVudCBfX2FsbG9jX3NpemUoMSk7XG5AQCAtMzMxLDYgJiM0MzszNDcsMzcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX3RvX2luZGV4KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbiBcdHJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICoga3ZmcmVlX3JjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplLlxuJiM0MzsgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprdm1hbGxvY19vYmpfc3RhcnRfYWRkcih2b2lkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIoaGVhZCkpKSB7XG4mIzQzO1x0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIoaGVhZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzbGFiKSB7XG4mIzQzO1x0XHRcdG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkge1xuJiM0MztcdFx0XHRvZmZzZXQgPSBoZWFkIC0ga2ZlbmNlX29iamVjdF9zdGFydChoZWFkKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgaWR4ID0gX19vYmpfdG9faW5kZXgocywgc2xhYl9hZGRyZXNzKHNsYWIpLCBoZWFkKTtcbiYjNDM7XHRcdFx0dm9pZCAqb2JqID0gc2xhYl9hZGRyZXNzKHNsYWIpICYjNDM7IHMtXHUwMDNlc2l6ZSAqIGlkeDtcbiYjNDM7XG4mIzQzO1x0XHRcdG9iaiA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9iaik7XG4mIzQzO1x0XHRcdG9iaiA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuJiM0MztcdFx0XHRvZmZzZXQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCkgLSBvYmo7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaGVhZCAtIG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cbiAgKlxuQEAgLTQzMSw3ICYjNDM7NDc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0cmV0dXJuICEocy1cdTAwM2VmbGFncyBcdTAwMjYgKFNMQUJfQ0FDSEVfRE1BfFNMQUJfQUNDT1VOVHxTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX05PX09CSl9FWFQpKTtcbiB9XG4gXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKTtcbiYjNDM7Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG4gdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gXG5AQCAtODk5LDcgJiM0Mzs5NDYsOCBAQCB2b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKVxuIHZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbiBcdFx0XHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcik7XG4gXG4tdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZCk7XG4mIzQzO3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpO1xuJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2x1Yl9kZWJ1Z19vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAxZTFkM2ZlZWMzNTM1Li5iOGYyMWVhYmNjY2MyIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTU1OCw3ICYjNDM7NTU4LDcgQEAgdm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHR9XG4gXG4gXHQvKiBXYWl0IGZvciBkZWZlcnJlZCB3b3JrIGZyb20ga21hbGxvYy9rZnJlZV9ub2xvY2soKSAqL1xuLVx0ZGVmZXJfZnJlZV9iYXJyaWVyKCk7XG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4gXG4gXHRjcHVzX3JlYWRfbG9jaygpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbGFiX211dGV4KTtcbkBAIC0xMjk2LDYgJiM0MzsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTtcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xuIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xuIFxuJiM0Mzt2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQpKVxuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihwdHIpKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdHNsYWIgPSB2aXJ0X3RvX3NsYWIocHRyKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXNsYWIpKVxuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2ZhbGxiYWNrOlxuJiM0MztcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xuJiM0MztcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbiBcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbkBAIC0xMzEzLDYgJiM0MzsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xuIFxuJiM0Mzt2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1x0cmN1X2JhcnJpZXIoKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4mIzQzO3tcbiYjNDM7XHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcbiYjNDM7XHRyY3VfYmFycmllcigpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XG4mIzQzO1xuIHZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxuIHtcbiB9XG5AQCAtMTM3OSw3ICYjNDM7MTQyMCw3IEBAIHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSB7XG4gXG4gc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XG4gXHRzdHJ1Y3QgcmN1X3dvcmsgcmN1X3dvcms7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfZnJlZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX2ZyZWU7XG4gXHRzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZnJlZV9ncF9zbmFwO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRfZnJlZVtGUkVFX05fQ0hBTk5FTFNdO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7XG5AQCAtMTQxNSw3ICYjNDM7MTQ1Niw3IEBAIHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsge1xuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcbiBcdC8vIE9iamVjdHMgcXVldWVkIG9uIGEgbGlua2VkIGxpc3RcbiBcdC8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy5cbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkO1xuIFx0dW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7XG4gXHRhdG9taWNfdCBoZWFkX2NvdW50O1xuIFxuQEAgLTE1NTYsMTIgJiM0MzsxNTk3LDEyIEBAIGt2ZnJlZV9yY3VfYnVsayhzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCxcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1rdmZyZWVfcmN1X2xpc3Qoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0MztrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcbiBcbiBcdGZvciAoOyBoZWFkOyBoZWFkID0gbmV4dCkge1xuLVx0XHR2b2lkICpwdHIgPSAodm9pZCAqKSBoZWFkLVx1MDAzZWZ1bmM7XG4mIzQzO1x0XHR2b2lkICpwdHIgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSAodm9pZCAqKSBoZWFkIC0gcHRyO1xuIFxuIFx0XHRuZXh0ID0gaGVhZC1cdTAwM2VuZXh0O1xuQEAgLTE1ODUsNyAmIzQzOzE2MjYsNyBAQCBzdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZFtGUkVFX05fQ0hBTk5FTFNdO1xuLVx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7XG4gXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsgKmtyd3A7XG4gXHRzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZ3Bfc25hcDtcbkBAIC0xNjI4LDYgJiM0MzsxNjY5LDE0IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbiYjNDM7XHQgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTYzOCw3ICYjNDM7MTY4Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4gXG4gXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuIFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG4tXHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmopO1xuJiM0MztcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE3MDgsNyAmIzQzOzE3NTcsNyBAQCBrdmZyZWVfcmN1X2RyYWluX3JlYWR5KHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwKVxuIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYnVsa19yZWFkeVtGUkVFX05fQ0hBTk5FTFNdO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuIFxuQEAgLTE5NzEsNyAmIzQzOzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcbiAgKiBiZSBmcmVlJiMzOTtkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG9cbiAgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIGR1cmluZyBoZWF2eSBrZnJlZV9yY3UoKS9rdmZyZWVfcmN1KCkgbG9hZC5cbiAgKi9cbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiYjNDM7dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcbkBAIC0xOTg3LDcgJiM0MzsyMDM2LDcgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gXHRpZiAoIWhlYWQpXG4gXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiYjNDM7XHRpZiAoa2ZyZWVfcmN1X3NoZWFmKHB0cikpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8vIFF1ZXVlIHRoZSBvYmplY3QgYnV0IGRvbiYjMzk7dCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxuQEAgLTIwMDksNyAmIzQzOzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdFx0XHQvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLlxuIFx0XHRcdGdvdG8gdW5sb2NrX3JldHVybjtcbiBcbi1cdFx0aGVhZC1cdTAwM2VmdW5jID0gcHRyO1xuIFx0XHRoZWFkLVx1MDAzZW5leHQgPSBrcmNwLVx1MDAzZWhlYWQ7XG4gXHRcdFdSSVRFX09OQ0Uoa3JjcC1cdTAwM2VoZWFkLCBoZWFkKTtcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZrcmNwLVx1MDAzZWhlYWRfY291bnQpO1xuQEAgLTIxNDIsMTcgJiM0MzsyMTkwLDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XG4gICovXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuJiM0MztcdC8qIGtmcmVlX3JjdV9ub2xvY2soKSBtaWdodCBoYXZlIGRlZmVycmVkIGZyZWVzIGV2ZW4gd2l0aG91dCBzaGVhdmVzICovXG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1xuIFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XG4gXHRcdGNwdXNfcmVhZF9sb2NrKCk7XG4gXHRcdGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpO1xuIFx0XHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJjdV9iYXJyaWVyKCk7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogVE9ETzogSW50cm9kdWNlIGEgdmVyc2lvbiBvZiBfX2t2ZnJlZV9yY3VfYmFycmllcigpIHRoYXQgd29ya3Ncbi1cdCAqIG9uIGEgc3BlY2lmaWMgc2xhYiBjYWNoZS5cbi1cdCAqL1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4gXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggYWRlMTdmODRlNTgzMi4uYmEyZjIwODI2MmJmNiAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtNDI0LDYgJiM0Mzs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7XG4mIzQzO1x0XHQvKiBvbmx5IHVzZWQgdG8gZGVmZXIgY2FsbF9yY3UoKSBpbiB1bmtub3duIGNvbnRleHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcbiBcdFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0dW5zaWduZWQgaW50IGNhcGFjaXR5O1xuQEAgLTkwNiw2ICYjNDM7OTA4LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIG5vLW9wIGZ1bmN0aW9uIHVzZWQgdG8gYXR0YWNoIGtwcm9iZSBoYW5kbGVycyBpbiBzbHViX2t1bml0IHRlc3RzLlxuJiM0MzsgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIG91dCBjYWxsc2l0ZXMuXG4mIzQzOyAqL1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfVk0pIHx8IGRlZmluZWQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGJhcnJpZXIoKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChsb2NrKSBkbyB7XHRcXFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XHRcdFxcXG4mIzQzO1x0c2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCgpO1x0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG4gXG4gLypcbkBAIC0xNjYzLDcgJiM0MzsxNjgzLDcgQEAgc3RhdGljIHZvaWQgYWRkX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIFx1MDAyNm4tXHUwMDNlZnVsbCk7XG4gfVxuIFxuQEAgLTE2NzIsNyAmIzQzOzE2OTIsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0XG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QpO1xuIH1cbiBcbkBAIC0yODE2LDcgJiM0MzsyODM2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYWxsb2NfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdC8qXG4gXHQgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0c1xuQEAgLTI4MjgsMTEgJiM0MzsyODQ5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbiBcdFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uoc2hlYWYtXHUwMDNlc2l6ZSBcdTAwM2UgMCk7XG4tXHRrZnJlZShzaGVhZik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcbiYjNDM7XHRcdGtmcmVlX25vbG9jayhzaGVhZik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a2ZyZWUoc2hlYWYpO1xuIFxuIFx0c3RhdChzLCBTSEVBRl9GUkVFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbiYjNDM7e1xuJiM0MztcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnRcbiByZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbiBcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbkBAIC0yODg1LDcgJiM0MzsyOTE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHR2b2lkICpvYmplY3RzW1BDU19CQVRDSF9NQVhdO1xuIFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmO1xuIFxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiBcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcdHNoZWFmID0gcGNzLVx1MDAzZW1haW47XG5AQCAtMzU3MCw3ICYjNDM7MzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdF9fYWRkX3BhcnRpYWwobiwgc2xhYiwgbW9kZSk7XG4gfVxuIFxuQEAgLTM1ODQsNyAmIzQzOzM2MTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gXHRcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuQEAgLTM2MDAsNyAmIzQzOzM2MzAsNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiB7XG4gXHR2b2lkICpvYmplY3Q7XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XG5AQCAtNDA2OSw2ICYjNDM7NDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsge1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgcmN1X3NoZWF2ZXM7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0ge1xuJiM0MztcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuJiM0MztcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4mIzQzO1x0LnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSxcbiYjNDM7XHQud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5AQCAtNDEyOCw2ICYjNDM7NDE3NCw4IEBAIHZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXG4ge1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXG4mIzQzO1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzQzO1xuIFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c2xhYl9tdXRleCk7XG4gXG5AQCAtNDY2NSw3ICYjNDM7NDcxMyw3IEBAIF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG4gXHRib29sIGFsbG93X3NwaW47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiYjNDM7XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xuIFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC01NzgzLDcgJiM0Mzs1ODMxLDcgQEAgc3RhdGljIHZvaWQgX19wY3NfaW5zdGFsbF9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcywgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LFxuIFx0XHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHQvKiBUaGlzIGlzIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgaWYgbm9ib2R5IGludGVycnVwdGVkIHVzLiAqL1xuIFx0aWYgKGxpa2VseSghcGNzLVx1MDAzZXNwYXJlKSkge1xuQEAgLTU4MzQsNyAmIzQzOzU4ODIsNyBAQCBfX3Bjc19yZXBsYWNlX2Z1bGxfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdGJvb2wgcHV0X2ZhaWw7XG4gXG4gcmVzdGFydDpcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuJiM0MztcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG4gXHRpZiAodW5saWtlbHkoIWNhY2hlX2hhc19zaGVhdmVzKHMpKSkge1xuQEAgLTYwMzUsMjQgJiM0Mzs2MDgzLDI2IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcbiAgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbiAgKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xuLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC5cbiYjNDM7ICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4gICogc3Bpbm5pbmcgbG9jay4gVGVsbCBsb2NrZGVwIHRoYXQgYWNxdWlyaW5nIHNwaW5sb2NrX3QgaXMgdmFsaWQgaGVyZVxuLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy5cbiYjNDM7ICogYnkgdGVtcG9yYXJpbHkgcmFpc2luZyB0aGUgd2FpdC10eXBlIHRvIExEX1dBSVRfQ09ORklHLiBTa2lwIHRoZSBsb2NrZGVwIG1hcFxuJiM0MzsgKiBvbiBQUkVFTVBUX1JUIHRvIGF2b2lkIHN1cHByZXNzaW5nIHZhbGlkIGxvY2tkZXAgd2FybmluZ3MuXG4gICovXG4gc3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG4gXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuJiM0Mztib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmO1xuJiM0MztcdGJvb2wgYWxsb3dfc3BpbiA9IGZyZWVfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZnJlZV9mbGFncyk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYgYWxsb3dfc3Bpbik7XG4gXG4tXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuJiM0MztcdFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXG4gXHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbiBcdFx0Z290byBmYWlsO1xuQEAgLTYwNjAsOSAmIzQzOzYxMTAsMTAgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwY3MtXHUwMDNlcmN1X2ZyZWUpKSB7XG4tXG4gXHRcdHN0cnVjdCBzbGFiX3NoZWFmICplbXB0eTtcbiBcdFx0c3RydWN0IG5vZGVfYmFybiAqYmFybjtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwID0gYWxsb3dfc3BpbiA/IEdGUF9OT1dBSVQgOiBfX0dGUF9OT1dBUk47XG4gXG4gXHRcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovXG4gXHRcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5AQCAtNjA4Miw3ICYjNDM7NjEzMyw3IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbi1cdFx0ZW1wdHkgPSBiYXJuX2dldF9lbXB0eV9zaGVhZihiYXJuLCB0cnVlKTtcbiYjNDM7XHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7XG4gXG4gXHRcdGlmIChlbXB0eSkge1xuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuQEAgLTYwOTEsMjAgJiM0Mzs2MTQyLDIwIEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcbiBcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTtcbiYjNDM7XHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XG4gXG4gXHRcdGlmICghZW1wdHkpXG4gXHRcdFx0Z290byBmYWlsO1xuIFxuIFx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSkge1xuLVx0XHRcdGJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTtcbiYjNDM7XHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbiBcdFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocGNzLVx1MDAzZXJjdV9mcmVlKSlcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4mIzQzO1x0XHRcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRwY3MtXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcbiBcdH1cbkBAIC02MTMwLDE4ICYjNDM7NjE4MSwzNCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4gXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xuIFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24mIzM5O3QgbWlzcyB0aGlzIHNoZWFmXG4gXHQgKi9cbi1cdGlmIChyY3Vfc2hlYWYpXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuJiM0MztcdGlmIChyY3Vfc2hlYWYpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCkmIzM5O3NcbiYjNDM7XHRcdCAqIElSUS1kaXNhYmxlZCBjcml0aWNhbCBzZWN0aW9uLiBJZiBJUlFzIGFyZSBub3QgZGlzYWJsZWQsXG4mIzQzO1x0XHQgKiB3ZSBrbm93IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1xuJiM0MztcdFx0XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VsbG5vZGUsIFx1MDAyNmRwdy1cdTAwM2VyY3Vfc2hlYXZlcykpXG4mIzQzO1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Y2FsbF9yY3UoXHUwMDI2cmN1X3NoZWFmLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4gXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiBcbiBmYWlsOlxuIFx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRl9GQUlMKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiYjNDM7XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuQEAgLTYzMzAsMzEgJiM0Mzs2Mzk3LDIyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGRlZmVyX2ZyZWUge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcbi1cdHN0cnVjdCBpcnFfd29yayB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4tXG4tc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcl9mcmVlLCBkZWZlcl9mcmVlX29iamVjdHMpID0ge1xuLVx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXG4tXHQud29yayA9IElSUV9XT1JLX0lOSVQoZnJlZV9kZWZlcnJlZF9vYmplY3RzKSxcbi19O1xuLVxuIC8qXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQmIzM5O3Mgc2FmZVxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXG4gICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4ge1xuLVx0c3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpvYmpzID0gXHUwMDI2ZGYtXHUwMDNlb2JqZWN0cztcbiYjNDM7XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbiYjNDM7XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xuIFxuLVx0aWYgKGxsaXN0X2VtcHR5KG9ianMpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0ZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7XG4mIzQzO1x0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4mIzQzO1x0b2JqcyA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzO1xuJiM0MztcdG9ianNfYnlfcmN1ID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHNfYnlfcmN1O1xuIFxuIFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTtcbiBcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbkBAIC02Mzc4LDI3ICYjNDM7NjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xuIFx0XHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4mIzQzO1x0XHR2b2lkICpoZWFkID0gcG9zO1xuJiM0MztcdFx0dm9pZCAqb2JqcCA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuJiM0MztcbiYjNDM7XHRcdGt2ZnJlZV9jYWxsX3JjdShoZWFkLCBvYmpwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKVxuJiM0MztcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4gXG4gXHRndWFyZChwcmVlbXB0KSgpO1xuIFxuIFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcbiBcbi1cdGRmID0gdGhpc19jcHVfcHRyKFx1MDAyNmRlZmVyX2ZyZWVfb2JqZWN0cyk7XG4tXHRpZiAobGxpc3RfYWRkKGhlYWQgJiM0Mzsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRmLVx1MDAzZW9iamVjdHMpKVxuLVx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZkZi1cdTAwM2V3b3JrKTtcbiYjNDM7XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuJiM0MztcdGlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLVx1MDAzZW9mZnNldCwgXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHMpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHByZWVtcHQpKCk7XG4mIzQzO1xuJiM0MztcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZkcHctXHUwMDNlb2JqZWN0c19ieV9yY3UpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuIH1cbiBcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xuJiM0Mzt2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKVxuIHtcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuLVx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNmRlZmVyX2ZyZWVfb2JqZWN0cywgY3B1KS1cdTAwM2V3b3JrKTtcbiYjNDM7XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmssIGNwdSktXHUwMDNld29yayk7XG4gfVxuIFxuIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxuQEAgLTY2NTcsNDMgJiM0Mzs2NzM5LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuICAqL1xuIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0dm9pZCAqb2JqID0gaGVhZDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbi1cdHZvaWQgKnNsYWJfYWRkcjtcbiYjNDM7XHR2b2lkICpvYmo7XG4mIzQzO1xuJiM0MztcdG9iaiA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKSB7XG4tXHRcdG9iaiA9ICh2b2lkICopIFBBR0VfQUxJR05fRE9XTigodW5zaWduZWQgbG9uZylvYmopO1xuIFx0XHR2ZnJlZShvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4tXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0aWYgKCFzbGFiKSB7XG4tXHRcdC8qXG4tXHRcdCAqIHJjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplIHNvIG5vIG5lZWQgdG9cbi1cdFx0ICogY29uc2lkZXIgYWxsb2NhdGlvbiBvcmRlclxuLVx0XHQgKi9cbi1cdFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuLVx0c2xhYl9hZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLVxuLVx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbi1cdFx0b2JqID0ga2ZlbmNlX29iamVjdF9zdGFydChvYmopO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcbi1cdFx0b2JqID0gc2xhYl9hZGRyICYjNDM7IHMtXHUwMDNlc2l6ZSAqIGlkeDtcbi1cdFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcbiYjNDM7XHRcdGlmIChzbGFiKVxuJiM0MztcdFx0XHRzbGFiX2ZyZWUoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XG4gXHR9XG4tXG4tXHRzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7S1VOSVQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U0xVQl9ERUJVRyYjMzQ7LAogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAgICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDssCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF93b3JrX2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O2t2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmJiNzU2NWE4ZWNmNDdjOWY1MjI1OGYxNmM1NDA4MTJiMzM4MzNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTQ6NDM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNWU5NWFjYzMzOTg5Yi4uYWVkZTc3YmQwMzg3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtMTA5OCwxOSAmIzQzOzEwOTgsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpCiAvKgogICogSW4gbW0vc2xhYl9jb21tb24uYywgbm8gc3VpdGFibGUgaGVhZGVyIHRvIGluY2x1ZGUgaGVyZS4KICAqLwotdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpOwomIzQzO3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7CiYjNDM7dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTsKIAogLyoKICAqIFRoZSBCVUlMRF9CVUdfT04oKSBtYWtlcyBzdXJlIHRoZSByY3VfaGVhZCBvZmZzZXQgY2FuIGJlIGhhbmRsZWQuIFNlZSB0aGUKICAqIGNvbW1lbnQgb2Yga2ZyZWVfcmN1KCkgZm9yIGRldGFpbHMuCiAgKi8KLSNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIHJoZikJCQkJCVwKJiM0MzsjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZikJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJdHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTsJCQkJCVwKJiM0MzsJc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqX19faGVhZDsJCQkJXAogCQkJCQkJCQkJXAogCWlmIChfX19wKSB7CQkJCQkJCVwKLQkJQlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCByaGYpICZndDs9IDQwOTYpOwlcCi0JCWt2ZnJlZV9jYWxsX3JjdSgmYW1wOygoX19fcCktJmd0O3JoZiksICh2b2lkICopIChfX19wKSk7CVwKJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpICZndDs9IDQwOTYpOwlcCiYjNDM7CQlfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgJmFtcDsoX19fcCktJmd0O2t2cmhmOwlcCiYjNDM7CQlrdmZyZWVfY2FsbF9yY3UoX19faGVhZCwgKHZvaWQgKikgKF9fX3ApKTsJCVwKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0xMTIyLDYgJiM0MzsxMTI1LDI3IEBAIGRvIHsJCQkJCQkJCVwKIAkJa3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7CQlcCiB9IHdoaWxlICgwKQogCiYjNDM7LyoqCiYjNDM7ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC4KJiM0MzsgKiBAcHRyOiBwb2ludGVyIHRvIGtmcmVlIGZvciBkb3VibGUtYXJndW1lbnQgaW52b2NhdGlvbnMuCiYjNDM7ICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci4KJiM0MzsgKgomIzQzOyAqIFdpdGggS1ZGUkVFX1JDVV9CQVRDSEVELCBrZnJlZV9yY3Vfbm9sb2NrKCkgdHJpZXMgaGFyZCB0byBmcmVlIG9iamVjdHMKJiM0MzsgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuCiYjNDM7ICogTGFyZ2Uga21hbGxvYyBhbmQgdm1hbGxvYyBvYmplY3RzIGFyZSBhbHdheXMgZGVmZXJyZWQuCiYjNDM7ICoKJiM0MzsgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUga2ZyZWVfcmN1X25vbG9jayhwdHIsIGt2cmhmKQkJCQkJCVwKJiM0MztkbyB7CQkJCQkJCQkJCVwKJiM0MzsJdHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCVwKJiM0MzsJaWYgKF9fX3ApIHsJCQkJCQkJCVwKJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpICZndDs9IDQwOTYpOwkJXAomIzQzOwkJa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKCZhbXA7KChfX19wKS0mZ3Q7a3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpOwlcCiYjNDM7CX0JCQkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKIC8qCiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXQKICAqIGFuIFVOTE9DSyYjNDM7TE9DSyBwYWlyIGFjdHMgYXMgYSBmdWxsIGJhcnJpZXIuICBUaGlzIGd1YXJhbnRlZSBhcHBsaWVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IGUxOTE1MDI2ZTAzMDQuLmNkYTEyNmRlZjY3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0xNDMwLDI1ICYjNDM7MTQzMCwxNSBAQCBleHRlcm4gdm9pZCBrdmZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOwogdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7CiAKICNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRAotc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKQotewotCXJjdV9iYXJyaWVyKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpCi17Ci0JcmN1X2JhcnJpZXIoKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKSB7IH0KICNlbHNlCiYjNDM7dm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKTsKIAogdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpOwogCi12b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKTsKLSNlbmRpZgotCiAvKioKICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTI1Nyw2ICYjNDM7MjU3LDE0IEBAIHN0cnVjdCBjYWxsYmFja19oZWFkIHsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTsKICNkZWZpbmUgcmN1X2hlYWQgY2FsbGJhY2tfaGVhZAogCiYjNDM7I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQKJiM0MztzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHsKJiM0MzsJc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDsKJiM0Mzt9OwomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWQKJiM0MzsjZW5kaWYKJiM0MzsKIHR5cGVkZWYgdm9pZCAoKnJjdV9jYWxsYmFja190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpOwogdHlwZWRlZiB2b2lkICgqY2FsbF9yY3VfZnVuY190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCmluZGV4IDVmYmRhYmUzZmFlYWQuLmE3NDAyNzEyNmEyZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCkBAIC02MjUsNyAmIzQzOzYyNSw3IEBAIFRSQUNFX0VWRU5UX1JDVShyY3VfaW52b2tlX2NhbGxiYWNrLAogICovCiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssCiAKLQlUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLAomIzQzOwlUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSwKIAogCVRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLAogCmRpZmYgLS1naXQgYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jIGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuYwppbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NAotLS0gYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2twcm9iZXMuaCZndDsKICNpbmNsdWRlICYjMzQ7Li4vbW0vc2xhYi5oJiMzNDsKIAogc3RhdGljIHN0cnVjdCBrdW5pdF9yZXNvdXJjZSByZXNvdXJjZTsKQEAgLTE2MSw3ICYjNDM7MTYyLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19yZWR6b25lX2FjY2VzcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiB9CiAKIHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgewotCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CQlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIGt2cmN1OwomIzQzOwl9OwogfTsKIAogc3RhdGljIHZvaWQgdGVzdF9rZnJlZV9yY3Uoc3RydWN0IGt1bml0ICp0ZXN0KQpAQCAtMjkyLDE5ICYjNDM7Mjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1NNUCkpCiAjZGVmaW5lIE5SX0lURVJBVElPTlMgMTAwMAogI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDAKLXN0YXRpYyB2b2lkICpvYmplY3RzW05SX09CSkVDVFNdOwomIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdOwogCiBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCB7CiAJc3RydWN0IGt1bml0ICp0ZXN0OwogCWludCBjYWxsYmFja19jb3VudDsKIAlpbnQgYWxsb2Nfb2s7CiAJaW50IGFsbG9jX2ZhaWw7CiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsjZW5kaWYKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19TTVApCiYjNDM7CXN0cnVjdCBrcHJvYmUga3Byb2JlOwomIzQzOyNlbmRpZgogfTsKIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcyh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGksIGo7CiYjNDM7CWJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgTlJfT0JKRUNUUzsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlnZnBfdCBnZnAgPSAoaSAmYW1wOyAxKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7CiYjNDM7CiYjNDM7CQkJb2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApOwomIzQzOwkJCWlmICghb2JqZWN0c1tqXSkgewomIzQzOwkJCQlqLS07CiYjNDM7CQkJCXdoaWxlIChqICZndDs9IDApCiYjNDM7CQkJCQlrZnJlZShvYmplY3RzW2otLV0pOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGNhbl91c2Vfa2ZyZWVfcmN1ICZhbXA7JmFtcDsgKGkgJmFtcDsgMikpCiYjNDM7CQkJCWtmcmVlX3JjdShvYmplY3RzW2pdLCByY3UpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJa2ZyZWUob2JqZWN0c1tqXSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7CiYjNDM7CWdmcF90IGdmcDsKJiM0MzsJYm9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpOwomIzQzOwomIzQzOwkvKiBfX0dGUF9BQ0NPVU5UIHRvIHRlc3Qga21hbGxvY19ub2xvY2soKSBpbiBhbGxvY19zbGFiX29ial9leHRzKCkgKi8KJiM0MzsJZ2ZwID0gKGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQgJmFtcDsgMSkgPyAwIDogX19HRlBfQUNDT1VOVDsKJiM0MzsJb2JqcCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZigqb2JqcCksIGdmcCwgTlVNQV9OT19OT0RFKTsKJiM0MzsKJiM0MzsJaWYgKG9ianApCiYjNDM7CQljdHgtJmd0O2FsbG9jX29rJiM0MzsmIzQzOzsKJiM0MzsJZWxzZQomIzQzOwkJY3R4LSZndDthbGxvY19mYWlsJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKGNhbl91c2Vfa2ZyZWVfcmN1ICZhbXA7JmFtcDsgKGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQgJmFtcDsgMikpCiYjNDM7CQlrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTsKJiM0MzsJZWxzZQomIzQzOwkJa2ZyZWVfbm9sb2NrKG9ianApOwomIzQzOwomIzQzOwljdHgtJmd0O2NhbGxiYWNrX2NvdW50JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgaHdfYXR0ciA9IHsKIAkudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwKIAkuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLApAQCAtMzE1LDY3ICYjNDM7Mzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7CiAJLnNhbXBsZV9mcmVxID0gMTAwMDAwLAogfTsKIAotc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0MztzdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKJiM0MzsJCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl2b2lkICpvYmpwOwotCWdmcF90IGdmcDsKIAlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtJmd0O292ZXJmbG93X2hhbmRsZXJfY29udGV4dDsKIAotCS8qIF9fR0ZQX0FDQ09VTlQgdG8gdGVzdCBrbWFsbG9jX25vbG9jaygpIGluIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqLwotCWdmcCA9IChjdHgtJmd0O2NhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDsKLQlvYmpwID0ga21hbGxvY19ub2xvY2soNjQsIGdmcCwgTlVNQV9OT19OT0RFKTsKLQotCWlmIChvYmpwKQotCQljdHgtJmd0O2FsbG9jX29rJiM0MzsmIzQzOzsKLQllbHNlCi0JCWN0eC0mZ3Q7YWxsb2NfZmFpbCYjNDM7JiM0Mzs7Ci0KLQlrZnJlZV9ub2xvY2sob2JqcCk7Ci0JY3R4LSZndDtjYWxsYmFja19jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CXRlc3Rfbm9sb2NrKGN0eCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3N0YXRpYyBib29sIGVuYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQogewotCWludCBpLCBqOwotCXN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwotCWJvb2wgYWxsb2NfZmFpbCA9IGZhbHNlOwogCiAJZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcigmYW1wO2h3X2F0dHIsIC0xLCBjdXJyZW50LAotCQkJCQkJIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jaywKLQkJCQkJCSAmYW1wO2N0eCk7CiYjNDM7CQkJCQkJIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2ssCiYjNDM7CQkJCQkJIGN0eCk7CiYjNDM7CiAJaWYgKElTX0VSUihldmVudCkpCi0JCWt1bml0X3NraXAodGVzdCwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBlcmYgZXZlbnQmIzM0Oyk7Ci0JY3R4LmV2ZW50ID0gZXZlbnQ7Ci0JcGVyZl9ldmVudF9lbmFibGUoY3R4LmV2ZW50KTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlJfSVRFUkFUSU9OUzsgaSYjNDM7JiM0MzspIHsKLQkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KSB7Ci0JCQlnZnBfdCBnZnAgPSAoaSAlIDIpID8gR0ZQX0tFUk5FTCA6IEdGUF9LRVJORUxfQUNDT1VOVDsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCQkJb2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7Ci0JCQlpZiAoIW9iamVjdHNbal0pIHsKLQkJCQlqLS07Ci0JCQkJd2hpbGUgKGogJmd0Oz0gMCkKLQkJCQkJa2ZyZWUob2JqZWN0c1tqLS1dKTsKLQkJCQlhbGxvY19mYWlsID0gdHJ1ZTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCX0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IE5SX09CSkVDVFM7IGomIzQzOyYjNDM7KQotCQkJa2ZyZWUob2JqZWN0c1tqXSk7Ci0JfQomIzQzOwljdHgtJmd0O2V2ZW50ID0gZXZlbnQ7CiYjNDM7CXBlcmZfZXZlbnRfZW5hYmxlKGN0eC0mZ3Q7ZXZlbnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJa3VuaXRfaW5mbyhjdHgtJmd0O3Rlc3QsICYjMzQ7SFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxuJiMzNDssCiYjNDM7CQkgICBjdHgtJmd0O2NhbGxiYWNrX2NvdW50LCBjdHgtJmd0O2FsbG9jX29rLCBjdHgtJmd0O2FsbG9jX2ZhaWwpOwomIzQzOwomIzQzOwlwZXJmX2V2ZW50X2Rpc2FibGUoY3R4LSZndDtldmVudCk7CiYjNDM7CXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LSZndDtldmVudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9OwogCi1jbGVhbnVwOgotCXBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpOwotCXBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LmV2ZW50KTsKJiM0MzsJaWYgKCFlbmFibGVfcGVyZl9ldmVudHMoJmFtcDtjdHgpKQomIzQzOwkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmcmIzM0Oyk7CiAKLQlrdW5pdF9pbmZvKHRlc3QsICYjMzQ7Y2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXG4mIzM0OywKLQkJICAgY3R4LmNhbGxiYWNrX2NvdW50LCBjdHguYWxsb2Nfb2ssIGN0eC5hbGxvY19mYWlsKTsKJiM0MzsJdGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7CiAKLQlpZiAoYWxsb2NfZmFpbCkKLQkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O0FsbG9jYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwlkaXNhYmxlX3BlcmZfZXZlbnRzKCZhbXA7Y3R4KTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0tQUk9CRVMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU01QKQomIzQzO3N0YXRpYyBpbnQgc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4OwomIzQzOwomIzQzOwljdHggPSBjb250YWluZXJfb2YocCwgc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQsIGtwcm9iZSk7CiYjNDM7CXRlc3Rfbm9sb2NrKGN0eCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCByZWdpc3Rlcl9zbGFiX2twcm9iZXMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CWN0eC0mZ3Q7a3Byb2JlLnN5bWJvbF9uYW1lID0gJiMzNDtzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkJiMzNDs7CiYjNDM7CWN0eC0mZ3Q7a3Byb2JlLnByZV9oYW5kbGVyID0gc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXI7CiYjNDM7CiYjNDM7CWlmIChyZWdpc3Rlcl9rcHJvYmUoJmFtcDtjdHgtJmd0O2twcm9iZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJa3VuaXRfaW5mbyhjdHgtJmd0O3Rlc3QsICYjMzQ7a3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXG4mIzM0OywKJiM0MzsJCSAgIGN0eC0mZ3Q7Y2FsbGJhY2tfY291bnQsIGN0eC0mZ3Q7YWxsb2Nfb2ssIGN0eC0mZ3Q7YWxsb2NfZmFpbCk7CiYjNDM7CXVucmVnaXN0ZXJfa3Byb2JlKCZhbXA7Y3R4LSZndDtrcHJvYmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9OwomIzQzOwomIzQzOwlpZiAoIXJlZ2lzdGVyX3NsYWJfa3Byb2JlcygmYW1wO2N0eCkpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSwgc2tpcHBpbmcmIzM0Oyk7CiYjNDM7CiYjNDM7CXRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcygpOwomIzQzOwomIzQzOwl1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcygmYW1wO2N0eCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTsKIH0KICNlbmRpZgpAQCAtNDA1LDcgJiM0Mzs0OTAsMTAgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSwKIAlLVU5JVF9DQVNFKHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKSwKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKLQlLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayksCiYjNDM7CUtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYpLAomIzQzOyNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1NNUCkKJiM0MzsJS1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKSwKICNlbmRpZgogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IGUwMWMxMDE1YjhjOGQuLjhmZDY4MzVlNDIzNTIgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTI0LDExICYjNDM7MjQsMjcgQEAKICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFCTB4MDQgLyogcHJldmVudCBrbWFsbG9jKCkgcmVjdXJzaW9uICovCiAjZGVmaW5lIFNMQUJfQUxMT0NfTk9fT0JKX0VYVAkweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqLwogCiYjNDM7I2RlZmluZSBTTEFCX0ZSRUVfREVGQVVMVAkweDAwIC8qIG5vIGZsYWdzICovCiYjNDM7I2RlZmluZSBTTEFCX0ZSRUVfTk9MT0NLCTB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX2ZsYWdzICZhbXA7IFNMQUJfRlJFRV9OT0xPQ0spCiYjNDM7CQlyZXR1cm4gU0xBQl9BTExPQ19OT0xPQ0s7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBTTEFCX0FMTE9DX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAlyZXR1cm4gIShhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05PTE9DSyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSyk7CiYjNDM7fQomIzQzOwogdm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLAogCQkJCSAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSkKIAkJCQkgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTsKQEAgLTMzMSw2ICYjNDM7MzQ3LDM3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJcmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIGt2ZnJlZV9yY3VfaGVhZCBvZmZzZXQgY2FuIGJlIG9ubHkgbGVzcyB0aGFuIHBhZ2Ugc2l6ZS4KJiM0MzsgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqa3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIodm9pZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKGhlYWQpKSkgewomIzQzOwkJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGVhZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihoZWFkKTsKJiM0MzsKJiM0MzsJCWlmICghc2xhYikgewomIzQzOwkJCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpOwomIzQzOwkJfSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkgewomIzQzOwkJCW9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiYjNDM7CQkJdW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgaGVhZCk7CiYjNDM7CQkJdm9pZCAqb2JqID0gc2xhYl9hZGRyZXNzKHNsYWIpICYjNDM7IHMtJmd0O3NpemUgKiBpZHg7CiYjNDM7CiYjNDM7CQkJb2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTsKJiM0MzsJCQlvYmogPSBrYXNhbl9yZXNldF90YWcob2JqKTsKJiM0MzsJCQlvZmZzZXQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCkgLSBvYmo7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGhlYWQgLSBvZmZzZXQ7CiYjNDM7fQomIzQzOwogLyoKICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci4KICAqCkBAIC00MzEsNyAmIzQzOzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAlyZXR1cm4gIShzLSZndDtmbGFncyAmYW1wOyAoU0xBQl9DQUNIRV9ETUF8U0xBQl9BQ0NPVU5UfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTk9fT0JKX0VYVCkpOwogfQogCi1ib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopOwomIzQzO2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpOwogdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7CiB2b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKTsKIApAQCAtODk5LDcgJiM0Mzs5NDYsOCBAQCB2b2lkIF9fa21lbV9vYmpfaW5mbyhzdHJ1Y3Qga21lbV9vYmpfaW5mbyAqa3BwLCB2b2lkICpvYmplY3QsIHN0cnVjdCBzbGFiICpzbGFiKQogdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLAogCQkJIGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiLCBib29sIHRvX3VzZXIpOwogCi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTsKJiM0Mzt2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKTsKJiM0Mzt2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTsKIAogc3RhdGljIGlubGluZSBib29sIHNsdWJfZGVidWdfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewpkaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmMKaW5kZXggMWUxZDNmZWVjMzUzNS4uYjhmMjFlYWJjY2NjMiAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC01NTgsNyAmIzQzOzU1OCw3IEBAIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCX0KIAogCS8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovCi0JZGVmZXJfZnJlZV9iYXJyaWVyKCk7CiYjNDM7CWRlZmVycmVkX3dvcmtfYmFycmllcigpOwogCiAJY3B1c19yZWFkX2xvY2soKTsKIAltdXRleF9sb2NrKCZhbXA7c2xhYl9tdXRleCk7CkBAIC0xMjk2LDYgJiM0MzsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrZnJlZSk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTsKIAomIzQzO3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzbGFiICpzbGFiOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpCiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKHB0cikpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJc2xhYiA9IHZpcnRfdG9fc2xhYihwdHIpOwomIzQzOwlpZiAodW5saWtlbHkoIXNsYWIpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpICZhbXA7JmFtcDsgc2xhYl9uaWQoc2xhYikgIT0gbnVtYV9tZW1faWQoKSkpCiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItJmd0O3NsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKQomIzQzOwkJZ290byBmYWxsYmFjazsKJiM0MzsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2ZhbGxiYWNrOgomIzQzOwlkZWZlcl9rZnJlZV9yY3UoaGVhZCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7CiYjNDM7CiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQKIAogdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCkBAIC0xMzEzLDYgJiM0MzsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX2NhbGxfcmN1KTsKIAomIzQzO3ZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTsKJiM0MzsJcmN1X2JhcnJpZXIoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTsKJiM0MzsKJiM0Mzt2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKJiM0Mzt7CiYjNDM7CWRlZmVycmVkX3dvcmtfYmFycmllcigpOwomIzQzOwlyY3VfYmFycmllcigpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpOwomIzQzOwogdm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpCiB7CiB9CkBAIC0xMzc5LDcgJiM0MzsxNDIwLDcgQEAgc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhIHsKIAogc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7CiAJc3RydWN0IHJjdV93b3JrIHJjdV93b3JrOwotCXN0cnVjdCByY3VfaGVhZCAqaGVhZF9mcmVlOwomIzQzOwlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX2ZyZWU7CiAJc3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZF9mcmVlW0ZSRUVfTl9DSEFOTkVMU107CiAJc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7CkBAIC0xNDE1LDcgJiM0MzsxNDU2LDcgQEAgc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7CiBzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSB7CiAJLy8gT2JqZWN0cyBxdWV1ZWQgb24gYSBsaW5rZWQgbGlzdAogCS8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy4KLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7CiAJdW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7CiAJYXRvbWljX3QgaGVhZF9jb3VudDsKIApAQCAtMTU1NiwxMiAmIzQzOzE1OTcsMTIgQEAga3ZmcmVlX3JjdV9idWxrKHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwLAogfQogCiBzdGF0aWMgdm9pZAota3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0MztrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCkKIHsKLQlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKm5leHQ7CiAKIAlmb3IgKDsgaGVhZDsgaGVhZCA9IG5leHQpIHsKLQkJdm9pZCAqcHRyID0gKHZvaWQgKikgaGVhZC0mZ3Q7ZnVuYzsKJiM0MzsJCXZvaWQgKnB0ciA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpOwogCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh2b2lkICopIGhlYWQgLSBwdHI7CiAKIAkJbmV4dCA9IGhlYWQtJmd0O25leHQ7CkBAIC0xNTg1LDcgJiM0MzsxNjI2LDcgQEAgc3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47CiAJc3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRbRlJFRV9OX0NIQU5ORUxTXTsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7CiAJc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDsKIAlzdHJ1Y3QgcmN1X2dwX29sZHN0YXRlIGhlYWRfZ3Bfc25hcDsKQEAgLTE2MjgsNiAmIzQzOzE2NjksMTQgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKJiM0MzsJdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSXQgaXMgbm90IHNhZmUgdG8gc3BpbiBvbiBQUkVFTVBUX1JUIGJlY2F1c2UgdGhlIGtlcm5lbCBtaWdodCBiZQomIzQzOwkgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7CiAKIAlpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE2MzgsNyAmIzQzOzE2ODcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKQogCiAJcyA9IHNsYWItJmd0O3NsYWJfY2FjaGU7CiAJaWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpCi0JCXJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmopOwomIzQzOwkJcmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzA4LDcgJiM0MzsxNzU3LDcgQEAga3ZmcmVlX3JjdV9kcmFpbl9yZWFkeShzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfcmVhZHlbRlJFRV9OX0NIQU5ORUxTXTsKIAlzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCkBAIC0xOTcxLDcgJiM0MzsyMDIwLDcgQEAgdm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpCiAgKiBiZSBmcmVlJiMzOTtkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG8KICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGhlYXZ5IGtmcmVlX3JjdSgpL2t2ZnJlZV9yY3UoKSBsb2FkLgogICovCi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKJiM0Mzt2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDsKQEAgLTE5ODcsNyAmIzQzOzIwMzYsNyBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKIAlpZiAoIWhlYWQpCiAJCW1pZ2h0X3NsZWVwKCk7CiAKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsga2ZyZWVfcmN1X3NoZWFmKHB0cikpCiYjNDM7CWlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSkKIAkJcmV0dXJuOwogCiAJLy8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guCkBAIC0yMDA5LDcgJiM0MzsyMDU4LDYgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpCiAJCQkvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLgogCQkJZ290byB1bmxvY2tfcmV0dXJuOwogCi0JCWhlYWQtJmd0O2Z1bmMgPSBwdHI7CiAJCWhlYWQtJmd0O25leHQgPSBrcmNwLSZndDtoZWFkOwogCQlXUklURV9PTkNFKGtyY3AtJmd0O2hlYWQsIGhlYWQpOwogCQlhdG9taWNfaW5jKCZhbXA7a3JjcC0mZ3Q7aGVhZF9jb3VudCk7CkBAIC0yMTQyLDE3ICYjNDM7MjE5MCwxNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXIpOwogICovCiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKJiM0MzsJLyoga2ZyZWVfcmN1X25vbG9jaygpIG1pZ2h0IGhhdmUgZGVmZXJyZWQgZnJlZXMgZXZlbiB3aXRob3V0IHNoZWF2ZXMgKi8KJiM0MzsJZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7CiYjNDM7CiAJaWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7CiAJCWNwdXNfcmVhZF9sb2NrKCk7CiAJCWZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpOwogCQljcHVzX3JlYWRfdW5sb2NrKCk7Ci0JCXJjdV9iYXJyaWVyKCk7CiAJfQogCi0JLyoKLQkgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3JrcwotCSAqIG9uIGEgc3BlY2lmaWMgc2xhYiBjYWNoZS4KLQkgKi8KJiM0MzsJcmN1X2JhcnJpZXIoKTsKIAlfX2t2ZnJlZV9yY3VfYmFycmllcigpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBhZGUxN2Y4NGU1ODMyLi5iYTJmMjA4MjYyYmY2IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC00MjQsNiAmIzQzOzQyNCw4IEBAIHN0cnVjdCBzbGFiX3NoZWFmIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAkJc3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7CiYjNDM7CQkvKiBvbmx5IHVzZWQgdG8gZGVmZXIgY2FsbF9yY3UoKSBpbiB1bmtub3duIGNvbnRleHQgKi8KJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTsKIAkJLyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovCiAJCXN0cnVjdCB7CiAJCQl1bnNpZ25lZCBpbnQgY2FwYWNpdHk7CkBAIC05MDYsNiAmIzQzOzkwOCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogfQogI2VuZGlmCiAKJiM0MzsvKgomIzQzOyAqIEEgbm8tb3AgZnVuY3Rpb24gdXNlZCB0byBhdHRhY2gga3Byb2JlIGhhbmRsZXJzIGluIHNsdWJfa3VuaXQgdGVzdHMuCiYjNDM7ICogVGhlIGJhcnJpZXIgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gb3B0aW1pemluZyBvdXQgY2FsbHNpdGVzLgomIzQzOyAqLwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19WTSkgfHwgZGVmaW5lZChDT05GSUdfUFJPVkVfTE9DS0lORykKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpCiYjNDM7ewomIzQzOwliYXJyaWVyKCk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQobG9jaykgZG8gewlcCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7CQlcCiYjNDM7CXNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQoKTsJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIAogLyoKQEAgLTE2NjMsNyAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAoIShzLSZndDtmbGFncyAmYW1wOyBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgJmFtcDtuLSZndDtmdWxsKTsKIH0KIApAQCAtMTY3Miw3ICYjNDM7MTY5Miw3IEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3QKIAlpZiAoIShzLSZndDtmbGFncyAmYW1wOyBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCk7CiB9CiAKQEAgLTI4MTYsNyAmIzQzOzI4MzYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiX3NoZWFmICphbGxvY19lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLSZndDtzaGVhZl9jYXBhY2l0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZikKJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJLyoKIAkgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0cwpAQCAtMjgyOCwxMSAmIzQzOzI4NDksMjAgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKQogCQltYXJrX29ial9jb2RldGFnX2VtcHR5KHNoZWFmKTsKIAogCVZNX1dBUk5fT05fT05DRShzaGVhZi0mZ3Q7c2l6ZSAmZ3Q7IDApOwotCWtmcmVlKHNoZWFmKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgJmFtcDsgU0xBQl9GUkVFX05PTE9DSykpCiYjNDM7CQlrZnJlZV9ub2xvY2soc2hlYWYpOwomIzQzOwllbHNlCiYjNDM7CQlrZnJlZShzaGVhZik7CiAKIAlzdGF0KHMsIFNIRUFGX0ZSRUUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKQomIzQzO3sKJiM0MzsJX19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGludAogcmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sCiAJICAgICAgIHVuc2lnbmVkIGludCBtYXgpOwpAQCAtMjg4NSw3ICYjNDM7MjkxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCXZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07CiAJc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmOwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spKTsKIAogCXBjcyA9IHRoaXNfY3B1X3B0cihzLSZndDtjcHVfc2hlYXZlcyk7CiAJc2hlYWYgPSBwY3MtJmd0O21haW47CkBAIC0zNTcwLDcgJiM0MzszNjAwLDcgQEAgX19hZGRfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZW51bSBhZGRfbW9kZSBtb2RlKQogc3RhdGljIGlubGluZSB2b2lkIGFkZF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sCiAJCQkJc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSkKIHsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKIAlfX2FkZF9wYXJ0aWFsKG4sIHNsYWIsIG1vZGUpOwogfQogCkBAIC0zNTg0LDcgJiM0MzszNjE0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAogc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sCiAJCQkJCXN0cnVjdCBzbGFiICpzbGFiKQogewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwogCWxpc3RfZGVsKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0KTsKIAljbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7CiB9CkBAIC0zNjAwLDcgJiM0MzszNjMwLDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsCiB7CiAJdm9pZCAqb2JqZWN0OwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWlmIChzLSZndDtmbGFncyAmYW1wOyBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykgewpAQCAtNDA2OSw2ICYjNDM7NDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJY3B1c19yZWFkX3VubG9jaygpOwogfQogCiYjNDM7c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0czsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7CiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzOwomIzQzOwlzdHJ1Y3QgaXJxX3dvcmsgd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgZGVmZXJyZWRfcGVyY3B1X3dvcmspID0gewomIzQzOwkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKJiM0MzsJLm9iamVjdHNfYnlfcmN1ID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHNfYnlfcmN1KSwKJiM0MzsJLnJjdV9zaGVhdmVzID0gTExJU1RfSEVBRF9JTklUKHJjdV9zaGVhdmVzKSwKJiM0MzsJLndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIHsKIAlzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzOwpAQCAtNDEyOCw2ICYjNDM7NDE3NCw4IEBAIHZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKJiM0MzsJZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7CiYjNDM7CiAJY3B1c19yZWFkX2xvY2soKTsKIAltdXRleF9sb2NrKCZhbXA7c2xhYl9tdXRleCk7CiAKQEAgLTQ2NjUsNyAmIzQzOzQ3MTMsNyBAQCBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsCiAJc3RydWN0IG5vZGVfYmFybiAqYmFybjsKIAlib29sIGFsbG93X3NwaW47CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwogCiAJLyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqLwogCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC01NzgzLDcgJiM0Mzs1ODMxLDcgQEAgc3RhdGljIHZvaWQgX19wY3NfaW5zdGFsbF9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcywgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LAogCQlzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKQogewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spKTsKJiM0MzsJc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiAKIAkvKiBUaGlzIGlzIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgaWYgbm9ib2R5IGludGVycnVwdGVkIHVzLiAqLwogCWlmIChsaWtlbHkoIXBjcy0mZ3Q7c3BhcmUpKSB7CkBAIC01ODM0LDcgJiM0Mzs1ODgyLDcgQEAgX19wY3NfcmVwbGFjZV9mdWxsX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsCiAJYm9vbCBwdXRfZmFpbDsKIAogcmVzdGFydDoKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cigmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSk7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpOwogCiAJLyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqLwogCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC02MDM1LDI0ICYjNDM7NjA4MywyNiBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2UKICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLAogICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHMKLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC4KJiM0MzsgKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuCiAgKgogICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdAogICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGEKICAqIHNwaW5uaW5nIGxvY2suIFRlbGwgbG9ja2RlcCB0aGF0IGFjcXVpcmluZyBzcGlubG9ja190IGlzIHZhbGlkIGhlcmUKLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy4KJiM0MzsgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwCiYjNDM7ICogb24gUFJFRU1QVF9SVCB0byBhdm9pZCBzdXBwcmVzc2luZyB2YWxpZCBsb2NrZGVwIHdhcm5pbmdzLgogICovCiBzdGF0aWMgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKGtmcmVlX3JjdV9zaGVhZl9tYXAsIExEX1dBSVRfQ09ORklHKTsKIAotYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQomIzQzO2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpCiB7CiAJc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjczsKIAlzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmOwomIzQzOwlib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpOwogCi0JaWYgKFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsgYWxsb3dfc3Bpbik7CiAKLQlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO2tmcmVlX3JjdV9zaGVhZl9tYXApOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQomIzQzOwkJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAogCWlmICghbG9jYWxfdHJ5bG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSkKIAkJZ290byBmYWlsOwpAQCAtNjA2MCw5ICYjNDM7NjExMCwxMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiAJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIAogCWlmICh1bmxpa2VseSghcGNzLSZndDtyY3VfZnJlZSkpIHsKLQogCQlzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7CiAJCXN0cnVjdCBub2RlX2Jhcm4gKmJhcm47CiYjNDM7CQl1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSB0b19hbGxvY19mbGFncyhmcmVlX2ZsYWdzKTsKJiM0MzsJCWdmcF90IGdmcCA9IGFsbG93X3NwaW4gPyBHRlBfTk9XQUlUIDogX19HRlBfTk9XQVJOOwogCiAJCS8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovCiAJCWlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7CkBAIC02MDgyLDcgJiM0Mzs2MTMzLDcgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKQogCQkJZ290byBmYWlsOwogCQl9CiAKLQkJZW1wdHkgPSBiYXJuX2dldF9lbXB0eV9zaGVhZihiYXJuLCB0cnVlKTsKJiM0MzsJCWVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7CiAKIAkJaWYgKGVtcHR5KSB7CiAJCQlwY3MtJmd0O3JjdV9mcmVlID0gZW1wdHk7CkBAIC02MDkxLDIwICYjNDM7NjE0MiwyMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopCiAKIAkJbG9jYWxfdW5sb2NrKCZhbXA7cy0mZ3Q7Y3B1X3NoZWF2ZXMtJmd0O2xvY2spOwogCi0JCWVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTsKJiM0MzsJCWVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7CiAKIAkJaWYgKCFlbXB0eSkKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAoIWxvY2FsX3RyeWxvY2soJmFtcDtzLSZndDtjcHVfc2hlYXZlcy0mZ3Q7bG9jaykpIHsKLQkJCWJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTsKJiM0MzsJCQlfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpOwogCQkJZ290byBmYWlsOwogCQl9CiAKIAkJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIAogCQlpZiAodW5saWtlbHkocGNzLSZndDtyY3VfZnJlZSkpCi0JCQliYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7CiYjNDM7CQkJX19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTsKIAkJZWxzZQogCQkJcGNzLSZndDtyY3VfZnJlZSA9IGVtcHR5OwogCX0KQEAgLTYxMzAsMTggJiM0Mzs2MTgxLDM0IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaikKIAkgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZwogCSAqIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpIGRvZXNuJiMzOTt0IG1pc3MgdGhpcyBzaGVhZgogCSAqLwotCWlmIChyY3Vfc2hlYWYpCi0JCWNhbGxfcmN1KCZhbXA7cmN1X3NoZWFmLSZndDtyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpOwomIzQzOwlpZiAocmN1X3NoZWFmKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2l0aCAhYWxsb3dfc3Bpbiwgd2UgbWlnaHQgaGF2ZSBpbnRlcnJ1cHRlZCBjYWxsX3JjdSgpJiMzOTtzCiYjNDM7CQkgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLAomIzQzOwkJICogd2Uga25vdyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHVubGlrZWx5KCFhbGxvd19zcGluICZhbXA7JmFtcDsgaXJxc19kaXNhYmxlZCgpKSkgewomIzQzOwkJCXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwomIzQzOwkJCWRwdyA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVycmVkX3BlcmNwdV93b3JrKTsKJiM0MzsJCQlpZiAobGxpc3RfYWRkKCZhbXA7cmN1X3NoZWFmLSZndDtsbG5vZGUsICZhbXA7ZHB3LSZndDtyY3Vfc2hlYXZlcykpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY2FsbF9yY3UoJmFtcDtyY3Vfc2hlYWYtJmd0O3JjdV9oZWFkLCByY3VfZnJlZV9zaGVhZik7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKIAogCXN0YXQocywgRlJFRV9SQ1VfU0hFQUYpOwotCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAlyZXR1cm4gdHJ1ZTsKIAogZmFpbDoKIAlzdGF0KHMsIEZSRUVfUkNVX1NIRUFGX0ZBSUwpOwotCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkKJiM0MzsJCWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtrZnJlZV9yY3Vfc2hlYWZfbWFwKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYzMzAsMzEgJiM0Mzs2Mzk3LDIyIEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIAl9CiB9CiAKLXN0cnVjdCBkZWZlcl9mcmVlIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzOwotCXN0cnVjdCBpcnFfd29yayB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yayk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHsKLQkub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSwKLQkud29yayA9IElSUV9XT1JLX0lOSVQoZnJlZV9kZWZlcnJlZF9vYmplY3RzKSwKLX07Ci0KIC8qCiAgKiBJbiBQUkVFTVBUX1JUIGlycV93b3JrIHJ1bnMgaW4gcGVyLWNwdSBrdGhyZWFkLCBzbyBpdCYjMzk7cyBzYWZlCiAgKiB0byB0YWtlIHNsZWVwaW5nIHNwaW5fbG9ja3MgZnJvbSBfX3NsYWJfZnJlZSgpLgogICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS4KICAqLwotc3RhdGljIHZvaWQgZnJlZV9kZWZlcnJlZF9vYmplY3RzKHN0cnVjdCBpcnFfd29yayAqd29yaykKJiM0MztzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspCiB7Ci0Jc3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcyA9ICZhbXA7ZGYtJmd0O29iamVjdHM7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7CiAJc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgKnBvcywgKnQ7CiYjNDM7CXN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7CiAKLQlpZiAobGxpc3RfZW1wdHkob2JqcykpCi0JCXJldHVybjsKJiM0MzsJZHB3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yaywgd29yayk7CiYjNDM7CXJjdV9zaGVhdmVzID0gJmFtcDtkcHctJmd0O3JjdV9zaGVhdmVzOwomIzQzOwlvYmpzID0gJmFtcDtkcHctJmd0O29iamVjdHM7CiYjNDM7CW9ianNfYnlfcmN1ID0gJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1OwogCiAJbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzKTsKIAlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7CkBAIC02Mzc4LDI3ICYjNDM7NjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKQogCQlfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pOwogCQlzdGF0KHMsIEZSRUVfU0xPV1BBVEgpOwogCX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHsKJiM0MzsJCXZvaWQgKmhlYWQgPSBwb3M7CiYjNDM7CQl2b2lkICpvYmpwID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7CiYjNDM7CiYjNDM7CQlrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2hlYWYsIG5leHQsIGxsbm9kZSwgbGxub2RlKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtzaGVhZi0mZ3Q7cmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTsKIH0KIAogc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZCkKIHsKLQlzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwogCiAJZ3VhcmQocHJlZW1wdCkoKTsKIAogCWhlYWQgPSBrYXNhbl9yZXNldF90YWcoaGVhZCk7CiAKLQlkZiA9IHRoaXNfY3B1X3B0cigmYW1wO2RlZmVyX2ZyZWVfb2JqZWN0cyk7Ci0JaWYgKGxsaXN0X2FkZChoZWFkICYjNDM7IHMtJmd0O29mZnNldCwgJmFtcDtkZi0mZ3Q7b2JqZWN0cykpCi0JCWlycV93b3JrX3F1ZXVlKCZhbXA7ZGYtJmd0O3dvcmspOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQoaGVhZCAmIzQzOyBzLSZndDtvZmZzZXQsICZhbXA7ZHB3LSZndDtvYmplY3RzKSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3OwomIzQzOwomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlkcHcgPSB0aGlzX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yayk7CiYjNDM7CWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgJmFtcDtkcHctJmd0O29iamVjdHNfYnlfcmN1KSkKJiM0MzsJCWlycV93b3JrX3F1ZXVlKCZhbXA7ZHB3LSZndDt3b3JrKTsKIH0KIAotdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZCkKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqLwomIzQzO3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCWlycV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1X3B0cigmYW1wO2RlZmVyX2ZyZWVfb2JqZWN0cywgY3B1KS0mZ3Q7d29yayk7CiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDtkZWZlcnJlZF9wZXJjcHVfd29yaywgY3B1KS0mZ3Q7d29yayk7CiB9CiAKIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZQpAQCAtNjY1Nyw0MyAmIzQzOzY3MzksMjEgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpCiAgKi8KIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7Ci0Jdm9pZCAqb2JqID0gaGVhZDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3Qgc2xhYiAqc2xhYjsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKLQl2b2lkICpzbGFiX2FkZHI7CiYjNDM7CXZvaWQgKm9iajsKJiM0MzsKJiM0MzsJb2JqID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7CiAKIAlpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpIHsKLQkJb2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7CiAJCXZmcmVlKG9iaik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKG9iaik7Ci0Jc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKLQlpZiAoIXNsYWIpIHsKLQkJLyoKLQkJICogcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUgc28gbm8gbmVlZCB0bwotCQkgKiBjb25zaWRlciBhbGxvY2F0aW9uIG9yZGVyCi0JCSAqLwotCQlvYmogPSAodm9pZCAqKSBQQUdFX0FMSUdOX0RPV04oKHVuc2lnbmVkIGxvbmcpb2JqKTsKLQkJZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzID0gc2xhYi0mZ3Q7c2xhYl9jYWNoZTsKLQlzbGFiX2FkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYik7Ci0KLQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkgewotCQlvYmogPSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KG9iaik7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKG9iaik7CiYjNDM7CQlzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTsKIAotCQlvYmogPSBzbGFiX2FkZHIgJiM0Mzsgcy0mZ3Q7c2l6ZSAqIGlkeDsKLQkJb2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTsKJiM0MzsJCWlmIChzbGFiKQomIzQzOwkJCXNsYWJfZnJlZShzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmosIF9SRVRfSVBfKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTsKIAl9Ci0KLQlzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJDVS9TTFVCIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGNvbXBvbmVudHMgbGlrZSBgbW0vc2xhYmAsIGBtbS9zbGFiX2NvbW1vbi5jYCwgYG1tL3NsdWIuY2AsIGFuZCB0aGUgUkNVIGNvZGUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGtmcmVlX3JjdV9ub2xvY2tgIGFuZCB0aGUgdHdlYWtzIHRvIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSB0aGUgZm9jYWwgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBrdmZyZWVfY2FsbF9yY3VgIGlzIG5vdyBhY2NlcHRpbmcgYSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqYCByYXRoZXIgdGhhbiB0aGUgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgcmN1X2hlYWQgKmAuIEFuZCB3ZSYjMzk7dmUgZ290IGEgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYmVpbmcgYWRkZWQsIHdoaWNoIHVzZXMgZWl0aGVyIGBkZWZlcl9rZnJlZV9yY3VgIG9yIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCB0aGF0IGBTTEFCX0ZSRUVfTk9MT0NLYCBmbGFnLiBHb29kIHRvIHNlZSB0aGVyZSBhcmUgcGVyZiBhbmQga3Byb2JlIHRlc3RzIGluIGBsaWIvdGVzdHMvc2x1Yl9rdW5pdC5jYCB0b287IGFsd2F5cyBjcnVjaWFsLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgZ2VudWluZWx5IGZ1bmN0aW9uYWwsIGFuZCB0aGF0IGl0IGlzbiYjMzk7dCBhbiB1bnJlYWNoYWJsZSBkZWFkIGVuZCBvZiBhIHBhdGNoLiBHaXZlbiB0aGUgYXJlYXMgaXQgdG91Y2hlcywgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQmIzM5O3MgYm90aCBmdW5jdGlvbmFsIGFuZCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2luZyBpdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFyZSBjbGVhci4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgYmVpbmcgdXNlZCBpbiBgbW0vc2xhYl9jb21tb24uY2AgaW4gcmVsYXRpb24gdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuIFRoYXQgcmFpc2VzIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gb2YgaG93IHRoYXQgY29uZmlnIGlzIGRlZmluZWQgYW5kIGVuYWJsZWQuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBpbiBgaW5pdC9LY29uZmlnYCwgYG1tL0tjb25maWdgLCBvciBwZXJoYXBzIGV2ZW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgY29tcGxldGUgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMjE9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMyLSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzMzogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzNC0gKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTE0MzEtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxNDMyOiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaD0yNTQ9c3RydWN0IGNhbGxiYWNrX2hlYWQge1xuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaC0yNTktXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmg6MjYwOiNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuLS1cbm1tL0tjb25maWc9MTY0PWNvbmZpZyBTTFVCXG4tLVxubW0vS2NvbmZpZy0xNjctXG5tbS9LY29uZmlnOjE2ODpjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMwMi1cbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMwNC1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNjojaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzNTc9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzYwLVxubW0vc2xhYl9jb21tb24uYzoxMzYxOiNlbHNlIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cbm1tL3NsYWJfY29tbW9uLmMtMTM2Mi1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIyNDg9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMzAwLVxubW0vc2xhYl9jb21tb24uYzoyMzAxOiNlbmRpZiAvKiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUkNVIEJhdGNoZWQgRnJlZWQgd2l0aCBTTFVCIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZmxhZ2dlZCBhcyBhIGRlZmF1bHQgYm9vbGVhbiAmIzM5O3llcyYjMzk7IOKAkyB0aGF0JiMzOTtzIGdvb2QsIGxpa2VseSBpbmRpY2F0aW5nIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCB1bmRlciB0aGUgcmlnaHQgY2lyY3Vtc3RhbmNlcy4gVGhlIGNsdWUgaGVyZSBpcyBgU0xVQmAuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIG9wdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGBTTFVCYCBhbGxvY2F0b3IuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9mIGBLVkZSRUVfUkNVX0JBVENIRURgIHRvIG5haWwgZG93biB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IG9uIGBTTFVCYCwgYW5kIGFueSBvdGhlciBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBjb25maXJtaW5nIGhvdyB0aGlzIG9wdGlvbiBpbXBhY3RzIFJDVSBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVkZSRUVfUkNVX0JBVENIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcbi0tXG5tbS9LY29uZmlnLTE2Ny1cbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcbm1tL0tjb25maWctMTY5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoaW5nZXMgb24gd2hldGhlciBvciBub3Qgd2UmIzM5O3JlIHVzaW5nIGBTTFVCYC4gUmlnaHQsIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGxvb2sgYXQgYG1tL0tjb25maWdgLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBkb3duIHRvIGxpbmUgMTY4LiBIb3BlZnVsbHksIGl0JiMzOTtsbCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG1tL0tjb25maWdgIHRlbGxzIG1lIGFib3V0IGBTTFVCYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdGVuZG1lbnVcbiAxNjE6XHRcbiAxNjI6XHRtZW51IFwmIzM0O1NsYWIgYWxsb2NhdG9yIG9wdGlvbnNcJiMzNDtcbiAxNjM6XHRcbiAxNjQ6XHRjb25maWcgU0xVQlxuIDE2NTpcdFx0ZGVmX2Jvb2wgeVxuIDE2NjpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMTY3Olx0XG4gMTY4Olx0Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxuIDE2OTpcdFx0ZGVmX2Jvb2wgeVxuIDE3MDpcdFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFx1MDAyNlx1MDAyNiAhVElOWV9SQ1VcbiAxNzE6XHRcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4gMTcyOlx0XG4gMTczOlx0Y29uZmlnIFNMVUJfVElOWVxuIDE3NDpcdFx0Ym9vbCBcJiMzNDtDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFwmIzM0O1xuIDE3NTpcdFx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2ICFDT01QSUxFX1RFU1RcbiAxNzY6XHRcdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcbiAxNzc6XHRcdGhlbHBcbiAxNzg6XHRcdCAgIENvbmZpZ3VyZXMgdGhlIHNsYWIgYWxsb2NhdG9yIGluIGEgd2F5IHRvIGFjaGlldmUgbWluaW1hbCBtZW1vcnlcbiAxNzk6XHRcdCAgIGZvb3RwcmludCwgc2FjcmlmaWNpbmcgc2NhbGFiaWxpdHksIGRlYnVnZ2luZyBhbmQgb3RoZXIgZmVhdHVyZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLVkZSRUVfUkNVX0JBVENIRUQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGp1c3QgcXVpY2tseSByZXZpZXdpbmcgaG93IGBLVkZSRUVfUkNVX0JBVENIRURgIGlzIGhhbmRsZWQgaW4gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZGVmYXVsdCBpcyB0byBoYXZlIGl0IGVuYWJsZWQgdW5sZXNzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNMVUJfVElOWWAsIGBUSU5ZX1JDVWAsIG9yIGlmIGBSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRGAgaXMgYWxzbyB0dXJuZWQgb24uIFRoYXQgbWFrZXMgc2Vuc2UsIG5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLgoKU28sIEkgY291bGQganVzdCByZWx5IG9uIHRoZSBkZWZhdWx0cyBhbmQgbm90IGV4cGxpY2l0bHkgZW5hYmxlIGBLVkZSRUVfUkNVX0JBVENIRURgLCBidXQgSSBjb3VsZCBhbHNvIGFkZCBpdCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSYjMzk7cyBzYWtlLCBvciBtYXliZSBub3QuIERvZXNuJiMzOTt0IHNlZW0gc3RyaWN0bHkgbmVjZXNzYXJ5LgoKSGFuZyBvbiBhIHNlY29uZOKApiBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgYFNMVUJfS1VOSVRfVEVTVGAgaXMgdG91Y2hlZCBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyb3VuZCB0aGF0LiBOZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbGlua2FnZSBvciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGludG8gYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBgbGliL3Rlc3RzL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xVQl9LVU5JVF9URVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI5NjU9Y29uZmlnIFNIREkzX0tVTklUX1RFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc0LVxubGliL0tjb25maWcuZGVidWc6Mjk3NTpjb25maWcgU0xVQl9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc2LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3IgU0xVQiBjYWNoZSBlcnJvciBkZXRlY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBLY29uZmlnIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBiZXR0ZXIgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBpdCBhZmZlY3RzIGRlYnVnZ2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEsIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGVidWdnaW5nIG9wdGlvbnMgZGlyZWN0bHkgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyOTc1LiBUaGF0IHNob3VsZCBiZSB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCBzb21lIHVzZWZ1bCBjbHVlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gc3ltYm9scyBvciBkZXBlbmRlbmNpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzA6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHVuaXQgdGVzdCBmb3IgX19hc2hsZGkzKCksIF9fYXNocmRpMygpLCBhbmRcbjI5NzE6XHRcdCAgX19sc2hyZGkzKCkgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIHRvIGltcGxlbWVudCA2NC1iaXQgYXJpdGhtZXRpY1xuMjk3MjpcdFx0ICBzaGlmdCBsZWZ0LCBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0IGFuZCBsb2dpY2FsIHNoaWZ0IHJpZ2h0LFxuMjk3MzpcdFx0ICByZXNwZWN0aXZlbHksIG9uIGEgMzItYml0IENQVXMuXG4yOTc0Olx0XG4yOTc1Olx0Y29uZmlnIFNMVUJfS1VOSVRfVEVTVFxuMjk3NjpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3IgU0xVQiBjYWNoZSBlcnJvciBkZXRlY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMjk3NzpcdFx0ZGVwZW5kcyBvbiBTTFVCX0RFQlVHIFx1MDAyNlx1MDAyNiBLVU5JVFxuMjk3ODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbjI5Nzk6XHRcdGhlbHBcbjI5ODA6XHRcdCAgVGhpcyBidWlsZHMgU0xVQiBhbGxvY2F0b3IgdW5pdCB0ZXN0LlxuMjk4MTpcdFx0ICBUZXN0cyBTTFVCIGNhY2hlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LlxuMjk4MjpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuMjk4MzpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4yOTg0Olx0XG4yOTg1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4yOTg2Olx0XG4yOTg3Olx0Y29uZmlnIFJBVElPTkFMX0tVTklUX1RFU1RcbjI5ODg6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3QgZm9yIHJhdGlvbmFsLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMjk4OTpcdFx0ZGVwZW5kcyBvbiBLVU5JVCBcdTAwMjZcdTAwMjYgUkFUSU9OQUxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTFVCIFJDVSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgZW5hYmxpbmcgYFNMVUJfS1VOSVRfVEVTVGAgc2VlbXMgbGlrZSB0aGUgcmlnaHQgbW92ZSBmb3IgdGVzdGluZywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBhIGRlZGljYXRlZCB0ZXN0IGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIGFkZGluZyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBhbmQgYGRlZmVyX2tmcmVlX3JjdWAuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgUkNVIG1hY2hpbmVyeSBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpbXBsaWNhdGlvbnMuCgpTbyB0aGUgbWFpbiBzeW1ib2xzIGludm9sdmVkIGFyZSBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBgZGVmZXJfa2ZyZWVfcmN1YC4gSSBrbm93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgbW9kaWZpZWQuIEkgcXVpY2tseSBjb25maXJtZWQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IG1vcmUgcmVhZGlseSB1c2FibGUuIEhvd2V2ZXIsIGBkZWZlcl9rZnJlZV9yY3VgIGlzIGludGVybmFsIHRvIHRoZSBTTFVCIGNvZGUsIG9ubHkgZGVjbGFyZWQgaW4gYG1tL3NsYWIuaGAuIFNhbWUgc3Rvcnkgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBga3ZmcmVlX2NhbGxfcmN1YCBpcyBleHBvcnRlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKewoJc3RydWN0IHNsYWIgKnNsYWI7CgoJaWYgKCFJU19FTkFCTEVEKENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQpKQoJCWdvdG8gZmFsbGJhY2s7CgoJaWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihwdHIpKSkKCQlnb3RvIGZhbGxiYWNrOwoKCXNsYWIgPSB2aXJ0X3RvX3NsYWIocHRyKTsKCWlmICh1bmxpa2VseSghc2xhYikpCgkJZ290byBmYWxsYmFjazsKCglpZiAodW5saWtlbHkoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgJmFtcDsmYW1wOyBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSkKCQlnb3RvIGZhbGxiYWNrOwoKCWlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpCgkJZ290byBmYWxsYmFjazsKCglyZXR1cm47CgpmYWxsYmFjazoKCWRlZmVyX2tmcmVlX3JjdShoZWFkKTsKfQpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spOwpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2VlbXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIGhhdmUgdG8gcmVhbGx5IHRoaW5rIGFib3V0IHRoZSBgZmFsbGJhY2tgIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgcGVyZm9ybWFuY2UuIFRoZSBgZmFsbGJhY2tgIG1lYW5zIGl0IGdvZXMgdG8gYGRlZmVyX2tmcmVlX3JjdWAuIFNvLCBpZiBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgbm90IGVuYWJsZWQsIG9yIGlmIGl0IGlzIGEgYHZtYWxsb2NgIGFkZHJlc3MsIG9yIGlmIGB2aXJ0X3RvX3NsYWJgIGZhaWxzLCBpZiBOVU1BIGlzIGVuYWJsZWQgYW5kIHRoZSBzbGFiIGlzbiYjMzk7dCBsb2NhbCwgb3IgaWYgYF9fa2ZyZWVfcmN1X3NoZWFmYCByZXR1cm5zIGZhbHNlLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBSQ1UgZGVmZXJyYWwuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIFJDVSBiYXRjaGluZyBtZWNoYW5pY3MgbGF0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGxpa2VseSBzY2VuYXJpb3MgYW5kIHdoYXQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbGJhY2sgaXMgaW4gdGVybXMgb2YgbGF0ZW5jeSBhbmQgUkNVIHVzYWdlLgoKSSBub3RlIHRoZSBhZGRpdGlvbmFsIGZvY3VzIHN5bWJvbHM6IGBkZWZlcnJlZF93b3JrX2JhcnJpZXJgIGFuZCBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gLiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm5gIGlzIHN0YXRpYyB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKVGhlbiwgSSBjaGVjayB0aGUgbmV3IHRlc3RzLiBJIHNlZSBgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmYCBhbmQgYHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlYCBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AsIEtVbml0IHRlc3RzLCBzbyBlbmFibGluZyBgU0xVQl9LVU5JVF9URVNUYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjaG9pY2UuIEhvd2V2ZXIsIHRoZXNlIHRlc3RzIGRlcGVuZCBvbiBgQ09ORklHX1BFUkZfRVZFTlRTYCBhbmQgYENPTkZJR19LUFJPQkVTYCB0byBydW4uCgpgYGBjCiNpZiBkZWZpbmVkKENPTkZJR19QRVJGX0VWRU5UUykgfHwgKGRlZmluZWQoQ09ORklHX0tQUk9CRVMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU01QKSkKYGBgCgpMb29rcyBsaWtlIEkgY2FuIGVuYWJsZSBgUEVSRl9FVkVOVFNgIGFuZCBgS1BST0JFU2AsIG9yIGp1c3QgYEtQUk9CRVNgIGlmIGBDT05GSUdfU01QYCBpcyBhbHNvIGVuYWJsZWQsIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiBlbmFibGluZyB0aGVzZSBvcHRpb25zIG9uIHRoZSBidWlsZCBhbmQgcnVudGltZS4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBga2ZyZWVfcmN1X25vbG9ja2AgKHR5cG8hKSBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZSwgYXMgYSBzYW5pdHkgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMjE9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTI4LS8qKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMjk6ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC5cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMwLSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzMi0gKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzM6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzQtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM2LSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzNzogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzgtICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzOTojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDAtZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVx0aWYgKGNhbl91c2Vfa2ZyZWVfcmN1IFx1MDAyNlx1MDAyNiAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50IFx1MDAyNiAyKSlcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlx0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE5MT12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE5Mi17XG5tbS9zbGFiX2NvbW1vbi5jOjIxOTM6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTk0LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipGdXp6aW5nIFRoYXQgTmV3IEFQSTogQWJzb2x1dGVseSBXb3J0aCB0aGUgRWZmb3J0KioKCkFscmlnaHQsIGV2ZW4gdGhvdWdoIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0JiMzOTtzIGRvaW5nLCBpcyBvbmx5IHNwZWNpZmljYWxseSBjYWxsZWQgaW4gdGhlIHRlc3QgY29kZSAqcmlnaHQgbm93KiwgdGhlIGZhY3QgdGhhdCBhIG5ldyBBUEkgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoaXMgdGVzdCBhY3R1YWxseSAqdXNlcyogaXQsIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOZXcgQVBJcyBhbHdheXMgY2FycnkgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciB1bmZvcmVzZWVuIGlzc3Vlcy4gSXQmIzM5O3MgYSBrZXkgZXhlcmNpc2Ugb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LCBzbyBnZXR0aW5nIGEgZnV6emluZyB0ZXN0IGluIHBsYWNlIGVhcmx5IHdpbGwgYmUgYSBwcm9hY3RpdmUgbW92ZS4gTm8gYnJhaW5lciwgcmVhbGx5LgoKSSBzdXBwb3NlIEkgc2hvdWxkIGNoZWNrIG91dCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gc2VlIGhvdyBpdCBvcGVyYXRlcy4gVGhlIHRlc3QgaXMgaW52b2tpbmcgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3Mgd29ydGggc2VlaW5nIHdoYXQgaXQgZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIHdpbGwgYWxsb3cgdXMgdG8gZGV2aXNlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwMT12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMDI6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTAzLVxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0xMTQwPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDQtXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NTpcdFx0a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKFx1MDAyNigoX19fcCktXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1x0XFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ2LVx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xubW0vc2xhYl9jb21tb24uYy0xMjk4LVxubW0vc2xhYl9jb21tb24uYzoxMjk5OnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzIzLX1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xubW0vc2xhYl9jb21tb24uYy0xMzI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgTXlzdGVyeSoqCgpBbHJpZ2h0LCBzbyB0aGUgbWFjcm8gZXhwYW5kcyBvdXQgdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIGdvb2QuIFRoYXQmIzM5O3MgdGhlIGFjdHVhbCB3b3JraG9yc2UgZnVuY3Rpb24uIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYF9fa2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2x1Yi5jYC4gSSBleHBlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBSQ1Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgaW5pdGlhdGVkLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIHNsdWIgYWxsb2NhdG9yJiMzOTtzIGludGVybmFsIHN0cnVjdHVyZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjY4PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjg5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2OTA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xubW0vc2xhYl9jb21tb24uYy0xNjkxLVxuLS1cbm1tL3NsdWIuYz00MTQyPXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTQxNTQtXHRcdCAqIHdlIGRvbiYjMzk7dCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcbm1tL3NsdWIuYzo0MTU1Olx0XHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0LlxubW0vc2x1Yi5jLTQxNTYtXHRcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2Vcbm1tL3NsdWIuYzo0MTU3Olx0XHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXG5tbS9zbHViLmMtNDE1OC1cdFx0ICovXG4tLVxubW0vc2x1Yi5jPTYwMjU9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3NsdWIuYy02MDgzLSAqIGt2ZnJlZV9jYWxsX3JjdSgpIGNhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHJhd19zcGlubG9ja190LiBTaW5jZVxubW0vc2x1Yi5jOjYwODQ6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG5tbS9zbHViLmMtNjA4NS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xuLS1cbm1tL3NsdWIuYz02MDk0PXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYwOTUtXG5tbS9zbHViLmM6NjA5Njpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYwOTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAzNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVsdmluZyBpbnRvIHRoZSBgX19rZnJlZV9yY3Vfc2hlYWZgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBfX2tmcmVlX3JjdV9zaGVhZmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgaXNuJiMzOTt0IGl0PyBJdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCBzdWdnZXN0aW5nIGl0cyBpbnZvbHZlbWVudCBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZS4KCk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBgZGVmZXJfa2ZyZWVfcmN1YCBpbiBgbW0vc2x1Yi5jYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBjYW4gcXVpY2tseSByZXZpZXcgaXRzIGltcGxlbWVudGF0aW9uIHRoZXJlIHRvIGZpZ3VyZSBvdXQgaG93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYmVpbmcgY2FsbGVkIGFuZCBnZXQgYSBzZW5zZSBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9OTQ5PXZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpO1xubW0vc2xhYi5oOjk1MDp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbm1tL3NsYWIuaC05NTEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjEtZmFsbGJhY2s6XG5tbS9zbGFiX2NvbW1vbi5jOjEzMjI6XHRkZWZlcl9rZnJlZV9yY3UoaGVhZCk7XG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxuLS1cbm1tL3NsdWIuYz02NDUzPXN0YXRpYyB2b2lkIGRlZmVyX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTY0NjUtXG5tbS9zbHViLmM6NjQ2Njp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxubW0vc2x1Yi5jLTY0Njcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IGBkZWZlcl9rZnJlZV9yY3VgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBwcm9iYWJseSBjcnVjaWFsIGZvciBkZWZlcnJpbmcgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggUkNVLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZD8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCwgc3RhcnRpbmcgd2l0aCBga3ZmcmVlX2NhbGxfcmN1YCBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgc29saWQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaD05ODU9c3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDAtICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEwMTp2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDItdm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExNS1cdFx0X19faGVhZCA9IChzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICopIFx1MDAyNihfX19wKS1cdTAwM2VrdnJoZjtcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTExNjpcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExNy1cdH1cdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjQtXHRpZiAoX19fcClcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMjU6XHRcdGt2ZnJlZV9jYWxsX3JjdShOVUxMLCAodm9pZCAqKSAoX19fcCkpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjYtfSB3aGlsZSAoMClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjctXG5tbS9zbGFiX2NvbW1vbi5jOjEzMjg6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjkte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTM0MC19XG5tbS9zbGFiX2NvbW1vbi5jOjEzNDE6RVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX2NhbGxfcmN1KTtcbm1tL3NsYWJfY29tbW9uLmMtMTM0Mi1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE5OTk9dm9pZCBfX2luaXQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMDE3LSAqXG5tbS9zbGFiX2NvbW1vbi5jOjIwMTg6ICogRWFjaCBrdmZyZWVfY2FsbF9yY3UoKSByZXF1ZXN0IGlzIGFkZGVkIHRvIGEgYmF0Y2guIFRoZSBiYXRjaCB3aWxsIGJlIGRyYWluZWRcbm1tL3NsYWJfY29tbW9uLmMtMjAxOS0gKiBldmVyeSBLRlJFRV9EUkFJTl9KSUZGSUVTIG51bWJlciBvZiBqaWZmaWVzLiBBbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJhdGNoIHdpbGxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMjItICovXG5tbS9zbGFiX2NvbW1vbi5jOjIwMjM6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxubW0vc2xhYl9jb21tb24uYy0yMDI0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwOTUtfVxubW0vc2xhYl9jb21tb24uYzoyMDk2OkVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XG5tbS9zbGFiX2NvbW1vbi5jLTIwOTctXG4tLVxubW0vc2x1Yi5jPTYwMjU9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3NsdWIuYy02MDgyLS8qXG5tbS9zbHViLmM6NjA4MzogKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYy02MDg0LSAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jOjYwODU6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbm1tL3NsdWIuYy02MDg2LSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC5cbi0tXG5tbS9zbHViLmM9NjQwNT1zdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXG4tLVxubW0vc2x1Yi5jLTY0NDQtXG5tbS9zbHViLmM6NjQ0NTpcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xubW0vc2x1Yi5jLTY0NDYtXHR9XG4tLVxucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzPTE2Mj0gICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuLS1cbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzQtICAgICAgICAvLyBTQUZFVFk6IFRoaXMgd2FzIGFsbG9jYXRlZCB1c2luZyBgS0JveDo6cGluX2luaXRgLCBzbyBpdCBjYW4gYmUgZnJlZWQgd2l0aCBga3ZmcmVlYC5cbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5yczoxNzU6ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6a3ZmcmVlX2NhbGxfcmN1KCgqcHRyKS5yY3UuZ2V0KCksIHB0ci5jYXN0OjpcdTAwM2NmZmk6OmNfdm9pZFx1MDAzZSgpKSB9O1xucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzLTE3Ni0gICAgfVxuLS1cbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g9MjA9ZmlcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g6MjE6YnBmdHJhY2UgLWUgJiMzOTtrcHJvYmU6a3ZmcmVlX2NhbGxfcmN1LFxudG9vbHMvcmN1L3JjdS11cGRhdGVycy5zaC0yMi1cdCAgICAga3Byb2JlOmNhbGxfcmN1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk4MwoJCQkJCQkJb3V0cHV0OiAyODAKCQkJCQkJCXRob3VnaHRzOiAxNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgYW5kIFNMVUIgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIGFkZGluZyBga2ZyZWVfcmN1X25vbG9ja2AsIGVzc2VudGlhbGx5IGFsbG93aW5nIGZvciBsb2NrbGVzcyBvYmplY3QgZnJlZWluZyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgYWRqdXN0bWVudHMgdG8gYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIHRoZSBzbGFiIGZyZWVpbmcgcGF0aC4KCkxvb2tpbmcgaW50byBpdCwgdGhlIGBrZnJlZV9yY3Vfbm9sb2NrYCBtYWNybyBsZXZlcmFnZXMgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHdoaWNoIHRoZW4gcHJvYmFibHkgd29ya3Mgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLCBhbmQgdGhlIHBhdGNoaW5nIGludHJvZHVjZXMgYSBgZnJlZV9mbGFnc2AgcGFyYW1ldGVyIHRvIGl0LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBmbGV4aWJsZSBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGZvciBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgYFNMQUJfRlJFRV9OT0xPQ0tgIGluIHRoZSBgUFJFRU1QVF9SVGAgY2FzZS4gVGhlIHVzZSBvZiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtgIGFuZCB0aGUgY2hlY2tzIHdpdGggYGlycXNfZGlzYWJsZWQoKWAgaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGNsZXZlcmx5IGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIHRoZSBpbW1lZGlhdGUgZnJlZWluZyBvZiB0aGUgb2JqZWN0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgc3ltYm9scywgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIHRoZSBwcmltYXJ5IEFQSSBlbnRyeSBwb2ludHM6CiogICBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCAoVGhpcyBpcyBleHBvcnRlZCkKKiAgIGBrdmZyZWVfY2FsbF9yY3VgCiogICBgX19rZnJlZV9yY3Vfc2hlYWZgCiogICBgZGVmZXJfa2ZyZWVfcmN1YAoqICAgYGRlZmVycmVkX3dvcmtfYmFycmllcmAKKiAgIGBrdmZyZWVfcmN1X2JhcnJpZXJgCiogICBga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlYAoKSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgdGVzdCBzdWl0ZSwgYFNMVUJfS1VOSVRfVEVTVGAsIHVzZXMgYFBFUkZfRVZFTlRTYCBhbmQgYEtQUk9CRVNgIGluIGFkZGl0aW9uIHRvIGBTTVBgIHRvIGNvdmVyIHRoZSBuZXcgbG9ja2xlc3MgZnJlZWluZyBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgdGVzdHMgdXNlIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzIGluZGljYXRlcyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3MuIEFuZCwgc2luY2UgaXQmIzM5O3MgYW4gUkNVLXJlbGF0ZWQgY2hhbmdlLCB3ZSBzaG91bGQgYmUgdXNpbmcgUkNVIGluIGFuIFNNUCBlbnZpcm9ubWVudC4KClNvLCBmb3IgZnVsbCBjb3ZlcmFnZSwgSSB3aWxsIGluY2x1ZGUgdGhlc2UgY29uZmlnczoKKiAgIGBTTFVCX0tVTklUX1RFU1RgCiogICBgS1VOSVRgCiogICBgU0xVQl9ERUJVR2AKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBLUFJPQkVTYAoqICAgYFNNUGAKKiAgIGBLVkZSRUVfUkNVX0JBVENIRURgIChFdmVuIHRob3VnaCBpdCYjMzk7cyB0aGUgZGVmYXVsdCwgbGV0JiMzOTtzIGJlIGV4cGxpY2l0KQoKR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIG1lY2hhbmlzbXMsIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHRoaXMgc2V0IG9mIGNvbmZpZ3MgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTFVCX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7S1VOSVQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U0xVQl9ERUJVRyYjMzQ7LAogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAgICYjMzQ7a3ZmcmVlX2NhbGxfcmN1JiMzNDssCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2RlZmVyX2tmcmVlX3JjdSYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF93b3JrX2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O2t2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMVUJfS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtLVU5JVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7LAogICAgJiMzNDtTTFVCX0RFQlVHJiMzNDssCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7LAogICAgJiMzNDtrdmZyZWVfY2FsbF9yY3UmIzM0OywKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7ZGVmZXJfa2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3dvcmtfYmFycmllciYjMzQ7LAogICAgJiMzNDtrdmZyZWVfcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7a3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjE0LjgyMDk3MDI5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTgwNzc2ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTFVCX0tVTklUX1RFU1RcIixcbiAgICBcIktVTklUXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiU01QXCIsXG4gICAgXCJTTFVCX0RFQlVHXCIsXG4gICAgXCJLVkZSRUVfUkNVX0JBVENIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZnJlZV9jYWxsX3JjdV9ub2xvY2tcIixcbiAgICBcImt2ZnJlZV9jYWxsX3JjdVwiLFxuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImRlZmVyX2tmcmVlX3JjdVwiLFxuICAgIFwiZGVmZXJyZWRfd29ya19iYXJyaWVyXCIsXG4gICAgXCJrdmZyZWVfcmN1X2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGtmcmVlX3JjdV9ub2xvY2soKWAgQVBJIHdoaWNoIGFsbG93cyBkZWZlcnJpbmcgZnJlZWluZyBvZiBvYmplY3RzIGluIGFueSBjb250ZXh0IHdpdGhvdXQgbG9ja3MuIEl0IG1vZGlmaWVzIGBrdmZyZWVfY2FsbF9yY3UoKWAgdG8gdXNlIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkYCBhbmQgaW1wbGVtZW50cyBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClgIHdoaWNoIHJlbGllcyBvbiBgX19rZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGBkZWZlcl9rZnJlZV9yY3UoKWAuIEl0IGFsc28gYWRkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlc2UgbmV3IEFQSXMgdXNpbmcgcGVyZiBldmVudHMgYW5kIGtwcm9iZXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgY2hhbmdlIHRoYXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MTQuODIwOTc2OTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAxNDc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NmJiNzU2NWE4ZWNmNDdjOWY1MjI1OGYxNmM1NDA4MTJiMzM4MzNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE0OjQzOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxcbmluZGV4IDVlOTVhY2MzMzk4OWIuLmFlZGU3N2JkMDM4NzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXFxuQEAgLTEwOTgsMTkgKzEwOTgsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19taWdyYXRlKHZvaWQpXFxuIC8qXFxuICAqIEluIG1tL3NsYWJfY29tbW9uLmMsIG5vIHN1aXRhYmxlIGhlYWRlciB0byBpbmNsdWRlIGhlcmUuXFxuICAqL1xcbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuIFxcbiAvKlxcbiAgKiBUaGUgQlVJTERfQlVHX09OKCkgbWFrZXMgc3VyZSB0aGUgcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBoYW5kbGVkLiBTZWUgdGhlXFxuICAqIGNvbW1lbnQgb2Yga2ZyZWVfcmN1KCkgZm9yIGRldGFpbHMuXFxuICAqL1xcbi0jZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCByaGYpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAoX19fcCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCByaGYpIFxcdTAwM2U9IDQwOTYpO1xcdFxcXFxcXG4tXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KFxcdTAwMjYoKF9fX3ApLVxcdTAwM2VyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG4rXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFxcXFxcbitcXHRcXHRfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgXFx1MDAyNihfX19wKS1cXHUwMDNla3ZyaGY7XFx0XFxcXFxcbitcXHRcXHRrdmZyZWVfY2FsbF9yY3UoX19faGVhZCwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXHRcXFxcXFxuIFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0gd2hpbGUgKDApXFxuIFxcbkBAIC0xMTIyLDYgKzExMjUsMjcgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0a3ZmcmVlX2NhbGxfcmN1KE5VTEwsICh2b2lkICopIChfX19wKSk7XFx0XFx0XFxcXFxcbiB9IHdoaWxlICgwKVxcbiBcXG4rLyoqXFxuKyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXFxuKyAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cXG4rICogQGt2cmhmOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCB3aXRoaW4gdGhlIHR5cGUgb2YgQHB0ci5cXG4rICpcXG4rICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbisgKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXFxuKyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxcbisgKlxcbisgKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxcbisgKi9cXG4rI2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoX19fcCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbitcXHRcXHRrZnJlZV9jYWxsX3JjdV9ub2xvY2soXFx1MDAyNigoX19fcCktXFx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXFxcXFxuK1xcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXRcXG4gICogYW4gVU5MT0NLK0xPQ0sgcGFpciBhY3RzIGFzIGEgZnVsbCBiYXJyaWVyLiAgVGhpcyBndWFyYW50ZWUgYXBwbGllc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuaW5kZXggZTE5MTUwMjZlMDMwNC4uY2RhMTI2ZGVmNjdhZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTE0MzAsMjUgKzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcXG4gdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbi17XFxuLVxcdHJjdV9iYXJyaWVyKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLXtcXG4tXFx0cmN1X2JhcnJpZXIoKTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKSB7IH1cXG4gI2Vsc2VcXG4rdm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7XFxuKyNlbmRpZlxcbitcXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XFxuIFxcbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbi12b2lkIGtmcmVlX3JjdV9zY2hlZHVsZXJfcnVubmluZyh2b2lkKTtcXG4tI2VuZGlmXFxuLVxcbiAvKipcXG4gICoga21hbGxvY19zaXplX3JvdW5kdXAgLSBSZXBvcnQgYWxsb2NhdGlvbiBidWNrZXQgc2l6ZSBmb3IgdGhlIGdpdmVuIHNpemVcXG4gICpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oXFxuaW5kZXggYmM1ZGRhMmEzZDg2MS4uNzliZjQxOWM2OWU0NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcXG5AQCAtMjU3LDYgKzI1NywxNCBAQCBzdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTtcXG4gI2RlZmluZSByY3VfaGVhZCBjYWxsYmFja19oZWFkXFxuIFxcbisjaWZkZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbitzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHtcXG4rXFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcXG4rfTtcXG4rI2Vsc2VcXG4rI2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWRcXG4rI2VuZGlmXFxuK1xcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gdHlwZWRlZiB2b2lkICgqY2FsbF9yY3VfZnVuY190KShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxcbmluZGV4IDVmYmRhYmUzZmFlYWQuLmE3NDAyNzEyNmEyZmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxcbkBAIC02MjUsNyArNjI1LDcgQEAgVFJBQ0VfRVZFTlRfUkNVKHJjdV9pbnZva2VfY2FsbGJhY2ssXFxuICAqL1xcbiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssXFxuIFxcbi1cXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLFxcbitcXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpyaHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KSxcXG4gXFxuIFxcdFRQX0FSR1MocmN1bmFtZSwgcmhwLCBvZmZzZXQpLFxcbiBcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL3NsdWJfa3VuaXQuYyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcXG5pbmRleCBmYTZkMzFkYmNhMTY2Li5lM2I2M2YwMzM4ZDVmIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcXG4rKysgYi9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2twcm9iZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIi4uL21tL3NsYWIuaFxcXCJcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XFxuQEAgLTE2MSw3ICsxNjIsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX3JlZHpvbmVfYWNjZXNzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gfVxcbiBcXG4gc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCB7XFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0XFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCBrdnJjdTtcXG4rXFx0fTtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3Rfa2ZyZWVfcmN1KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5AQCAtMjkyLDE5ICsyOTYsNzYgQEAgc3RhdGljIHZvaWQgdGVzdF9rcmVhbGxvY19yZWR6b25lX3plcm9pbmcoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocyk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4rI2lmIGRlZmluZWQoQ09ORklHX1BFUkZfRVZFTlRTKSB8fCAoZGVmaW5lZChDT05GSUdfS1BST0JFUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcXG4gI2RlZmluZSBOUl9JVEVSQVRJT05TIDEwMDBcXG4gI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDBcXG4tc3RhdGljIHZvaWQgKm9iamVjdHNbTlJfT0JKRUNUU107XFxuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0ICpvYmplY3RzW05SX09CSkVDVFNdO1xcbiBcXG4gc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQge1xcbiBcXHRzdHJ1Y3Qga3VuaXQgKnRlc3Q7XFxuIFxcdGludCBjYWxsYmFja19jb3VudDtcXG4gXFx0aW50IGFsbG9jX29rO1xcbiBcXHRpbnQgYWxsb2NfZmFpbDtcXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuKyNlbmRpZlxcbisjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxcbitcXHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHModm9pZClcXG4re1xcbitcXHRpbnQgaSwgajtcXG4rXFx0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lURVJBVElPTlM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfT0JKRUNUUzsgaisrKSB7XFxuK1xcdFxcdFxcdGdmcF90IGdmcCA9IChpIFxcdTAwMjYgMSkgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xcbitcXG4rXFx0XFx0XFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xcbitcXHRcXHRcXHRpZiAoIW9iamVjdHNbal0pIHtcXG4rXFx0XFx0XFx0XFx0ai0tO1xcbitcXHRcXHRcXHRcXHR3aGlsZSAoaiBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRcXHRrZnJlZShvYmplY3RzW2otLV0pO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xcbitcXHRcXHRcXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGkgXFx1MDAyNiAyKSlcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KG9iamVjdHNbal0sIHJjdSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0a2ZyZWUob2JqZWN0c1tqXSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2tmcmVlX3JjdV9zdHJ1Y3QgKm9ianA7XFxuK1xcdGdmcF90IGdmcDtcXG4rXFx0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xcbitcXG4rXFx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXFxuK1xcdGdmcCA9IChjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50IFxcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcXG4rXFx0b2JqcCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZigqb2JqcCksIGdmcCwgTlVNQV9OT19OT0RFKTtcXG4rXFxuK1xcdGlmIChvYmpwKVxcbitcXHRcXHRjdHgtXFx1MDAzZWFsbG9jX29rKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y3R4LVxcdTAwM2VhbGxvY19mYWlsKys7XFxuK1xcbitcXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2FsbGJhY2tfY291bnQgXFx1MDAyNiAyKSlcXG4rXFx0XFx0a2ZyZWVfcmN1X25vbG9jayhvYmpwLCBrdnJjdSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCsrO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBod19hdHRyID0ge1xcbiBcXHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcXG4gXFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcXG5AQCAtMzE1LDY3ICszNzYsOTEgQEAgc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgaHdfYXR0ciA9IHtcXG4gXFx0LnNhbXBsZV9mcmVxID0gMTAwMDAwLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3N0YXRpYyB2b2lkIG92ZXJmbG93X2hhbmRsZXJfdGVzdF9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbi1cXHR2b2lkICpvYmpwO1xcbi1cXHRnZnBfdCBnZnA7XFxuIFxcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHggPSBldmVudC1cXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xcbiBcXG4tXFx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXFxuLVxcdGdmcCA9IChjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcXG4tXFx0b2JqcCA9IGttYWxsb2Nfbm9sb2NrKDY0LCBnZnAsIE5VTUFfTk9fTk9ERSk7XFxuLVxcbi1cXHRpZiAob2JqcClcXG4tXFx0XFx0Y3R4LVxcdTAwM2VhbGxvY19vaysrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGN0eC1cXHUwMDNlYWxsb2NfZmFpbCsrO1xcbi1cXG4tXFx0a2ZyZWVfbm9sb2NrKG9ianApO1xcbi1cXHRjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XFxuK1xcdHRlc3Rfbm9sb2NrKGN0eCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgYm9vbCBlbmFibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcXG4ge1xcbi1cXHRpbnQgaSwgajtcXG4tXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcXG4gXFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xcbi1cXHRib29sIGFsbG9jX2ZhaWwgPSBmYWxzZTtcXG4gXFxuIFxcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXFx1MDAyNmh3X2F0dHIsIC0xLCBjdXJyZW50LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmN0eCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfbm9sb2NrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3R4KTtcXG4rXFxuIFxcdGlmIChJU19FUlIoZXZlbnQpKVxcbi1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHBlcmYgZXZlbnRcXFwiKTtcXG4tXFx0Y3R4LmV2ZW50ID0gZXZlbnQ7XFxuLVxcdHBlcmZfZXZlbnRfZW5hYmxlKGN0eC5ldmVudCk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9JVEVSQVRJT05TOyBpKyspIHtcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xcbi1cXHRcXHRcXHRnZnBfdCBnZnAgPSAoaSAlIDIpID8gR0ZQX0tFUk5FTCA6IEdGUF9LRVJORUxfQUNDT1VOVDtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0XFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XFxuLVxcdFxcdFxcdGlmICghb2JqZWN0c1tqXSkge1xcbi1cXHRcXHRcXHRcXHRqLS07XFxuLVxcdFxcdFxcdFxcdHdoaWxlIChqIFxcdTAwM2U9IDApXFxuLVxcdFxcdFxcdFxcdFxcdGtmcmVlKG9iamVjdHNbai0tXSk7XFxuLVxcdFxcdFxcdFxcdGFsbG9jX2ZhaWwgPSB0cnVlO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfT0JKRUNUUzsgaisrKVxcbi1cXHRcXHRcXHRrZnJlZShvYmplY3RzW2pdKTtcXG4tXFx0fVxcbitcXHRjdHgtXFx1MDAzZWV2ZW50ID0gZXZlbnQ7XFxuK1xcdHBlcmZfZXZlbnRfZW5hYmxlKGN0eC1cXHUwMDNlZXZlbnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX2V2ZW50cyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGt1bml0X2luZm8oY3R4LVxcdTAwM2V0ZXN0LCBcXFwiSFcgcGVyZiBldmVudHM6IGNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgY3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVxcdTAwM2VhbGxvY19vaywgY3R4LVxcdTAwM2VhbGxvY19mYWlsKTtcXG4rXFxuK1xcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXFx1MDAzZWV2ZW50KTtcXG4rXFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHgtXFx1MDAzZWV2ZW50KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCBjdHggPSB7IC50ZXN0ID0gdGVzdCB9O1xcbiBcXG4tY2xlYW51cDpcXG4tXFx0cGVyZl9ldmVudF9kaXNhYmxlKGN0eC5ldmVudCk7XFxuLVxcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoY3R4LmV2ZW50KTtcXG4rXFx0aWYgKCFlbmFibGVfcGVyZl9ldmVudHMoXFx1MDAyNmN0eCkpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcIkZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcXFwiKTtcXG4gXFxuLVxcdGt1bml0X2luZm8odGVzdCwgXFxcImNhbGxiYWNrX2NvdW50OiAlZCwgYWxsb2Nfb2s6ICVkLCBhbGxvY19mYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgY3R4LmNhbGxiYWNrX2NvdW50LCBjdHguYWxsb2Nfb2ssIGN0eC5hbGxvY19mYWlsKTtcXG4rXFx0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XFxuIFxcbi1cXHRpZiAoYWxsb2NfZmFpbClcXG4tXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiQWxsb2NhdGlvbiBmYWlsZWRcXFwiKTtcXG4rXFx0ZGlzYWJsZV9wZXJmX2V2ZW50cyhcXHUwMDI2Y3R4KTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuK3N0YXRpYyBpbnQgc2xhYl9rcHJvYmVfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eDtcXG4rXFxuK1xcdGN0eCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCwga3Byb2JlKTtcXG4rXFx0dGVzdF9ub2xvY2soY3R4KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGN0eC1cXHUwMDNla3Byb2JlLnN5bWJvbF9uYW1lID0gXFxcInNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWRcXFwiO1xcbitcXHRjdHgtXFx1MDAzZWtwcm9iZS5wcmVfaGFuZGxlciA9IHNsYWJfa3Byb2JlX3ByZV9oYW5kbGVyO1xcbitcXG4rXFx0aWYgKHJlZ2lzdGVyX2twcm9iZShcXHUwMDI2Y3R4LVxcdTAwM2VrcHJvYmUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxcbit7XFxuK1xcdGt1bml0X2luZm8oY3R4LVxcdTAwM2V0ZXN0LCBcXFwia3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBjdHgtXFx1MDAzZWNhbGxiYWNrX2NvdW50LCBjdHgtXFx1MDAzZWFsbG9jX29rLCBjdHgtXFx1MDAzZWFsbG9jX2ZhaWwpO1xcbitcXHR1bnJlZ2lzdGVyX2twcm9iZShcXHUwMDI2Y3R4LVxcdTAwM2VrcHJvYmUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgY3R4ID0geyAudGVzdCA9IHRlc3QgfTtcXG4rXFxuK1xcdGlmICghcmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFxcdTAwMjZjdHgpKVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIga3Byb2JlLCBza2lwcGluZ1xcXCIpO1xcbitcXG4rXFx0dGVzdF9rbWFsbG9jX2FuZF9mcmllbmRzKCk7XFxuK1xcbitcXHR1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhcXHUwMDI2Y3R4KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIDAsIHNsYWJfZXJyb3JzKTtcXG4gfVxcbiAjZW5kaWZcXG5AQCAtNDA1LDcgKzQ5MCwxMCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSxcXG4gXFx0S1VOSVRfQ0FTRSh0ZXN0X2tyZWFsbG9jX3JlZHpvbmVfemVyb2luZyksXFxuICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4tXFx0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2spLFxcbitcXHRLVU5JVF9DQVNFX1NMT1codGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19wZXJmKSxcXG4rI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuK1xcdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZSksXFxuICNlbmRpZlxcbiBcXHR7fVxcbiB9O1xcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcXG5pbmRleCBlMDFjMTAxNWI4YzhkLi44ZmQ2ODM1ZTQyMzUyIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC0yNCwxMSArMjQsMjcgQEBcXG4gI2RlZmluZSBTTEFCX0FMTE9DX05PX1JFQ1VSU0VcXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xcbiAjZGVmaW5lIFNMQUJfQUxMT0NfTk9fT0JKX0VYVFxcdDB4MDggLyogcHJldmVudCBvYmpfZXh0cyBhcnJheSBhbGxvY2F0aW9uICovXFxuIFxcbisjZGVmaW5lIFNMQUJfRlJFRV9ERUZBVUxUXFx0MHgwMCAvKiBubyBmbGFncyAqL1xcbisjZGVmaW5lIFNMQUJfRlJFRV9OT0xPQ0tcXHQweDAxIC8qIHNwaW5uaW5nIG5vdCBhbGxvd2VkICovXFxuK1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4re1xcbitcXHRpZiAoZnJlZV9mbGFncyBcXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spXFxuK1xcdFxcdHJldHVybiBTTEFCX0FMTE9DX05PTE9DSztcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAhKGFsbG9jX2ZsYWdzIFxcdTAwMjYgU0xBQl9BTExPQ19OT0xPQ0spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gIShmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSyk7XFxuK31cXG4rXFxuIHZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbiBcXHRcXHRcXHRcXHQgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTtcXG5AQCAtMzMxLDYgKzM0NywzNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbiBcXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcXG4gfVxcbiBcXG4rLypcXG4rICoga3ZmcmVlX3JjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplLlxcbisgKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hpbGUgcHJlc2VydmluZyB0aGUgS0FTQU4gdGFnLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkICprdm1hbGxvY19vYmpfc3RhcnRfYWRkcih2b2lkICpoZWFkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX3ZtYWxsb2NfYWRkcihoZWFkKSkpIHtcXG4rXFx0XFx0b2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGVhZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKGhlYWQpO1xcbitcXG4rXFx0XFx0aWYgKCFzbGFiKSB7XFxuK1xcdFxcdFxcdG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGhlYWQpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlzX2tmZW5jZV9hZGRyZXNzKGhlYWQpKSB7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBpZHggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIGhlYWQpO1xcbitcXHRcXHRcXHR2b2lkICpvYmogPSBzbGFiX2FkZHJlc3Moc2xhYikgKyBzLVxcdTAwM2VzaXplICogaWR4O1xcbitcXG4rXFx0XFx0XFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcXG4rXFx0XFx0XFx0b2JqID0ga2FzYW5fcmVzZXRfdGFnKG9iaik7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKSAtIG9iajtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaGVhZCAtIG9mZnNldDtcXG4rfVxcbitcXG4gLypcXG4gICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLlxcbiAgKlxcbkBAIC00MzEsNyArNDc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXHRyZXR1cm4gIShzLVxcdTAwM2VmbGFncyBcXHUwMDI2IChTTEFCX0NBQ0hFX0RNQXxTTEFCX0FDQ09VTlR8U0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9OT19PQkpfRVhUKSk7XFxuIH1cXG4gXFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaik7XFxuK2Jvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xcbiB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxuIFxcbkBAIC04OTksNyArOTQ2LDggQEAgdm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxcbiBcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgdG9fdXNlcik7XFxuIFxcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTtcXG4rdm9pZCBkZWZlcnJlZF93b3JrX2JhcnJpZXIodm9pZCk7XFxuK3ZvaWQgZGVmZXJfa2ZyZWVfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHNsdWJfZGVidWdfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggMWUxZDNmZWVjMzUzNS4uYjhmMjFlYWJjY2NjMiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC01NTgsNyArNTU4LDcgQEAgdm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXFxuLVxcdGRlZmVyX2ZyZWVfYmFycmllcigpO1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4gXFxuIFxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNsYWJfbXV0ZXgpO1xcbkBAIC0xMjk2LDYgKzEyOTYsMzMgQEAgRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpO1xcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTtcXG4gXFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4re1xcbitcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcXG4rXFx0XFx0Z290byBmYWxsYmFjaztcXG4rXFxuK1xcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIocHRyKSkpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRzbGFiID0gdmlydF90b19zbGFiKHB0cik7XFxuK1xcdGlmICh1bmxpa2VseSghc2xhYikpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgXFx1MDAyNlxcdTAwMjYgc2xhYl9uaWQoc2xhYikgIT0gbnVtYV9tZW1faWQoKSkpXFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxcbitcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXG4rXFx0cmV0dXJuO1xcbitcXG4rZmFsbGJhY2s6XFxuK1xcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbitcXG4gI2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuIFxcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG5AQCAtMTMxMyw2ICsxMzQwLDIwIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XFxuIFxcbit2b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbit7XFxuK1xcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbitcXHRyY3VfYmFycmllcigpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxuK1xcbit2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4re1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4rXFx0cmN1X2JhcnJpZXIoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xcbitcXG4gdm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXFxuIHtcXG4gfVxcbkBAIC0xMzc5LDcgKzE0MjAsNyBAQCBzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEge1xcbiBcXG4gc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XFxuIFxcdHN0cnVjdCByY3Vfd29yayByY3Vfd29yaztcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpoZWFkX2ZyZWU7XFxuK1xcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWRfZnJlZTtcXG4gXFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRfZnJlZVtGUkVFX05fQ0hBTk5FTFNdO1xcbiBcXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcXG5AQCAtMTQxNSw3ICsxNDU2LDcgQEAgc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayB7XFxuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcXG4gXFx0Ly8gT2JqZWN0cyBxdWV1ZWQgb24gYSBsaW5rZWQgbGlzdFxcbiBcXHQvLyB0aHJvdWdoIHRoZWlyIHJjdV9oZWFkIHN0cnVjdHVyZXMuXFxuLVxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcXG4rXFx0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoZWFkX2dwX3NuYXA7XFxuIFxcdGF0b21pY190IGhlYWRfY291bnQ7XFxuIFxcbkBAIC0xNTU2LDEyICsxNTk3LDEyIEBAIGt2ZnJlZV9yY3VfYnVsayhzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG4ta3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ra3ZmcmVlX3JjdV9saXN0KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpXFxuIHtcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpuZXh0O1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpuZXh0O1xcbiBcXG4gXFx0Zm9yICg7IGhlYWQ7IGhlYWQgPSBuZXh0KSB7XFxuLVxcdFxcdHZvaWQgKnB0ciA9ICh2b2lkICopIGhlYWQtXFx1MDAzZWZ1bmM7XFxuK1xcdFxcdHZvaWQgKnB0ciA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh2b2lkICopIGhlYWQgLSBwdHI7XFxuIFxcbiBcXHRcXHRuZXh0ID0gaGVhZC1cXHUwMDNlbmV4dDtcXG5AQCAtMTU4NSw3ICsxNjI2LDcgQEAgc3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX2hlYWRbRlJFRV9OX0NIQU5ORUxTXTtcXG4tXFx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkO1xcbiBcXHRzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcDtcXG4gXFx0c3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDtcXG4gXFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2dwX3NuYXA7XFxuQEAgLTE2MjgsNiArMTY2OSwxNCBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbiBcXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4rXFx0dW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcXG4rXFx0ICogaG9sZGluZyBhIHJhdyBzcGlubG9jayBhbmQgc2xhYiBhY3F1aXJlcyBzbGVlcGluZyBsb2Nrcy5cXG4rXFx0ICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XFxuIFxcbiBcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTYzOCw3ICsxNjg3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4gXFxuIFxcdHMgPSBzbGFiLVxcdTAwM2VzbGFiX2NhY2hlO1xcbiBcXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG4tXFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaik7XFxuK1xcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuQEAgLTE3MDgsNyArMTc1Nyw3IEBAIGt2ZnJlZV9yY3VfZHJhaW5fcmVhZHkoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXFxuIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX3JlYWR5W0ZSRUVfTl9DSEFOTkVMU107XFxuIFxcdHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqYm5vZGUsICpuO1xcbi1cXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWRfcmVhZHkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC0xOTcxLDcgKzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcXG4gICogYmUgZnJlZSdkIGluIHdvcmtxdWV1ZSBjb250ZXh0LiBUaGlzIGFsbG93cyB1cyB0bzogYmF0Y2ggcmVxdWVzdHMgdG9nZXRoZXIgdG9cXG4gICogcmVkdWNlIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcyBkdXJpbmcgaGVhdnkga2ZyZWVfcmN1KCkva3ZmcmVlX3JjdSgpIGxvYWQuXFxuICAqL1xcbi12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4rdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xcbkBAIC0xOTg3LDcgKzIwMzYsNyBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiBcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcXG4rXFx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxcbkBAIC0yMDA5LDcgKzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0XFx0XFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cXG4gXFx0XFx0XFx0Z290byB1bmxvY2tfcmV0dXJuO1xcbiBcXG4tXFx0XFx0aGVhZC1cXHUwMDNlZnVuYyA9IHB0cjtcXG4gXFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IGtyY3AtXFx1MDAzZWhlYWQ7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoa3JjcC1cXHUwMDNlaGVhZCwgaGVhZCk7XFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmtyY3AtXFx1MDAzZWhlYWRfY291bnQpO1xcbkBAIC0yMTQyLDE3ICsyMTkwLDE2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XFxuICAqL1xcbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbitcXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xcbitcXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG4rXFxuIFxcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbiBcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbiBcXHRcXHRmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzKTtcXG4gXFx0XFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyY3VfYmFycmllcigpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3Jrc1xcbi1cXHQgKiBvbiBhIHNwZWNpZmljIHNsYWIgY2FjaGUuXFxuLVxcdCAqL1xcbitcXHRyY3VfYmFycmllcigpO1xcbiBcXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZSk7XFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IGFkZTE3Zjg0ZTU4MzIuLmJhMmYyMDgyNjJiZjYgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQyNCw2ICs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGJhcm5fbGlzdDtcXG4rXFx0XFx0Lyogb25seSB1c2VkIHRvIGRlZmVyIGNhbGxfcmN1KCkgaW4gdW5rbm93biBjb250ZXh0ICovXFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTtcXG4gXFx0XFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBjYXBhY2l0eTtcXG5AQCAtOTA2LDYgKzkwOCwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogQSBuby1vcCBmdW5jdGlvbiB1c2VkIHRvIGF0dGFjaCBrcHJvYmUgaGFuZGxlcnMgaW4gc2x1Yl9rdW5pdCB0ZXN0cy5cXG4rICogVGhlIGJhcnJpZXIgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gb3B0aW1pemluZyBvdXQgY2FsbHNpdGVzLlxcbisgKi9cXG4rI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXFxuK3tcXG4rXFx0YmFycmllcigpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuKyNkZWZpbmUgc2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKGxvY2spIGRvIHtcXHRcXFxcXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XFx0XFx0XFxcXFxcbitcXHRzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKCk7XFx0XFxcXFxcbit9IHdoaWxlICgwKVxcbitcXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxuIFxcbiAvKlxcbkBAIC0xNjYzLDcgKzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0aWYgKCEocy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QsIFxcdTAwMjZuLVxcdTAwM2VmdWxsKTtcXG4gfVxcbiBcXG5AQCAtMTY3Miw3ICsxNjkyLDcgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdFxcbiBcXHRpZiAoIShzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCk7XFxuIH1cXG4gXFxuQEAgLTI4MTYsNyArMjgzNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRyZXR1cm4gX19hbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzLCBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4rc3RhdGljIHZvaWQgX19mcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgc2hlYWYgd2FzIGNyZWF0ZWQgd2l0aCBTTEFCX0FMTE9DX05PX1JFQ1VSU0UgZmxhZyB0aGVuIGl0c1xcbkBAIC0yODI4LDExICsyODQ5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4gXFx0XFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0Uoc2hlYWYtXFx1MDAzZXNpemUgXFx1MDAzZSAwKTtcXG4tXFx0a2ZyZWUoc2hlYWYpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcXG4rXFx0XFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrZnJlZShzaGVhZik7XFxuIFxcbiBcXHRzdGF0KHMsIFNIRUFGX0ZSRUUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuK3tcXG4rXFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnRcXG4gcmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuIFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcXG5AQCAtMjg4NSw3ICsyOTE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XFxuIFxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG4gXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaykpO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaykpO1xcbiBcXG4gXFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG4gXFx0c2hlYWYgPSBwY3MtXFx1MDAzZW1haW47XFxuQEAgLTM1NzAsNyArMzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGFkZF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXFxuIHtcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbiBcXHRfX2FkZF9wYXJ0aWFsKG4sIHNsYWIsIG1vZGUpO1xcbiB9XFxuIFxcbkBAIC0zNTg0LDcgKzM2MTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbitcXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZzbGFiLVxcdTAwM2VzbGFiX2xpc3QpO1xcbiBcXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XFxuIH1cXG5AQCAtMzYwMCw3ICszNjMwLDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIHtcXG4gXFx0dm9pZCAqb2JqZWN0O1xcbiBcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2spO1xcbiBcXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxuIFxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XFxuQEAgLTQwNjksNiArNDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrIHtcXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHJjdV9zaGVhdmVzO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XFxuK1xcdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxcbitcXHQub2JqZWN0c19ieV9yY3UgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0c19ieV9yY3UpLFxcbitcXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxcbitcXHQud29yayA9IElSUV9XT1JLX0lOSVQoZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4pLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWQgZmx1c2hfcmN1X3NoZWFmKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbkBAIC00MTI4LDYgKzQxNzQsOCBAQCB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbiBcXG4rXFx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XFxuK1xcbiBcXHRjcHVzX3JlYWRfbG9jaygpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGFiX211dGV4KTtcXG4gXFxuQEAgLTQ2NjUsNyArNDcxMyw3IEBAIF9fcGNzX3JlcGxhY2VfZW1wdHlfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcXG4gXFx0c3RydWN0IG5vZGVfYmFybiAqYmFybjtcXG4gXFx0Ym9vbCBhbGxvd19zcGluO1xcbiBcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuIFxcbiBcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXFxuIFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTU3ODMsNyArNTgzMSw3IEBAIHN0YXRpYyB2b2lkIF9fcGNzX2luc3RhbGxfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsIHN0cnVjdCBzbGFiX3NoZWFmICplbXB0eSxcXG4gXFx0XFx0c3RydWN0IG5vZGVfYmFybiAqYmFybilcXG4ge1xcbi1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG4rXFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG4gXFxuIFxcdC8qIFRoaXMgaXMgd2hhdCB3ZSBleHBlY3QgdG8gZmluZCBpZiBub2JvZHkgaW50ZXJydXB0ZWQgdXMuICovXFxuIFxcdGlmIChsaWtlbHkoIXBjcy1cXHUwMDNlc3BhcmUpKSB7XFxuQEAgLTU4MzQsNyArNTg4Miw3IEBAIF9fcGNzX3JlcGxhY2VfZnVsbF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbiBcXHRib29sIHB1dF9mYWlsO1xcbiBcXG4gcmVzdGFydDpcXG4tXFx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSk7XFxuIFxcbiBcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXFxuIFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTYwMzUsMjQgKzYwODMsMjYgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxuICAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXFxuLSAqIHRoaXMgcHJvYmxlbSBieSBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgZW50aXJlbHkgb24gUFJFRU1QVF9SVC5cXG4rICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxcbiAgKlxcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXFxuICAqIHNwaW5uaW5nIGxvY2suIFRlbGwgbG9ja2RlcCB0aGF0IGFjcXVpcmluZyBzcGlubG9ja190IGlzIHZhbGlkIGhlcmVcXG4tICogYnkgdGVtcG9yYXJpbHkgcmFpc2luZyB0aGUgd2FpdC10eXBlIHRvIExEX1dBSVRfQ09ORklHLlxcbisgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwXFxuKyAqIG9uIFBSRUVNUFRfUlQgdG8gYXZvaWQgc3VwcHJlc3NpbmcgdmFsaWQgbG9ja2RlcCB3YXJuaW5ncy5cXG4gICovXFxuIHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbiBcXG4tYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbitib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxuIFxcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XFxuK1xcdGJvb2wgYWxsb3dfc3BpbiA9IGZyZWVfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZnJlZV9mbGFncyk7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbik7XFxuIFxcbi1cXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4gXFxuIFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTYwNjAsOSArNjExMCwxMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuIFxcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXBjcy1cXHUwMDNlcmN1X2ZyZWUpKSB7XFxuLVxcbiBcXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XFxuIFxcdFxcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XFxuK1xcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xcbitcXHRcXHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcXG4gXFxuIFxcdFxcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgZmFsbCBiYWNrICovXFxuIFxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuQEAgLTYwODIsNyArNjEzMyw3IEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIHRydWUpO1xcbitcXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xcbiBcXG4gXFx0XFx0aWYgKGVtcHR5KSB7XFxuIFxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcXG5AQCAtNjA5MSwyMCArNjE0MiwyMCBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuIFxcbiBcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdFxcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgR0ZQX05PV0FJVCwgU0xBQl9BTExPQ19ERUZBVUxUKTtcXG4rXFx0XFx0ZW1wdHkgPSBhbGxvY19lbXB0eV9zaGVhZihzLCBnZnAsIGFsbG9jX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmICghZW1wdHkpXFxuIFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gXFxuIFxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKSB7XFxuLVxcdFxcdFxcdGJhcm5fcHV0X2VtcHR5X3NoZWFmKGJhcm4sIGVtcHR5KTtcXG4rXFx0XFx0XFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHBjcy1cXHUwMDNlcmN1X2ZyZWUpKVxcbi1cXHRcXHRcXHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XFxuK1xcdFxcdFxcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cGNzLVxcdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xcbiBcXHR9XFxuQEAgLTYxMzAsMTggKzYxODEsMzQgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxcbiBcXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xcbiBcXHQgKiBmbHVzaF9hbGxfcmN1X3NoZWF2ZXMoKSBkb2Vzbid0IG1pc3MgdGhpcyBzaGVhZlxcbiBcXHQgKi9cXG4tXFx0aWYgKHJjdV9zaGVhZilcXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9zaGVhZi1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcXG4rXFx0aWYgKHJjdV9zaGVhZikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCknc1xcbitcXHRcXHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxcbitcXHRcXHQgKiB3ZSBrbm93IHRoYXQncyBub3QgdGhlIGNhc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFxuK1xcdFxcdFxcdGRwdyA9IHRoaXNfY3B1X3B0cihcXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZyY3Vfc2hlYWYtXFx1MDAzZWxsbm9kZSwgXFx1MDAyNmRwdy1cXHUwMDNlcmN1X3NoZWF2ZXMpKVxcbitcXHRcXHRcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2ZHB3LVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnJjdV9zaGVhZi1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUYpO1xcbi1cXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4rXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiBcXG4gZmFpbDpcXG4gXFx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRl9GQUlMKTtcXG4tXFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuK1xcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTYzMzAsMzEgKzYzOTcsMjIgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0cnVjdCBkZWZlcl9mcmVlIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0cztcXG4tXFx0c3RydWN0IGlycV93b3JrIHdvcms7XFxuLX07XFxuLVxcbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKTtcXG4tXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHtcXG4tXFx0Lm9iamVjdHMgPSBMTElTVF9IRUFEX0lOSVQob2JqZWN0cyksXFxuLVxcdC53b3JrID0gSVJRX1dPUktfSU5JVChmcmVlX2RlZmVycmVkX29iamVjdHMpLFxcbi19O1xcbi1cXG4gLypcXG4gICogSW4gUFJFRU1QVF9SVCBpcnFfd29yayBydW5zIGluIHBlci1jcHUga3RocmVhZCwgc28gaXQncyBzYWZlXFxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXFxuICAqIEluICFQUkVFTVBUX1JUIGlycV93b3JrIHdpbGwgcnVuIGFmdGVyIGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbitzdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuIHtcXG4tXFx0c3RydWN0IGRlZmVyX2ZyZWUgKmRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWZlcl9mcmVlLCB3b3JrKTtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKm9ianMgPSBcXHUwMDI2ZGYtXFx1MDAzZW9iamVjdHM7XFxuK1xcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XFxuIFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpwb3MsICp0O1xcbitcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsICpuZXh0O1xcbiBcXG4tXFx0aWYgKGxsaXN0X2VtcHR5KG9ianMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xcbitcXHRyY3Vfc2hlYXZlcyA9IFxcdTAwMjZkcHctXFx1MDAzZXJjdV9zaGVhdmVzO1xcbitcXHRvYmpzID0gXFx1MDAyNmRwdy1cXHUwMDNlb2JqZWN0cztcXG4rXFx0b2Jqc19ieV9yY3UgPSBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdTtcXG4gXFxuIFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XFxuIFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcXG5AQCAtNjM3OCwyNyArNjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxcbiBcXHRcXHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xcbiBcXHRcXHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xcbiBcXHR9XFxuK1xcbitcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKG9ianNfYnlfcmN1KTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHQsIGxsbm9kZSkge1xcbitcXHRcXHR2b2lkICpoZWFkID0gcG9zO1xcbitcXHRcXHR2b2lkICpvYmpwID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XFxuK1xcbitcXHRcXHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XFxuK1xcdH1cXG4rXFxuK1xcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwocmN1X3NoZWF2ZXMpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcXG4rXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnNoZWFmLVxcdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbiB7XFxuLVxcdHN0cnVjdCBkZWZlcl9mcmVlICpkZjtcXG4rXFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XFxuIFxcbiBcXHRndWFyZChwcmVlbXB0KSgpO1xcbiBcXG4gXFx0aGVhZCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKTtcXG4gXFxuLVxcdGRmID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkZWZlcl9mcmVlX29iamVjdHMpO1xcbi1cXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVxcdTAwM2VvZmZzZXQsIFxcdTAwMjZkZi1cXHUwMDNlb2JqZWN0cykpXFxuLVxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkZi1cXHUwMDNld29yayk7XFxuK1xcdGRwdyA9IHRoaXNfY3B1X3B0cihcXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xcbitcXHRpZiAobGxpc3RfYWRkKGhlYWQgKyBzLVxcdTAwM2VvZmZzZXQsIFxcdTAwMjZkcHctXFx1MDAzZW9iamVjdHMpKVxcbitcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2ZHB3LVxcdTAwM2V3b3JrKTtcXG4rfVxcbitcXG4rdm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG4re1xcbitcXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcXG4rXFxuK1xcdGd1YXJkKHByZWVtcHQpKCk7XFxuK1xcbitcXHRkcHcgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrKTtcXG4rXFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcXHUwMDI2ZHB3LVxcdTAwM2VvYmplY3RzX2J5X3JjdSkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZkcHctXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKVxcbisvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xcbit2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbi1cXHRcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZwZXJfY3B1X3B0cihcXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzLCBjcHUpLVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cGVyX2NwdV9wdHIoXFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrLCBjcHUpLVxcdTAwM2V3b3JrKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxuQEAgLTY2NTcsNDMgKzY3MzksMjEgQEAgc3RhdGljIHZvaWQgZnJlZV9sYXJnZV9rbWFsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpXFxuICAqL1xcbiB2b2lkIGt2ZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdHZvaWQgKm9iaiA9IGhlYWQ7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tXFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XFxuLVxcdHZvaWQgKnNsYWJfYWRkcjtcXG4rXFx0dm9pZCAqb2JqO1xcbitcXG4rXFx0b2JqID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XFxuIFxcbiBcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpIHtcXG4tXFx0XFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XFxuIFxcdFxcdHZmcmVlKG9iaik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cGFnZSA9IHZpcnRfdG9fcGFnZShvYmopO1xcbi1cXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi1cXHRpZiAoIXNsYWIpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUgc28gbm8gbmVlZCB0b1xcbi1cXHRcXHQgKiBjb25zaWRlciBhbGxvY2F0aW9uIG9yZGVyXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRvYmogPSAodm9pZCAqKSBQQUdFX0FMSUdOX0RPV04oKHVuc2lnbmVkIGxvbmcpb2JqKTtcXG4tXFx0XFx0ZnJlZV9sYXJnZV9rbWFsbG9jKHBhZ2UsIG9iaik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cyA9IHNsYWItXFx1MDAzZXNsYWJfY2FjaGU7XFxuLVxcdHNsYWJfYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tXFxuLVxcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmopKSB7XFxuLVxcdFxcdG9iaiA9IGtmZW5jZV9vYmplY3Rfc3RhcnQob2JqKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqKTtcXG4rXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuIFxcbi1cXHRcXHRvYmogPSBzbGFiX2FkZHIgKyBzLVxcdTAwM2VzaXplICogaWR4O1xcbi1cXHRcXHRvYmogPSBmaXh1cF9yZWRfbGVmdChzLCBvYmopO1xcbitcXHRcXHRpZiAoc2xhYilcXG4rXFx0XFx0XFx0c2xhYl9mcmVlKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9iaiwgX1JFVF9JUF8pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xcbiBcXHR9XFxuLVxcbi1cXHRzbGFiX2ZyZWUocywgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0MzoxNS4zNDIyMzgxNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDEyODY0ODc0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xVQl9LVU5JVF9URVNUXCIsXG4gICAgXCJLVU5JVFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU0xVQl9ERUJVR1wiLFxuICAgIFwiS1ZGUkVFX1JDVV9CQVRDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCIsXG4gICAgXCJrdmZyZWVfY2FsbF9yY3VcIixcbiAgICBcIl9fa2ZyZWVfcmN1X3NoZWFmXCIsXG4gICAgXCJkZWZlcl9rZnJlZV9yY3VcIixcbiAgICBcImRlZmVycmVkX3dvcmtfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyXCIsXG4gICAgXCJrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBrZnJlZV9yY3Vfbm9sb2NrKClgIEFQSSB3aGljaCBhbGxvd3MgZGVmZXJyaW5nIGZyZWVpbmcgb2Ygb2JqZWN0cyBpbiBhbnkgY29udGV4dCB3aXRob3V0IGxvY2tzLiBJdCBtb2RpZmllcyBga3ZmcmVlX2NhbGxfcmN1KClgIHRvIHVzZSBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGltcGxlbWVudHMgYGtmcmVlX2NhbGxfcmN1X25vbG9jaygpYCB3aGljaCByZWxpZXMgb24gYF9fa2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBgZGVmZXJfa2ZyZWVfcmN1KClgLiBJdCBhbHNvIGFkZHMgS1VuaXQgdGVzdHMgZm9yIHRoZXNlIG5ldyBBUElzIHVzaW5nIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIGNoYW5nZSB0aGF0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2YmI3NTY1YThlY2Y0N2M5ZjUyMjU4ZjE2YzU0MDgxMmIzMzgzM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNDo0MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuaW5kZXggNWU5NWFjYzMzOTg5Yi4uYWVkZTc3YmQwMzg3MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oXG5AQCAtMTA5OCwxOSArMTA5OCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrX21pZ3JhdGUodm9pZClcbiAvKlxuICAqIEluIG1tL3NsYWJfY29tbW9uLmMsIG5vIHN1aXRhYmxlIGhlYWRlciB0byBpbmNsdWRlIGhlcmUuXG4gICovXG4tdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG4rdm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbiBcbiAvKlxuICAqIFRoZSBCVUlMRF9CVUdfT04oKSBtYWtlcyBzdXJlIHRoZSByY3VfaGVhZCBvZmZzZXQgY2FuIGJlIGhhbmRsZWQuIFNlZSB0aGVcbiAgKiBjb21tZW50IG9mIGtmcmVlX3JjdSgpIGZvciBkZXRhaWxzLlxuICAqL1xuLSNkZWZpbmUga3ZmcmVlX3JjdV9hcmdfMihwdHIsIHJoZilcdFx0XHRcdFx0XFxcbisjZGVmaW5lIGt2ZnJlZV9yY3VfYXJnXzIocHRyLCBrdnJoZilcdFx0XHRcdFx0XFxcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XHRcdFx0XHRcdFxcXG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpfX19oZWFkO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwgcmhmKSBcdTAwM2U9IDQwOTYpO1x0XFxcbi1cdFx0a3ZmcmVlX2NhbGxfcmN1KFx1MDAyNigoX19fcCktXHUwMDNlcmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4rXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcXFxuK1x0XHRfX19oZWFkID0gKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKikgXHUwMDI2KF9fX3ApLVx1MDAzZWt2cmhmO1x0XFxcbitcdFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0xMTIyLDYgKzExMjUsMjcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRrdmZyZWVfY2FsbF9yY3UoTlVMTCwgKHZvaWQgKikgKF9fX3ApKTtcdFx0XFxcbiB9IHdoaWxlICgwKVxuIFxuKy8qKlxuKyAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXG4rICogQHB0cjogcG9pbnRlciB0byBrZnJlZSBmb3IgZG91YmxlLWFyZ3VtZW50IGludm9jYXRpb25zLlxuKyAqIEBrdnJoZjogdGhlIG5hbWUgb2YgdGhlIHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgd2l0aGluIHRoZSB0eXBlIG9mIEBwdHIuXG4rICpcbisgKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG4rICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuKyAqIExhcmdlIGttYWxsb2MgYW5kIHZtYWxsb2Mgb2JqZWN0cyBhcmUgYWx3YXlzIGRlZmVycmVkLlxuKyAqXG4rICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cbisgKi9cbisjZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR0eXBlb2YgKHB0cikgX19fcCA9IChwdHIpO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKF9fX3ApIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXHUwMDNlPSA0MDk2KTtcdFx0XFxcbitcdFx0a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKFx1MDAyNigoX19fcCktXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1x0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gLypcbiAgKiBQbGFjZSB0aGlzIGFmdGVyIGEgbG9jay1hY3F1aXNpdGlvbiBwcmltaXRpdmUgdG8gZ3VhcmFudGVlIHRoYXRcbiAgKiBhbiBVTkxPQ0srTE9DSyBwYWlyIGFjdHMgYXMgYSBmdWxsIGJhcnJpZXIuICBUaGlzIGd1YXJhbnRlZSBhcHBsaWVzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuaW5kZXggZTE5MTUwMjZlMDMwNC4uY2RhMTI2ZGVmNjdhZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTE0MzAsMjUgKzE0MzAsMTUgQEAgZXh0ZXJuIHZvaWQga3ZmcmVlX3NlbnNpdGl2ZShjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTtcbiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiBcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG4te1xuLVx0cmN1X2JhcnJpZXIoKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi17XG4tXHRyY3VfYmFycmllcigpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuICNlbHNlXG4rdm9pZCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZCk7XG4rI2VuZGlmXG4rXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZCk7XG4gXG4gdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpO1xuIFxuLXZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpO1xuLSNlbmRpZlxuLVxuIC8qKlxuICAqIGttYWxsb2Nfc2l6ZV9yb3VuZHVwIC0gUmVwb3J0IGFsbG9jYXRpb24gYnVja2V0IHNpemUgZm9yIHRoZSBnaXZlbiBzaXplXG4gICpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbmluZGV4IGJjNWRkYTJhM2Q4NjEuLjc5YmY0MTljNjllNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaFxuQEAgLTI1Nyw2ICsyNTcsMTQgQEAgc3RydWN0IGNhbGxiYWNrX2hlYWQge1xuIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKTtcbiAjZGVmaW5lIHJjdV9oZWFkIGNhbGxiYWNrX2hlYWRcbiBcbisjaWZkZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuK3N0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqbmV4dDtcbit9O1xuKyNlbHNlXG4rI2RlZmluZSBrdmZyZWVfcmN1X2hlYWQgcmN1X2hlYWRcbisjZW5kaWZcbitcbiB0eXBlZGVmIHZvaWQgKCpyY3VfY2FsbGJhY2tfdCkoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiB0eXBlZGVmIHZvaWQgKCpjYWxsX3JjdV9mdW5jX3QpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmN1LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuaW5kZXggNWZiZGFiZTNmYWVhZC4uYTc0MDI3MTI2YTJmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaFxuQEAgLTYyNSw3ICs2MjUsNyBAQCBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9jYWxsYmFjayxcbiAgKi9cbiBUUkFDRV9FVkVOVF9SQ1UocmN1X2ludm9rZV9rdmZyZWVfY2FsbGJhY2ssXG4gXG4tXHRUUF9QUk9UTyhjb25zdCBjaGFyICpyY3VuYW1lLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpLFxuK1x0VFBfUFJPVE8oY29uc3QgY2hhciAqcmN1bmFtZSwgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqcmhwLCB1bnNpZ25lZCBsb25nIG9mZnNldCksXG4gXG4gXHRUUF9BUkdTKHJjdW5hbWUsIHJocCwgb2Zmc2V0KSxcbiBcbmRpZmYgLS1naXQgYS9saWIvdGVzdHMvc2x1Yl9rdW5pdC5jIGIvbGliL3Rlc3RzL3NsdWJfa3VuaXQuY1xuaW5kZXggZmE2ZDMxZGJjYTE2Ni4uZTNiNjNmMDMzOGQ1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcbisrKyBiL2xpYi90ZXN0cy9zbHViX2t1bml0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3Byb2Jlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXCIuLi9tbS9zbGFiLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfcmVzb3VyY2UgcmVzb3VyY2U7XG5AQCAtMTYxLDcgKzE2MiwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2NfcmVkem9uZV9hY2Nlc3Moc3RydWN0IGt1bml0ICp0ZXN0KVxuIH1cbiBcbiBzdHJ1Y3QgdGVzdF9rZnJlZV9yY3Vfc3RydWN0IHtcbi1cdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQga3ZyY3U7XG4rXHR9O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9rZnJlZV9yY3Uoc3RydWN0IGt1bml0ICp0ZXN0KVxuQEAgLTI5MiwxOSArMjk2LDc2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3JlYWxsb2NfcmVkem9uZV96ZXJvaW5nKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGttZW1fY2FjaGVfZGVzdHJveShzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuKyNpZiBkZWZpbmVkKENPTkZJR19QRVJGX0VWRU5UUykgfHwgKGRlZmluZWQoQ09ORklHX0tQUk9CRVMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApKVxuICNkZWZpbmUgTlJfSVRFUkFUSU9OUyAxMDAwXG4gI2RlZmluZSBOUl9PQkpFQ1RTIDEwMDBcbi1zdGF0aWMgdm9pZCAqb2JqZWN0c1tOUl9PQkpFQ1RTXTtcbitzdGF0aWMgc3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCAqb2JqZWN0c1tOUl9PQkpFQ1RTXTtcbiBcbiBzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCB7XG4gXHRzdHJ1Y3Qga3VuaXQgKnRlc3Q7XG4gXHRpbnQgY2FsbGJhY2tfY291bnQ7XG4gXHRpbnQgYWxsb2Nfb2s7XG4gXHRpbnQgYWxsb2NfZmFpbDtcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4rI2VuZGlmXG4rI2lmIGRlZmluZWQoQ09ORklHX0tQUk9CRVMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXG4rXHRzdHJ1Y3Qga3Byb2JlIGtwcm9iZTtcbisjZW5kaWZcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfa21hbGxvY19hbmRfZnJpZW5kcyh2b2lkKVxuK3tcbitcdGludCBpLCBqO1xuK1x0Ym9vbCBjYW5fdXNlX2tmcmVlX3JjdSA9ICFJU19CVUlMVElOKENPTkZJR19TTFVCX0tVTklUX1RFU1QpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSVRFUkFUSU9OUzsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xuK1x0XHRcdGdmcF90IGdmcCA9IChpIFx1MDAyNiAxKSA/IEdGUF9LRVJORUwgOiBHRlBfS0VSTkVMX0FDQ09VTlQ7XG4rXG4rXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2Nfb2JqKCpvYmplY3RzW2pdLCBnZnApO1xuK1x0XHRcdGlmICghb2JqZWN0c1tqXSkge1xuK1x0XHRcdFx0ai0tO1xuK1x0XHRcdFx0d2hpbGUgKGogXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHRrZnJlZShvYmplY3RzW2otLV0pO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9PQkpFQ1RTOyBqKyspIHtcbitcdFx0XHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiAyKSlcbitcdFx0XHRcdGtmcmVlX3JjdShvYmplY3RzW2pdLCByY3UpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXG4re1xuK1x0c3RydWN0IHRlc3Rfa2ZyZWVfcmN1X3N0cnVjdCAqb2JqcDtcbitcdGdmcF90IGdmcDtcbitcdGJvb2wgY2FuX3VzZV9rZnJlZV9yY3UgPSAhSVNfQlVJTFRJTihDT05GSUdfU0xVQl9LVU5JVF9URVNUKTtcbitcbitcdC8qIF9fR0ZQX0FDQ09VTlQgdG8gdGVzdCBrbWFsbG9jX25vbG9jaygpIGluIGFsbG9jX3NsYWJfb2JqX2V4dHMoKSAqL1xuK1x0Z2ZwID0gKGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCBcdTAwMjYgMSkgPyAwIDogX19HRlBfQUNDT1VOVDtcbitcdG9ianAgPSBrbWFsbG9jX25vbG9jayhzaXplb2YoKm9ianApLCBnZnAsIE5VTUFfTk9fTk9ERSk7XG4rXG4rXHRpZiAob2JqcClcbitcdFx0Y3R4LVx1MDAzZWFsbG9jX29rKys7XG4rXHRlbHNlXG4rXHRcdGN0eC1cdTAwM2VhbGxvY19mYWlsKys7XG4rXG4rXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2FsbGJhY2tfY291bnQgXHUwMDI2IDIpKVxuK1x0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbitcdGVsc2VcbitcdFx0a2ZyZWVfbm9sb2NrKG9ianApO1xuK1xuK1x0Y3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBod19hdHRyID0ge1xuIFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4gXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuQEAgLTMxNSw2NyArMzc2LDkxIEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGh3X2F0dHIgPSB7XG4gXHQuc2FtcGxlX2ZyZXEgPSAxMDAwMDAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBvdmVyZmxvd19oYW5kbGVyX3Rlc3Rfa21hbGxvY19rZnJlZV9ub2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4rc3RhdGljIHZvaWQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbitcdFx0XHRcdFx0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHZvaWQgKm9ianA7XG4tXHRnZnBfdCBnZnA7XG4gXHRzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4ID0gZXZlbnQtXHUwMDNlb3ZlcmZsb3dfaGFuZGxlcl9jb250ZXh0O1xuIFxuLVx0LyogX19HRlBfQUNDT1VOVCB0byB0ZXN0IGttYWxsb2Nfbm9sb2NrKCkgaW4gYWxsb2Nfc2xhYl9vYmpfZXh0cygpICovXG4tXHRnZnAgPSAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50ICUgMikgPyAwIDogX19HRlBfQUNDT1VOVDtcbi1cdG9ianAgPSBrbWFsbG9jX25vbG9jayg2NCwgZ2ZwLCBOVU1BX05PX05PREUpO1xuLVxuLVx0aWYgKG9ianApXG4tXHRcdGN0eC1cdTAwM2VhbGxvY19vaysrO1xuLVx0ZWxzZVxuLVx0XHRjdHgtXHUwMDNlYWxsb2NfZmFpbCsrO1xuLVxuLVx0a2ZyZWVfbm9sb2NrKG9ianApO1xuLVx0Y3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50Kys7XG4rXHR0ZXN0X25vbG9jayhjdHgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgYm9vbCBlbmFibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbiB7XG4tXHRpbnQgaSwgajtcbi1cdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4tXHRib29sIGFsbG9jX2ZhaWwgPSBmYWxzZTtcbiBcbiBcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2aHdfYXR0ciwgLTEsIGN1cnJlbnQsXG4tXHRcdFx0XHRcdFx0IG92ZXJmbG93X2hhbmRsZXJfdGVzdF9rbWFsbG9jX2tmcmVlX25vbG9jayxcbi1cdFx0XHRcdFx0XHQgXHUwMDI2Y3R4KTtcbitcdFx0XHRcdFx0XHQgb3ZlcmZsb3dfaGFuZGxlcl90ZXN0X25vbG9jayxcbitcdFx0XHRcdFx0XHQgY3R4KTtcbitcbiBcdGlmIChJU19FUlIoZXZlbnQpKVxuLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwiRmFpbGVkIHRvIGNyZWF0ZSBwZXJmIGV2ZW50XCIpO1xuLVx0Y3R4LmV2ZW50ID0gZXZlbnQ7XG4tXHRwZXJmX2V2ZW50X2VuYWJsZShjdHguZXZlbnQpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSVRFUkFUSU9OUzsgaSsrKSB7XG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5SX09CSkVDVFM7IGorKykge1xuLVx0XHRcdGdmcF90IGdmcCA9IChpICUgMikgPyBHRlBfS0VSTkVMIDogR0ZQX0tFUk5FTF9BQ0NPVU5UO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0b2JqZWN0c1tqXSA9IGttYWxsb2MoNjQsIGdmcCk7XG4tXHRcdFx0aWYgKCFvYmplY3RzW2pdKSB7XG4tXHRcdFx0XHRqLS07XG4tXHRcdFx0XHR3aGlsZSAoaiBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdGtmcmVlKG9iamVjdHNbai0tXSk7XG4tXHRcdFx0XHRhbGxvY19mYWlsID0gdHJ1ZTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfT0JKRUNUUzsgaisrKVxuLVx0XHRcdGtmcmVlKG9iamVjdHNbal0pO1xuLVx0fVxuK1x0Y3R4LVx1MDAzZWV2ZW50ID0gZXZlbnQ7XG4rXHRwZXJmX2V2ZW50X2VuYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRpc2FibGVfcGVyZl9ldmVudHMoc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcbit7XG4rXHRrdW5pdF9pbmZvKGN0eC1cdTAwM2V0ZXN0LCBcIkhXIHBlcmYgZXZlbnRzOiBjYWxsYmFja19jb3VudDogJWQsIGFsbG9jX29rOiAlZCwgYWxsb2NfZmFpbDogJWRcXG5cIixcbitcdFx0ICAgY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50LCBjdHgtXHUwMDNlYWxsb2Nfb2ssIGN0eC1cdTAwM2VhbGxvY19mYWlsKTtcbitcbitcdHBlcmZfZXZlbnRfZGlzYWJsZShjdHgtXHUwMDNlZXZlbnQpO1xuK1x0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHgtXHUwMDNlZXZlbnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4gXG4tY2xlYW51cDpcbi1cdHBlcmZfZXZlbnRfZGlzYWJsZShjdHguZXZlbnQpO1xuLVx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChjdHguZXZlbnQpO1xuK1x0aWYgKCFlbmFibGVfcGVyZl9ldmVudHMoXHUwMDI2Y3R4KSlcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcIkZhaWxlZCB0byBlbmFibGUgcGVyZiBldmVudCwgc2tpcHBpbmdcIik7XG4gXG4tXHRrdW5pdF9pbmZvKHRlc3QsIFwiY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIGN0eC5jYWxsYmFja19jb3VudCwgY3R4LmFsbG9jX29rLCBjdHguYWxsb2NfZmFpbCk7XG4rXHR0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHMoKTtcbiBcbi1cdGlmIChhbGxvY19mYWlsKVxuLVx0XHRrdW5pdF9za2lwKHRlc3QsIFwiQWxsb2NhdGlvbiBmYWlsZWRcIik7XG4rXHRkaXNhYmxlX3BlcmZfZXZlbnRzKFx1MDAyNmN0eCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuK31cbisjZW5kaWZcbitcbisjaWYgZGVmaW5lZChDT05GSUdfS1BST0JFUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NNUClcbitzdGF0aWMgaW50IHNsYWJfa3Byb2JlX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHg7XG4rXG4rXHRjdHggPSBjb250YWluZXJfb2YocCwgc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQsIGtwcm9iZSk7XG4rXHR0ZXN0X25vbG9jayhjdHgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuK3tcbitcdGN0eC1cdTAwM2VrcHJvYmUuc3ltYm9sX25hbWUgPSBcInNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWRcIjtcbitcdGN0eC1cdTAwM2VrcHJvYmUucHJlX2hhbmRsZXIgPSBzbGFiX2twcm9iZV9wcmVfaGFuZGxlcjtcbitcbitcdGlmIChyZWdpc3Rlcl9rcHJvYmUoXHUwMDI2Y3R4LVx1MDAzZWtwcm9iZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuK3tcbitcdGt1bml0X2luZm8oY3R4LVx1MDAzZXRlc3QsIFwia3Byb2JlczogY2FsbGJhY2tfY291bnQ6ICVkLCBhbGxvY19vazogJWQsIGFsbG9jX2ZhaWw6ICVkXFxuXCIsXG4rXHRcdCAgIGN0eC1cdTAwM2VjYWxsYmFja19jb3VudCwgY3R4LVx1MDAzZWFsbG9jX29rLCBjdHgtXHUwMDNlYWxsb2NfZmFpbCk7XG4rXHR1bnJlZ2lzdGVyX2twcm9iZShcdTAwMjZjdHgtXHUwMDNla3Byb2JlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rbWFsbG9jX25vbG9ja19hbmRfZnJpZW5kc19rcHJvYmUoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0IGN0eCA9IHsgLnRlc3QgPSB0ZXN0IH07XG4rXG4rXHRpZiAoIXJlZ2lzdGVyX3NsYWJfa3Byb2JlcyhcdTAwMjZjdHgpKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSwgc2tpcHBpbmdcIik7XG4rXG4rXHR0ZXN0X2ttYWxsb2NfYW5kX2ZyaWVuZHMoKTtcbitcbitcdHVucmVnaXN0ZXJfc2xhYl9rcHJvYmVzKFx1MDAyNmN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMCwgc2xhYl9lcnJvcnMpO1xuIH1cbiAjZW5kaWZcbkBAIC00MDUsNyArNDkwLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKHRlc3RfbGVha19kZXN0cm95KSxcbiBcdEtVTklUX0NBU0UodGVzdF9rcmVhbGxvY19yZWR6b25lX3plcm9pbmcpLFxuICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbi1cdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfa2ZyZWVfbm9sb2NrKSxcbitcdEtVTklUX0NBU0VfU0xPVyh0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX3BlcmYpLFxuKyNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxuK1x0S1VOSVRfQ0FTRV9TTE9XKHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfa3Byb2JlKSxcbiAjZW5kaWZcbiBcdHt9XG4gfTtcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IGUwMWMxMDE1YjhjOGQuLjhmZDY4MzVlNDIzNTIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTI0LDExICsyNCwyNyBAQFxuICNkZWZpbmUgU0xBQl9BTExPQ19OT19SRUNVUlNFXHQweDA0IC8qIHByZXZlbnQga21hbGxvYygpIHJlY3Vyc2lvbiAqL1xuICNkZWZpbmUgU0xBQl9BTExPQ19OT19PQkpfRVhUXHQweDA4IC8qIHByZXZlbnQgb2JqX2V4dHMgYXJyYXkgYWxsb2NhdGlvbiAqL1xuIFxuKyNkZWZpbmUgU0xBQl9GUkVFX0RFRkFVTFRcdDB4MDAgLyogbm8gZmxhZ3MgKi9cbisjZGVmaW5lIFNMQUJfRlJFRV9OT0xPQ0tcdDB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi9cbitcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19hbGxvY19mbGFncyh1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbit7XG4rXHRpZiAoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcbitcdFx0cmV0dXJuIFNMQUJfQUxMT0NfTk9MT0NLO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gU0xBQl9BTExPQ19ERUZBVUxUO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHJldHVybiAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05PTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuK3tcbitcdHJldHVybiAhKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spO1xuK31cbitcbiB2b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4gXHRcdFx0XHQgIF9fYXNzdW1lX2ttYWxsb2NfYWxpZ25tZW50IF9fYWxsb2Nfc2l6ZSgxKTtcbkBAIC0zMzEsNiArMzQ3LDM3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4gXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbiB9XG4gXG4rLypcbisgKiBrdmZyZWVfcmN1X2hlYWQgb2Zmc2V0IGNhbiBiZSBvbmx5IGxlc3MgdGhhbiBwYWdlIHNpemUuXG4rICogQ2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNzIHdoaWxlIHByZXNlcnZpbmcgdGhlIEtBU0FOIHRhZy5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgKmt2bWFsbG9jX29ial9zdGFydF9hZGRyKHZvaWQgKmhlYWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKGhlYWQpKSkge1xuK1x0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbitcdH0gZWxzZSB7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKGhlYWQpO1xuK1xuK1x0XHRpZiAoIXNsYWIpIHtcbitcdFx0XHRvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZWFkKTtcbitcdFx0fSBlbHNlIGlmIChpc19rZmVuY2VfYWRkcmVzcyhoZWFkKSkge1xuK1x0XHRcdG9mZnNldCA9IGhlYWQgLSBrZmVuY2Vfb2JqZWN0X3N0YXJ0KGhlYWQpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuK1x0XHRcdHVuc2lnbmVkIGludCBpZHggPSBfX29ial90b19pbmRleChzLCBzbGFiX2FkZHJlc3Moc2xhYiksIGhlYWQpO1xuK1x0XHRcdHZvaWQgKm9iaiA9IHNsYWJfYWRkcmVzcyhzbGFiKSArIHMtXHUwMDNlc2l6ZSAqIGlkeDtcbitcbitcdFx0XHRvYmogPSBmaXh1cF9yZWRfbGVmdChzLCBvYmopO1xuK1x0XHRcdG9iaiA9IGthc2FuX3Jlc2V0X3RhZyhvYmopO1xuK1x0XHRcdG9mZnNldCA9IGthc2FuX3Jlc2V0X3RhZyhoZWFkKSAtIG9iajtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGhlYWQgLSBvZmZzZXQ7XG4rfVxuK1xuIC8qXG4gICogU3RhdGUgb2YgdGhlIHNsYWIgYWxsb2NhdG9yLlxuICAqXG5AQCAtNDMxLDcgKzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdHJldHVybiAhKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX0NBQ0hFX0RNQXxTTEFCX0FDQ09VTlR8U0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9OT19PQkpfRVhUKSk7XG4gfVxuIFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaik7XG4rYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG4gdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4gdm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gXG5AQCAtODk5LDcgKzk0Niw4IEBAIHZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG4gdm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKTtcbiBcbi12b2lkIGRlZmVyX2ZyZWVfYmFycmllcih2b2lkKTtcbit2b2lkIGRlZmVycmVkX3dvcmtfYmFycmllcih2b2lkKTtcbit2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2x1Yl9kZWJ1Z19vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAxZTFkM2ZlZWMzNTM1Li5iOGYyMWVhYmNjY2MyIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdC8qIFdhaXQgZm9yIGRlZmVycmVkIHdvcmsgZnJvbSBrbWFsbG9jL2tmcmVlX25vbG9jaygpICovXG4tXHRkZWZlcl9mcmVlX2JhcnJpZXIoKTtcbitcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xuIFxuIFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c2xhYl9tdXRleCk7XG5AQCAtMTI5Niw2ICsxMjk2LDMzIEBAIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTtcbiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa2ZyZWUpO1xuIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xuIFxuK3ZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbit7XG4rXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdGlmICh1bmxpa2VseShpc192bWFsbG9jX2FkZHIocHRyKSkpXG4rXHRcdGdvdG8gZmFsbGJhY2s7XG4rXG4rXHRzbGFiID0gdmlydF90b19zbGFiKHB0cik7XG4rXHRpZiAodW5saWtlbHkoIXNsYWIpKVxuK1x0XHRnb3RvIGZhbGxiYWNrO1xuK1xuK1x0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbitcdFx0Z290byBmYWxsYmFjaztcbitcbitcdHJldHVybjtcbitcbitmYWxsYmFjazpcbitcdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbitcbiAjaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbiBcbiB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbkBAIC0xMzEzLDYgKzEzNDAsMjAgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9jYWxsX3JjdSk7XG4gXG4rdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXIodm9pZClcbit7XG4rXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcbitcdHJjdV9iYXJyaWVyKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGt2ZnJlZV9yY3VfYmFycmllcik7XG4rXG4rdm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4re1xuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXHRyY3VfYmFycmllcigpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUpO1xuK1xuIHZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxuIHtcbiB9XG5AQCAtMTM3OSw3ICsxNDIwLDcgQEAgc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhIHtcbiBcbiBzdHJ1Y3Qga2ZyZWVfcmN1X2NwdV93b3JrIHtcbiBcdHN0cnVjdCByY3Vfd29yayByY3Vfd29yaztcbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZF9mcmVlO1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZF9mcmVlO1xuIFx0c3RydWN0IHJjdV9ncF9vbGRzdGF0ZSBoZWFkX2ZyZWVfZ3Bfc25hcDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYnVsa19oZWFkX2ZyZWVbRlJFRV9OX0NIQU5ORUxTXTtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xuQEAgLTE0MTUsNyArMTQ1Niw3IEBAIHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsge1xuIHN0cnVjdCBrZnJlZV9yY3VfY3B1IHtcbiBcdC8vIE9iamVjdHMgcXVldWVkIG9uIGEgbGlua2VkIGxpc3RcbiBcdC8vIHRocm91Z2ggdGhlaXIgcmN1X2hlYWQgc3RydWN0dXJlcy5cbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQ7XG4gXHR1bnNpZ25lZCBsb25nIGhlYWRfZ3Bfc25hcDtcbiBcdGF0b21pY190IGhlYWRfY291bnQ7XG4gXG5AQCAtMTU1NiwxMiArMTU5NywxMiBAQCBrdmZyZWVfcmN1X2J1bGsoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3AsXG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4ta3ZmcmVlX3JjdV9saXN0KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbitrdmZyZWVfcmN1X2xpc3Qoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7XG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpuZXh0O1xuIFxuIFx0Zm9yICg7IGhlYWQ7IGhlYWQgPSBuZXh0KSB7XG4tXHRcdHZvaWQgKnB0ciA9ICh2b2lkICopIGhlYWQtXHUwMDNlZnVuYztcbitcdFx0dm9pZCAqcHRyID0ga3ZtYWxsb2Nfb2JqX3N0YXJ0X2FkZHIoaGVhZCk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHZvaWQgKikgaGVhZCAtIHB0cjtcbiBcbiBcdFx0bmV4dCA9IGhlYWQtXHUwMDNlbmV4dDtcbkBAIC0xNTg1LDcgKzE2MjYsNyBAQCBzdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICpibm9kZSwgKm47XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJ1bGtfaGVhZFtGUkVFX05fQ0hBTk5FTFNdO1xuLVx0c3RydWN0IHJjdV9oZWFkICpoZWFkO1xuK1x0c3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZDtcbiBcdHN0cnVjdCBrZnJlZV9yY3VfY3B1ICprcmNwO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cDtcbiBcdHN0cnVjdCByY3VfZ3Bfb2xkc3RhdGUgaGVhZF9ncF9zbmFwO1xuQEAgLTE2MjgsNiArMTY2OSwxNCBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4rXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuK1xuK1x0LypcbitcdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbitcdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4rXHQgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjM4LDcgKzE2ODcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIFxuIFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbiBcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxuLVx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqKTtcbitcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE3MDgsNyArMTc1Nyw3IEBAIGt2ZnJlZV9yY3VfZHJhaW5fcmVhZHkoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXG4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBidWxrX3JlYWR5W0ZSRUVfTl9DSEFOTkVMU107XG4gXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKmJub2RlLCAqbjtcbi1cdHN0cnVjdCByY3VfaGVhZCAqaGVhZF9yZWFkeSA9IE5VTEw7XG4rXHRzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkX3JlYWR5ID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgaTtcbiBcbkBAIC0xOTcxLDcgKzIwMjAsNyBAQCB2b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcbiAgKiBiZSBmcmVlJ2QgaW4gd29ya3F1ZXVlIGNvbnRleHQuIFRoaXMgYWxsb3dzIHVzIHRvOiBiYXRjaCByZXF1ZXN0cyB0b2dldGhlciB0b1xuICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMgZHVyaW5nIGhlYXZ5IGtmcmVlX3JjdSgpL2t2ZnJlZV9yY3UoKSBsb2FkLlxuICAqL1xuLXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuK3ZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3A7XG5AQCAtMTk4Nyw3ICsyMDM2LDcgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4gXHRpZiAoIWhlYWQpXG4gXHRcdG1pZ2h0X3NsZWVwKCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbitcdGlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbkBAIC0yMDA5LDcgKzIwNTgsNiBAQCB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdFx0XHQvLyBJbmxpbmUgaWYga3ZmcmVlX3JjdShvbmVfYXJnKSBjYWxsLlxuIFx0XHRcdGdvdG8gdW5sb2NrX3JldHVybjtcbiBcbi1cdFx0aGVhZC1cdTAwM2VmdW5jID0gcHRyO1xuIFx0XHRoZWFkLVx1MDAzZW5leHQgPSBrcmNwLVx1MDAzZWhlYWQ7XG4gXHRcdFdSSVRFX09OQ0Uoa3JjcC1cdTAwM2VoZWFkLCBoZWFkKTtcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZrcmNwLVx1MDAzZWhlYWRfY291bnQpO1xuQEAgLTIxNDIsMTcgKzIxOTAsMTYgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyKTtcbiAgKi9cbiB2b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiB7XG4rXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXG4gXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbiBcdFx0Y3B1c19yZWFkX2xvY2soKTtcbiBcdFx0Zmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUocyk7XG4gXHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbi1cdFx0cmN1X2JhcnJpZXIoKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBUT0RPOiBJbnRyb2R1Y2UgYSB2ZXJzaW9uIG9mIF9fa3ZmcmVlX3JjdV9iYXJyaWVyKCkgdGhhdCB3b3Jrc1xuLVx0ICogb24gYSBzcGVjaWZpYyBzbGFiIGNhY2hlLlxuLVx0ICovXG4rXHRyY3VfYmFycmllcigpO1xuIFx0X19rdmZyZWVfcmN1X2JhcnJpZXIoKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKTtcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGFkZTE3Zjg0ZTU4MzIuLmJhMmYyMDgyNjJiZjYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTQyNCw2ICs0MjQsOCBAQCBzdHJ1Y3Qgc2xhYl9zaGVhZiB7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBiYXJuX2xpc3Q7XG4rXHRcdC8qIG9ubHkgdXNlZCB0byBkZWZlciBjYWxsX3JjdSgpIGluIHVua25vd24gY29udGV4dCAqL1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBsbG5vZGU7XG4gXHRcdC8qIG9ubHkgdXNlZCBmb3IgcHJlZmlsbGVkIHNoZWFmcyAqL1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHVuc2lnbmVkIGludCBjYXBhY2l0eTtcbkBAIC05MDYsNiArOTA4LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4gfVxuICNlbmRpZlxuIFxuKy8qXG4rICogQSBuby1vcCBmdW5jdGlvbiB1c2VkIHRvIGF0dGFjaCBrcHJvYmUgaGFuZGxlcnMgaW4gc2x1Yl9rdW5pdCB0ZXN0cy5cbisgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIG91dCBjYWxsc2l0ZXMuXG4rICovXG4rI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZClcbit7XG4rXHRiYXJyaWVyKCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfYXR0YWNoX2twcm9iZV9sb2NrZWQodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4rI2RlZmluZSBzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQobG9jaykgZG8ge1x0XFxcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQobG9jayk7XHRcdFxcXG4rXHRzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKCk7XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG4gXG4gLypcbkBAIC0xNjYzLDcgKzE2ODMsNyBAQCBzdGF0aWMgdm9pZCBhZGRfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmICghKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybjtcbiBcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZuLVx1MDAzZWZ1bGwpO1xuIH1cbiBcbkBAIC0xNjcyLDcgKzE2OTIsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0XG4gXHRpZiAoIShzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gfVxuIFxuQEAgLTI4MTYsNyArMjgzNiw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbitzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbitcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG4ge1xuIFx0LypcbiBcdCAqIElmIHRoZSBzaGVhZiB3YXMgY3JlYXRlZCB3aXRoIFNMQUJfQUxMT0NfTk9fUkVDVVJTRSBmbGFnIHRoZW4gaXRzXG5AQCAtMjgyOCwxMSArMjg0OSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4gXHRcdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoc2hlYWYpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHNoZWFmLVx1MDAzZXNpemUgXHUwMDNlIDApO1xuLVx0a2ZyZWUoc2hlYWYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxuK1x0XHRrZnJlZV9ub2xvY2soc2hlYWYpO1xuK1x0ZWxzZVxuK1x0XHRrZnJlZShzaGVhZik7XG4gXG4gXHRzdGF0KHMsIFNIRUFGX0ZSRUUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4re1xuK1x0X19mcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4rfVxuK1xuIHN0YXRpYyB1bnNpZ25lZCBpbnRcbiByZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbiBcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4KTtcbkBAIC0yODg1LDcgKzI5MTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XG4gXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4gXG4gXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcyk7XG4gXHRzaGVhZiA9IHBjcy1cdTAwM2VtYWluO1xuQEAgLTM1NzAsNyArMzYwMCw3IEBAIF9fYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHNsYWIgKnNsYWIsIGVudW0gYWRkX21vZGUgbW9kZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdFx0XHRcdHN0cnVjdCBzbGFiICpzbGFiLCBlbnVtIGFkZF9tb2RlIG1vZGUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuIFx0X19hZGRfcGFydGlhbChuLCBzbGFiLCBtb2RlKTtcbiB9XG4gXG5AQCAtMzU4NCw3ICszNjE0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCk7XG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuQEAgLTM2MDAsNyArMzYzMCw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIHtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbiBcdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuQEAgLTQwNjksNiArNDA5OSwyMiBAQCBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuK3N0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBvYmplY3RzO1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgb2JqZWN0c19ieV9yY3U7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCByY3Vfc2hlYXZlcztcbitcdHN0cnVjdCBpcnFfd29yayB3b3JrO1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGVmZXJyZWRfcGVyY3B1X3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3b3JrKTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrLCBkZWZlcnJlZF9wZXJjcHVfd29yaykgPSB7XG4rXHQub2JqZWN0cyA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzKSxcbitcdC5vYmplY3RzX2J5X3JjdSA9IExMSVNUX0hFQURfSU5JVChvYmplY3RzX2J5X3JjdSksXG4rXHQucmN1X3NoZWF2ZXMgPSBMTElTVF9IRUFEX0lOSVQocmN1X3NoZWF2ZXMpLFxuK1x0LndvcmsgPSBJUlFfV09SS19JTklUKGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKSxcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGZsdXNoX3JjdV9zaGVhZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuIFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbkBAIC00MTI4LDYgKzQxNzQsOCBAQCB2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFxuK1x0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4rXG4gXHRjcHVzX3JlYWRfbG9jaygpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbGFiX211dGV4KTtcbiBcbkBAIC00NjY1LDcgKzQ3MTMsNyBAQCBfX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuIFx0Ym9vbCBhbGxvd19zcGluO1xuIFxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xuIFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC01NzgzLDcgKzU4MzEsNyBAQCBzdGF0aWMgdm9pZCBfX3Bjc19pbnN0YWxsX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHksXG4gXHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4pXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZCh0aGlzX2NwdV9wdHIoXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSk7XG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuIFxuIFx0LyogVGhpcyBpcyB3aGF0IHdlIGV4cGVjdCB0byBmaW5kIGlmIG5vYm9keSBpbnRlcnJ1cHRlZCB1cy4gKi9cbiBcdGlmIChsaWtlbHkoIXBjcy1cdTAwM2VzcGFyZSkpIHtcbkBAIC01ODM0LDcgKzU4ODIsNyBAQCBfX3Bjc19yZXBsYWNlX2Z1bGxfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcyxcbiBcdGJvb2wgcHV0X2ZhaWw7XG4gXG4gcmVzdGFydDpcbi1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xuK1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKTtcbiBcbiBcdC8qIEJvb3RzdHJhcCBvciBkZWJ1ZyBjYWNoZSwgYmFjayBvZmYgKi9cbiBcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5AQCAtNjAzNSwyNCArNjA4MywyNiBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4gICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGVudGlyZWx5IG9uIFBSRUVNUFRfUlQuXG4rICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4gICogc3Bpbm5pbmcgbG9jay4gVGVsbCBsb2NrZGVwIHRoYXQgYWNxdWlyaW5nIHNwaW5sb2NrX3QgaXMgdmFsaWQgaGVyZVxuLSAqIGJ5IHRlbXBvcmFyaWx5IHJhaXNpbmcgdGhlIHdhaXQtdHlwZSB0byBMRF9XQUlUX0NPTkZJRy5cbisgKiBieSB0ZW1wb3JhcmlseSByYWlzaW5nIHRoZSB3YWl0LXR5cGUgdG8gTERfV0FJVF9DT05GSUcuIFNraXAgdGhlIGxvY2tkZXAgbWFwXG4rICogb24gUFJFRU1QVF9SVCB0byBhdm9pZCBzdXBwcmVzc2luZyB2YWxpZCBsb2NrZGVwIHdhcm5pbmdzLlxuICAqL1xuIHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xuIFxuLWJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbitib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqcmN1X3NoZWFmO1xuK1x0Ym9vbCBhbGxvd19zcGluID0gZnJlZV9mbGFnc19hbGxvd19zcGlubmluZyhmcmVlX2ZsYWdzKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW4pO1xuIFxuLVx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiBcbiBcdGlmICghbG9jYWxfdHJ5bG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNjA2MCw5ICs2MTEwLDEwIEBAIGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcbiBcdGlmICh1bmxpa2VseSghcGNzLVx1MDAzZXJjdV9mcmVlKSkge1xuLVxuIFx0XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XG4gXHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG4rXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuK1x0XHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcbiBcbiBcdFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cbiBcdFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbkBAIC02MDgyLDcgKzYxMzMsNyBAQCBib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4gXG4tXHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgdHJ1ZSk7XG4rXHRcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7XG4gXG4gXHRcdGlmIChlbXB0eSkge1xuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuQEAgLTYwOTEsMjAgKzYxNDIsMjAgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFxuIFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0ZW1wdHkgPSBhbGxvY19lbXB0eV9zaGVhZihzLCBHRlBfTk9XQUlULCBTTEFCX0FMTE9DX0RFRkFVTFQpO1xuK1x0XHRlbXB0eSA9IGFsbG9jX2VtcHR5X3NoZWFmKHMsIGdmcCwgYWxsb2NfZmxhZ3MpO1xuIFxuIFx0XHRpZiAoIWVtcHR5KVxuIFx0XHRcdGdvdG8gZmFpbDtcbiBcbiBcdFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpIHtcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4rXHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbiBcbiBcdFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocGNzLVx1MDAzZXJjdV9mcmVlKSlcbi1cdFx0XHRiYXJuX3B1dF9lbXB0eV9zaGVhZihiYXJuLCBlbXB0eSk7XG4rXHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuIFx0fVxuQEAgLTYxMzAsMTggKzYxODEsMzQgQEAgYm9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuIFx0ICogd2UgZmx1c2ggYmVmb3JlIGxvY2FsX3VubG9jayB0byBtYWtlIHN1cmUgYSByYWNpbmdcbiBcdCAqIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpIGRvZXNuJ3QgbWlzcyB0aGlzIHNoZWFmXG4gXHQgKi9cbi1cdGlmIChyY3Vfc2hlYWYpXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnJjdV9zaGVhZi1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWYpO1xuK1x0aWYgKHJjdV9zaGVhZikge1xuK1x0XHQvKlxuK1x0XHQgKiBXaXRoICFhbGxvd19zcGluLCB3ZSBtaWdodCBoYXZlIGludGVycnVwdGVkIGNhbGxfcmN1KCknc1xuK1x0XHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxuK1x0XHQgKiB3ZSBrbm93IHRoYXQncyBub3QgdGhlIGNhc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbitcdFx0XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbitcbitcdFx0XHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2cmN1X3NoZWFmLVx1MDAzZWxsbm9kZSwgXHUwMDI2ZHB3LVx1MDAzZXJjdV9zaGVhdmVzKSlcbitcdFx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjYWxsX3JjdShcdTAwMjZyY3Vfc2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4gXG4gXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGKTtcbi1cdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxuK1x0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuIFx0cmV0dXJuIHRydWU7XG4gXG4gZmFpbDpcbiBcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUZfRkFJTCk7XG4tXHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbitcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG5AQCAtNjMzMCwzMSArNjM5NywyMiBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBkZWZlcl9mcmVlIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkIG9iamVjdHM7XG4tXHRzdHJ1Y3QgaXJxX3dvcmsgd29yaztcbi19O1xuLVxuLXN0YXRpYyB2b2lkIGZyZWVfZGVmZXJyZWRfb2JqZWN0cyhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuLVxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVmZXJfZnJlZSwgZGVmZXJfZnJlZV9vYmplY3RzKSA9IHtcbi1cdC5vYmplY3RzID0gTExJU1RfSEVBRF9JTklUKG9iamVjdHMpLFxuLVx0LndvcmsgPSBJUlFfV09SS19JTklUKGZyZWVfZGVmZXJyZWRfb2JqZWN0cyksXG4tfTtcbi1cbiAvKlxuICAqIEluIFBSRUVNUFRfUlQgaXJxX3dvcmsgcnVucyBpbiBwZXItY3B1IGt0aHJlYWQsIHNvIGl0J3Mgc2FmZVxuICAqIHRvIHRha2Ugc2xlZXBpbmcgc3Bpbl9sb2NrcyBmcm9tIF9fc2xhYl9mcmVlKCkuXG4gICogSW4gIVBSRUVNUFRfUlQgaXJxX3dvcmsgd2lsbCBydW4gYWZ0ZXIgbG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuK3N0YXRpYyB2b2lkIGRlZmVycmVkX3BlcmNwdV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlZmVyX2ZyZWUsIHdvcmspO1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKm9ianMgPSBcdTAwMjZkZi1cdTAwM2VvYmplY3RzO1xuK1x0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqb2JqcywgKm9ianNfYnlfcmN1LCAqcmN1X3NoZWF2ZXM7XG4gXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqcG9zLCAqdDtcbitcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZiwgKm5leHQ7XG4gXG4tXHRpZiAobGxpc3RfZW1wdHkob2JqcykpXG4tXHRcdHJldHVybjtcbitcdGRwdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmssIHdvcmspO1xuK1x0cmN1X3NoZWF2ZXMgPSBcdTAwMjZkcHctXHUwMDNlcmN1X3NoZWF2ZXM7XG4rXHRvYmpzID0gXHUwMDI2ZHB3LVx1MDAzZW9iamVjdHM7XG4rXHRvYmpzX2J5X3JjdSA9IFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdTtcbiBcbiBcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwob2Jqcyk7XG4gXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG5AQCAtNjM3OCwyNyArNjQzNiw1MSBAQCBzdGF0aWMgdm9pZCBmcmVlX2RlZmVycmVkX29iamVjdHMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuIFx0XHRfX3NsYWJfZnJlZShzLCBzbGFiLCB4LCB4LCAxLCBfVEhJU19JUF8pO1xuIFx0XHRzdGF0KHMsIEZSRUVfU0xPV1BBVEgpO1xuIFx0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChvYmpzX2J5X3JjdSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XG4rXHRcdHZvaWQgKmhlYWQgPSBwb3M7XG4rXHRcdHZvaWQgKm9ianAgPSBrdm1hbGxvY19vYmpfc3RhcnRfYWRkcihoZWFkKTtcbitcbitcdFx0a3ZmcmVlX2NhbGxfcmN1KGhlYWQsIG9ianApO1xuK1x0fVxuK1xuK1x0bGxub2RlID0gbGxpc3RfZGVsX2FsbChyY3Vfc2hlYXZlcyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNoZWFmLCBuZXh0LCBsbG5vZGUsIGxsbm9kZSlcbitcdFx0Y2FsbF9yY3UoXHUwMDI2c2hlYWYtXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgZGVmZXJfZnJlZSAqZGY7XG4rXHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbiBcbiBcdGd1YXJkKHByZWVtcHQpKCk7XG4gXG4gXHRoZWFkID0ga2FzYW5fcmVzZXRfdGFnKGhlYWQpO1xuIFxuLVx0ZGYgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzKTtcbi1cdGlmIChsbGlzdF9hZGQoaGVhZCArIHMtXHUwMDNlb2Zmc2V0LCBcdTAwMjZkZi1cdTAwM2VvYmplY3RzKSlcbi1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZGYtXHUwMDNld29yayk7XG4rXHRkcHcgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGVmZXJyZWRfcGVyY3B1X3dvcmspO1xuK1x0aWYgKGxsaXN0X2FkZChoZWFkICsgcy1cdTAwM2VvZmZzZXQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2ZHB3LVx1MDAzZXdvcmspO1xuK31cbitcbit2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBkZWZlcnJlZF9wZXJjcHVfd29yayAqZHB3O1xuK1xuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdGRwdyA9IHRoaXNfY3B1X3B0cihcdTAwMjZkZWZlcnJlZF9wZXJjcHVfd29yayk7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNmRwdy1cdTAwM2VvYmplY3RzX2J5X3JjdSkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNmRwdy1cdTAwM2V3b3JrKTtcbiB9XG4gXG4tdm9pZCBkZWZlcl9mcmVlX2JhcnJpZXIodm9pZClcbisvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xuK3ZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4tXHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2ZGVmZXJfZnJlZV9vYmplY3RzLCBjcHUpLVx1MDAzZXdvcmspO1xuK1x0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNmRlZmVycmVkX3BlcmNwdV93b3JrLCBjcHUpLVx1MDAzZXdvcmspO1xuIH1cbiBcbiBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbkBAIC02NjU3LDQzICs2NzM5LDIxIEBAIHN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuICAqL1xuIHZvaWQga3ZmcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0dm9pZCAqb2JqID0gaGVhZDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbi1cdHZvaWQgKnNsYWJfYWRkcjtcbitcdHZvaWQgKm9iajtcbitcbitcdG9iaiA9IGt2bWFsbG9jX29ial9zdGFydF9hZGRyKGhlYWQpO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKSB7XG4tXHRcdG9iaiA9ICh2b2lkICopIFBBR0VfQUxJR05fRE9XTigodW5zaWduZWQgbG9uZylvYmopO1xuIFx0XHR2ZnJlZShvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRwYWdlID0gdmlydF90b19wYWdlKG9iaik7XG4tXHRzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xuLVx0aWYgKCFzbGFiKSB7XG4tXHRcdC8qXG4tXHRcdCAqIHJjdV9oZWFkIG9mZnNldCBjYW4gYmUgb25seSBsZXNzIHRoYW4gcGFnZSBzaXplIHNvIG5vIG5lZWQgdG9cbi1cdFx0ICogY29uc2lkZXIgYWxsb2NhdGlvbiBvcmRlclxuLVx0XHQgKi9cbi1cdFx0b2JqID0gKHZvaWQgKikgUEFHRV9BTElHTl9ET1dOKCh1bnNpZ25lZCBsb25nKW9iaik7XG4tXHRcdGZyZWVfbGFyZ2Vfa21hbGxvYyhwYWdlLCBvYmopO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRzID0gc2xhYi1cdTAwM2VzbGFiX2NhY2hlO1xuLVx0c2xhYl9hZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLVxuLVx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbi1cdFx0b2JqID0ga2ZlbmNlX29iamVjdF9zdGFydChvYmopO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5zaWduZWQgaW50IGlkeCA9IF9fb2JqX3RvX2luZGV4KHMsIHNsYWJfYWRkciwgb2JqKTtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uob2JqKTtcbitcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXG4tXHRcdG9iaiA9IHNsYWJfYWRkciArIHMtXHUwMDNlc2l6ZSAqIGlkeDtcbi1cdFx0b2JqID0gZml4dXBfcmVkX2xlZnQocywgb2JqKTtcbitcdFx0aWYgKHNsYWIpXG4rXHRcdFx0c2xhYl9mcmVlKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqLCBfUkVUX0lQXyk7XG4rXHRcdGVsc2VcbitcdFx0XHRmcmVlX2xhcmdlX2ttYWxsb2MocGFnZSwgb2JqKTtcbiBcdH1cbi1cbi1cdHNsYWJfZnJlZShzLCBzbGFiLCBvYmosIF9SRVRfSVBfKTtcbiB9XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0MzoxNS4zNDIyNDA2NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY4OTY5ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkNVL1NMVUIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBrZXJuZWwgY29tcG9uZW50cyBsaWtlIGBtbS9zbGFiYCwgYG1tL3NsYWJfY29tbW9uLmNgLCBgbW0vc2x1Yi5jYCwgYW5kIHRoZSBSQ1UgY29kZS4gVGhlIGludHJvZHVjdGlvbiBvZiBga2ZyZWVfcmN1X25vbG9ja2AgYW5kIHRoZSB0d2Vha3MgdG8gYGt2ZnJlZV9jYWxsX3JjdWAgYXJlIHRoZSBmb2NhbCBwb2ludHMuIEl0IGxvb2tzIGxpa2UgYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbm93IGFjY2VwdGluZyBhIGBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpgIHJhdGhlciB0aGFuIHRoZSBtb3JlIGdlbmVyaWMgYHN0cnVjdCByY3VfaGVhZCAqYC4gQW5kIHdlJ3ZlIGdvdCBhIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGJlaW5nIGFkZGVkLCB3aGljaCB1c2VzIGVpdGhlciBgZGVmZXJfa2ZyZWVfcmN1YCBvciBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggdGhhdCBgU0xBQl9GUkVFX05PTE9DS2AgZmxhZy4gR29vZCB0byBzZWUgdGhlcmUgYXJlIHBlcmYgYW5kIGtwcm9iZSB0ZXN0cyBpbiBgbGliL3Rlc3RzL3NsdWJfa3VuaXQuY2AgdG9vOyBhbHdheXMgY3J1Y2lhbC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgZ2VudWluZWx5IGZ1bmN0aW9uYWwsIGFuZCB0aGF0IGl0IGlzbid0IGFuIHVucmVhY2hhYmxlIGRlYWQgZW5kIG9mIGEgcGF0Y2guIEdpdmVuIHRoZSBhcmVhcyBpdCB0b3VjaGVzLCBJJ20gZ29pbmcgdG8gYXNzdW1lIGl0J3MgYm90aCBmdW5jdGlvbmFsIGFuZCB0aGF0IHNvbWUgY29kZSBwYXRocyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2luZyBpdC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgY2xlYXIuIFNwZWNpZmljYWxseSwgSSBzZWUgYENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURgIGJlaW5nIHVzZWQgaW4gYG1tL3NsYWJfY29tbW9uLmNgIGluIHJlbGF0aW9uIHRvIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLiBUaGF0IHJhaXNlcyB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIG9mIGhvdyB0aGF0IGNvbmZpZyBpcyBkZWZpbmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBpbiBgaW5pdC9LY29uZmlnYCwgYG1tL0tjb25maWdgLCBvciBwZXJoYXBzIGV2ZW4gYGtlcm5lbC9yY3UvS2NvbmZpZ2AuIEknbGwgc2VhcmNoIGZvciBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBnZXQgYSBjb21wbGV0ZSB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjIxLjkxMTIxNDIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwMjk4MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzItICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzMzogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzQtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xNDMxLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjE0MzI6I2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC90eXBlcy5oPTI1ND1zdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjU5LVxcbmluY2x1ZGUvbGludXgvdHlwZXMuaDoyNjA6I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xcbi0tXFxubW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzAyLVxcbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXFxubW0vc2xhYl9jb21tb24uYy0xMzA0LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjUtXFxubW0vc2xhYl9jb21tb24uYzoxMzI2OiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM1Nz12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNjE6I2Vsc2UgLyogQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMTM2Mi1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjI0OD12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjMwMC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIzMDE6I2VuZGlmIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MjQuNjIxNTIwNjM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTUxNjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgUkNVIEJhdGNoZWQgRnJlZWQgd2l0aCBTTFVCIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBmbGFnZ2VkIGFzIGEgZGVmYXVsdCBib29sZWFuICd5ZXMnIOKAkyB0aGF0J3MgZ29vZCwgbGlrZWx5IGluZGljYXRpbmcgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgdW5kZXIgdGhlIHJpZ2h0IGNpcmN1bXN0YW5jZXMuIFRoZSBjbHVlIGhlcmUgaXMgYFNMVUJgLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhpcyBvcHRpb24gaXMgZGVwZW5kZW50IG9uIHRoZSBgU0xVQmAgYWxsb2NhdG9yLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9mIGBLVkZSRUVfUkNVX0JBVENIRURgIHRvIG5haWwgZG93biB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IG9uIGBTTFVCYCwgYW5kIGFueSBvdGhlciBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCBjb25maXJtaW5nIGhvdyB0aGlzIG9wdGlvbiBpbXBhY3RzIFJDVSBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA2MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjI4LjE2NzAzOTkxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg4NzIzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjMwLjU1NTc2NzkxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzk4MjgyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoaW5nZXMgb24gd2hldGhlciBvciBub3Qgd2UncmUgdXNpbmcgYFNMVUJgLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBtbS9LY29uZmlnYCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBkb3duIHRvIGxpbmUgMTY4LiBIb3BlZnVsbHksIGl0J2xsIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgdGVsbHMgbWUgYWJvdXQgYFNMVUJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQzOjM0Ljg5NTU5ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ZW5kbWVudVxcbiAxNjE6XFx0XFxuIDE2MjpcXHRtZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbiAxNjM6XFx0XFxuIDE2NDpcXHRjb25maWcgU0xVQlxcbiAxNjU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAxNjY6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4gMTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBTTFVCX1RJTllcXG4gMTc0OlxcdFxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAxNzY6XFx0XFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxcbiAxNzk6XFx0XFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6MzQuODk2MDc2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTUyMTAyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS1ZGUkVFX1JDVV9CQVRDSEVEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20ganVzdCBxdWlja2x5IHJldmlld2luZyBob3cgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBkZWZhdWx0IGlzIHRvIGhhdmUgaXQgZW5hYmxlZCB1bmxlc3Mgd2UncmUgZGVhbGluZyB3aXRoIGBTTFVCX1RJTllgLCBgVElOWV9SQ1VgLCBvciBpZiBgUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIGlzIGFsc28gdHVybmVkIG9uLiBUaGF0IG1ha2VzIHNlbnNlLCBubyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncy5cblxuU28sIEkgY291bGQganVzdCByZWx5IG9uIHRoZSBkZWZhdWx0cyBhbmQgbm90IGV4cGxpY2l0bHkgZW5hYmxlIGBLVkZSRUVfUkNVX0JBVENIRURgLCBidXQgSSBjb3VsZCBhbHNvIGFkZCBpdCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSdzIHNha2UsIG9yIG1heWJlIG5vdC4gRG9lc24ndCBzZWVtIHN0cmljdGx5IG5lY2Vzc2FyeS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJJ20gcmVtZW1iZXJpbmcgdGhhdCBgU0xVQl9LVU5JVF9URVNUYCBpcyB0b3VjaGVkIGluIGBsaWIvdGVzdHMvc2x1Yl9rdW5pdC5jYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIHRoYXQuIE5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGxpbmthZ2Ugb3IgZGVwZW5kZW5jaWVzLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGludG8gYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBgbGliL3Rlc3RzL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCdzIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NDcuODQ4MTgyODc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5MTMyMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCX0tVTklUX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mjk2NT1jb25maWcgU0hESTNfS1VOSVRfVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjk3NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyOTc1OmNvbmZpZyBTTFVCX0tVTklUX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTc2LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBTTFVCIGNhY2hlIGVycm9yIGRldGVjdGlvblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0Mzo1MC4xMjczMjM0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1ODk2NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtjb25maWcgRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGJldHRlciBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0IGFmZmVjdHMgZGVidWdnaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSwgcHJvYmFibHkgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgb3B0aW9ucyBkaXJlY3RseSB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjk3NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJpZ2h0IHBsYWNlIHRvIGZpbmQgc29tZSB1c2VmdWwgY2x1ZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gc3ltYm9scyBvciBkZXBlbmRlbmNpZXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NTMuODg2MjkyOTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTcwOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHVuaXQgdGVzdCBmb3IgX19hc2hsZGkzKCksIF9fYXNocmRpMygpLCBhbmRcXG4yOTcxOlxcdFxcdCAgX19sc2hyZGkzKCkgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIHRvIGltcGxlbWVudCA2NC1iaXQgYXJpdGhtZXRpY1xcbjI5NzI6XFx0XFx0ICBzaGlmdCBsZWZ0LCBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0IGFuZCBsb2dpY2FsIHNoaWZ0IHJpZ2h0LFxcbjI5NzM6XFx0XFx0ICByZXNwZWN0aXZlbHksIG9uIGEgMzItYml0IENQVXMuXFxuMjk3NDpcXHRcXG4yOTc1OlxcdGNvbmZpZyBTTFVCX0tVTklUX1RFU1RcXG4yOTc2OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBTTFVCIGNhY2hlIGVycm9yIGRldGVjdGlvblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbjI5Nzc6XFx0XFx0ZGVwZW5kcyBvbiBTTFVCX0RFQlVHIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuMjk3ODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbjI5Nzk6XFx0XFx0aGVscFxcbjI5ODA6XFx0XFx0ICBUaGlzIGJ1aWxkcyBTTFVCIGFsbG9jYXRvciB1bml0IHRlc3QuXFxuMjk4MTpcXHRcXHQgIFRlc3RzIFNMVUIgY2FjaGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuXFxuMjk4MjpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuMjk4MzpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4yOTg0OlxcdFxcbjI5ODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjI5ODY6XFx0XFxuMjk4NzpcXHRjb25maWcgUkFUSU9OQUxfS1VOSVRfVEVTVFxcbjI5ODg6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3QgZm9yIHJhdGlvbmFsLmNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4yOTg5OlxcdFxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgUkFUSU9OQUxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDM6NTMuODg2NTY5Mjc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDA4NzAyMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBSQ1UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBlbmFibGluZyBgU0xVQl9LVU5JVF9URVNUYCBzZWVtcyBsaWtlIHRoZSByaWdodCBtb3ZlIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYSBkZWRpY2F0ZWQgdGVzdCBjb25maWd1cmF0aW9uLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgLCBhZGRpbmcgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIGBkZWZlcl9rZnJlZV9yY3VgLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGNoYW5nZXMgaW50ZWdyYXRlIHdpdGggdGhlIGV4aXN0aW5nIFJDVSBtYWNoaW5lcnkgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wbGljYXRpb25zLlxuXG5TbyB0aGUgbWFpbiBzeW1ib2xzIGludm9sdmVkIGFyZSBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBgZGVmZXJfa2ZyZWVfcmN1YC4gSSBrbm93IGBfX2tmcmVlX3JjdV9zaGVhZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoaXMgaXMgbW9kaWZpZWQuIEkgcXVpY2tseSBjb25maXJtZWQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIGl0IG1vcmUgcmVhZGlseSB1c2FibGUuIEhvd2V2ZXIsIGBkZWZlcl9rZnJlZV9yY3VgIGlzIGludGVybmFsIHRvIHRoZSBTTFVCIGNvZGUsIG9ubHkgZGVjbGFyZWQgaW4gYG1tL3NsYWIuaGAuIFNhbWUgc3Rvcnkgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBga3ZmcmVlX2NhbGxfcmN1YCBpcyBleHBvcnRlZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHNwZWNpZmljYWxseTpcblxuYGBgY1xudm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxue1xuXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcblxuXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXG5cdFx0Z290byBmYWxsYmFjaztcblxuXHRpZiAodW5saWtlbHkoaXNfdm1hbGxvY19hZGRyKHB0cikpKVxuXHRcdGdvdG8gZmFsbGJhY2s7XG5cblx0c2xhYiA9IHZpcnRfdG9fc2xhYihwdHIpO1xuXHRpZiAodW5saWtlbHkoIXNsYWIpKVxuXHRcdGdvdG8gZmFsbGJhY2s7XG5cblx0aWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBzbGFiX25pZChzbGFiKSAhPSBudW1hX21lbV9pZCgpKSlcblx0XHRnb3RvIGZhbGxiYWNrO1xuXG5cdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcblx0XHRnb3RvIGZhbGxiYWNrO1xuXG5cdHJldHVybjtcblxuZmFsbGJhY2s6XG5cdGRlZmVyX2tmcmVlX3JjdShoZWFkKTtcbn1cbkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byByZWFsbHkgdGhpbmsgYWJvdXQgdGhlIGBmYWxsYmFja2AgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zIGZvciBwZXJmb3JtYW5jZS4gVGhlIGBmYWxsYmFja2AgbWVhbnMgaXQgZ29lcyB0byBgZGVmZXJfa2ZyZWVfcmN1YC4gU28sIGlmIGBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBub3QgZW5hYmxlZCwgb3IgaWYgaXQgaXMgYSBgdm1hbGxvY2AgYWRkcmVzcywgb3IgaWYgYHZpcnRfdG9fc2xhYmAgZmFpbHMsIGlmIE5VTUEgaXMgZW5hYmxlZCBhbmQgdGhlIHNsYWIgaXNuJ3QgbG9jYWwsIG9yIGlmIGBfX2tmcmVlX3JjdV9zaGVhZmAgcmV0dXJucyBmYWxzZSwgaXQgZmFsbHMgYmFjayB0byB0aGUgUkNVIGRlZmVycmFsLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIFJDVSBiYXRjaGluZyBtZWNoYW5pY3MgbGF0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGxpa2VseSBzY2VuYXJpb3MgYW5kIHdoYXQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbGJhY2sgaXMgaW4gdGVybXMgb2YgbGF0ZW5jeSBhbmQgUkNVIHVzYWdlLlxuXG5JIG5vdGUgdGhlIGFkZGl0aW9uYWwgZm9jdXMgc3ltYm9sczogYGRlZmVycmVkX3dvcmtfYmFycmllcmAgYW5kIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAuIGBkZWZlcnJlZF9wZXJjcHVfd29ya19mbmAgaXMgc3RhdGljIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cblRoZW4sIEkgY2hlY2sgdGhlIG5ldyB0ZXN0cy4gSSBzZWUgYHRlc3Rfa21hbGxvY19ub2xvY2tfYW5kX2ZyaWVuZHNfcGVyZmAgYW5kIGB0ZXN0X2ttYWxsb2Nfbm9sb2NrX2FuZF9mcmllbmRzX2twcm9iZWAgaW4gYGxpYi90ZXN0cy9zbHViX2t1bml0LmNgLCBLVW5pdCB0ZXN0cywgc28gZW5hYmxpbmcgYFNMVUJfS1VOSVRfVEVTVGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY2hvaWNlLiBIb3dldmVyLCB0aGVzZSB0ZXN0cyBkZXBlbmQgb24gYENPTkZJR19QRVJGX0VWRU5UU2AgYW5kIGBDT05GSUdfS1BST0JFU2AgdG8gcnVuLlxuXG5gYGBjXG4jaWYgZGVmaW5lZChDT05GSUdfUEVSRl9FVkVOVFMpIHx8IChkZWZpbmVkKENPTkZJR19LUFJPQkVTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKSlcbmBgYFxuXG5Mb29rcyBsaWtlIEkgY2FuIGVuYWJsZSBgUEVSRl9FVkVOVFNgIGFuZCBgS1BST0JFU2AsIG9yIGp1c3QgYEtQUk9CRVNgIGlmIGBDT05GSUdfU01QYCBpcyBhbHNvIGVuYWJsZWQsIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIHRoZXNlIG9wdGlvbnMgb24gdGhlIGJ1aWxkIGFuZCBydW50aW1lLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGtmcmVlX3JjdV9ub2xvY2tgICh0eXBvISkgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UsIGFzIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjA2Ljg5NTI3NDQzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0OTA1NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZnJlZV9yY3Vfbm9sb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaD0xMTIxPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEyOC0vKipcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEyOTogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgLSBhIHZlcnNpb24gb2Yga2ZyZWVfcmN1KCkgdGhhdCBjYW4gYmUgY2FsbGVkIGluIGFueSBjb250ZXh0LlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMwLSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTMyLSAqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzM6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM0LSAqIHdpdGhvdXQgYW55IGRlZmVycmVkIHByb2Nlc3NpbmcsIGJ1dCBtYXkgc3RpbGwgZGVmZXIgZnJlZWluZy5cXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM2LSAqXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzc6ICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEzOC0gKi9cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTEzOTojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDAtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM9MzQ0PXN0YXRpYyB2b2lkIHRlc3Rfbm9sb2NrKHN0cnVjdCB0ZXN0X25vbG9ja19jb250ZXh0ICpjdHgpXFxuLS1cXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM1OS1cXHRpZiAoY2FuX3VzZV9rZnJlZV9yY3UgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2FsbGJhY2tfY291bnQgXFx1MDAyNiAyKSlcXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jOjM2MDpcXHRcXHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jLTM2MS1cXHRlbHNlXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIxOTE9dm9pZCBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2xhYl9jb21tb24uYy0yMTkyLXtcXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTM6XFx0Lyoga2ZyZWVfcmN1X25vbG9jaygpIG1pZ2h0IGhhdmUgZGVmZXJyZWQgZnJlZXMgZXZlbiB3aXRob3V0IHNoZWF2ZXMgKi9cXG5tbS9zbGFiX2NvbW1vbi5jLTIxOTQtXFx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjA5LjM0NDMzNTc3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyNTE1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkZ1enppbmcgVGhhdCBOZXcgQVBJOiBBYnNvbHV0ZWx5IFdvcnRoIHRoZSBFZmZvcnQqKlxuXG5BbHJpZ2h0LCBldmVuIHRob3VnaCB0aGlzIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCdzIGRvaW5nLCBpcyBvbmx5IHNwZWNpZmljYWxseSBjYWxsZWQgaW4gdGhlIHRlc3QgY29kZSAqcmlnaHQgbm93KiwgdGhlIGZhY3QgdGhhdCBhIG5ldyBBUEkgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIHRoaXMgdGVzdCBhY3R1YWxseSAqdXNlcyogaXQsIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOZXcgQVBJcyBhbHdheXMgY2FycnkgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciB1bmZvcmVzZWVuIGlzc3Vlcy4gSXQncyBhIGtleSBleGVyY2lzZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHNvIGdldHRpbmcgYSBmdXp6aW5nIHRlc3QgaW4gcGxhY2UgZWFybHkgd2lsbCBiZSBhIHByb2FjdGl2ZSBtb3ZlLiBObyBicmFpbmVyLCByZWFsbHkuXG5cbkkgc3VwcG9zZSBJIHNob3VsZCBjaGVjayBvdXQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgaW4gYG1tL3NsYWJfY29tbW9uLmNgIHRvIHNlZSBob3cgaXQgb3BlcmF0ZXMuIFRoZSB0ZXN0IGlzIGludm9raW5nIHRoYXQgZnVuY3Rpb24sIGl0J3Mgd29ydGggc2VlaW5nIHdoYXQgaXQgZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIHdpbGwgYWxsb3cgdXMgdG8gZGV2aXNlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzM0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MTIuOTA2ODUzMzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEzMjk1NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEwMT12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTAyOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDQtXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTQ1OlxcdFxcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcXHUwMDI2KChfX19wKS1cXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0Ni1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEyOTk6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MTUuMTIwMTUzODQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTA2MDk2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgTXlzdGVyeSoqXG5cbkFscmlnaHQsIHNvIHRoZSBtYWNybyBleHBhbmRzIG91dCB0byBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgZ29vZC4gVGhhdCdzIHRoZSBhY3R1YWwgd29ya2hvcnNlIGZ1bmN0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYF9fa2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2x1Yi5jYC4gSSBleHBlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBSQ1Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgaW5pdGlhdGVkLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIHNsdWIgYWxsb2NhdG9yJ3MgaW50ZXJuYWwgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDE1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MjAuNTMwNzc1NzU4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMTMwOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa2ZyZWVfcmN1X3NoZWFmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD00NzM9c3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTQ4MC1cXG5tbS9zbGFiLmg6NDgxOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTMxNjpcXHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNy1cXHRcXHRnb3RvIGZhbGxiYWNrO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xNjY4PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjkwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY5MS1cXG4tLVxcbm1tL3NsdWIuYz00MTQyPXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNDE1NC1cXHRcXHQgKiB3ZSBkb24ndCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcXG5tbS9zbHViLmM6NDE1NTpcXHRcXHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0Llxcbm1tL3NsdWIuYy00MTU2LVxcdFxcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2VcXG5tbS9zbHViLmM6NDE1NzpcXHRcXHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXFxubW0vc2x1Yi5jLTQxNTgtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9NjAyNT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjA4My0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG5tbS9zbHViLmM6NjA4NDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcXG5tbS9zbHViLmMtNjA4NS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGt2ZnJlZV9jYWxsX3JjdSgpIGF2b2lkc1xcbi0tXFxubW0vc2x1Yi5jPTYwOTQ9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYwOTUtXFxubW0vc2x1Yi5jOjYwOTY6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjA5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjIyLjY3MjkxMjA1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc4NTkzNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIGBfX2tmcmVlX3JjdV9zaGVhZmAuLi4gdGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBpc24ndCBpdD8gSXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCBzdWdnZXN0aW5nIGl0cyBpbnZvbHZlbWVudCBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIGBkZWZlcl9rZnJlZV9yY3VgIGluIGBtbS9zbHViLmNgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24gdGhlcmUgdG8gZmlndXJlIG91dCBob3cgYF9fa2ZyZWVfcmN1X3NoZWFmYCBpcyBiZWluZyBjYWxsZWQgYW5kIGdldCBhIHNlbnNlIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0NDozMC4zNTE1MDgyMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzY5NzY0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJfa2ZyZWVfcmN1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD05NDk9dm9pZCBkZWZlcnJlZF93b3JrX2JhcnJpZXIodm9pZCk7XFxubW0vc2xhYi5oOjk1MDp2b2lkIGRlZmVyX2tmcmVlX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkKTtcXG5tbS9zbGFiLmgtOTUxLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyMS1mYWxsYmFjazpcXG5tbS9zbGFiX2NvbW1vbi5jOjEzMjI6XFx0ZGVmZXJfa2ZyZWVfcmN1KGhlYWQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XFxuLS1cXG5tbS9zbHViLmM9NjQ1Mz1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY0NjUtXFxubW0vc2x1Yi5jOjY0NjY6dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjQ2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjMyLjU4ODQ5MDMzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5MTEzNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgd3JpdHRlbiBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBgZGVmZXJfa2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSBpdCdzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLCBwcm9iYWJseSBjcnVjaWFsIGZvciBkZWZlcnJpbmcgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggUkNVLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZD8gTGV0J3MgY2hlY2sgd2hlcmUgaXQncyBjYWxsZWQsIHN0YXJ0aW5nIHdpdGggYGt2ZnJlZV9jYWxsX3JjdWAgaW4gYG1tL3NsYWJfY29tbW9uLmNgLiBJIGV4cGVjdCB0byBmaW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzbGFiIGFsbG9jYXRvci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIHNvbGlkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTQ6NDQ6MzUuODU3NjA1Nzc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyODk2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2ZnJlZV9jYWxsX3JjdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9OTg1PXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfbWlncmF0ZSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMDAtICovXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMDE6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEwMi12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMDk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTE1LVxcdFxcdF9fX2hlYWQgPSAoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqKSBcXHUwMDI2KF9fX3ApLVxcdTAwM2VrdnJoZjtcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMTY6XFx0XFx0a3ZmcmVlX2NhbGxfcmN1KF9fX2hlYWQsICh2b2lkICopIChfX19wKSk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTE3LVxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEyMT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMjQtXFx0aWYgKF9fX3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTI1OlxcdFxcdGt2ZnJlZV9jYWxsX3JjdShOVUxMLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTEyNi19IHdoaWxlICgwKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMzI0PUVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjctXFxubW0vc2xhYl9jb21tb24uYzoxMzI4OnZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyOS17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzNDAtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTM0MTpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTM0Mi1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTk5OT12b2lkIF9faW5pdCBrZnJlZV9yY3Vfc2NoZWR1bGVyX3J1bm5pbmcodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjAxNy0gKlxcbm1tL3NsYWJfY29tbW9uLmM6MjAxODogKiBFYWNoIGt2ZnJlZV9jYWxsX3JjdSgpIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSBiYXRjaC4gVGhlIGJhdGNoIHdpbGwgYmUgZHJhaW5lZFxcbm1tL3NsYWJfY29tbW9uLmMtMjAxOS0gKiBldmVyeSBLRlJFRV9EUkFJTl9KSUZGSUVTIG51bWJlciBvZiBqaWZmaWVzLiBBbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJhdGNoIHdpbGxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjAyMi0gKi9cXG5tbS9zbGFiX2NvbW1vbi5jOjIwMjM6dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAyNC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIwOTUtfVxcbm1tL3NsYWJfY29tbW9uLmM6MjA5NjpFWFBPUlRfU1lNQk9MX0dQTChrdmZyZWVfY2FsbF9yY3UpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjA5Ny1cXG4tLVxcbm1tL3NsdWIuYz02MDI1PXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDgyLS8qXFxubW0vc2x1Yi5jOjYwODM6ICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jLTYwODQtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jOjYwODU6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcXG5tbS9zbHViLmMtNjA4Ni0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXFxuLS1cXG5tbS9zbHViLmM9NjQwNT1zdGF0aWMgdm9pZCBkZWZlcnJlZF9wZXJjcHVfd29ya19mbihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuLS1cXG5tbS9zbHViLmMtNjQ0NC1cXG5tbS9zbHViLmM6NjQ0NTpcXHRcXHRrdmZyZWVfY2FsbF9yY3UoaGVhZCwgb2JqcCk7XFxubW0vc2x1Yi5jLTY0NDYtXFx0fVxcbi0tXFxucnVzdC9rZXJuZWwvc3luYy9wb2xsLnJzPTE2Mj0gICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4tLVxcbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzQtICAgICAgICAvLyBTQUZFVFk6IFRoaXMgd2FzIGFsbG9jYXRlZCB1c2luZyBgS0JveDo6cGluX2luaXRgLCBzbyBpdCBjYW4gYmUgZnJlZWQgd2l0aCBga3ZmcmVlYC5cXG5ydXN0L2tlcm5lbC9zeW5jL3BvbGwucnM6MTc1OiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Omt2ZnJlZV9jYWxsX3JjdSgoKnB0cikucmN1LmdldCgpLCBwdHIuY2FzdDo6XFx1MDAzY2ZmaTo6Y192b2lkXFx1MDAzZSgpKSB9O1xcbnJ1c3Qva2VybmVsL3N5bmMvcG9sbC5ycy0xNzYtICAgIH1cXG4tLVxcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2g9MjA9ZmlcXG50b29scy9yY3UvcmN1LXVwZGF0ZXJzLnNoOjIxOmJwZnRyYWNlIC1lICdrcHJvYmU6a3ZmcmVlX2NhbGxfcmN1LFxcbnRvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2gtMjItXFx0ICAgICBrcHJvYmU6Y2FsbF9yY3UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE0OjQ0OjM4LjIxMDUwODMwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI4MDc1OTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkNVIGFuZCBTTFVCIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGBrdmZyZWVfY2FsbF9yY3VgIGFuZCBhZGRpbmcgYGtmcmVlX3JjdV9ub2xvY2tgLCBlc3NlbnRpYWxseSBhbGxvd2luZyBmb3IgbG9ja2xlc3Mgb2JqZWN0IGZyZWVpbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IGt2ZnJlZV9yY3VfaGVhZGAgYW5kIGFkanVzdG1lbnRzIHRvIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCB0aGUgc2xhYiBmcmVlaW5nIHBhdGguXG5cbkxvb2tpbmcgaW50byBpdCwgdGhlIGBrZnJlZV9yY3Vfbm9sb2NrYCBtYWNybyBsZXZlcmFnZXMgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AsIHdoaWNoIHRoZW4gcHJvYmFibHkgd29ya3Mgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLCBhbmQgdGhlIHBhdGNoaW5nIGludHJvZHVjZXMgYSBgZnJlZV9mbGFnc2AgcGFyYW1ldGVyIHRvIGl0LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBmbGV4aWJsZSBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGZvciBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgYFNMQUJfRlJFRV9OT0xPQ0tgIGluIHRoZSBgUFJFRU1QVF9SVGAgY2FzZS4gVGhlIHVzZSBvZiBgZGVmZXJyZWRfcGVyY3B1X3dvcmtgIGFuZCB0aGUgY2hlY2tzIHdpdGggYGlycXNfZGlzYWJsZWQoKWAgaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGNsZXZlcmx5IGRlc2lnbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIHRoZSBpbW1lZGlhdGUgZnJlZWluZyBvZiB0aGUgb2JqZWN0IG1pZ2h0IGJlIHByb2JsZW1hdGljLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyB0aGUgcHJpbWFyeSBBUEkgZW50cnkgcG9pbnRzOlxuKiAgIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIChUaGlzIGlzIGV4cG9ydGVkKVxuKiAgIGBrdmZyZWVfY2FsbF9yY3VgXG4qICAgYF9fa2ZyZWVfcmN1X3NoZWFmYFxuKiAgIGBkZWZlcl9rZnJlZV9yY3VgXG4qICAgYGRlZmVycmVkX3dvcmtfYmFycmllcmBcbiogICBga3ZmcmVlX3JjdV9iYXJyaWVyYFxuKiAgIGBrdmZyZWVfcmN1X2JhcnJpZXJfb25fY2FjaGVgXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgdGVzdCBzdWl0ZSwgYFNMVUJfS1VOSVRfVEVTVGAsIHVzZXMgYFBFUkZfRVZFTlRTYCBhbmQgYEtQUk9CRVNgIGluIGFkZGl0aW9uIHRvIGBTTVBgIHRvIGNvdmVyIHRoZSBuZXcgbG9ja2xlc3MgZnJlZWluZyBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgdGVzdHMgdXNlIHBlcmYgZXZlbnRzIGFuZCBrcHJvYmVzIGluZGljYXRlcyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3MuIEFuZCwgc2luY2UgaXQncyBhbiBSQ1UtcmVsYXRlZCBjaGFuZ2UsIHdlIHNob3VsZCBiZSB1c2luZyBSQ1UgaW4gYW4gU01QIGVudmlyb25tZW50LlxuXG5TbywgZm9yIGZ1bGwgY292ZXJhZ2UsIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGNvbmZpZ3M6XG4qICAgYFNMVUJfS1VOSVRfVEVTVGBcbiogICBgS1VOSVRgXG4qICAgYFNMVUJfREVCVUdgXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBLUFJPQkVTYFxuKiAgIGBTTVBgXG4qICAgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgKEV2ZW4gdGhvdWdoIGl0J3MgdGhlIGRlZmF1bHQsIGxldCdzIGJlIGV4cGxpY2l0KVxuXG5HaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgbWVjaGFuaXNtcywgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUgdGhpcyBzZXQgb2YgY29uZmlncyB0byB0aG9yb3VnaGx5IHRlc3QgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5ODMsIk91dHB1dFRva2VucyI6MjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNDo0NDo1Ni40OTEyNzA0NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc0NTA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJfS1VOSVRfVEVTVFwiLFxuICAgIFwiS1VOSVRcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNMVUJfREVCVUdcIixcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiLFxuICAgIFwia3ZmcmVlX2NhbGxfcmN1XCIsXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwiZGVmZXJfa2ZyZWVfcmN1XCIsXG4gICAgXCJkZWZlcnJlZF93b3JrX2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBga2ZyZWVfcmN1X25vbG9jaygpYCBBUEkgd2hpY2ggYWxsb3dzIGRlZmVycmluZyBmcmVlaW5nIG9mIG9iamVjdHMgaW4gYW55IGNvbnRleHQgd2l0aG91dCBsb2Nrcy4gSXQgbW9kaWZpZXMgYGt2ZnJlZV9jYWxsX3JjdSgpYCB0byB1c2UgYHN0cnVjdCBrdmZyZWVfcmN1X2hlYWRgIGFuZCBpbXBsZW1lbnRzIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKWAgd2hpY2ggcmVsaWVzIG9uIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBhbmQgYGRlZmVyX2tmcmVlX3JjdSgpYC4gSXQgYWxzbyBhZGRzIEtVbml0IHRlc3RzIGZvciB0aGVzZSBuZXcgQVBJcyB1c2luZyBwZXJmIGV2ZW50cyBhbmQga3Byb2Jlcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSBjaGFuZ2UgdGhhdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMVUJfS1VOSVRfVEVTVFwiLFxuICAgIFwiS1VOSVRcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNMVUJfREVCVUdcIixcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiLFxuICAgIFwia3ZmcmVlX2NhbGxfcmN1XCIsXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwiZGVmZXJfa2ZyZWVfcmN1XCIsXG4gICAgXCJkZWZlcnJlZF93b3JrX2JhcnJpZXJcIixcbiAgICBcImt2ZnJlZV9yY3VfYmFycmllclwiLFxuICAgIFwia3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBga2ZyZWVfcmN1X25vbG9jaygpYCBBUEkgd2hpY2ggYWxsb3dzIGRlZmVycmluZyBmcmVlaW5nIG9mIG9iamVjdHMgaW4gYW55IGNvbnRleHQgd2l0aG91dCBsb2Nrcy4gSXQgbW9kaWZpZXMgYGt2ZnJlZV9jYWxsX3JjdSgpYCB0byB1c2UgYHN0cnVjdCBrdmZyZWVfcmN1X2hlYWRgIGFuZCBpbXBsZW1lbnRzIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKWAgd2hpY2ggcmVsaWVzIG9uIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBhbmQgYGRlZmVyX2tmcmVlX3JjdSgpYC4gSXQgYWxzbyBhZGRzIEtVbml0IHRlc3RzIGZvciB0aGVzZSBuZXcgQVBJcyB1c2luZyBwZXJmIGV2ZW50cyBhbmQga3Byb2Jlcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSBjaGFuZ2UgdGhhdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[1] Phase: Succeeded StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 14:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 14:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2] Phase: Succeeded StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 15:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 15:37:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 14:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 14:45:00 +0000 UTC FinishedAt: 2026-07-30 14:45:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdclp7/series-workflowdclp7-convert-artifact-2432097737/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 14:45:10 +0000 UTC FinishedAt: 2026-07-30 15:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 14:45:10 +0000 UTC FinishedAt: 2026-07-30 15:05:49 +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:*12b76f1a-ab97-4439-beea-32d0e02ab756,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-workflowdclp7/series-workflowdclp7-convert-artifact-2432097737/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": "b43f0fc4-505c-4751-bdbf-82799183afd1", "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-workflowdclp7/series-workflowdclp7-build-action-4026031271/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 14:45:10 +0000 UTC FinishedAt: 2026-07-30 15:05:29 +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:*12b76f1a-ab97-4439-beea-32d0e02ab756,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-workflowdclp7/series-workflowdclp7-convert-artifact-2432097737/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": "b43f0fc4-505c-4751-bdbf-82799183afd1", "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-workflowdclp7/series-workflowdclp7-build-action-4026031271/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 15:05:49 +0000 UTC FinishedAt: 2026-07-30 15:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 15:05:49 +0000 UTC FinishedAt: 2026-07-30 15:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 15:05:49 +0000 UTC FinishedAt: 2026-07-30 15:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 15:05:49 +0000 UTC FinishedAt: 2026-07-30 15:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdclp7/series-workflowdclp7-convert-artifact-1580957916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 15:05:59 +0000 UTC FinishedAt: 2026-07-30 15:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 15:05:59 +0000 UTC FinishedAt: 2026-07-30 15:36:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b43f0fc4-505c-4751-bdbf-82799183afd1,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-workflowdclp7/series-workflowdclp7-build-action-4026031271/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": false },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-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-30 15:37:08 +0000 UTC FinishedAt: 2026-07-30 15:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdclp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["kfree_call_rcu_nolock","kvfree_call_rcu","__kfree_rcu_sheaf","defer_kfree_rcu","deferred_work_barrier","kvfree_rcu_barrier","kvfree_rcu_barrier_on_cache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"78bc8af4affb9a732504eb22eeac7d1e50883853","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLUB_KUNIT_TEST","KUNIT","PERF_EVENTS","KPROBES","SMP","SLUB_DEBUG","KVFREE_RCU_BATCHED"],"series_id":"6d1aad55-daea-4ccd-aa48-4bb7f4fe591d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-30 15:37:08 +0000 UTC FinishedAt: 2026-07-30 15:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}