Name: series-workflow979x7 Phase: Succeeded StartedAt: 2026-09-07 12:39:38 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[0] Phase: Succeeded StartedAt: 2026-09-07 12:39:38 +0000 UTC FinishedAt: 2026-09-07 13:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 12:39:38 +0000 UTC FinishedAt: 2026-09-07 13:00:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "KSM", "MEMORY_FAILURE", "SECURITY_LANDLOCK", "FUNCTION_GRAPH_TRACER", "RESCTRL_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "KSM", "MEMORY_FAILURE", "SECURITY_LANDLOCK", "FUNCTION_GRAPH_TRACER", "RESCTRL_FS" ], "series_id": "8167d448-23c8-491b-9423-4a29ef730226" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__set_oom_adj", "count_additional_threads", "schedule_task_work", "current_is_single_threaded", "select_bad_process", "collect_procs_ksm", "collect_procs_anon", "alloc_retstack_tasklist", "rdtgroup_tasks_assigned" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX0xBTkRMT0NLJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtSRVNDVFJMX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXRfb29tX2FkaiYjMzQ7LAogICAgJiMzNDtjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfdGFza193b3JrJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkJiMzNDssCiAgICAmIzM0O3NlbGVjdF9iYWRfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtjb2xsZWN0X3Byb2NzX2tzbSYjMzQ7LAogICAgJiMzNDtjb2xsZWN0X3Byb2NzX2Fub24mIzM0OywKICAgICYjMzQ7YWxsb2NfcmV0c3RhY2tfdGFza2xpc3QmIzM0OywKICAgICYjMzQ7cmR0Z3JvdXBfdGFza3NfYXNzaWduZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxuXG5UaGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiBSQ1UgbG9jayBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8vZnJvbSB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIFJDVSBsb2NraW5nIGNoYW5nZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIChlLmcuIHVzZS1hZnRlci1mcmVlKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA1OGJlMzg5NDI0NjA1Li4yYzQ3ZDgzOGExYzc2IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtMTE2MSw4ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgX19zZXRfb29tX2FkaihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9vbV9hZGosIGJvb2wgbGVnYWN5KVxuIFx0aWYgKG1tKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICYjNDM7MTE3Nyw2IEBAIHN0YXRpYyBpbnQgX19zZXRfb29tX2FkaihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9vbV9hZGosIGJvb2wgbGVnYWN5KVxuIFx0XHRcdH1cbiBcdFx0XHR0YXNrX3VubG9jayhwKTtcbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0bW1kcm9wKG1tKTtcbiBcdH1cbiBlcnJfdW5sb2NrOlxuZGlmZiAtLWdpdCBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYyBiL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuY1xuaW5kZXggNWRjYmIwYTk2NGU4MS4uYjE0ZGY4YjIzZjFhOCAxMDA2NDRcbi0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5AQCAtNzA5LDE0ICYjNDM7NzA5LDEyIEBAIGludCByZHRncm91cF90YXNrc19hc3NpZ25lZChzdHJ1Y3QgcmR0Z3JvdXAgKnIpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkdGdyb3VwX211dGV4KTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICp0O1xuIFx0cGlkX3QgcGlkO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkge1xuIFx0XHRpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHtcbiBcdFx0XHRwaWQgPSB0YXNrX3BpZF92bnIodCk7XG4gXHRcdFx0aWYgKHBpZClcbiBcdFx0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JWRcXG5cJiMzNDssIHBpZCk7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJkdGdyb3VwX3Rhc2tzX3Nob3coc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5pbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuQEAgLTIsNiAmIzQzOzIsNyBAQFxuICNpZm5kZWYgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gI2RlZmluZSBfTElOVVhfU0NIRURfU0lHTkFMX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7XG4gI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KVx0XFxcbiBcdGZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4mIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlXG4mIzQzOyAqIFJDVSByZWFkIGxvY2sgdmlhIHNjb3BlZF9ndWFyZChyY3UpLiAgVGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlXG4mIzQzOyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuJiM0MztcdHNjb3BlZF9ndWFyZChyY3UpIFxcXG4mIzQzO1x0Zm9yIChwID0gXHUwMDI2aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9IFx1MDAyNmluaXRfdGFzayA7IClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXFxcbiYjNDM7XHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuJiM0MztcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEb3VibGUgbG9vcDogJiMzOTticmVhayYjMzk7IG9ubHkgZXhpdHMgdGhlIGlubmVyIGZvcl9lYWNoX3RocmVhZCgpIGxvb3AuXG4mIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkXG4mIzQzOyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXFxcbiYjNDM7XHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpXG4mIzQzO1xuIHR5cGVkZWYgaW50ICgqcHJvY192aXNpdG9yKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHZvaWQgKmRhdGEpO1xuIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmNcbmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcHUuY1xuQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRcdC8qXG5AQCAtMTI2OCw3ICYjNDM7MTI2Nyw2IEBAIHZvaWQgY2xlYXJfdGFza3NfbW1fY3B1bWFzayhpbnQgY3B1KVxuIFx0XHRhcmNoX2NsZWFyX21tX2NwdW1hc2tfY3B1KGNwdSwgdC1cdTAwM2VtbSk7XG4gXHRcdHRhc2tfdW5sb2NrKHQpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qIFRha2UgdGhpcyBDUFUgZG93bi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuY1xuaW5kZXggYTc2YmY5NTdmYjMyZC4uN2E4NzBmNzFkY2Y2YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mcmVlemVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmNcbkBAIC0yMTcsMTEgJiM0MzsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSB7XG4gXHRcdF9fdGhhd190YXNrKHQpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9odW5nX3Rhc2suYyBiL2tlcm5lbC9odW5nX3Rhc2suY1xuaW5kZXggNmZjYzk0Y2U0Y2E5ZC4uNzNhNWFkM2JlOWE4YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9odW5nX3Rhc2suY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2h1bmdfdGFzay5jXG5AQCAtMzE1LDEzICYjNDM7MzE1LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2h1bmdfdW5pbnRlcnJ1cHRpYmxlX3Rhc2tzKHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGhpc19yb3VuZF9jb3VudCA9IDA7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2JyZWFrICYjNDM7IEhVTkdfVEFTS19MT0NLX0JSRUFLKSkge1xuIFx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIFx0XHRcdGh1bmdfdGFza19pbmZvKHQsIHRpbWVvdXQsIHRoaXNfcm91bmRfY291bnQpO1xuIFx0XHR9XG4gXHR9XG4tIHVubG9jazpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVxuJiM0MztvdXQ6XG4gXHRpZiAoIXRoaXNfcm91bmRfY291bnQpXG4gXHRcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IGM1NmE3ZjkxZDcyZTIuLmVhMjE4ZGM3NWFkNTQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTY4MzQsMTUgJiM0Mzs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCYjMzQ7XFxuU2hvd2luZyBhbGwgbG9ja3MgaGVsZCBpbiB0aGUgc3lzdGVtOlxcblwmIzM0Oyk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcJiMzNDtcXG5cJiMzNDspO1xuIFx0cHJfd2FybihcJiMzNDs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5pbmRleCBiNjI3MzVhNjc4ODQyLi5iYWM2MzY2ZGE0MWUwIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS91cGRhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuY1xuQEAgLTU0NywxNSAmIzQzOzU0NywxMyBAQCB2b2lkIHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQodm9pZClcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdHNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LlxuLVx0cmN1X3JlYWRfbG9jaygpOyAvLyBQcm90ZWN0IHRhc2sgbGlzdC5cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbiYjMzk7dCBkZWFkbG9jayBvbiBvdXJzZWx2ZXMhXG4gXHRcdC8vIE9yZGVyIGxhdGVyIHJjdV9yZWFkX2xvY2soKSBvbiBvdGhlciB0YXNrcyBhZnRlciBRUy5cbiBcdFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dC1cdTAwM2VyY3VfdHJpdmlhbF9wcmVlbXB0X25lc3RpbmcpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQpO1xuICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uN2Y5ZGJkNGM3ZDYyZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0yMDE1LDggJiM0MzsyMDE1LDcgQEAgc3RhdGljIHZvaWQgdWNsYW1wX3N5bmNfdXRpbF9taW5fcnRfZGVmYXVsdCh2b2lkKVxuIFx0c21wX21iX19hZnRlcl9zcGlubG9jaygpO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKVxuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KVxuICNlbmRpZlxuIFx0XHQgICBcJiMzNDtcXG5cJiMzNDspO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xuIFx0XHRpZiAodGFza19jcHUocCkgIT0gcnFfY3B1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwcmludF90YXNrKG0sIHJxLCBwKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHByaW50X2Nmc19ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcbmluZGV4IDQwZDM3M2Q2NWY5YjkuLmY3OTdjZTExOTIyMzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuQEAgLTEwNTcsMTEgJiM0MzsxMDU3LDEwIEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0XHRnb3RvIGZyZWU7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmV0X3N0YWNrID09IE5VTEwpIHtcbkBAIC0xMDc0LDkgJiM0MzsxMDczLDYgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpXG4gXHRcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSByZXRfc3RhY2tfbGlzdFtzdGFydCYjNDM7JiM0MztdO1xuIFx0XHR9XG4gXHR9XG4tXG4tdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gZnJlZTpcbiBcdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYyBlbmQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKVxuIFxuIFx0c3luY2hyb25pemVfc3JjdShcdTAwMjZ1bndpbmRfc3JjdSk7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4gXHQvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGF0b21pY19sb25nX2FuZG5vdChCSVQoYml0KSxcbiBcdFx0XHRcdCAgIFx1MDAyNnQtXHUwMDNldW53aW5kX2luZm8udW53aW5kX21hc2spO1xuIFx0XHRpZiAodC1cdTAwM2V1bndpbmRfaW5mby5jYWNoZSlcbmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbmluZGV4IDhjOThiMjBiZmM0MTQuLjRlN2ZlODU0NTRhYjggMTAwNjQ0XG4tLS0gYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuY1xuQEAgLTI2LDggJiM0MzsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdGlmICh1bmxpa2VseShwLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHVubGlrZWx5KHAgPT0gdGFzay1cdTAwM2Vncm91cF9sZWFkZXIpKVxuQEAgLTQ4LDcgJiM0Mzs0Nyw1IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdH1cbiBcdHJldCA9IHRydWU7XG4gZm91bmQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcbmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0XG4tLS0gYS9tbS9rc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va3NtLmNcbkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcbiBcdFx0XHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXg7XG5AQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li43ZDkzZGViMWY3YjNkIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTU1NSw4ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIH1cbiBcbkBAIC01ODksOSAmIzQzOzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTtcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuQEAgLTYxMSw3ICYjNDM7NjA4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbkBAIC02MzUsOCAmIzQzOzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdHNrO1xuIFxuIFx0XHQvKlxuQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdGFkZF90b19raWxsX2ZzZGF4KHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cbkBAIC0yMjg4LDggJiM0MzsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdHQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCB0cnVlKTtcbkBAIC0yMzAzLDcgJiM0MzsyMjk2LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9wZ29mZih0LCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXG5pbmRleCA1ZDQ4YmQ4NjJjMjdiLi45ZTNkMDIzOTMwNjRmIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuY1xuQEAgLTk0LDggJiM0Mzs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHtcbiBcdFx0aWYgKG1hc2spIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoaXMgaXMgYSBtZW1wb2xpY3kgY29uc3RyYWluZWQgb29tLCB0c2smIzM5O3NcbkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICYjNDM7MzU5LDkgQEAgc3RhdGljIHZvaWQgc2VsZWN0X2JhZF9wcm9jZXNzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRlbHNlIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocClcbiYjNDM7XHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKVxuIFx0XHRcdGlmIChvb21fZXZhbHVhdGVfdGFzayhwLCBvYykpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gfVxuIFxuQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuJiM0MztcdFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0XHQvKiBBdm9pZCBwb3RlbnRpYWwgc29mdGxvY2t1cCB3YXJuaW5nICovXG4gXHRcdFx0aWYgKCgmIzQzOyYjNDM7aSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHQgKiBhcmUgZHlpbmcgYXMgd2VsbCB0byBtYWtlIHN1cmUgdGhhdCBhKSBub2JvZHkgcGlucyBpdHMgbW0gYW5kXG4gXHQgKiBiKSB0aGUgdGFzayBpcyBhbHNvIHJlYXBhYmxlIGJ5IHRoZSBvb20gcmVhcGVyLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuQEAgLTg5Nyw3ICYjNDM7ODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKVxuIFx0ICogVGhhdCB0aHJlYWQgd2lsbCBub3cgZ2V0IGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgc2luY2UgaXQgaGFzIGFcbiBcdCAqIHBlbmRpbmcgZmF0YWwgc2lnbmFsLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAsIHZpY3RpbSkpXG5AQCAtOTc1LDcgJiM0Mzs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcylcbiBcbiBcdGNhbGxlciA9IGN1cnJlbnQ7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4tXG4tXHRmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHtcbiYjNDM7XHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM5Miw5ICYjNDM7MzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4mIzQzO1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAgICYjMzQ7UkVTQ1RSTF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2V0X29vbV9hZGomIzM0OywKICAgICYjMzQ7Y291bnRfYWRkaXRpb25hbF90aHJlYWRzJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX3Rhc2tfd29yayYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtzZWxlY3RfYmFkX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19rc20mIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19hbm9uJiMzNDssCiAgICAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgICAmIzM0O3JkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNThiZTM4OTQyNDYwNS4uMmM0N2Q4MzhhMWM3NiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTExNjEsOCAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSkKIAlpZiAobW0pIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMTc4LDcgJiM0MzsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpCiAJCQl9CiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJbW1kcm9wKG1tKTsKIAl9CiBlcnJfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jCmluZGV4IDVkY2JiMGE5NjRlODEuLmIxNGRmOGIyM2YxYTggMTAwNjQ0Ci0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmMKQEAgLTcwOSwxNCAmIzQzOzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKQogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkdGdyb3VwX211dGV4KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKIAlwaWRfdCBwaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHsKIAkJaWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7CiAJCQlwaWQgPSB0YXNrX3BpZF92bnIodCk7CiAJCQlpZiAocGlkKQogCQkJCXNlcV9wcmludGYocywgJiMzNDslZFxuJiMzNDssIHBpZCk7CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAppbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2lmbmRlZiBfTElOVVhfU0NIRURfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwpAQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7CiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpCVwKIAlmb3JfZWFjaF9wcm9jZXNzKHApIGZvcl9lYWNoX3RocmVhZChwLCB0KQogCiYjNDM7LyoKJiM0MzsgKiBWYXJpYW50cyBvZiBmb3JfZWFjaF9wcm9jZXNzKCksIGZvcl9lYWNoX3RocmVhZCgpIGFuZAomIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlCiYjNDM7ICogUkNVIHJlYWQgbG9jayB2aWEgc2NvcGVkX2d1YXJkKHJjdSkuICBUaGUgbG9jayBpcyBoZWxkIGZvciB0aGUKJiM0MzsgKiBkdXJhdGlvbiBvZiB0aGUgbG9vcCBhbmQgcmVsZWFzZWQgb24gZXhpdCwgaW5jbHVkaW5nIHZpYSBicmVhaywKJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvciAocCA9ICZhbXA7aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9ICZhbXA7aW5pdF90YXNrIDsgKQomIzQzOwomIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CV9fZm9yX2VhY2hfdGhyZWFkKChwKS0mZ3Q7c2lnbmFsLCB0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogRG91YmxlIGxvb3A6ICYjMzk7YnJlYWsmIzM5OyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLgomIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkCiYjNDM7ICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpCiYjNDM7CiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTsKIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3B1LmMKQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkgKiBmdWxsLWZsZWRnZWQgdGFza2xpc3RfbG9jay4KIAkgKi8KIAlXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAkJLyoKQEAgLTEyNjgsNyAmIzQzOzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkJYXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtJmd0O21tKTsKIAkJdGFza191bmxvY2sodCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCBhNzZiZjk1N2ZiMzJkLi43YTg3MGY3MWRjZjZhIDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTIxNywxMSAmIzQzOzIxNyw5IEBAIHZvaWQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfdGhyZWFkKHAsIHQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlfX3RoYXdfdGFzayh0KTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jCmluZGV4IDZmY2M5NGNlNGNhOWQuLjczYTVhZDNiZTlhOGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9odW5nX3Rhc2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvaHVuZ190YXNrLmMKQEAgLTMxNSwxMyAmIzQzOzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiAJCXJldHVybjsKIAogCXRoaXNfcm91bmRfY291bnQgPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkgewogCQlpZiAoIW1heF9jb3VudC0tKQotCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJZ290byBvdXQ7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7CiAJCQlpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKQotCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCQlnb3RvIG91dDsKIAkJCWxhc3RfYnJlYWsgPSBqaWZmaWVzOwogCQl9CiAKQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KQogCQkJaHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7CiAJCX0KIAl9Ci0gdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCiYjNDM7b3V0OgogCWlmICghdGhpc19yb3VuZF9jb3VudCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggYzU2YTdmOTFkNzJlMi4uZWEyMThkYzc1YWQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNjgzNCwxNSAmIzQzOzY4MzQsMTMgQEAgdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQogCX0KIAlwcl93YXJuKCYjMzQ7XG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKCFwLSZndDtsb2NrZGVwX2RlcHRoKQogCQkJY29udGludWU7CiAJCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhwKTsKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByX3dhcm4oJiMzNDtcbiYjMzQ7KTsKIAlwcl93YXJuKCYjMzQ7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtNTQ3LDE1ICYjNDM7NTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCXNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LgotCXJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHQgPT0gY3VycmVudCkKIAkJCWNvbnRpbnVlOyAgLy8gRG9uJiMzOTt0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyEKIAkJLy8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLgogCQl3aGlsZSAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3QtJmd0O3JjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpCiAJCQljb250aW51ZTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KTsKICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IGY3ODI3NTE5MjAzNmIuLjdmOWRiZDRjN2Q2MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjAxNSw4ICYjNDM7MjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZCkKIAlzbXBfbWJfX2FmdGVyX3NwaW5sb2NrKCk7CiAJcmVhZF91bmxvY2soJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAotCWd1YXJkKHJjdSkoKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKQomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApCiAJCXVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwppbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwpAQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KQogI2VuZGlmCiAJCSAgICYjMzQ7XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKHRhc2tfY3B1KHApICE9IHJxX2NwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXByaW50X3Rhc2sobSwgcnEsIHApOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmMKaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2ZncmFwaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguYwpAQCAtMTA1NywxMSAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpCiAJCX0KIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHN0YXJ0ID09IGVuZCkgewogCQkJcmV0ID0gLUVBR0FJTjsKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gZnJlZTsKIAkJfQogCiAJCWlmICh0LSZndDtyZXRfc3RhY2sgPT0gTlVMTCkgewpAQCAtMTA3NCw5ICYjNDM7MTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KQogCQkJdC0mZ3Q7cmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQmIzQzOyYjNDM7XTsKIAkJfQogCX0KLQotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZnJlZToKIAlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspCiAJCWttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2tfbGlzdFtpXSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMKaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYwpAQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKQogCiAJc3luY2hyb25pemVfc3JjdSgmYW1wO3Vud2luZF9zcmN1KTsKIAotCWd1YXJkKHJjdSkoKTsKIAkvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJYXRvbWljX2xvbmdfYW5kbm90KEJJVChiaXQpLAogCQkJCSAgICZhbXA7dC0mZ3Q7dW53aW5kX2luZm8udW53aW5kX21hc2spOwogCQlpZiAodC0mZ3Q7dW53aW5kX2luZm8uY2FjaGUpCmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMKaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDQKLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYwpAQCAtMjYsOCAmIzQzOzI2LDcgQEAgYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldCA9IGZhbHNlOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHsKIAkJaWYgKHVubGlrZWx5KHAtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKQogCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShwID09IHRhc2stJmd0O2dyb3VwX2xlYWRlcikpCkBAIC00OCw3ICYjNDM7NDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpCiAJfQogCXJldCA9IHRydWU7CiBmb3VuZDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJc3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS0mZ3Q7YW5vbl92bWE7CiAKIAkJYW5vbl92bWFfbG9ja19yZWFkKGF2KTsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQkJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLSZndDthZGRyZXNzICZhbXA7IFBBR0VfTUFTSzsKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tJmd0O2xpbmVhcl9wYWdlX2luZGV4OwpAQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJfQogCQkJfQogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwogCQlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NTUsOCAmIzQzOzU1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZXR1cm47CiAKIAlwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTsKQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQlhZGRfdG9fa2lsbF9hbm9uX2ZpbGUodCwgcGFnZSwgdm1hLCB0b19raWxsLCBhZGRyKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiB9CiAKQEAgLTU4OSw5ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcGdvZmZfdCBwZ29mZjsKIAogCWlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7Ci0JcmN1X3JlYWRfbG9jaygpOwogCXBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIApAQCAtNjExLDcgJiM0Mzs2MDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApAQCAtNjM1LDggJiM0Mzs2MzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJLyoKQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQlhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqLwpAQCAtMjI4OCw4ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLSZndDttYXBwaW5nOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpOwpAQCAtMjMwMyw3ICYjNDM7MjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCQkJCWFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jCkBAIC05NCw4ICYjNDM7OTQsNyBAQCBzdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQsCiAJYm9vbCByZXQgPSBmYWxzZTsKIAljb25zdCBub2RlbWFza190ICptYXNrID0gb2MtJmd0O25vZGVtYXNrOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3RocmVhZChzdGFydCwgdHNrKSB7CiYjNDM7CWZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHsKIAkJaWYgKG1hc2spIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGlzIGEgbWVtcG9saWN5IGNvbnN0cmFpbmVkIG9vbSwgdHNrJiMzOTtzCkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCwKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNjEsMTEgJiM0MzszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYykKIAllbHNlIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKQomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApCiAJCQlpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKQogCQkJCWJyZWFrOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAkJaW50IGkgPSAwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJLyogQXZvaWQgcG90ZW50aWFsIHNvZnRsb2NrdXAgd2FybmluZyAqLwogCQkJaWYgKCgmIzQzOyYjNDM7aSAmYW1wOyAxMDIzKSA9PSAwKQogCQkJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJCWR1bXBfdGFzayhwLCBvYyk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJICogYXJlIGR5aW5nIGFzIHdlbGwgdG8gbWFrZSBzdXJlIHRoYXQgYSkgbm9ib2R5IHBpbnMgaXRzIG1tIGFuZAogCSAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpCkBAIC04OTcsNyAmIzQzOzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCSAqIFRoYXQgdGhyZWFkIHdpbGwgbm93IGdldCBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIHNpbmNlIGl0IGhhcyBhCiAJICogcGVuZGluZyBmYXRhbCBzaWduYWwuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocCwgdmljdGltKSkKQEAgLTk3NSw3ICYjNDM7OTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCQkJY29udGludWU7CiAJCWRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoY2FuX29vbV9yZWFwKQogCQlxdWV1ZV9vb21fcmVhcGVyKHZpY3RpbSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYwppbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMKQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcykKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwpAQCAtMzkyLDkgJiM0MzszOTAsNyBAQCBzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcywKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzOiBSQ1UgTG9jayBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBkaWZmIGl0c2VsZi4gSXQgaW50cm9kdWNlcyB0aGVzZSBuZXcgbWFjcm9zIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYDogYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKWAsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KWAsIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KWAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgdXNlIG9mIGBzY29wZWRfZ3VhcmQocmN1KWAuIFRoYXQmIzM5O3MgbmVhdDsgYXV0b21hdGljIFJDVSByZWFkIGxvY2sgbWFuYWdlbWVudCBkdXJpbmcgaXRlcmF0aW9uLiBTb3VuZHMgbGlrZSBhIGdlbmVyYWxseSBwb3NpdGl2ZSBkaXJlY3Rpb24uCgpOb3cgZm9yIHRoZSByZWZhY3RvcmluZyBpdHNlbGYuIEl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbCDigJMgYW5kIHRoZSBhcmVhcyBpbXBhY3RlZCBhcmUgYnJvYWQ6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBga2VybmVsL2NwdS5jYCwgYGtlcm5lbC9mcmVlemVyLmNgLCBga2VybmVsL2h1bmdfdGFzay5jYCwgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AsIGBrZXJuZWwvcmN1L3VwZGF0ZS5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBga2VybmVsL3NjaGVkL2RlYnVnLmNgLCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCwgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AsIGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9vb21fa2lsbC5jYCwgYW5kIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYC4gVGhhdCYjMzk7cyBhIGxvdCBvZiBzdXJmYWNlIGFyZWEhCgpCZWZvcmUgSSBnZXQgdG9vIGV4Y2l0ZWQgYWJvdXQgdGhpcyByZWZhY3RvcmluZywgbGV0JiMzOTtzIHpvb20gb3V0LiBDb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gKlJlYWNoYWJsZSogcGF0aHMgYXJlIGNyaXRpY2FsLiAgYHByb2NmcyBvb21fYWRqYCwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgdGhlIE9PTSBraWxsZXIsIExhbmRsb2NrLCBhbmQgVFNZTkMgLSB0aGVzZSBhcmUgYWxsIGhpZ2gtdG91Y2ggYXJlYXMsIHNvIHRoZSByZWFjaGFiaWxpdHkgaXMgY2xlYXJseSBhIGNvbmNlcm4uIAoKVGhlIHBoaWxvc29waHkgYWxzbyBoYXMgc3Ryb25nIHdhcm5pbmdzIGFib3V0IGJsaW5kIHRydXN0LiBObyEgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWNhdGlvbnMgbmVlZCBmdXp6aW5nLiBBbmQsIHRoZSBtb2RpZmljYXRpb24gb2YgbG9ja2luZywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXM/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgZGFuZ2VyIGxpc3QhIFN0cnVjdHVyZSwgYWJzdHJhY3Rpb24sIGZsb3cgY2hhbmdlcyAtIHRoZXkgYWxsIG5lZWQgc2NydXRpbnkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGludG8gdGhlIHRlY2huaWNhbCB3ZWVkcyBmb3IgYSBzZWNvbmQgYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbiBhbmQgYHNjb3BlZF9ndWFyZGAmIzM5O3MgbWVjaGFuaWNzLiBBbmQsIGxldCYjMzk7cyBsb29rIGF0IGBrZXJuZWwvaHVuZ190YXNrLmNgLiBXYWl0ISBUaGUgY2hhbmdlIHRoZXJlLi4uCmBgYGMKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKCFtYXhfY291bnQtLSkKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gb3V0OwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2JyZWFrICYjNDM7IEhVTkdfVEFTS19MT0NLX0JSRUFLKSkgewogCQkJaWYgKCFyY3VfbG9ja19icmVhayhnLCB0KSkKLQkJCQlnb3RvIHVubG9jazsKJiM0MzsJCQkJZ290byBvdXQ7CiAJCQlsYXN0X2JyZWFrID0gamlmZmllczsKIAkJfQouLi4KYGBgCgpSaWdodCwgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkYCB3aXRoIHRoZSBuZXcgbWFjcm8uIEJ1dC4uLiB3aGF0ICpleGFjdGx5KiBkb2VzIGByY3VfbG9ja19icmVhayhnLCB0KWAgZG8/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwgdGhhdCBuZWVkcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGdyZXAgdGhlIGNvZGViYXNlIG9yIHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgaW1wbGljYXRpb25zIGluIHRoaXMgY29udGV4dC4gVGhpcyByZWZhY3RvciAqY291bGQqIGJlIGZpbmUsIGJ1dCB0aGUgZGV2aWxzIGluIHRob3NlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X2xvY2tfYnJlYWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvaHVuZ190YXNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2h1bmdfdGFzay5jPTIzNT1zdGF0aWMgdm9pZCBodW5nX3Rhc2tfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCxcbi0tXG5rZXJuZWwvaHVuZ190YXNrLmMtMjgwLSAqL1xua2VybmVsL2h1bmdfdGFzay5jOjI4MTpzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbmtlcm5lbC9odW5nX3Rhc2suYy0yODIte1xuLS1cbmtlcm5lbC9odW5nX3Rhc2suYz0zMDE9c3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuLS1cbmtlcm5lbC9odW5nX3Rhc2suYy0zMjEtXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7XG5rZXJuZWwvaHVuZ190YXNrLmM6MzIyOlx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG5rZXJuZWwvaHVuZ190YXNrLmMtMzIzLVx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcmN1X2xvY2tfYnJlYWtgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvaHVuZ190YXNrLmNgLiBNeSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGNvbnRleHQuIGBodW5nX3Rhc2suY2AuLi50aGF0IHNjcmVhbXMgZGVidWdnaW5nLCBzcGVjaWZpY2FsbHkgaWRlbnRpZnlpbmcgdW5yZXNwb25zaXZlIHRhc2tzLiBBbmQgJiMzNDtyY3VfbG9ja19icmVhayYjMzQ7PyBUaGF0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gaW50ZXJydXB0aW5nIG9yIGNpcmN1bXZlbnRpbmcgUkNVIGxvY2tzIGluIGEgc2NlbmFyaW8gd2hlcmUgYSB0YXNrIGhhcyBwb3RlbnRpYWxseSBiZWNvbWUgd2VkZ2VkLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gdGhlIG1lY2hhbmlzbSB0aGF0IHRoZSBrZXJuZWwgZW1wbG95cyB0byBkZXRlY3QgYW5kIGhhbmRsZSB0YXNrcyB0aGF0IGFyZSBzdHVjayB3YWl0aW5nIGZvciBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdG8gY29tcGxldGUsIHBvdGVudGlhbGx5IGluZGljYXRpbmcgYSBkZWFkbG9jayBvciBsaXZlbG9jayBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkLCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIGludGVycnVwdGluZyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFuZCB3aGF0IHJlY292ZXJ5IGFjdGlvbnMgdGhpcyBmdW5jdGlvbiBtaWdodCB0cmlnZ2VyLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyB0aGUgc2FmZXR5IGFuZCBlZmZpY2llbmN5IGNvbnNpZGVyYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2h1bmdfdGFzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHQgKiBUbyBhdm9pZCBleHRlbmRpbmcgdGhlIFJDVSBncmFjZSBwZXJpb2QgZm9yIGFuIHVuYm91bmRlZCBhbW91bnQgb2YgdGltZSxcbiAyNzY6XHQgKiBwZXJpb2RpY2FsbHkgZXhpdCB0aGUgY3JpdGljYWwgc2VjdGlvbiBhbmQgZW50ZXIgYSBuZXcgb25lLlxuIDI3NzpcdCAqXG4gMjc4Olx0ICogRm9yIHByZWVtcHRpYmxlIFJDVSBpdCBpcyBzdWZmaWNpZW50IHRvIGNhbGwgcmN1X3JlYWRfdW5sb2NrIGluIG9yZGVyXG4gMjc5Olx0ICogdG8gZXhpdCB0aGUgZ3JhY2UgcGVyaW9kLiBGb3IgY2xhc3NpYyBSQ1UsIGEgcmVzY2hlZHVsZSBpcyByZXF1aXJlZC5cbiAyODA6XHQgKi9cbiAyODE6XHRzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiAyODI6XHR7XG4gMjgzOlx0XHRib29sIGNhbl9jb250O1xuIDI4NDpcdFxuIDI4NTpcdFx0Z2V0X3Rhc2tfc3RydWN0KGcpO1xuIDI4NjpcdFx0Z2V0X3Rhc2tfc3RydWN0KHQpO1xuIDI4NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMjg4Olx0XHRjb25kX3Jlc2NoZWQoKTtcbiAyODk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyOTA6XHRcdGNhbl9jb250ID0gcGlkX2FsaXZlKGcpIFx1MDAyNlx1MDAyNiBwaWRfYWxpdmUodCk7XG4gMjkxOlx0XHRwdXRfdGFza19zdHJ1Y3QodCk7XG4gMjkyOlx0XHRwdXRfdGFza19zdHJ1Y3QoZyk7XG4gMjkzOlx0XG4gMjk0Olx0XHRyZXR1cm4gY2FuX2NvbnQ7XG4gMjk1Olx0fVxuIDI5NjpcdFxuIDI5NzpcdC8qXG4gMjk4Olx0ICogQ2hlY2sgd2hldGhlciBhIFRBU0tfVU5JTlRFUlJVUFRJQkxFIGRvZXMgbm90IGdldCB3b2tlbiB1cCBmb3JcbiAyOTk6XHQgKiBhIHJlYWxseSBsb25nIHRpbWUuIElmIHRoYXQgaGFwcGVucywgcHJpbnQgb3V0IGEgd2FybmluZy5cbiAzMDA6XHQgKi9cbiAzMDE6XHRzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gMzAyOlx0e1xuIDMwMzpcdFx0aW50IG1heF9jb3VudCA9IHN5c2N0bF9odW5nX3Rhc2tfY2hlY2tfY291bnQ7XG4gMzA0Olx0XHR1bnNpZ25lZCBsb25nIGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xuIDMwNTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDtcbiAzMDY6XHRcdHVuc2lnbmVkIGxvbmcgdGhpc19yb3VuZF9jb3VudDtcbiAzMDc6XHRcdGludCBuZWVkX3dhcm5pbmcgPSBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzO1xuIDMwODpcdFx0dW5zaWduZWQgbG9uZyBzaV9tYXNrID0gaHVuZ190YXNrX3NpX21hc2s7XG4gMzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaDogQ29yZSBTdWJzeXN0ZW0gSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlc2UgbG9ja2luZyBtYWNyb3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIGNvbnN0cnVjdCBhbmQgbm93IGl0cyBgcmN1bG9ja2AgdmFyaWFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBhbmQgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgZG91YmxlIGxvb3AuIFRoZW4sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkb3VibGUgbG9vcCB0byB1c2UgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLgoKT2theSwgc28gYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgIHV0aWxpemVzIGEgYHNjb3BlZF9ndWFyZChyY3UpYC4gTm93IEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGJyZWFrYCB3aXRoaW4gdGhlIGxvb3BzIGlzIGJlaGF2aW5nIGNvcnJlY3RseS4gTXkgY29uY2VybiBub3cgaXMgYWJvdXQgaG93IHRoYXQgYGJyZWFrYCBhZmZlY3RzIHRoZSBSQ1UgbG9jayYjMzk7cyBzY29wZS4gRG9lcyBpdCBnZXQgcmVsZWFzZWQgd2hlbiB0aGUgZ3VhcmQgc2NvcGUgaXMgbGVmdCwgZXZlbiBpZiB0aGUgaW5uZXIgbG9vcCBicmVha3MgZWFybHk/IEJhc2VkIG9uIHRoZSBtYWNybyBkZWZpbml0aW9uLCB0aGUgYGJyZWFrYCB3b3VsZCBvbmx5IGV4aXQgdGhlIGlubmVyIGxvb3AsIGNvbnRpbnVpbmcgdGhlIG91dGVyIHByb2Nlc3MgbG9vcCwgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIHdoZW4gdGhlIGBzY29wZWRfZ3VhcmRgIHNjb3BlIGVuZHMuIFRoZSBvbGQgY29kZSBhbmQgdGhlIHBhdGNoIGFyZSBkb2luZyB0aGUgc2FtZSB0aGluZy4KCk15IGNvbmNlcm4gaXMgbm93LCBkb2VzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgZml4IGFueXRoaW5nPyBNeSBjb25jZXJuIGlzIGFsc28gdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgYmVjYXVzZSBvZiB0aGUgbG9jayByZWxlYXNlIGJlaW5nIGluZGVwZW5kZW50IG9mIHRoZSBsb29wIGV4aXQuCgpCdXQgaGV5LCB3YWl0IGEgc2Vjb25kLiBUaGlzIGNoYW5nZSBpc24mIzM5O3QganVzdCBhIG1pbm9yIHR3ZWFrLiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyB2YXJpb3VzIGNvcmUgc3Vic3lzdGVtcywgbGlrZSB0aGUgc2NoZWR1bGVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHByb2NmcywgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGlzIGEgV29ydGhGdXp6aW5nPXRydWUgc2NlbmFyaW8hIGBmcy9wcm9jL2Jhc2UuY2AsIGBtbS9vb21fa2lsbC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0va3NtLmNgLCBhbmQgYHNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNgIGFyZSBhbGwgYWZmZWN0ZWQsIGFuZCB0aGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYCBmaWxlLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIGludGVyZXN0aW5nIGJ1Z3MhIFNvLCBpdOKAmXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB0b3VjaGVzIGNvcmUgYXJlYXMhCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBGaXJzdCB1cCBpcyBgZnMvcHJvYy9iYXNlLmNgIGFuZCBpdHMgYF9fc2V0X29vbV9hZGpgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3NldF9vb21fYWRqYCBmb3IgYSBiZXR0ZXIgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NldF9vb21fYWRqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTA4NT1zdGF0aWMgc3NpemVfdCBvb21fYWRqX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMTA2LVxuZnMvcHJvYy9iYXNlLmM6MTEwNzpzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbmZzL3Byb2MvYmFzZS5jLTExMDgte1xuLS1cbmZzL3Byb2MvYmFzZS5jPTExOTg9c3RhdGljIHNzaXplX3Qgb29tX2Fkal93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMjI5LVxuZnMvcHJvYy9iYXNlLmM6MTIzMDpcdGVyciA9IF9fc2V0X29vbV9hZGooZmlsZSwgb29tX2FkaiwgdHJ1ZSk7XG5mcy9wcm9jL2Jhc2UuYy0xMjMxLW91dDpcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjU3PXN0YXRpYyBzc2l6ZV90IG9vbV9zY29yZV9hZGpfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTI3OS1cbmZzL3Byb2MvYmFzZS5jOjEyODA6XHRlcnIgPSBfX3NldF9vb21fYWRqKGZpbGUsIG9vbV9zY29yZV9hZGosIGZhbHNlKTtcbmZzL3Byb2MvYmFzZS5jLTEyODEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgT09NIGtpbGxlciYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkb3VibGUtY2hlY2sgYG1tL29vbV9raWxsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgb29tX2NwdXNldF9lbGlnaWJsZWAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgZHVtcF90YXNrc2AsIGB0YXNrX3dpbGxfZnJlZV9tZW1gLCBhbmQsIGNydWNpYWxseSwgYF9fb29tX2tpbGxfcHJvY2Vzc2AsIGFuZCBob3cgdGhleSYjMzk7cmUgb3JjaGVzdHJhdGVkLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGVudHJ5IHBvaW50IG9mIGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIE9PTSBsb2dpYyBsaWVzLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBMYW5kbG9jayB0c3luYyBzaXR1YXRpb24uIElzIHRoZSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYD8gT2theSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmaWxlIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBhbmQgYHNjaGVkdWxlX3Rhc2tfd29ya2AgaW4gcmVsYXRpb24gdG8gdHN5bmMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBMYW5kbG9jayBzeW5jaHJvbml6YXRpb24gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkdWxlX3Rhc2tfd29ya3xjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz0zMjQ9c3RhdGljIHZvaWQgdHN5bmNfd29ya3NfcmVsZWFzZShzdHJ1Y3QgdHN5bmNfd29ya3MgKnMpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDQtLypcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ1OiAqIGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyAtIGNvdW50cyB0aGUgc2libGluZyB0aHJlYWRzIHRoYXQgYXJlIG5vdCBpbiB3b3Jrc1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDYtICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM0NzpzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDgte1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzcyLS8qXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM3MzogKiBzY2hlZHVsZV90YXNrX3dvcmsgLSBhZGRzIHRhc2tfd29yayBmb3IgYWxsIGVsaWdpYmxlIHNpYmxpbmcgdGhyZWFkc1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNzQtICogICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaGF2ZSBub3QgYmVlbiBzY2hlZHVsZWQgeWV0XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODEtICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM4MjpzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcyxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzgzLVx0XHRcdCAgICAgICBzdHJ1Y3QgdHN5bmNfc2hhcmVkX2NvbnRleHQgKnNoYXJlZF9jdHgpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz00ODE9aW50IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkX2NyZWQsXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01NTAtXHRcdC8qIEluIFJDVSByZWFkLWxvY2ssIGNvdW50IHRoZSB0aHJlYWRzIHdlIG5lZWQuICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjU1MTpcdFx0bmV3bHlfZGlzY292ZXJlZF90aHJlYWRzID0gY291bnRfYWRkaXRpb25hbF90aHJlYWRzKFx1MDAyNndvcmtzKTtcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTUyLVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTgwLVx0XHQgKi9cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6NTgxOlx0XHRmb3VuZF9tb3JlX3RocmVhZHMgPSBzY2hlZHVsZV90YXNrX3dvcmsoXHUwMDI2d29ya3MsIFx1MDAyNnNoYXJlZF9jdHgpO1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFNpbmdsZS1UaHJlYWRlZCBFeGVjdXRpb24qKgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaW5nbGUtdGhyZWFkZWQgYXNwZWN0IG9mIHRoaXMgY29kZS4gRmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9uIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBpbmZsdWVuY2luZyB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmg9NjMzPWV4dGVybiB2b2lkIGZsdXNoX2l0aW1lcl9zaWduYWxzKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgtNjQzLVxuaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaDo2NDQ6ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0NS1cbi0tXG5rZXJuZWwvZm9yay5jPTMxNTk9c3RhdGljIGludCBjaGVja191bnNoYXJlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncylcbi0tXG5rZXJuZWwvZm9yay5jLTMxNzktXHRpZiAodW5zaGFyZV9mbGFncyBcdTAwMjYgQ0xPTkVfVk0pIHtcbmtlcm5lbC9mb3JrLmM6MzE4MDpcdFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxua2VybmVsL2ZvcmsuYy0zMTgxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE5MT1zdGF0aWMgaW50IHRpbWVuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5ldylcbi0tXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xOTUtXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYzoxOTY6XHRpZiAoIWN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKCkpXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xOTctXHRcdHJldHVybiAtRVVTRVJTO1xuLS1cbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNC0gKi9cbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYzoxNTpib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG5saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMtMTYte1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jPTE0ODQ9aW50IGFhX2NoYW5nZV9wcm9maWxlKGNvbnN0IGNoYXIgKmZxbmFtZSwgaW50IGZsYWdzKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jLTE1ODctXHQvKiBUT0RPOiBhZGQgcGVybWlzc2lvbiBjaGVjayB0byBhbGxvdyB0aGlzXG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYzoxNTg4Olx0ICogaWYgKChmbGFncyBcdTAwMjYgQUFfQ0hBTkdFX09ORVhFQykgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYy0xNTg5LVx0ICogICAgICBpbmZvID0gXCYjMzQ7bm90IGEgc2luZ2xlIHRocmVhZGVkIHRhc2tcJiMzNDs7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3NDQ9c3RhdGljIGludCBzZWxpbnV4X2xzbV9zZXRhdHRyKHU2NCBhdHRyLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY4NTEtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Njg1MjpcdFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1My1cdFx0XHRlcnJvciA9IHNlY3VyaXR5X2JvdW5kZWRfdHJhbnNpdGlvbihjcnNlYy1cdTAwM2VzaWQsIHNpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIGxvY2F0aW9ucyBmb3IgdGhpcyB0YXNrLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBhIGZldyBsaWtlbHkgZmlsZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBkZWFsaW5nIHdpdGggcHJvY2VzcyBtYW5hZ2VtZW50LCBtZW1vcnkgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSBjb250cm9sLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIGZ1bmN0aW9uczoKCiogICBgbW0va3NtLmNgOiBJIHNob3VsZCBjaGVjayB0aGUgYGNvbGxlY3RfcHJvY3Nfa3NtYCBmdW5jdGlvbiB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGxlYWRzCiogICBgbW0vbWVtb3J5LWZhaWx1cmUuY2A6IEkmIzM5O2xsIGxvb2sgaW50byBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGNvbGxlY3RfcHJvY3NfZmlsZWAsIGBjb2xsZWN0X3Byb2NzX2ZzZGF4YCwgYW5kIGBjb2xsZWN0X3Byb2NzX3BmbmAuCiogICBgZnMvcmVzY3RybC9yZHRncm91cC5jYDogSSYjMzk7bGwgd2FudCB0byByZXZpZXcgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBhbmQgYHNob3dfcmR0X3Rhc2tzYC4KKiAgIGBrZXJuZWwvZnJlZXplci5jYDogSSYjMzk7bGwgY2hlY2sgYHRoYXdfcHJvY2Vzc2AuCiogICBga2VybmVsL3NjaGVkL2NvcmUuY2A6IEkgc2hvdWxkIGNoZWNrIGB1Y2xhbXBfc3luY191dGlsX21pbl9ydF9kZWZhdWx0YC4KKiAgIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgOiBJIG5lZWQgdG8gbG9vayBpbnRvIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAuCiogICBga2VybmVsL2h1bmdfdGFzay5jYDogSSBzaG91bGQgbG9vayBpbnRvIGBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrc2AuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHdpbGwgbmVlZCB0byBjaGVjayBLY29uZmlnIGZpbGVzIGZvciBtYWNyb3MgYW5kIGRlcGVuZGVuY2llcywga2VlcGluZyBpbiBtaW5kIHRoYXQgYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgIGlzIGxpa2VseSBpbnZvbHZlZC4gVGhlIG1vZGlmaWVkIGZpbGVzIEkgc2hvdWxkIGxvb2sgYXQ6CgoqICAgYGZzL3Byb2MvYmFzZS5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19QUk9DX0ZTYAoqICAgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfUkVTQ1RSTF9GU2AgYW5kIGBDT05GSUdfWDg2X0NQVV9SRVNDVFJMYC4gSXQgaXMgaW1wb3J0YW50IHRvIGFsc28gY2hlY2sgYEtjb25maWdgIGZvciBgZnMvcmVzY3RybGAuCiogICBga2VybmVsL2h1bmdfdGFzay5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19ERVRFQ1RfSFVOR19UQVNLYC4KKiAgIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX0xPQ0tERVBgLgoqICAgYG1tL2tzbS5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19LU01gLgoqICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4KKiAgIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgZnMvcmVzY3RybGAgdG8gc2VlIHdoYXQgZWxzZSBJIGNhbiBnbGVhbiBmcm9tIHRoZXJlLiBJIGFtIHJlYWR5IHRvIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHRncm91cC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcmVzY3RybC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVzY3RybC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmZzL3Jlc2N0cmwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkVTQ1RSTF9GUylcdFx0JiM0Mzs9IHJkdGdyb3VwLm8gY3RybG1vbmRhdGEubyBtb25pdG9yLm9cbmZzL3Jlc2N0cmwvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfUkVTQ1RSTF9GU19QU0VVRE9fTE9DSylcdCYjNDM7PSBwc2V1ZG9fbG9jay5vXG4tLVxuZnMvcmVzY3RybC9yZHRncm91cC5jPTMwMTY9c3RhdGljIHZvaWQgcm1kaXJfYWxsX3N1Yih2b2lkKVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI2LVxuZnMvcmVzY3RybC9yZHRncm91cC5jOjMwMjc6XHRcdC8qIFJlbW92ZSBlYWNoIHJkdGdyb3VwIG90aGVyIHRoYW4gcm9vdCAqL1xuZnMvcmVzY3RybC9yZHRncm91cC5jLTMwMjgtXHRcdGlmIChyZHRncnAgPT0gXHUwMDI2cmR0Z3JvdXBfZGVmYXVsdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTGFuZGxvY2sgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlYC4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dCwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyB0aGluZ3MsIGJ1dCBhIGZyZXNoIHBlcnNwZWN0aXZlIG5ldmVyIGh1cnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgYnVpbHQsIGhvdyB0aGUgdGFyZ2V0cyBhcmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcmVjZW50IGNoYW5nZXMsIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIG9yIHRoZSBzZWN1cml0eSBwb3N0dXJlIG9mIExhbmRsb2NrIGl0c2VsZi4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IHRhcmdldHMg4oCTIHRoZSBrZXJuZWwgbW9kdWxlIGJ1aWxkLCBhbnkgdXNlci1zcGFjZSB0b29scywgYW5kIHRoZSByZWxldmFudCBpbmNsdWRlIHBhdGhzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3Mgcm9idXN0IGFuZCBzZWN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RzeW5jLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGU9Mz1sYW5kbG9jay15IDo9IFxcXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGUtMTAtXHRmcy5vIFxcXG5zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZToxMTpcdHRzeW5jLm8gXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEyLVx0ZG9tYWluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGZncmFwaC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBzaG91bGQgSSBzdGFydCBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIHRyYWNpbmcgYmVoYXZpb3I/IE15IGd1dCB0ZWxscyBtZSB0aGF0IGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgIGlzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gVGhhdCBmaWxlJiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhvb2tzIHRoYXQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBzbyB0aGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZncmFwaC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTI9b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICYjNDM7PSBibGt0cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTM6b2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IGZncmFwaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTQtaWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQxLSAqIEZvciB0eXBlIHdpdGggXCYjMzQ7Yml0bWFwIG9mIGZncmFwaF9hcnJheSBpbmRleFwmIzM0OyAoRkdSQVBIX1RZUEVfQklUTUFQKTpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MjogKiAgYml0czogMTIgLSAyN1x0VGhlIGJpdG1hcCBvZiBmZ3JhcGhfb3BzIGZncmFwaF9hcnJheSBpbmRleFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQzLSAqXHRcdFx0VGhhdCBpcywgaXQmIzM5O3MgYSBiaXRtYXNrIG9mIDAtMTUgKDE2IGJpdHMpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU2LSAqIFRoYXQgaXMsIGF0IHRoZSBlbmQgb2YgZnVuY3Rpb25fZ3JhcGhfZW50ZXIsIGlmIHRoZSBmaXJzdCBhbmQgZm9ydGhcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1NzogKiBmZ3JhcGhfb3BzIG9uIHRoZSBmZ3JhcGhfYXJyYXlbXSAoaW5kZXggMCBhbmQgMykgbmVlZHMgdGhlaXIgcmV0ZnVuYyBjYWxsZWRcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1ODogKiBvbiB0aGUgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQsIGFuZCB0aGUgZm9ydGggZmdyYXBoX29wc1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU5LSAqIHN0b3JlZCB0d28gd29yZHMgb2YgZGF0YSwgdGhpcyBpcyB3aGF0IHdpbGwgYmUgb24gdGhlIHRhc2smIzM5O3Mgc2hhZG93XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTcxLSAqIHwgICAgICAgICAqb3IgcHV0IGFub3RoZXIgd2F5KiAgICAgICAgICAgICAgIHxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo3MjogKiB8ICgzIFx1MDAzY1x1MDAzYyBGR1JBUEhfREFUQV9JTkRFWF9TSElGVCl8IFxcICAgICAgICAgIHwgVGhpcyBpcyBmb3IgZmdyYXBoX29wc1szXS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy03My0gKiB8ICgoMiAtIDEpIFx1MDAzY1x1MDAzYyBGR1JBUEhfREFUQV9TSElGVCl8IFxcICAgICAgICAgIHwgVGhlIGRhdGEgc2l6ZSBpcyAyIHdvcmRzLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTU9ZW51bSB7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2NS0vKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE2NjogKiBFYWNoIGZncmFwaF9vcHMgaGFzIGEgcmVzZXJ2ZWQgdW5zaWduZWQgbG9uZyBhdCB0aGUgZW5kICh0b3ApIG9mIHRoZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2Ny0gKiByZXRfc3RhY2sgdG8gc3RvcmUgdGFzayBzcGVjaWZpYyBzdGF0ZS5cbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTc1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmdyYXBoX3N0YWNrX2NhY2hlcDtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzYtXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTc3OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyAqZmdyYXBoX2FycmF5W0ZHUkFQSF9BUlJBWV9TSVpFXTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgZmdyYXBoX2FycmF5X2JpdG1hc2s7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTI4Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9kYXRhX3R5cGVfdmFsKGludCBpZHgsIGludCBzaXplLCBpbnQgb2Zmc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0yOTQtLyogZnRyYWNlX2dyYXBoX2VudHJ5IHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoyOTU6c3RhdGljIGludCBlbnRyeV9ydW4oc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5Ni1cdFx0ICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMDEtLyogZnRyYWNlX2dyYXBoX3JldHVybiBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzAyOnN0YXRpYyB2b2lkIHJldHVybl9ydW4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTMyMj1zdGF0aWMgdm9pZCByZXRfc3RhY2tfaW5pdF90YXNrX3ZhcnModW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzQtICogUmVzZXJ2ZXMgc3BhY2Ugb2YgdXAgdG8gRkdSQVBIX01BWF9EQVRBX1NJWkUgYnl0ZXMgb24gdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM1OiAqIHRhc2smIzM5O3MgcmV0X3N0YWNrIHNoYWRvdyBzdGFjaywgZm9yIGEgZ2l2ZW4gZmdyYXBoX29wcyBkdXJpbmdcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzYtICogdGhlIGVudHJ5ZnVuYygpIGNhbGwuIElmIGVudHJ5ZnVuYygpIHJldHVybnMgemVybywgdGhlIHN0b3JhZ2Vcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzctICogaXMgZGlzY2FyZGVkLiBBbiBlbnRyeWZ1bmMoKSBjYW4gb25seSBjYWxsIHRoaXMgb25jZSBwZXIgaXRlcmF0aW9uLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzODogKiBUaGUgZmdyYXBoX29wcyByZXRmdW5jKCkgY2FuIHJldHJpZXZlIHRoaXMgc3RvcmVkIGRhdGEgd2l0aFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzOS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSgpLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zNDY9dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzgxLSAqIGZncmFwaF9yZXRyaWV2ZV9kYXRhIC0gUmV0cmlldmUgc3RvcmVkIGRhdGEgZnJvbSBmZ3JhcGhfcmVzZXJ2ZV9kYXRhKClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODI6ICogQGlkeDpcdHRoZSBpbmRleCBvZiBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODMtICogQHNpemVfYnl0ZXM6IHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODQtICpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODU6ICogVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgYSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSwgdG8gcmV0cmlldmUgZGF0YSB0aGF0XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg2OiAqIHdhcyBzdG9yZWQgYnkgdGhlIGZncmFwaF9vcHMgZW50cnlmdW5jKCkgb24gdGhlIGZ1bmN0aW9uIGVudHJ5Llxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4Ny0gKiBUaGF0IGlzLCB0aGlzIHdpbGwgcmV0cmlldmUgdGhlIGRhdGEgdGhhdCB3YXMgcmVzZXJ2ZWQgb24gdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg4LSAqIGVudHJ5IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBleGl0IG9mIHRoZSBmdW5jdGlvblxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4OTogKiB0aGF0IHRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBpcyBjYWxsZWQgb24uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzkwLSAqXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM5NT12b2lkICpmZ3JhcGhfcmV0cmlldmVfZGF0YShpbnQgaWR4LCBpbnQgKnNpemVfYnl0ZXMpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwMy0gKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQwNDogKiBFdmVyeSByZWdpc3RlcmVkIGZncmFwaF9vcHMgaGFzIGEgdGFzayBzdGF0ZSB2YXJpYWJsZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNS0gKiByZXNlcnZlZCBvbiB0aGUgdGFzayYjMzk7cyByZXRfc3RhY2suIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGVcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA3LSAqXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA4OiAqIFJldHVybnMgdGhlIGFkZHJlc3MgdG8gdGhlIGZncmFwaF9vcHMgQGdvcHMgdGFza3Mgc3BlY2lmaWNcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDktICogdW5zaWduZWQgbG9uZyB2YXJpYWJsZS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTAtICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDExOnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEyLXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NDM0PWdldF9yZXRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgb2Zmc2V0LCBpbnQgKmZyYW1lX29mZnNldClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU0LSAqIGZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YSAtIGdldCBkYXRhIGZyb20gYSBwYXJlbnQgZnVuY3Rpb25cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0NTU6ICogQGlkeDogVGhlIGluZGV4IGludG8gdGhlIGZncmFwaF9hcnJheSAoZmdyYXBoX29wczo6aWR4KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1Ni0gKiBAc2l6ZV9ieXRlczogQSBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemVcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTIxPWludCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTIyOlx0XHRcdCAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MjMtXHRcdFx0ICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyOD1zdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfcmV0X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUyOTpcdFx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTMwLVx0XHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzMtXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTM0OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfc3R1YiA9IHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzUtXHQuZW50cnlmdW5jID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzOC1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mzk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfZGlyZWN0X2dvcHMgPSBcdTAwMjZmZ3JhcGhfc3R1Yjtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01NDAtREVGSU5FX1NUQVRJQ19DQUxMKGZncmFwaF9mdW5jLCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1Yik7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTY1Mj1pbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODYtXHRcdFx0XHRcdCBzaXplb2YoZmdyYXBoX2FycmF5X2JpdG1hc2spICogQklUU19QRVJfQllURSkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjY4NzpcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyA9IFJFQURfT05DRShmZ3JhcGhfYXJyYXlbaV0pO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4OC1cdFx0XHRpbnQgc2F2ZV9jdXJyX3JldF9zdGFjaztcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9ODEyPV9fZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MsIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcilcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU2LVx0XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmJpdG1hcCwgc2l6ZW9mKGJpdG1hcCkgKiBCSVRTX1BFUl9CWVRFKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6ODU3Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU4LVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDEyPXZvaWQgZmdyYXBoX2luaXRfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICpkc3Rfb3BzLFxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDMxLSAqL1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwMzI6dm9pZCBmdHJhY2Vfc3R1Yl9ncmFwaChzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzMtXHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTE5Mj1zdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE5MzpcdFx0XHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTk0LVx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMTE9dm9pZCBmZ3JhcGhfdXBkYXRlX3BpZF9mdW5jKHZvaWQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxMi17XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTIxMzpcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTQtXHRzdHJ1Y3QgZnRyYWNlX29wcyAqb3A7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjAtXHRcdGlmIChvcC1cdTAwM2VmbGFncyBcdTAwMjYgRlRSQUNFX09QU19GTF9QSUQpIHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjIxOlx0XHRcdGdvcHMgPSBjb250YWluZXJfb2Yob3AsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjItXHRcdFx0Z29wcy1cdTAwM2VlbnRyeWZ1bmMgPSBmdHJhY2VfcGlkc19lbmFibGVkKG9wKSA/XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyNjQ9c3RhdGljIHZvaWQgaW5pdF90YXNrX3ZhcnMoaW50IGlkeClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4MS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjgyOnN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9lbmFibGVfZGlyZWN0KGJvb2wgZW5hYmxlX2JyYW5jaCwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4My17XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEzMjU9c3RhdGljIGludCBmZ3JhcGhfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzMS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMzMyOmludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzMy17XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTMtXHRpZiAoIWZncmFwaF9pbml0aWFsaXplZCkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzNTQ6XHRcdHJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O2ZncmFwaDpvbmxpbmVcJiMzNDssXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTM1NS1cdFx0XHRcdFx0ZmdyYXBoX2NwdV9pbml0LCBOVUxMKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyMS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNDIyOnZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyMy17XG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTQ3PXN0YXRpYyBERUZJTkVfTVVURVgoZnByb2JlX211dGV4KTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo0ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2JlX2dyYXBoX29wcztcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy00OS1cbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjAxPXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX2Zwcm9iZV9oZWFkZXIodW5zaWduZWQgbG9uZyAqc3RhY2ssXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTIxMy0gKiBmcHJvYmUgc2hhZG93IHN0YWNrIG1hbmFnZW1lbnQ6XG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjE0OiAqIFNpbmNlIGZwcm9iZSBzaGFyZXMgYSBzaW5nbGUgZmdyYXBoX29wcywgaXQgbmVlZHMgdG8gc2hhcmUgdGhlIHN0YWNrIGVudHJ5XG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjE1LSAqIGFtb25nIHRoZSBwcm9iZXMgb24gdGhlIHNhbWUgZnVuY3Rpb24gZXhpdC4gTm90ZSB0aGF0IGEgbmV3IHByb2JlIGNhbiBiZVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMzE9c3RhdGljIGlubGluZSBpbnQgX19mcHJvYmVfa3Byb2JlX2hhbmRsZXIodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1Mi1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTM6c3RhdGljIGludCBmcHJvYmVfZmdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yNTU9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU2Olx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU3LVx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU4LVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1OTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2JlX2dyYXBoX29wcyA9IHtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNjAtXHQuZW50cnlmdW5jXHQ9IGZwcm9iZV9mZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTUzNj1zdGF0aWMgdm9pZCBmcHJvYmVfcmVtb3ZlX2lwcyh1bnNpZ25lZCBsb25nICppcHMsIHVuc2lnbmVkIGludCBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTU0NS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDY6LyogZmdyYXBoX29wcyBjYWxsYmFjaywgdGhpcyBwcm9jZXNzZXMgZnByb2JlcyB3aGljaCBoYXZlIGV4aXRfaGFuZGxlci4gKi9cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDc6c3RhdGljIGludCBmcHJvYmVfZmdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTQ4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz02NDM9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NjQ0Olx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNjQ1LVx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQxPXN0YXRpYyBpbnQgcHJvZmlsZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQyOlx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDMtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg2Nj1zdGF0aWMgdm9pZCBwcm9maWxlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODY3Olx0XHRcdFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg2OC1cdFx0XHRcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05MTYtXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTE3OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvZmlsZXJfb3BzID0ge1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxOC1cdC5lbnRyeWZ1bmMgPSBcdTAwMjZwcm9maWxlX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz00NDUxPXN0YXRpYyB2b2lkIHByaW50X3N1Ym9wcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjUtXHRcdGlmIChzdWJvcHMtXHUwMDNlZmxhZ3MgXHUwMDI2IEZUUkFDRV9PUFNfRkxfR1JBUEgpIHtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo0NDY2Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjctXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2ODpcdFx0XHRnb3BzID0gY29udGFpbmVyX29mKHN1Ym9wcywgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2OS1cdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyB7ZW50OiVwUyByZXQ6JXBTfVwmIzM0Oyxcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQ5Nz1fX2luaXQgdm9pZCBmdHJhY2VfaW5pdF9nbG9iYWxfYXJyYXlfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1MDItXHRmdHJhY2VfaW5pdF90cmFjZV9hcnJheSh0cik7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODUwMzpcdGluaXRfYXJyYXlfZmdyYXBoX29wcyh0ciwgdHItXHUwMDNlb3BzKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTA0LX1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zMzM9c3RydWN0IHRyYWNlX2FycmF5IHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC00MzctI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJcbmtlcm5lbC90cmFjZS90cmFjZS5oOjQzODpcdHN0cnVjdCBmZ3JhcGhfb3BzXHQqZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzOS0jZW5kaWZcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD04MTc9dm9pZCBwcmludF90cmFjZV9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtODE4LVxua2VybmVsL3RyYWNlL3RyYWNlLmg6ODE5OnZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjAtXHRcdFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MjE6aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjItXHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEwNjA9ZXh0ZXJuIHZvaWQgX190cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IHRyYWNlX2FycmF5ICp0cixcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY0LVxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTA2NTpleHRlcm4gdm9pZCBpbml0X2FycmF5X2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY2OmV4dGVybiBpbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjc6ZXh0ZXJuIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtMTA2OC1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMTYzPXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTE2NDpmdHJhY2VfZ3JhcGhfYWRkcl9maW5pc2goc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTExNjUte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMDE9c3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2dyYXBoX25vdHJhY2VfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNC19XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjA1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfYWRkcl9maW5pc2goc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDYteyB9XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIxMz1zdGF0aWMgaW5saW5lIGJvb2xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMTQ6ZnRyYWNlX2dyYXBoX2lnbm9yZV9mdW5jKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjE1LXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjMwPXByaW50X2dyYXBoX2Z1bmN0aW9uX2ZsYWdzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTMyIGZsYWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzMtfVxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNDpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpIHsgfVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzNS0vKiBmdHJhY2Vfb3BzIG1heSBub3QgYmUgZGVmaW5lZCAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNjojZGVmaW5lIGluaXRfYXJyYXlfZmdyYXBoX29wcyh0ciwgb3BzKSBkbyB7IH0gd2hpbGUgKDApXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM3OiNkZWZpbmUgYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgb3BzKSAoeyAwOyB9KVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzOC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYz04ND1pbnQgZnRyYWNlX2NyZWF0ZV9mdW5jdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzo5ODpcdHJldCA9IGFsbG9jYXRlX2ZncmFwaF9vcHModHIsIHRyLVx1MDAzZW9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTktXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTEwOT12b2lkIGZ0cmFjZV9kZXN0cm95X2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTExMi1cdGZ0cmFjZV9mcmVlX2Z0cmFjZV9vcHModHIpO1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjExMzpcdGZyZWVfZmdyYXBoX29wcyh0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTE0LX1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MjI1PXN0YXRpYyBpbnQgZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjIyNjpcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTIyNy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTI5ND1pbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjI5NTpcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjk2LVx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zMDE9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV9hcmdzKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozMDI6XHRcdFx0XHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTMwMy1cdFx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MzY4PXZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozNjk6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzcwLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mzk5PXN0YXRpYyB2b2lkIHRyYWNlX2dyYXBoX3RocmVzaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQwMDpcdFx0XHRcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQwMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzNC1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0MzU6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZ1bmNncmFwaF9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM2LVx0LmVudHJ5ZnVuYyA9IFx1MDAyNnRyYWNlX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzktXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDQwOmludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDQxLXtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDI6XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDMtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ1OC1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NTk6dm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjAte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjMtXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDY0Ol9faW5pdCB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2NS17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0xNzg9c3RhdGljIGludCBpcnFzb2ZmX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MTc5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMTgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9MjE1PXN0YXRpYyB2b2lkIGlycXNvZmZfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjE2Olx0XHRcdFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yMTctXHRcdFx0XHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTI0MC1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjQxOnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDItXHQuZW50cnlmdW5jXHRcdD0gXHUwMDI2aXJxc29mZl9ncmFwaF9lbnRyeSxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTQ4ND1zdGF0aWMgaW50IHJlZ2lzdGVyX2lycXNvZmZfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGdyYXBoLCBpbnQgc2V0KVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDkyLVx0aWYgKGdyYXBoKVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzo0OTM6XHRcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDk0LVx0ZWxzZVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NTAzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy01MDgtXHRpZiAoZ3JhcGgpXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjUwOTpcdFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUxMC1cdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTE1PXN0YXRpYyBpbnQgd2FrZXVwX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxMTY6XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTE3LVx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTE1MT1zdGF0aWMgdm9pZCB3YWtldXBfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNTI6XHRcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNTMtXHRcdFx0XHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzctXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTc4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfd2FrZXVwX29wcyA9IHtcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzktXHQuZW50cnlmdW5jID0gXHUwMDI2d2FrZXVwX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc2OD1zdHJ1Y3QgZmdyYXBoX2ZpeHR1cmUge1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6NzY5Olx0c3RydWN0IGZncmFwaF9vcHMgZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3MC1cdGludCBzdG9yZV9zaXplO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc3Nj1zdGF0aWMgX19pbml0IGludCBzdG9yZV9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Nzc6XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy03NzgtXHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz04MTA9c3RhdGljIF9faW5pdCB2b2lkIHN0b3JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo4MTE6XHRcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTgxMi1cdFx0XHRcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9MTAyOT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwMzA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwMzEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwNDctXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzIF9faW5pdGRhdGEgID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0OS1cdC5lbnRyeWZ1bmNcdFx0PSBcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDYyPXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA4MC1cdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXHUwMDI2dHItXHUwMDNlYXJyYXlfYnVmZmVyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODE6XHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODI6XHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgzLVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDMtXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA0Olx0LyogTmVlZCB0byBhbHNvIHNpbXVsYXRlIHRoZSB0ci1cdTAwM2VyZXNldCB0byByZW1vdmUgdGhpcyBmZ3JhcGhfb3BzICovXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA1LVx0dHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA2Olx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA3LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjMtXHR0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKFx1MDAyNnRyLVx1MDAzZWFycmF5X2J1ZmZlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTI0Olx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTI1LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDUtXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTQ2Olx0cmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0Ny1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTU5LVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTE2MDpcdHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIHRlbGxpbmcgbWUgdG8gbG9vayBpbnRvIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1Ny4gVGhhdCYjMzk7cyB3aGVyZSB0aGV5IGFyZSBwb2ludGluZyBtZSB0byBmaW5kIGEgc3BlY2lmaWMgY2FsbCB0byBgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RgLiBPa2F5LCBzbyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuCgpMZXQgbWUgdGFrZSBhIGxvb2sgdGhlcmUsIHRoZSBuYW1lIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAgaXRzZWxmLCB0ZWxscyBtZSwgdGhhdCB0aGUgZnVuY3Rpb24gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYSBsaW5rZWQgbGlzdCwgb3IgZGF0YSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyBvciBmdW5jdGlvbiBjYWxsIGhpc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDM3PXRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5ID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWI7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzktLyogVHJ5IHRvIGFzc2lnbiBhIHJldHVybiBzdGFjayBhcnJheSBvbiBGVFJBQ0VfUkVUU1RBQ0tfQUxMT0NfU0laRSB0YXNrcy4gKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMDQwOnN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwNDEte1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMjMyPXN0YXRpYyBpbnQgc3RhcnRfZ3JhcGhfdHJhY2luZyh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjQ5LVx0ZG8ge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyNTA6XHRcdHJldCA9IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHJldF9zdGFja19saXN0KTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjUxLVx0fSB3aGlsZSAocmV0ID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBVbndpbmQgRGVmZXJyYWwqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgdW53aW5kaW5nIHByb2Nlc3MuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmVycyB1bndpbmRpbmcgd29yaywgc28gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBtaWdodCBiZSBtYW5pZmVzdGluZy4gVGhpcyBmaWxlIHVzdWFsbHkgaG9sZHMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyB1bndpbmQgb3BlcmF0aW9ucyB0aGF0IGNhbiYjMzk7dCBiZSBpbW1lZGlhdGVseSBwcm9jZXNzZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IGhlcmUgYW5kIHNlZSB3aGF0IGNsdWVzIEkgY2FuIHVuZWFydGguIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSBjbG9zZXIgdG8gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vud2luZF9kZWZlcnJlZF9jYW5jZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdW53aW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdW53aW5kL2RlZmVycmVkLmM9MjI5PWludCB1bndpbmRfZGVmZXJyZWRfcmVxdWVzdChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmssIHU2NCAqY29va2llKVxuLS1cbmtlcm5lbC91bndpbmQvZGVmZXJyZWQuYy0yOTctXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmM6Mjk4OnZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMtMjk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTkKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBzZWxlY3RlZCBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogdWJpcXVpdG91cywgZm9jdXNpbmcgb24gdGhvc2Ugd2hpY2ggZWl0aGVyIGltcGxlbWVudCBvciBkaXJlY3RseSBjYWxsIHRoZSBsb29wcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGxpc3Q6IGBfX3NldF9vb21fYWRqYCwgYGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc2AsIGBzY2hlZHVsZV90YXNrX3dvcmtgLCBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgLCBgc2VsZWN0X2JhZF9wcm9jZXNzYCwgYGNvbGxlY3RfcHJvY3Nfa3NtYCwgYGNvbGxlY3RfcHJvY3NfYW5vbmAsIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAsIGFuZCBgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWRgLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgaW5kZWVkIG5vbi11YmlxdWl0b3VzIGFuZCByZXByZXNlbnRzIGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gYF9fc2V0X29vbV9hZGpgIGlzIHRoZSBwcm9jZnMgb29tX2FkaiBoYW5kbGVyLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBkZWFscyB3aXRoIGxhbmRsb2NrIHRocmVhZCBzeW5jaW5nLCBgc2NoZWR1bGVfdGFza193b3JrYCBpcyBwYXJ0IG9mIGxhbmRsb2NrJiMzOTtzIHRhc2sgd29yayBzY2hlZHVsaW5nLCBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgIGlzIGEgaGVscGVyIGZyb20gYGxpYi9pc19zaW5nbGVfdGhyZWFkZWQuY2AsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgIGlzIHRoZSBPT00ga2lsbGVyIHZpY3RpbSBzZWxlY3RvciwgYGNvbGxlY3RfcHJvY3Nfa3NtYCBoYW5kbGVzIEtTTSByZXZlcnNlIG1hcHBpbmcsIGBjb2xsZWN0X3Byb2NzX2Fub25gIGlzIGludm9sdmVkIGluIG1tIG1lbW9yeSBmYWlsdXJlIHByb2Nlc3MgY29sbGVjdGlvbiwgYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YCBpcyB0aGUgZmdyYXBoIHJldHN0YWNrIGFsbG9jYXRvciwgYW5kIGZpbmFsbHksIGByZHRncm91cF90YXNrc19hc3NpZ25lZGAgY2hlY2tzIHJlc2N0cmwgcmR0Z3JvdXAgdGFza3MuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVtIGFsbC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlOiBgUFJPQ19GU2AsIGBLU01gLCBgTUVNT1JZX0ZBSUxVUkVgLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCwgYW5kIGBSRVNDVFJMX0ZTYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSB2ZXJkaWN0IGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgKSBhbmQgdGhlbiByZWZhY3RvcnMgaXRlcmF0aW9ucyBvdmVyIHByb2Nlc3MgYW5kIHRocmVhZCBsaXN0cyBhY3Jvc3MgYSBudW1iZXIgb2YgY29yZSBzdWJzeXN0ZW1zLiAgU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyBwcm9jZnMsIHRoZSBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgS1NNLCBMYW5kbG9jaywgZnVuY3Rpb24gZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIFRoaXMgb2J2aW91c2x5IGNoYW5nZXMgcmVhY2hhYmxlIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2Uga2VybmVsIHN1YnN5c3RlbXMuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgYWxyZWFkeSBwb3B1bGF0ZWQgYW5kIHZlcmlmaWVkLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5dGhpbmcgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtLU00mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDssCiAgICAmIzM0O1JFU0NUUkxfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NldF9vb21fYWRqJiMzNDssCiAgICAmIzM0O2NvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyYjMzQ7LAogICAgJiMzNDtzY2hlZHVsZV90YXNrX3dvcmsmIzM0OywKICAgICYjMzQ7Y3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7c2VsZWN0X2JhZF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2NvbGxlY3RfcHJvY3Nfa3NtJiMzNDssCiAgICAmIzM0O2NvbGxlY3RfcHJvY3NfYW5vbiYjMzQ7LAogICAgJiMzNDthbGxvY19yZXRzdGFja190YXNrbGlzdCYjMzQ7LAogICAgJiMzNDtyZHRncm91cF90YXNrc19hc3NpZ25lZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzY29wZWQtZ3VhcmQgUkNVIG1hY3JvcyAoZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrLCBmb3JfZWFjaF90aHJlYWRfcmN1bG9jaywgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jaykgYW5kIHJlZmFjdG9ycyBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGluY2x1ZGluZyBwcm9jZnMsIE9PTSBraWxsZXIsIG1lbW9yeSBmYWlsdXJlLCBLU00sIExhbmRsb2NrLCBmZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGxvY2tpbmcgYW5kIGNvbnRyb2wtZmxvdyBjaGFuZ2VzIGFjcm9zcyB0aGVzZSBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAgICYjMzQ7UkVTQ1RSTF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2V0X29vbV9hZGomIzM0OywKICAgICYjMzQ7Y291bnRfYWRkaXRpb25hbF90aHJlYWRzJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX3Rhc2tfd29yayYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtzZWxlY3RfYmFkX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19rc20mIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19hbm9uJiMzNDssCiAgICAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgICAmIzM0O3JkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxuXG5UaGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiBSQ1UgbG9jayBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8vZnJvbSB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIFJDVSBsb2NraW5nIGNoYW5nZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIChlLmcuIHVzZS1hZnRlci1mcmVlKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNThiZTM4OTQyNDYwNS4uMmM0N2Q4MzhhMWM3NiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTExNjEsOCAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSkKIAlpZiAobW0pIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMTc4LDcgJiM0MzsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpCiAJCQl9CiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJbW1kcm9wKG1tKTsKIAl9CiBlcnJfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jCmluZGV4IDVkY2JiMGE5NjRlODEuLmIxNGRmOGIyM2YxYTggMTAwNjQ0Ci0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmMKQEAgLTcwOSwxNCAmIzQzOzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKQogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkdGdyb3VwX211dGV4KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKIAlwaWRfdCBwaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHsKIAkJaWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7CiAJCQlwaWQgPSB0YXNrX3BpZF92bnIodCk7CiAJCQlpZiAocGlkKQogCQkJCXNlcV9wcmludGYocywgJiMzNDslZFxuJiMzNDssIHBpZCk7CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAppbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2lmbmRlZiBfTElOVVhfU0NIRURfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwpAQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7CiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpCVwKIAlmb3JfZWFjaF9wcm9jZXNzKHApIGZvcl9lYWNoX3RocmVhZChwLCB0KQogCiYjNDM7LyoKJiM0MzsgKiBWYXJpYW50cyBvZiBmb3JfZWFjaF9wcm9jZXNzKCksIGZvcl9lYWNoX3RocmVhZCgpIGFuZAomIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlCiYjNDM7ICogUkNVIHJlYWQgbG9jayB2aWEgc2NvcGVkX2d1YXJkKHJjdSkuICBUaGUgbG9jayBpcyBoZWxkIGZvciB0aGUKJiM0MzsgKiBkdXJhdGlvbiBvZiB0aGUgbG9vcCBhbmQgcmVsZWFzZWQgb24gZXhpdCwgaW5jbHVkaW5nIHZpYSBicmVhaywKJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvciAocCA9ICZhbXA7aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9ICZhbXA7aW5pdF90YXNrIDsgKQomIzQzOwomIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CV9fZm9yX2VhY2hfdGhyZWFkKChwKS0mZ3Q7c2lnbmFsLCB0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogRG91YmxlIGxvb3A6ICYjMzk7YnJlYWsmIzM5OyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLgomIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkCiYjNDM7ICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpCiYjNDM7CiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTsKIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3B1LmMKQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkgKiBmdWxsLWZsZWRnZWQgdGFza2xpc3RfbG9jay4KIAkgKi8KIAlXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAkJLyoKQEAgLTEyNjgsNyAmIzQzOzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkJYXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtJmd0O21tKTsKIAkJdGFza191bmxvY2sodCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCBhNzZiZjk1N2ZiMzJkLi43YTg3MGY3MWRjZjZhIDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTIxNywxMSAmIzQzOzIxNyw5IEBAIHZvaWQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfdGhyZWFkKHAsIHQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlfX3RoYXdfdGFzayh0KTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jCmluZGV4IDZmY2M5NGNlNGNhOWQuLjczYTVhZDNiZTlhOGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9odW5nX3Rhc2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvaHVuZ190YXNrLmMKQEAgLTMxNSwxMyAmIzQzOzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiAJCXJldHVybjsKIAogCXRoaXNfcm91bmRfY291bnQgPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkgewogCQlpZiAoIW1heF9jb3VudC0tKQotCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJZ290byBvdXQ7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7CiAJCQlpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKQotCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCQlnb3RvIG91dDsKIAkJCWxhc3RfYnJlYWsgPSBqaWZmaWVzOwogCQl9CiAKQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KQogCQkJaHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7CiAJCX0KIAl9Ci0gdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCiYjNDM7b3V0OgogCWlmICghdGhpc19yb3VuZF9jb3VudCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggYzU2YTdmOTFkNzJlMi4uZWEyMThkYzc1YWQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNjgzNCwxNSAmIzQzOzY4MzQsMTMgQEAgdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQogCX0KIAlwcl93YXJuKCYjMzQ7XG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKCFwLSZndDtsb2NrZGVwX2RlcHRoKQogCQkJY29udGludWU7CiAJCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhwKTsKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByX3dhcm4oJiMzNDtcbiYjMzQ7KTsKIAlwcl93YXJuKCYjMzQ7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtNTQ3LDE1ICYjNDM7NTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCXNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LgotCXJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHQgPT0gY3VycmVudCkKIAkJCWNvbnRpbnVlOyAgLy8gRG9uJiMzOTt0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyEKIAkJLy8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLgogCQl3aGlsZSAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3QtJmd0O3JjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpCiAJCQljb250aW51ZTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KTsKICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IGY3ODI3NTE5MjAzNmIuLjdmOWRiZDRjN2Q2MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjAxNSw4ICYjNDM7MjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZCkKIAlzbXBfbWJfX2FmdGVyX3NwaW5sb2NrKCk7CiAJcmVhZF91bmxvY2soJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAotCWd1YXJkKHJjdSkoKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKQomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApCiAJCXVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwppbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwpAQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KQogI2VuZGlmCiAJCSAgICYjMzQ7XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKHRhc2tfY3B1KHApICE9IHJxX2NwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXByaW50X3Rhc2sobSwgcnEsIHApOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmMKaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2ZncmFwaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguYwpAQCAtMTA1NywxMSAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpCiAJCX0KIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHN0YXJ0ID09IGVuZCkgewogCQkJcmV0ID0gLUVBR0FJTjsKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gZnJlZTsKIAkJfQogCiAJCWlmICh0LSZndDtyZXRfc3RhY2sgPT0gTlVMTCkgewpAQCAtMTA3NCw5ICYjNDM7MTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KQogCQkJdC0mZ3Q7cmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQmIzQzOyYjNDM7XTsKIAkJfQogCX0KLQotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZnJlZToKIAlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspCiAJCWttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2tfbGlzdFtpXSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMKaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYwpAQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKQogCiAJc3luY2hyb25pemVfc3JjdSgmYW1wO3Vud2luZF9zcmN1KTsKIAotCWd1YXJkKHJjdSkoKTsKIAkvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJYXRvbWljX2xvbmdfYW5kbm90KEJJVChiaXQpLAogCQkJCSAgICZhbXA7dC0mZ3Q7dW53aW5kX2luZm8udW53aW5kX21hc2spOwogCQlpZiAodC0mZ3Q7dW53aW5kX2luZm8uY2FjaGUpCmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMKaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDQKLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYwpAQCAtMjYsOCAmIzQzOzI2LDcgQEAgYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldCA9IGZhbHNlOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHsKIAkJaWYgKHVubGlrZWx5KHAtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKQogCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShwID09IHRhc2stJmd0O2dyb3VwX2xlYWRlcikpCkBAIC00OCw3ICYjNDM7NDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpCiAJfQogCXJldCA9IHRydWU7CiBmb3VuZDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJc3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS0mZ3Q7YW5vbl92bWE7CiAKIAkJYW5vbl92bWFfbG9ja19yZWFkKGF2KTsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQkJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLSZndDthZGRyZXNzICZhbXA7IFBBR0VfTUFTSzsKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tJmd0O2xpbmVhcl9wYWdlX2luZGV4OwpAQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJfQogCQkJfQogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwogCQlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NTUsOCAmIzQzOzU1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZXR1cm47CiAKIAlwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTsKQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQlhZGRfdG9fa2lsbF9hbm9uX2ZpbGUodCwgcGFnZSwgdm1hLCB0b19raWxsLCBhZGRyKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiB9CiAKQEAgLTU4OSw5ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcGdvZmZfdCBwZ29mZjsKIAogCWlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7Ci0JcmN1X3JlYWRfbG9jaygpOwogCXBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIApAQCAtNjExLDcgJiM0Mzs2MDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApAQCAtNjM1LDggJiM0Mzs2MzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJLyoKQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQlhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqLwpAQCAtMjI4OCw4ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLSZndDttYXBwaW5nOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpOwpAQCAtMjMwMyw3ICYjNDM7MjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCQkJCWFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jCkBAIC05NCw4ICYjNDM7OTQsNyBAQCBzdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQsCiAJYm9vbCByZXQgPSBmYWxzZTsKIAljb25zdCBub2RlbWFza190ICptYXNrID0gb2MtJmd0O25vZGVtYXNrOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3RocmVhZChzdGFydCwgdHNrKSB7CiYjNDM7CWZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHsKIAkJaWYgKG1hc2spIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGlzIGEgbWVtcG9saWN5IGNvbnN0cmFpbmVkIG9vbSwgdHNrJiMzOTtzCkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCwKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNjEsMTEgJiM0MzszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYykKIAllbHNlIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKQomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApCiAJCQlpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKQogCQkJCWJyZWFrOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAkJaW50IGkgPSAwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJLyogQXZvaWQgcG90ZW50aWFsIHNvZnRsb2NrdXAgd2FybmluZyAqLwogCQkJaWYgKCgmIzQzOyYjNDM7aSAmYW1wOyAxMDIzKSA9PSAwKQogCQkJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJCWR1bXBfdGFzayhwLCBvYyk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJICogYXJlIGR5aW5nIGFzIHdlbGwgdG8gbWFrZSBzdXJlIHRoYXQgYSkgbm9ib2R5IHBpbnMgaXRzIG1tIGFuZAogCSAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpCkBAIC04OTcsNyAmIzQzOzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCSAqIFRoYXQgdGhyZWFkIHdpbGwgbm93IGdldCBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIHNpbmNlIGl0IGhhcyBhCiAJICogcGVuZGluZyBmYXRhbCBzaWduYWwuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocCwgdmljdGltKSkKQEAgLTk3NSw3ICYjNDM7OTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCQkJY29udGludWU7CiAJCWRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoY2FuX29vbV9yZWFwKQogCQlxdWV1ZV9vb21fcmVhcGVyKHZpY3RpbSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYwppbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMKQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcykKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwpAQCAtMzkyLDkgJiM0MzszOTAsNyBAQCBzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcywKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxMQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA5MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9ja2luZyBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgc29tZSBoZWxwZXIgbWFjcm9zIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYDogYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2AuIFRoZXkmIzM5O3JlIGxldmVyYWdpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgUkFJSSBhcHByb2FjaCBmb3IgbWFuYWdpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIC8gYHJjdV9yZWFkX3VubG9jaygpYCBwYWlyIHdpdGhpbiB0aGUgbG9vcHMuIFNtYXJ0OyBjbGVhbiBhbmQgaGVscHMgYXZvaWQgdGhvc2UgbmFzdHkgUkNVIGxvY2svdW5sb2NrIG1pc21hdGNoZXMuCgpUaGUgbWFjcm8gaW1wbGVtZW50YXRpb24gaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZW5jYXBzdWxhdGVzIHRoZSBSQ1UgcmVhZCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYXJvdW5kIHRoZSBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24sIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIG1pbmltaXplIHBvdGVudGlhbCBlcnJvcnMuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGNvbnZlcnNpb24gb2YgYSBidW5jaCBvZiBmaWxlczogYGZzL3Byb2MvYmFzZS5jYCwgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2AsIGV0Yy4sIGEgZ29vZCBzcHJlYWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgc3VnZ2VzdHMgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGFuZCBzaW1wbGlmeSBSQ1UgdXNhZ2UgYWNyb3NzIHRoZSBjb2RlYmFzZS4KCk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIHNlZS4uLiBpcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIG5vdGhpbmcgdGhhdCBsb29rcyBsaWtlIGl0OgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLgozLiAgTm8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgTm8gbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZpbGUgY2hhbmdlcyB0byBiZSBleHRyYSBjZXJ0YWluLiBJbiBga2VybmVsL2h1bmdfdGFzay5jYCwgdGhlIGB1bmxvY2s6YCBsYWJlbCBpcyBub3cgYG91dDpgLCBhbmQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgaGFzIGEganVtcCB0byBgZnJlZTpgIGxhYmVsIGRpcmVjdGx5LCBiZWNhdXNlIHRoZSBgc2NvcGVkX2d1YXJkYCBoYW5kbGVzIHRoZSBSQ1UgdW5sb2NraW5nLiBPa2F5LCBqdXN0IHRpZHlpbmcgdXAgdGhvc2UgZXhwbGljaXQgbG9jay91bmxvY2sgY2FsbHMuIFRoaXMgaXMganVzdCBhIGNsZWFudXAsIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTG9va2luZyBjbG9zZXIgYXQgdGhlIG1hY3JvcyB0aGVtc2VsdmVzLCB5ZXMsIGl0JiMzOTtzIGp1c3QgYSByZWZhY3RvcmluZy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8vZnJvbSB1c2VyIHNwYWNlLCBubyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSBiZWluZyBjaGFuZ2VkLiBUaGUgZXhpc3RpbmcgbG9ja2luZyBiZWhhdmlvciwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgbm90IGJlaW5nIGFsdGVyZWQuIEFueSBsb2NraW5nIGJ1Z3MsIGxpa2UgUkNVIG5lc3Rpbmcgb3IgbGlmZXRpbWUgaXNzdWVzLCBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIFBST1ZFX0xPQ0tJTkcuIE1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLgoKVGhlIHF1ZXN0aW9uIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UuIEhvd2V2ZXIsIEkgYW0gbm90IHNlZWluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UmIzM5O3JlIGdvb2QuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOYCBhbmQgYEtNU0FOUmVhc29uaW5nYC4gQW5kIGBLTVNBTlJlYXNvbmluZ2Agc2hvdWxkIGRldGFpbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4KCk9rYXksIGFsbCBzZXQuIExldCYjMzk7cyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwgZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MjguMzE1MDY4NTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1NjQ0MzE1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiS1NNXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiLFxuICAgIFwiUkVTQ1RSTF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V0X29vbV9hZGpcIixcbiAgICBcImNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICAgIFwic2NoZWR1bGVfdGFza193b3JrXCIsXG4gICAgXCJjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZFwiLFxuICAgIFwic2VsZWN0X2JhZF9wcm9jZXNzXCIsXG4gICAgXCJjb2xsZWN0X3Byb2NzX2tzbVwiLFxuICAgIFwiY29sbGVjdF9wcm9jc19hbm9uXCIsXG4gICAgXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICAgIFwicmR0Z3JvdXBfdGFza3NfYXNzaWduZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjI4LjMxNTA3NDUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM2MjIzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODY4ZDc3NzA0NzgxNmZlNjFjMmNiNGFkYjEzYzM4OGUyOTI5NjQ0ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDEyOjU5OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcXG5pbmRleCA1OGJlMzg5NDI0NjA1Li4yYzQ3ZDgzOGExYzc2IDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvYmFzZS5jXFxuKysrIGIvZnMvcHJvYy9iYXNlLmNcXG5AQCAtMTE2MSw4ICsxMTYxLDcgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuIFxcdGlmIChtbSkge1xcbiBcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XFxuIFxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRcXHRpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0dGFza191bmxvY2socCk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdG1tZHJvcChtbSk7XFxuIFxcdH1cXG4gZXJyX3VubG9jazpcXG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXFxuaW5kZXggNWRjYmIwYTk2NGU4MS4uYjE0ZGY4YjIzZjFhOCAxMDA2NDRcXG4tLS0gYS9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcXG5AQCAtNzA5LDE0ICs3MDksMTIgQEAgaW50IHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkKHN0cnVjdCByZHRncm91cCAqcilcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkdGdyb3VwX211dGV4KTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcXG4gXFx0XFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XFxuIFxcdFxcdFxcdHJldCA9IDE7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTgyNiwxNSArODI0LDEzIEBAIHN0YXRpYyB2b2lkIHNob3dfcmR0X3Rhc2tzKHN0cnVjdCByZHRncm91cCAqciwgc3RydWN0IHNlcV9maWxlICpzKVxcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICp0O1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KSB7XFxuIFxcdFxcdGlmIChpc19jbG9zaWRfbWF0Y2godCwgcikgfHwgaXNfcm1pZF9tYXRjaCh0LCByKSkge1xcbiBcXHRcXHRcXHRwaWQgPSB0YXNrX3BpZF92bnIodCk7XFxuIFxcdFxcdFxcdGlmIChwaWQpXFxuIFxcdFxcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVkXFxcXG5cXFwiLCBwaWQpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uMTEwZWE5ZjEzMWYzMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxcbkBAIC0yLDYgKzIsNyBAQFxcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxcbiAjZGVmaW5lIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcXG4gI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KVxcdFxcXFxcXG4gXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcXG4gXFxuKy8qXFxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXFxuKyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlXFxuKyAqIFJDVSByZWFkIGxvY2sgdmlhIHNjb3BlZF9ndWFyZChyY3UpLiAgVGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlXFxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxcbisgKiBnb3RvLCBvciByZXR1cm4uXFxuKyAqL1xcbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0Zm9yIChwID0gXFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcXHUwMDI2aW5pdF90YXNrIDsgKVxcbitcXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0X19mb3JfZWFjaF90aHJlYWQoKHApLVxcdTAwM2VzaWduYWwsIHQpXFxuK1xcbisvKlxcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxcbisgKiBVc2UgJ2dvdG8nIHRvIGV4aXQgYm90aCBsb29wczsgdGhlIFJDVSByZWFkIGxvY2sgaXMgcmVsZWFzZWRcXG4rICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC5cXG4rICovXFxuKyNkZWZpbmUgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcXG4rXFxuIHR5cGVkZWYgaW50ICgqcHJvY192aXNpdG9yKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHZvaWQgKmRhdGEpO1xcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmNcXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9jcHUuY1xcbisrKyBiL2tlcm5lbC9jcHUuY1xcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcXG4gXFx0ICogZnVsbC1mbGVkZ2VkIHRhc2tsaXN0X2xvY2suXFxuIFxcdCAqL1xcbiBcXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTEyNjgsNyArMTI2Nyw2IEBAIHZvaWQgY2xlYXJfdGFza3NfbW1fY3B1bWFzayhpbnQgY3B1KVxcbiBcXHRcXHRhcmNoX2NsZWFyX21tX2NwdW1hc2tfY3B1KGNwdSwgdC1cXHUwMDNlbW0pO1xcbiBcXHRcXHR0YXNrX3VubG9jayh0KTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyogVGFrZSB0aGlzIENQVSBkb3duLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuY1xcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2ZyZWV6ZXIuY1xcbisrKyBiL2tlcm5lbC9mcmVlemVyLmNcXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF90aHJlYWQocCwgdCkge1xcbitcXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSB7XFxuIFxcdFxcdF9fdGhhd190YXNrKHQpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXFxuaW5kZXggNmZjYzk0Y2U0Y2E5ZC4uNzNhNWFkM2JlOWE4YiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvaHVuZ190YXNrLmNcXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcXG5AQCAtMzE1LDEzICszMTUsMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0aGlzX3JvdW5kX2NvdW50ID0gMDtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xcbiBcXHRcXHRpZiAoIW1heF9jb3VudC0tKVxcbi1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcXG4gXFx0XFx0XFx0aWYgKCFyY3VfbG9ja19icmVhayhnLCB0KSlcXG4tXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHRsYXN0X2JyZWFrID0gamlmZmllcztcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzM3LDkgKzMzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2h1bmdfdW5pbnRlcnJ1cHRpYmxlX3Rhc2tzKHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gXFx0XFx0XFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi0gdW5sb2NrOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFxuK291dDpcXG4gXFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcXG4gXFx0fVxcbiBcXHRwcl93YXJuKFxcXCJcXFxcblNob3dpbmcgYWxsIGxvY2tzIGhlbGQgaW4gdGhlIHN5c3RlbTpcXFxcblxcXCIpO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xcbiBcXHRcXHRpZiAoIXAtXFx1MDAzZWxvY2tkZXBfZGVwdGgpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XFxuIFxcdFxcdHRvdWNoX25taV93YXRjaGRvZygpO1xcbiBcXHRcXHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHByX3dhcm4oXFxcIlxcXFxuXFxcIik7XFxuIFxcdHByX3dhcm4oXFxcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcXFxuXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcXG5pbmRleCBiNjI3MzVhNjc4ODQyLi5iYWM2MzY2ZGE0MWUwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXFxuQEAgLTU0NywxNSArNTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKVxcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XFxuIFxcbiBcXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cXG4tXFx0cmN1X3JlYWRfbG9jaygpOyAvLyBQcm90ZWN0IHRhc2sgbGlzdC5cXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcXG4gXFx0XFx0aWYgKHQgPT0gY3VycmVudClcXG4gXFx0XFx0XFx0Y29udGludWU7ICAvLyBEb24ndCBkZWFkbG9jayBvbiBvdXJzZWx2ZXMhXFxuIFxcdFxcdC8vIE9yZGVyIGxhdGVyIHJjdV9yZWFkX2xvY2soKSBvbiBvdGhlciB0YXNrcyBhZnRlciBRUy5cXG4gXFx0XFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnQtXFx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQpO1xcbiAjZW5kaWYgLy8gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1UpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uN2Y5ZGJkNGM3ZDYyZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0yMDE1LDggKzIwMTUsNyBAQCBzdGF0aWMgdm9pZCB1Y2xhbXBfc3luY191dGlsX21pbl9ydF9kZWZhdWx0KHZvaWQpXFxuIFxcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKVxcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApXFxuIFxcdFxcdHVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuY1xcbmluZGV4IDcyMjM2ZGI2Nzk4M2IuLmNkYWUxNjViOThmN2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZGVidWcuY1xcbkBAIC0xMDI5LDE0ICsxMDI5LDEyIEBAIHN0YXRpYyB2b2lkIHByaW50X3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJxICpycSwgaW50IHJxX2NwdSlcXG4gI2VuZGlmXFxuIFxcdFxcdCAgIFxcXCJcXFxcblxcXCIpO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xcbiBcXHRcXHRpZiAodGFza19jcHUocCkgIT0gcnFfY3B1KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHByaW50X3Rhc2sobSwgcnEsIHApO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIHByaW50X2Nmc19ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ZncmFwaC5jIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXFxuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XFxuIFxcdFxcdGlmIChzdGFydCA9PSBlbmQpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4tXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHQtXFx1MDAzZXJldF9zdGFjayA9PSBOVUxMKSB7XFxuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxcbiBcXHRcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSByZXRfc3RhY2tfbGlzdFtzdGFydCsrXTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcbi11bmxvY2s6XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBmcmVlOlxcbiBcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKVxcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmNcXG5pbmRleCA1YmVhNDczMTQyNTQ5Li5lY2ZlMTMzNjA5NWU3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xcbisrKyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xcbkBAIC0zMTksOSArMzE5LDggQEAgdm9pZCB1bndpbmRfZGVmZXJyZWRfY2FuY2VsKHN0cnVjdCB1bndpbmRfd29yayAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3NyY3UoXFx1MDAyNnVud2luZF9zcmN1KTtcXG4gXFxuLVxcdGd1YXJkKHJjdSkoKTtcXG4gXFx0LyogQ2xlYXIgdGhpcyBiaXQgZnJvbSBhbGwgdGhyZWFkcyAqL1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xcbiBcXHRcXHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXFxuIFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ0LVxcdTAwM2V1bndpbmRfaW5mby51bndpbmRfbWFzayk7XFxuIFxcdFxcdGlmICh0LVxcdTAwM2V1bndpbmRfaW5mby5jYWNoZSlcXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXFxuaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDRcXG4tLS0gYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcXG5AQCAtMjYsOCArMjYsNyBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0ID0gZmFsc2U7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHAgPT0gdGFzay1cXHUwMDNlZ3JvdXBfbGVhZGVyKSlcXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXFxuIFxcdH1cXG4gXFx0cmV0ID0gdHJ1ZTtcXG4gZm91bmQ6XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXFxuaW5kZXggNjI0ZjM3OTc1ZTEyOS4uODMwZjMzMWNiNmY1YiAxMDA2NDRcXG4tLS0gYS9tbS9rc20uY1xcbisrKyBiL21tL2tzbS5jXFxuQEAgLTMyODEsOCArMzI4MSw3IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYXYgPSBybWFwX2l0ZW0tXFx1MDAzZWFub25fdm1hO1xcbiBcXG4gXFx0XFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRcXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcXG4gXFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXHRcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGluZGV4ID0gcm1hcF9pdGVtLVxcdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcXG5AQCAtMzI5OSw3ICszMjk4LDYgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0XFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xcbiBcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XFxuQEAgLTU3Miw3ICs1NzEsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2Fub24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0XFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xcbiB9XFxuIFxcbkBAIC01ODksOSArNTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHBnb2ZmX3QgcGdvZmY7XFxuIFxcbiBcXHRpX21tYXBfbG9ja19yZWFkKG1hcHBpbmcpO1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcXG4gXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcbkBAIC02MTEsNyArNjA4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcXG4gfVxcbiBcXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbiBcXG4gXFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTY1Myw3ICs2NDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLVxcdTAwM2VtYXBwaW5nO1xcbiBcXG4gXFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcXG4gXFxuIFxcdFxcdHQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCB0cnVlKTtcXG5AQCAtMjMwMyw3ICsyMjk2LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXFxuIFxcdFxcdFxcdFxcdGFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZDQ4YmQ4NjJjMjdiLi45ZTNkMDIzOTMwNjRmIDEwMDY0NFxcbi0tLSBhL21tL29vbV9raWxsLmNcXG4rKysgYi9tbS9vb21fa2lsbC5jXFxuQEAgLTk0LDggKzk0LDcgQEAgc3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0LFxcbiBcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXFx1MDAzZW5vZGVtYXNrO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xcbitcXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhzdGFydCwgdHNrKSB7XFxuIFxcdFxcdGlmIChtYXNrKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElmIHRoaXMgaXMgYSBtZW1wb2xpY3kgY29uc3RyYWluZWQgb29tLCB0c2snc1xcbkBAIC0xMTQsNyArMTEzLDYgQEAgc3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0LFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4gXFx0ZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcXG4gXFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcXG4gXFx0XFx0XFx0aWYgKG9vbV9ldmFsdWF0ZV90YXNrKHAsIG9jKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTQyMywxNCArNDE5LDEyIEBAIHN0YXRpYyB2b2lkIGR1bXBfdGFza3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4gXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xcbiBcXHRcXHRpbnQgaSA9IDA7XFxuIFxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRcXHQvKiBBdm9pZCBwb3RlbnRpYWwgc29mdGxvY2t1cCB3YXJuaW5nICovXFxuIFxcdFxcdFxcdGlmICgoKytpIFxcdTAwMjYgMTAyMykgPT0gMClcXG4gXFx0XFx0XFx0XFx0dG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpO1xcbiBcXHRcXHRcXHRkdW1wX3Rhc2socCwgb2MpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTg4Nyw4ICs4ODEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX3dpbGxfZnJlZV9tZW0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiBcXHQgKiBhcmUgZHlpbmcgYXMgd2VsbCB0byBtYWtlIHN1cmUgdGhhdCBhKSBub2JvZHkgcGlucyBpdHMgbW0gYW5kXFxuIFxcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXFxuIFxcdCAqL1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcXG5AQCAtODk3LDcgKzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIFxcdFxcdGlmICghcmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtOTUzLDggKzk0NSw3IEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4gXFx0ICogVGhhdCB0aHJlYWQgd2lsbCBub3cgZ2V0IGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgc2luY2UgaXQgaGFzIGFcXG4gXFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXFxuIFxcdCAqL1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxcbkBAIC05NzUsNyArOTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZG9fc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCBwLCBQSURUWVBFX1RHSUQpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGNhbl9vb21fcmVhcClcXG4gXFx0XFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xcbmluZGV4IGNmYTczYTJhNjdjYWQuLmVjMWZhYjBiZWFjOWYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNcXG5AQCAtMzUxLDkgKzM1MSw3IEBAIHN0YXRpYyBzaXplX3QgY291bnRfYWRkaXRpb25hbF90aHJlYWRzKGNvbnN0IHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MpXFxuIFxcbiBcXHRjYWxsZXIgPSBjdXJyZW50O1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXG4tXFx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XFxuK1xcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKGNhbGxlciwgdGhyZWFkKSB7XFxuIFxcdFxcdC8qIFNraXAgY3VycmVudCwgc2luY2UgaXQgaXMgaW5pdGlhdGluZyB0aGUgc3luYy4gKi9cXG4gXFx0XFx0aWYgKHRocmVhZCA9PSBjYWxsZXIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXFxuIFxcbiBcXHRjYWxsZXIgPSBjdXJyZW50O1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXG4tXFx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XFxuK1xcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKGNhbGxlciwgdGhyZWFkKSB7XFxuIFxcdFxcdC8qIFNraXAgY3VycmVudCwgc2luY2UgaXQgaXMgaW5pdGlhdGluZyB0aGUgc3luYy4gKi9cXG4gXFx0XFx0aWYgKHRocmVhZCA9PSBjYWxsZXIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjo1OToyOS4wNTE5Mjk3NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUzNzI2MTI1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIktTTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlNFQ1VSSVRZX0xBTkRMT0NLXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgICBcIlJFU0NUUkxfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NldF9vb21fYWRqXCIsXG4gICAgXCJjb3VudF9hZGRpdGlvbmFsX3RocmVhZHNcIixcbiAgICBcInNjaGVkdWxlX3Rhc2tfd29ya1wiLFxuICAgIFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIixcbiAgICBcInNlbGVjdF9iYWRfcHJvY2Vzc1wiLFxuICAgIFwiY29sbGVjdF9wcm9jc19rc21cIixcbiAgICBcImNvbGxlY3RfcHJvY3NfYW5vblwiLFxuICAgIFwiYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RcIixcbiAgICBcInJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jaywgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2ssIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2spIGFuZCByZWZhY3RvcnMgcHJvY2Vzcy90aHJlYWQgaXRlcmF0aW9uIGFjcm9zcyBtdWx0aXBsZSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBpbmNsdWRpbmcgcHJvY2ZzLCBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSwgS1NNLCBMYW5kbG9jaywgZmdyYXBoIHRyYWNpbmcsIGFuZCByZXNjdHJsLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBsb2NraW5nIGFuZCBjb250cm9sLWZsb3cgY2hhbmdlcyBhY3Jvc3MgdGhlc2Ugc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDU4YmUzODk0MjQ2MDUuLjJjNDdkODM4YTFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC0xMTYxLDggKzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbiBcdGlmIChtbSkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XG4rXHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXG4gXHRcdFx0fVxuIFx0XHRcdHRhc2tfdW5sb2NrKHApO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRtbWRyb3AobW0pO1xuIFx0fVxuIGVycl91bmxvY2s6XG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5pbmRleCA1ZGNiYjBhOTY0ZTgxLi5iMTRkZjhiMjNmMWE4IDEwMDY0NFxuLS0tIGEvZnMvcmVzY3RybC9yZHRncm91cC5jXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcbkBAIC03MDksMTQgKzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZHRncm91cF9tdXRleCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgKzgyNCwxMyBAQCBzdGF0aWMgdm9pZCBzaG93X3JkdF90YXNrcyhzdHJ1Y3QgcmR0Z3JvdXAgKnIsIHN0cnVjdCBzZXFfZmlsZSAqcylcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnQ7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cGlkID0gdGFza19waWRfdm5yKHQpO1xuIFx0XHRcdGlmIChwaWQpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJWRcXG5cIiwgcGlkKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLjExMGVhOWYxMzFmMzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMiw2ICsyLDcgQEBcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxuICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcbiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpXHRcXFxuIFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbiBcbisvKlxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4rICogZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoKSB0aGF0IGF1dG9tYXRpY2FsbHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGVcbisgKiBSQ1UgcmVhZCBsb2NrIHZpYSBzY29wZWRfZ3VhcmQocmN1KS4gIFRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZVxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuKyAqIGdvdG8sIG9yIHJldHVybi5cbisgKi9cbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdGZvciAocCA9IFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcdTAwMjZpbml0X3Rhc2sgOyApXG4rXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4rXG4rLypcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxuKyAqIFVzZSAnZ290bycgdG8gZXhpdCBib3RoIGxvb3BzOyB0aGUgUkNVIHJlYWQgbG9jayBpcyByZWxlYXNlZFxuKyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4rICovXG4rI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIFxcXG4rXHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuK1x0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbitcbiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTtcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2NwdS5jXG4rKysgYi9rZXJuZWwvY3B1LmNcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdFx0LypcbkBAIC0xMjY4LDcgKzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdFx0YXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtXHUwMDNlbW0pO1xuIFx0XHR0YXNrX3VubG9jayh0KTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZyZWV6ZXIuYyBiL2tlcm5lbC9mcmVlemVyLmNcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnJlZXplci5jXG4rKysgYi9rZXJuZWwvZnJlZXplci5jXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbitcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0X190aGF3X3Rhc2sodCk7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXG5pbmRleCA2ZmNjOTRjZTRjYTlkLi43M2E1YWQzYmU5YThiIDEwMDY0NFxuLS0tIGEva2VybmVsL2h1bmdfdGFzay5jXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcbkBAIC0zMTUsMTMgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRoaXNfcm91bmRfY291bnQgPSAwO1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcbiBcdFx0XHRpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICszMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbi0gdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4rb3V0OlxuIFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCJcXG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcIlxcblwiKTtcbiBcdHByX3dhcm4oXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcbmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3VwZGF0ZS5jXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5AQCAtNTQ3LDE1ICs1NDcsMTMgQEAgdm9pZCBzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KHZvaWQpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cbi1cdHJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbid0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyFcbiBcdFx0Ly8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLlxuIFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ0LVx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXG4gXHRcdFx0Y29udGludWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCk7XG4gI2VuZGlmIC8vICNpZiBJU19FTkFCTEVEKENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi43ZjlkYmQ0YzdkNjJmIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTIwMTUsOCArMjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZClcbiBcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcClcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCArMTAyOSwxMiBAQCBzdGF0aWMgdm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9jcHUpXG4gI2VuZGlmXG4gXHRcdCAgIFwiXFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICh0YXNrX2NwdShwKSAhPSBycV9jcHUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHByaW50X3Rhc2sobSwgcnEsIHApO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mZ3JhcGguYyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuKysrIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodC1cdTAwM2VyZXRfc3RhY2sgPT0gTlVMTCkge1xuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQrK107XG4gXHRcdH1cbiBcdH1cbi1cbi11bmxvY2s6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBmcmVlOlxuIFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSsrKVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuKysrIGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgKzMxOSw4IEBAIHZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnVud2luZF9zcmN1KTtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbiBcdC8qIENsZWFyIHRoaXMgYml0IGZyb20gYWxsIHRocmVhZHMgKi9cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xuIFx0XHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXG4gXHRcdFx0XHQgICBcdTAwMjZ0LVx1MDAzZXVud2luZF9pbmZvLnVud2luZF9tYXNrKTtcbiBcdFx0aWYgKHQtXHUwMDNldW53aW5kX2luZm8uY2FjaGUpXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG5pbmRleCA4Yzk4YjIwYmZjNDE0Li40ZTdmZTg1NDU0YWI4IDEwMDY0NFxuLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbkBAIC0yNiw4ICsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAodW5saWtlbHkocCA9PSB0YXNrLVx1MDAzZWdyb3VwX2xlYWRlcikpXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG4gXHR9XG4gXHRyZXQgPSB0cnVlO1xuIGZvdW5kOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li44MzBmMzMxY2I2ZjViIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtMzI4MSw4ICszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzIFx1MDAyNiBQQUdFX01BU0s7XG4gXHRcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCA9IHJtYXBfaXRlbS1cdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcbkBAIC0zMjk5LDcgKzMyOTgsNiBAQCB2b2lkIGNvbGxlY3RfcHJvY3Nfa3NtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XG5AQCAtNTcyLDcgKzU3MSw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcbiB9XG4gXG5AQCAtNTg5LDkgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXG5AQCAtNjExLDcgKzYwOCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdC8qXG5AQCAtNjUzLDcgKzY0OCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRlNfREFYICovXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcbiBcbiBcdFx0dCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpO1xuQEAgLTIzMDMsNyArMjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuIFx0XHRcdFx0YWRkX3RvX2tpbGxfcGdvZmYodCwgdm1hLCB0b19raWxsLCBwZ29mZik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbisrKyBiL21tL29vbV9raWxsLmNcbkBAIC05NCw4ICs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soc3RhcnQsIHRzaykge1xuIFx0XHRpZiAobWFzaykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhpcyBpcyBhIG1lbXBvbGljeSBjb25zdHJhaW5lZCBvb20sIHRzaydzXG5AQCAtMTE0LDcgKzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcdGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcbiBcdFx0XHRpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC00MjMsMTQgKzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRcdC8qIEF2b2lkIHBvdGVudGlhbCBzb2Z0bG9ja3VwIHdhcm5pbmcgKi9cbiBcdFx0XHRpZiAoKCsraSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCArODgxLDcgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdCAqIGFyZSBkeWluZyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSB0aGF0IGEpIG5vYm9keSBwaW5zIGl0cyBtbSBhbmRcbiBcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcbkBAIC04OTcsNyArODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHQgKiBUaGF0IHRocmVhZCB3aWxsIG5vdyBnZXQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBzaW5jZSBpdCBoYXMgYVxuIFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxuQEAgLTk3NSw3ICs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICszNTEsNyBAQCBzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuIFxuIFx0Y2FsbGVyID0gY3VycmVudDtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbi1cbi1cdGZvcl9lYWNoX3RocmVhZChjYWxsZXIsIHRocmVhZCkge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4rXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MjkuMDUxOTMwOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk0OTI1NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogUkNVIExvY2sgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGRpZmYgaXRzZWxmLiBJdCBpbnRyb2R1Y2VzIHRoZXNlIG5ldyBtYWNyb3MgaW4gYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgOiBgZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApYCwgYGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpYCwgYW5kIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpYC4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYHNjb3BlZF9ndWFyZChyY3UpYC4gVGhhdCdzIG5lYXQ7IGF1dG9tYXRpYyBSQ1UgcmVhZCBsb2NrIG1hbmFnZW1lbnQgZHVyaW5nIGl0ZXJhdGlvbi4gU291bmRzIGxpa2UgYSBnZW5lcmFsbHkgcG9zaXRpdmUgZGlyZWN0aW9uLlxuXG5Ob3cgZm9yIHRoZSByZWZhY3RvcmluZyBpdHNlbGYuIEl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbCDigJMgYW5kIHRoZSBhcmVhcyBpbXBhY3RlZCBhcmUgYnJvYWQ6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBga2VybmVsL2NwdS5jYCwgYGtlcm5lbC9mcmVlemVyLmNgLCBga2VybmVsL2h1bmdfdGFzay5jYCwgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AsIGBrZXJuZWwvcmN1L3VwZGF0ZS5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBga2VybmVsL3NjaGVkL2RlYnVnLmNgLCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCwgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AsIGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9vb21fa2lsbC5jYCwgYW5kIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYC4gVGhhdCdzIGEgbG90IG9mIHN1cmZhY2UgYXJlYSFcblxuQmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkIGFib3V0IHRoaXMgcmVmYWN0b3JpbmcsIGxldCdzIHpvb20gb3V0LiBDb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gKlJlYWNoYWJsZSogcGF0aHMgYXJlIGNyaXRpY2FsLiAgYHByb2NmcyBvb21fYWRqYCwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgdGhlIE9PTSBraWxsZXIsIExhbmRsb2NrLCBhbmQgVFNZTkMgLSB0aGVzZSBhcmUgYWxsIGhpZ2gtdG91Y2ggYXJlYXMsIHNvIHRoZSByZWFjaGFiaWxpdHkgaXMgY2xlYXJseSBhIGNvbmNlcm4uIFxuXG5UaGUgcGhpbG9zb3BoeSBhbHNvIGhhcyBzdHJvbmcgd2FybmluZ3MgYWJvdXQgYmxpbmQgdHJ1c3QuIE5vISBFeGVjdXRhYmxlIGNvZGUgbW9kaWZpY2F0aW9ucyBuZWVkIGZ1enppbmcuIEFuZCwgdGhlIG1vZGlmaWNhdGlvbiBvZiBsb2NraW5nLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gVGhhdCdzIGRlZmluaXRlbHkgb24gdGhlIGRhbmdlciBsaXN0ISBTdHJ1Y3R1cmUsIGFic3RyYWN0aW9uLCBmbG93IGNoYW5nZXMgLSB0aGV5IGFsbCBuZWVkIHNjcnV0aW55LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgaW50byB0aGUgdGVjaG5pY2FsIHdlZWRzIGZvciBhIHNlY29uZCBhbmQgY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIG1hY3JvIGltcGxlbWVudGF0aW9uIGFuZCBgc2NvcGVkX2d1YXJkYCdzIG1lY2hhbmljcy4gQW5kLCBsZXQncyBsb29rIGF0IGBrZXJuZWwvaHVuZ190YXNrLmNgLiBXYWl0ISBUaGUgY2hhbmdlIHRoZXJlLi4uXG5gYGBjXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKCFtYXhfY291bnQtLSlcbi1cdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRnb3RvIG91dDtcbiBcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF9icmVhayArIEhVTkdfVEFTS19MT0NLX0JSRUFLKSkge1xuIFx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xuIFx0XHR9XG4uLi5cbmBgYFxuXG5SaWdodCwgdGhleSd2ZSByZXBsYWNlZCB0aGUgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIHdpdGggdGhlIG5ldyBtYWNyby4gQnV0Li4uIHdoYXQgKmV4YWN0bHkqIGRvZXMgYHJjdV9sb2NrX2JyZWFrKGcsIHQpYCBkbz8gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBncmVwIHRoZSBjb2RlYmFzZSBvciByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIGltcGxpY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQuIFRoaXMgcmVmYWN0b3IgKmNvdWxkKiBiZSBmaW5lLCBidXQgdGhlIGRldmlscyBpbiB0aG9zZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MzcuMDAxMTg3NTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTkwMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJjdV9sb2NrX2JyZWFrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9odW5nX3Rhc2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvaHVuZ190YXNrLmM9MjM1PXN0YXRpYyB2b2lkIGh1bmdfdGFza19pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LFxcbi0tXFxua2VybmVsL2h1bmdfdGFzay5jLTI4MC0gKi9cXG5rZXJuZWwvaHVuZ190YXNrLmM6MjgxOnN0YXRpYyBib29sIHJjdV9sb2NrX2JyZWFrKHN0cnVjdCB0YXNrX3N0cnVjdCAqZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC9odW5nX3Rhc2suYy0yODIte1xcbi0tXFxua2VybmVsL2h1bmdfdGFzay5jPTMwMT1zdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5rZXJuZWwvaHVuZ190YXNrLmMtMzIxLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcXG5rZXJuZWwvaHVuZ190YXNrLmM6MzIyOlxcdFxcdFxcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXFxua2VybmVsL2h1bmdfdGFzay5jLTMyMy1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MzcuMDQ5MTg0NDkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1ODQ5MDM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByY3VfbG9ja19icmVha2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9odW5nX3Rhc2suY2AuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciB0aGUgY29udGV4dC4gYGh1bmdfdGFzay5jYC4uLnRoYXQgc2NyZWFtcyBkZWJ1Z2dpbmcsIHNwZWNpZmljYWxseSBpZGVudGlmeWluZyB1bnJlc3BvbnNpdmUgdGFza3MuIEFuZCBcInJjdV9sb2NrX2JyZWFrXCI/IFRoYXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBpbnRlcnJ1cHRpbmcgb3IgY2lyY3VtdmVudGluZyBSQ1UgbG9ja3MgaW4gYSBzY2VuYXJpbyB3aGVyZSBhIHRhc2sgaGFzIHBvdGVudGlhbGx5IGJlY29tZSB3ZWRnZWQuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiB0aGUgbWVjaGFuaXNtIHRoYXQgdGhlIGtlcm5lbCBlbXBsb3lzIHRvIGRldGVjdCBhbmQgaGFuZGxlIHRhc2tzIHRoYXQgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiB0byBjb21wbGV0ZSwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBhIGRlYWRsb2NrIG9yIGxpdmVsb2NrIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiBpbnRlcnJ1cHRpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgd2hhdCByZWNvdmVyeSBhY3Rpb25zIHRoaXMgZnVuY3Rpb24gbWlnaHQgdHJpZ2dlci4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyB0aGUgc2FmZXR5IGFuZCBlZmZpY2llbmN5IGNvbnNpZGVyYXRpb25zLiBMZXQncyBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NDguNjM0MDkwODg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2h1bmdfdGFzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKiBUbyBhdm9pZCBleHRlbmRpbmcgdGhlIFJDVSBncmFjZSBwZXJpb2QgZm9yIGFuIHVuYm91bmRlZCBhbW91bnQgb2YgdGltZSxcXG4gMjc2OlxcdCAqIHBlcmlvZGljYWxseSBleGl0IHRoZSBjcml0aWNhbCBzZWN0aW9uIGFuZCBlbnRlciBhIG5ldyBvbmUuXFxuIDI3NzpcXHQgKlxcbiAyNzg6XFx0ICogRm9yIHByZWVtcHRpYmxlIFJDVSBpdCBpcyBzdWZmaWNpZW50IHRvIGNhbGwgcmN1X3JlYWRfdW5sb2NrIGluIG9yZGVyXFxuIDI3OTpcXHQgKiB0byBleGl0IHRoZSBncmFjZSBwZXJpb2QuIEZvciBjbGFzc2ljIFJDVSwgYSByZXNjaGVkdWxlIGlzIHJlcXVpcmVkLlxcbiAyODA6XFx0ICovXFxuIDI4MTpcXHRzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdGJvb2wgY2FuX2NvbnQ7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdGdldF90YXNrX3N0cnVjdChnKTtcXG4gMjg2OlxcdFxcdGdldF90YXNrX3N0cnVjdCh0KTtcXG4gMjg3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAyODg6XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDI4OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI5MDpcXHRcXHRjYW5fY29udCA9IHBpZF9hbGl2ZShnKSBcXHUwMDI2XFx1MDAyNiBwaWRfYWxpdmUodCk7XFxuIDI5MTpcXHRcXHRwdXRfdGFza19zdHJ1Y3QodCk7XFxuIDI5MjpcXHRcXHRwdXRfdGFza19zdHJ1Y3QoZyk7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdHJldHVybiBjYW5fY29udDtcXG4gMjk1OlxcdH1cXG4gMjk2OlxcdFxcbiAyOTc6XFx0LypcXG4gMjk4OlxcdCAqIENoZWNrIHdoZXRoZXIgYSBUQVNLX1VOSU5URVJSVVBUSUJMRSBkb2VzIG5vdCBnZXQgd29rZW4gdXAgZm9yXFxuIDI5OTpcXHQgKiBhIHJlYWxseSBsb25nIHRpbWUuIElmIHRoYXQgaGFwcGVucywgcHJpbnQgb3V0IGEgd2FybmluZy5cXG4gMzAwOlxcdCAqL1xcbiAzMDE6XFx0c3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiAzMDI6XFx0e1xcbiAzMDM6XFx0XFx0aW50IG1heF9jb3VudCA9IHN5c2N0bF9odW5nX3Rhc2tfY2hlY2tfY291bnQ7XFxuIDMwNDpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xcbiAzMDU6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDtcXG4gMzA2OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGhpc19yb3VuZF9jb3VudDtcXG4gMzA3OlxcdFxcdGludCBuZWVkX3dhcm5pbmcgPSBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzO1xcbiAzMDg6XFx0XFx0dW5zaWduZWQgbG9uZyBzaV9tYXNrID0gaHVuZ190YXNrX3NpX21hc2s7XFxuIDMwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NDguNjM0MTkwODk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkwNzEwMTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIFBhdGNoOiBDb3JlIFN1YnN5c3RlbSBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlc2UgbG9ja2luZyBtYWNyb3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIGNvbnN0cnVjdCBhbmQgbm93IGl0cyBgcmN1bG9ja2AgdmFyaWFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBhbmQgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgZG91YmxlIGxvb3AuIFRoZW4sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkb3VibGUgbG9vcCB0byB1c2UgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLlxuXG5Pa2F5LCBzbyBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2AgdXRpbGl6ZXMgYSBgc2NvcGVkX2d1YXJkKHJjdSlgLiBOb3cgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgYnJlYWtgIHdpdGhpbiB0aGUgbG9vcHMgaXMgYmVoYXZpbmcgY29ycmVjdGx5LiBNeSBjb25jZXJuIG5vdyBpcyBhYm91dCBob3cgdGhhdCBgYnJlYWtgIGFmZmVjdHMgdGhlIFJDVSBsb2NrJ3Mgc2NvcGUuIERvZXMgaXQgZ2V0IHJlbGVhc2VkIHdoZW4gdGhlIGd1YXJkIHNjb3BlIGlzIGxlZnQsIGV2ZW4gaWYgdGhlIGlubmVyIGxvb3AgYnJlYWtzIGVhcmx5PyBCYXNlZCBvbiB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgdGhlIGBicmVha2Agd291bGQgb25seSBleGl0IHRoZSBpbm5lciBsb29wLCBjb250aW51aW5nIHRoZSBvdXRlciBwcm9jZXNzIGxvb3AsIGFuZCB0aGUgbG9jayBpcyByZWxlYXNlZCB3aGVuIHRoZSBgc2NvcGVkX2d1YXJkYCBzY29wZSBlbmRzLiBUaGUgb2xkIGNvZGUgYW5kIHRoZSBwYXRjaCBhcmUgZG9pbmcgdGhlIHNhbWUgdGhpbmcuXG5cbk15IGNvbmNlcm4gaXMgbm93LCBkb2VzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgZml4IGFueXRoaW5nPyBNeSBjb25jZXJuIGlzIGFsc28gdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgYmVjYXVzZSBvZiB0aGUgbG9jayByZWxlYXNlIGJlaW5nIGluZGVwZW5kZW50IG9mIHRoZSBsb29wIGV4aXQuXG5cbkJ1dCBoZXksIHdhaXQgYSBzZWNvbmQuIFRoaXMgY2hhbmdlIGlzbid0IGp1c3QgYSBtaW5vciB0d2Vhay4gVGhlIGZhY3QgdGhhdCB0aGlzIGltcGFjdHMgdmFyaW91cyBjb3JlIHN1YnN5c3RlbXMsIGxpa2UgdGhlIHNjaGVkdWxlciwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwcm9jZnMsIG1lYW5zIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGlzIGEgV29ydGhGdXp6aW5nPXRydWUgc2NlbmFyaW8hIGBmcy9wcm9jL2Jhc2UuY2AsIGBtbS9vb21fa2lsbC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0va3NtLmNgLCBhbmQgYHNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNgIGFyZSBhbGwgYWZmZWN0ZWQsIGFuZCB0aGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYCBmaWxlLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncyEgU28sIGl04oCZcyBleGVjdXRhYmxlIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSBhbmQgdG91Y2hlcyBjb3JlIGFyZWFzIVxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEZpcnN0IHVwIGlzIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGl0cyBgX19zZXRfb29tX2FkamAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fc2V0X29vbV9hZGpgIGZvciBhIGJldHRlciB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjUzLjU0MTI5NTU0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NldF9vb21fYWRqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwODU9c3RhdGljIHNzaXplX3Qgb29tX2Fkal9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMTA2LVxcbmZzL3Byb2MvYmFzZS5jOjExMDc6c3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuZnMvcHJvYy9iYXNlLmMtMTEwOC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMTk4PXN0YXRpYyBzc2l6ZV90IG9vbV9hZGpfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMjI5LVxcbmZzL3Byb2MvYmFzZS5jOjEyMzA6XFx0ZXJyID0gX19zZXRfb29tX2FkaihmaWxlLCBvb21fYWRqLCB0cnVlKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMjMxLW91dDpcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEyNTc9c3RhdGljIHNzaXplX3Qgb29tX3Njb3JlX2Fkal93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEyNzktXFxuZnMvcHJvYy9iYXNlLmM6MTI4MDpcXHRlcnIgPSBfX3NldF9vb21fYWRqKGZpbGUsIG9vbV9zY29yZV9hZGosIGZhbHNlKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMjgxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NTMuNTg5NDA4MjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NjMyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBPT00ga2lsbGVyJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBtbS9vb21fa2lsbC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gZmFtaWxpYXIgd2l0aCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgb29tX2NwdXNldF9lbGlnaWJsZWAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgZHVtcF90YXNrc2AsIGB0YXNrX3dpbGxfZnJlZV9tZW1gLCBhbmQsIGNydWNpYWxseSwgYF9fb29tX2tpbGxfcHJvY2Vzc2AsIGFuZCBob3cgdGhleSdyZSBvcmNoZXN0cmF0ZWQsIHNwZWNpZmljYWxseSBhdCB0aGUgZW50cnkgcG9pbnQgb2YgYG91dF9vZl9tZW1vcnlgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBPT00gbG9naWMgbGllcy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBMYW5kbG9jayB0c3luYyBzaXR1YXRpb24uIElzIHRoZSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYD8gT2theSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmaWxlIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBhbmQgYHNjaGVkdWxlX3Rhc2tfd29ya2AgaW4gcmVsYXRpb24gdG8gdHN5bmMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBMYW5kbG9jayBzeW5jaHJvbml6YXRpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjU1Ljk2NTczMzgzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NTAyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWR1bGVfdGFza193b3JrfGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz0zMjQ9c3RhdGljIHZvaWQgdHN5bmNfd29ya3NfcmVsZWFzZShzdHJ1Y3QgdHN5bmNfd29ya3MgKnMpXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTM0NC0vKlxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ1OiAqIGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyAtIGNvdW50cyB0aGUgc2libGluZyB0aHJlYWRzIHRoYXQgYXJlIG5vdCBpbiB3b3Jrc1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzQ2LSAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ3OnN0YXRpYyBzaXplX3QgY291bnRfYWRkaXRpb25hbF90aHJlYWRzKGNvbnN0IHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MpXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDgte1xcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNzItLypcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM3MzogKiBzY2hlZHVsZV90YXNrX3dvcmsgLSBhZGRzIHRhc2tfd29yayBmb3IgYWxsIGVsaWdpYmxlIHNpYmxpbmcgdGhyZWFkc1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzc0LSAqICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGhhdmUgbm90IGJlZW4gc2NoZWR1bGVkIHlldFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODEtICovXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYzozODI6c3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0c3luY19zaGFyZWRfY29udGV4dCAqc2hhcmVkX2N0eClcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM9NDgxPWludCBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY29uc3Qgc3RydWN0IGNyZWQgKm9sZF9jcmVkLFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01NTAtXFx0XFx0LyogSW4gUkNVIHJlYWQtbG9jaywgY291bnQgdGhlIHRocmVhZHMgd2UgbmVlZC4gKi9cXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjU1MTpcXHRcXHRuZXdseV9kaXNjb3ZlcmVkX3RocmVhZHMgPSBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoXFx1MDAyNndvcmtzKTtcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTU1Mi1cXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTgwLVxcdFxcdCAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6NTgxOlxcdFxcdGZvdW5kX21vcmVfdGhyZWFkcyA9IHNjaGVkdWxlX3Rhc2tfd29yayhcXHUwMDI2d29ya3MsIFxcdTAwMjZzaGFyZWRfY3R4KTtcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTU4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NTYuMDIwMzkxOTc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODA3MzkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBTaW5nbGUtVGhyZWFkZWQgRXhlY3V0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaW5nbGUtdGhyZWFkZWQgYXNwZWN0IG9mIHRoaXMgY29kZS4gRmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQncyBpbmZsdWVuY2luZyB0aGUgcHJvZ3JhbSdzIGJlaGF2aW9yLiBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDowMC4wMDExMzQ1NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAzMTY4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaD02MzM9ZXh0ZXJuIHZvaWQgZmx1c2hfaXRpbWVyX3NpZ25hbHModm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0My1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oOjY0NDpleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0NS1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MzE1OT1zdGF0aWMgaW50IGNoZWNrX3Vuc2hhcmVfZmxhZ3ModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMTc5LVxcdGlmICh1bnNoYXJlX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pIHtcXG5rZXJuZWwvZm9yay5jOjMxODA6XFx0XFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxcbmtlcm5lbC9mb3JrLmMtMzE4MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE5MT1zdGF0aWMgaW50IHRpbWVuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5ldylcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE5NS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYzoxOTY6XFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE5Ny1cXHRcXHRyZXR1cm4gLUVVU0VSUztcXG4tLVxcbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNC0gKi9cXG5saWIvaXNfc2luZ2xlX3RocmVhZGVkLmM6MTU6Ym9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKVxcbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNi17XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYz0xNDg0PWludCBhYV9jaGFuZ2VfcHJvZmlsZShjb25zdCBjaGFyICpmcW5hbWUsIGludCBmbGFncylcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jLTE1ODctXFx0LyogVE9ETzogYWRkIHBlcm1pc3Npb24gY2hlY2sgdG8gYWxsb3cgdGhpc1xcbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jOjE1ODg6XFx0ICogaWYgKChmbGFncyBcXHUwMDI2IEFBX0NIQU5HRV9PTkVYRUMpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XFxuc2VjdXJpdHkvYXBwYXJtb3IvZG9tYWluLmMtMTU4OS1cXHQgKiAgICAgIGluZm8gPSBcXFwibm90IGEgc2luZ2xlIHRocmVhZGVkIHRhc2tcXFwiO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3NDQ9c3RhdGljIGludCBzZWxpbnV4X2xzbV9zZXRhdHRyKHU2NCBhdHRyLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1MS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Njg1MjpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKCkpIHtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1My1cXHRcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2JvdW5kZWRfdHJhbnNpdGlvbihjcnNlYy1cXHUwMDNlc2lkLCBzaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDowMS43NTE0NjA4NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyNjM3NTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgbG9jYXRpb25zIGZvciB0aGlzIHRhc2suIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcgbGlrZWx5IGZpbGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgZGVhbGluZyB3aXRoIHByb2Nlc3MgbWFuYWdlbWVudCwgbWVtb3J5IGhhbmRsaW5nLCBhbmQgcmVzb3VyY2UgY29udHJvbC4gSSB3aWxsIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZCBmdW5jdGlvbnM6XG5cbiogICBgbW0va3NtLmNgOiBJIHNob3VsZCBjaGVjayB0aGUgYGNvbGxlY3RfcHJvY3Nfa3NtYCBmdW5jdGlvbiB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGxlYWRzXG4qICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgOiBJJ2xsIGxvb2sgaW50byBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGNvbGxlY3RfcHJvY3NfZmlsZWAsIGBjb2xsZWN0X3Byb2NzX2ZzZGF4YCwgYW5kIGBjb2xsZWN0X3Byb2NzX3BmbmAuXG4qICAgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2A6IEknbGwgd2FudCB0byByZXZpZXcgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBhbmQgYHNob3dfcmR0X3Rhc2tzYC5cbiogICBga2VybmVsL2ZyZWV6ZXIuY2A6IEknbGwgY2hlY2sgYHRoYXdfcHJvY2Vzc2AuXG4qICAgYGtlcm5lbC9zY2hlZC9jb3JlLmNgOiBJIHNob3VsZCBjaGVjayBgdWNsYW1wX3N5bmNfdXRpbF9taW5fcnRfZGVmYXVsdGAuXG4qICAgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2A6IEkgbmVlZCB0byBsb29rIGludG8gYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YC5cbiogICBga2VybmVsL2h1bmdfdGFzay5jYDogSSBzaG91bGQgbG9vayBpbnRvIGBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrc2AuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIEtjb25maWcgZmlsZXMgZm9yIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzLCBrZWVwaW5nIGluIG1pbmQgdGhhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGAgaXMgbGlrZWx5IGludm9sdmVkLiBUaGUgbW9kaWZpZWQgZmlsZXMgSSBzaG91bGQgbG9vayBhdDpcblxuKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfUFJPQ19GU2BcbiogICBgZnMvcmVzY3RybC9yZHRncm91cC5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19SRVNDVFJMX0ZTYCBhbmQgYENPTkZJR19YODZfQ1BVX1JFU0NUUkxgLiBJdCBpcyBpbXBvcnRhbnQgdG8gYWxzbyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBmcy9yZXNjdHJsYC5cbiogICBga2VybmVsL2h1bmdfdGFzay5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19ERVRFQ1RfSFVOR19UQVNLYC5cbiogICBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19MT0NLREVQYC5cbiogICBgbW0va3NtLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX0tTTWAuXG4qICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC5cbiogICBgc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIGBmcy9yZXNjdHJsYCB0byBzZWUgd2hhdCBlbHNlIEkgY2FuIGdsZWFuIGZyb20gdGhlcmUuIEkgYW0gcmVhZHkgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA2Ljc3NzgzODUwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMDM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmR0Z3JvdXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9yZXNjdHJsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9yZXNjdHJsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmZzL3Jlc2N0cmwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkVTQ1RSTF9GUylcXHRcXHQrPSByZHRncm91cC5vIGN0cmxtb25kYXRhLm8gbW9uaXRvci5vXFxuZnMvcmVzY3RybC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19SRVNDVFJMX0ZTX1BTRVVET19MT0NLKVxcdCs9IHBzZXVkb19sb2NrLm9cXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz0zMDE2PXN0YXRpYyB2b2lkIHJtZGlyX2FsbF9zdWIodm9pZClcXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI2LVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzozMDI3OlxcdFxcdC8qIFJlbW92ZSBlYWNoIHJkdGdyb3VwIG90aGVyIHRoYW4gcm9vdCAqL1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI4LVxcdFxcdGlmIChyZHRncnAgPT0gXFx1MDAyNnJkdGdyb3VwX2RlZmF1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA2LjgyNDE0NzU3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQwODE0NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTGFuZGxvY2sgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVgLiBJIGtub3cgdGhpcyBhcmVhIGluc2lkZSBhbmQgb3V0LCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgdGhpbmdzLCBidXQgYSBmcmVzaCBwZXJzcGVjdGl2ZSBuZXZlciBodXJ0cy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBidWlsdCwgaG93IHRoZSB0YXJnZXRzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHJlY2VudCBjaGFuZ2VzLCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2VzcyBvciB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiBMYW5kbG9jayBpdHNlbGYuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IHRhcmdldHMg4oCTIHRoZSBrZXJuZWwgbW9kdWxlIGJ1aWxkLCBhbnkgdXNlci1zcGFjZSB0b29scywgYW5kIHRoZSByZWxldmFudCBpbmNsdWRlIHBhdGhzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHJvYnVzdCBhbmQgc2VjdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA5LjY2NDk2NDc2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MDM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHN5bmMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGU9Mz1sYW5kbG9jay15IDo9IFxcXFxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEwLVxcdGZzLm8gXFxcXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlOjExOlxcdHRzeW5jLm8gXFxcXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEyLVxcdGRvbWFpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA5LjcxMzQ3Mzk3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI1OTcwMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZncmFwaC5jYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciB0cmFjaW5nIGJlaGF2aW9yPyBNeSBndXQgdGVsbHMgbWUgdGhhdCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCBpcyBwcm9iYWJseSB0aGUgcmlnaHQgcGxhY2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIFRoYXQgZmlsZSdzIHByb2JhYmx5IGdvaW5nIHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhvb2tzIHRoYXQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTIuNzM5NDQ2OTI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI2NjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZ3JhcGgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT05Mj1vYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MzpvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05NC1pZmVxICgkKENPTkZJR19CTE9DSykseSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MS0gKiBGb3IgdHlwZSB3aXRoIFxcXCJiaXRtYXAgb2YgZmdyYXBoX2FycmF5IGluZGV4XFxcIiAoRkdSQVBIX1RZUEVfQklUTUFQKTpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDI6ICogIGJpdHM6IDEyIC0gMjdcXHRUaGUgYml0bWFwIG9mIGZncmFwaF9vcHMgZmdyYXBoX2FycmF5IGluZGV4XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQzLSAqXFx0XFx0XFx0VGhhdCBpcywgaXQncyBhIGJpdG1hc2sgb2YgMC0xNSAoMTYgYml0cylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01Ni0gKiBUaGF0IGlzLCBhdCB0aGUgZW5kIG9mIGZ1bmN0aW9uX2dyYXBoX2VudGVyLCBpZiB0aGUgZmlyc3QgYW5kIGZvcnRoXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU3OiAqIGZncmFwaF9vcHMgb24gdGhlIGZncmFwaF9hcnJheVtdIChpbmRleCAwIGFuZCAzKSBuZWVkcyB0aGVpciByZXRmdW5jIGNhbGxlZFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1ODogKiBvbiB0aGUgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQsIGFuZCB0aGUgZm9ydGggZmdyYXBoX29wc1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01OS0gKiBzdG9yZWQgdHdvIHdvcmRzIG9mIGRhdGEsIHRoaXMgaXMgd2hhdCB3aWxsIGJlIG9uIHRoZSB0YXNrJ3Mgc2hhZG93XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNzEtICogfCAgICAgICAgICpvciBwdXQgYW5vdGhlciB3YXkqICAgICAgICAgICAgICAgfFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo3MjogKiB8ICgzIFxcdTAwM2NcXHUwMDNjIEZHUkFQSF9EQVRBX0lOREVYX1NISUZUKXwgXFxcXCAgICAgICAgICB8IFRoaXMgaXMgZm9yIGZncmFwaF9vcHNbM10uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTczLSAqIHwgKCgyIC0gMSkgXFx1MDAzY1xcdTAwM2MgRkdSQVBIX0RBVEFfU0hJRlQpfCBcXFxcICAgICAgICAgIHwgVGhlIGRhdGEgc2l6ZSBpcyAyIHdvcmRzLlxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNT1lbnVtIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNjUtLypcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTY2OiAqIEVhY2ggZmdyYXBoX29wcyBoYXMgYSByZXNlcnZlZCB1bnNpZ25lZCBsb25nIGF0IHRoZSBlbmQgKHRvcCkgb2YgdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2Ny0gKiByZXRfc3RhY2sgdG8gc3RvcmUgdGFzayBzcGVjaWZpYyBzdGF0ZS5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xNzU9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmZ3JhcGhfc3RhY2tfY2FjaGVwO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzYtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE3NzpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9hcnJheVtGR1JBUEhfQVJSQVlfU0laRV07XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3OC1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZ3JhcGhfYXJyYXlfYml0bWFzaztcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0yODc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfZGF0YV90eXBlX3ZhbChpbnQgaWR4LCBpbnQgc2l6ZSwgaW50IG9mZnNldClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0yOTQtLyogZnRyYWNlX2dyYXBoX2VudHJ5IHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mjk1OnN0YXRpYyBpbnQgZW50cnlfcnVuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKm9wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk2LVxcdFxcdCAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMDEtLyogZnRyYWNlX2dyYXBoX3JldHVybiBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMwMjpzdGF0aWMgdm9pZCByZXR1cm5fcnVuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKm9wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAzLVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTMyMj1zdGF0aWMgdm9pZCByZXRfc3RhY2tfaW5pdF90YXNrX3ZhcnModW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNC0gKiBSZXNlcnZlcyBzcGFjZSBvZiB1cCB0byBGR1JBUEhfTUFYX0RBVEFfU0laRSBieXRlcyBvbiB0aGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM1OiAqIHRhc2sncyByZXRfc3RhY2sgc2hhZG93IHN0YWNrLCBmb3IgYSBnaXZlbiBmZ3JhcGhfb3BzIGR1cmluZ1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzYtICogdGhlIGVudHJ5ZnVuYygpIGNhbGwuIElmIGVudHJ5ZnVuYygpIHJldHVybnMgemVybywgdGhlIHN0b3JhZ2VcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM3LSAqIGlzIGRpc2NhcmRlZC4gQW4gZW50cnlmdW5jKCkgY2FuIG9ubHkgY2FsbCB0aGlzIG9uY2UgcGVyIGl0ZXJhdGlvbi5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM4OiAqIFRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBjYW4gcmV0cmlldmUgdGhpcyBzdG9yZWQgZGF0YSB3aXRoXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzOS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSgpLlxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM0Nj12b2lkICpmZ3JhcGhfcmVzZXJ2ZV9kYXRhKGludCBpZHgsIGludCBzaXplX2J5dGVzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4MS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSAtIFJldHJpZXZlIHN0b3JlZCBkYXRhIGZyb20gZmdyYXBoX3Jlc2VydmVfZGF0YSgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4MjogKiBAaWR4OlxcdHRoZSBpbmRleCBvZiBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzgzLSAqIEBzaXplX2J5dGVzOiBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemUuXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4NC0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODU6ICogVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgYSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSwgdG8gcmV0cmlldmUgZGF0YSB0aGF0XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4NjogKiB3YXMgc3RvcmVkIGJ5IHRoZSBmZ3JhcGhfb3BzIGVudHJ5ZnVuYygpIG9uIHRoZSBmdW5jdGlvbiBlbnRyeS5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg3LSAqIFRoYXQgaXMsIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgZGF0YSB0aGF0IHdhcyByZXNlcnZlZCBvbiB0aGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg4LSAqIGVudHJ5IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBleGl0IG9mIHRoZSBmdW5jdGlvblxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODk6ICogdGhhdCB0aGUgZmdyYXBoX29wcyByZXRmdW5jKCkgaXMgY2FsbGVkIG9uLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zOTAtICpcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zOTU9dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwMy0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDQ6ICogRXZlcnkgcmVnaXN0ZXJlZCBmZ3JhcGhfb3BzIGhhcyBhIHRhc2sgc3RhdGUgdmFyaWFibGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA1LSAqIHJlc2VydmVkIG9uIHRoZSB0YXNrJ3MgcmV0X3N0YWNrLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA3LSAqXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQwODogKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHRvIHRoZSBmZ3JhcGhfb3BzIEBnb3BzIHRhc2tzIHNwZWNpZmljXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwOS0gKiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTAtICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQxMTp1bnNpZ25lZCBsb25nICpmZ3JhcGhfZ2V0X3Rhc2tfdmFyKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTIte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTQzND1nZXRfcmV0X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IG9mZnNldCwgaW50ICpmcmFtZV9vZmZzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU0LSAqIGZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YSAtIGdldCBkYXRhIGZyb20gYSBwYXJlbnQgZnVuY3Rpb25cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDU1OiAqIEBpZHg6IFRoZSBpbmRleCBpbnRvIHRoZSBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU2LSAqIEBzaXplX2J5dGVzOiBBIHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyMT1pbnQgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MjI6XFx0XFx0XFx0ICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MjMtXFx0XFx0XFx0ICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTI4PXN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9yZXRfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUyOTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzMy1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTM0OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfc3R1YiA9IHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM1LVxcdC5lbnRyeWZ1bmMgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YixcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzgtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzOTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9kaXJlY3RfZ29wcyA9IFxcdTAwMjZmZ3JhcGhfc3R1YjtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTQwLURFRklORV9TVEFUSUNfQ0FMTChmZ3JhcGhfZnVuYywgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIpO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTY1Mj1pbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4Ni1cXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGZncmFwaF9hcnJheV9iaXRtYXNrKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Njg3OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4OC1cXHRcXHRcXHRpbnQgc2F2ZV9jdXJyX3JldF9zdGFjaztcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz04MTI9X19mdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIoc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncywgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTg1Ni1cXHRcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZiaXRtYXAsIHNpemVvZihiaXRtYXApICogQklUU19QRVJfQllURSkge1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo4NTc6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMgPSBSRUFEX09OQ0UoZmdyYXBoX2FycmF5W2ldKTtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU4LVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMTI9dm9pZCBmZ3JhcGhfaW5pdF9vcHMoc3RydWN0IGZ0cmFjZV9vcHMgKmRzdF9vcHMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTAzMS0gKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTAzMjp2b2lkIGZ0cmFjZV9zdHViX2dyYXBoKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzMtXFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExOTI9c3RhdGljIGludCBmZ3JhcGhfcGlkX2Z1bmMoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTkzOlxcdFxcdFxcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTk0LVxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTIxMT12b2lkIGZncmFwaF91cGRhdGVfcGlkX2Z1bmModm9pZClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxMi17XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMTM6XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTQtXFx0c3RydWN0IGZ0cmFjZV9vcHMgKm9wO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjAtXFx0XFx0aWYgKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZUUkFDRV9PUFNfRkxfUElEKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMjE6XFx0XFx0XFx0Z29wcyA9IGNvbnRhaW5lcl9vZihvcCwgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjItXFx0XFx0XFx0Z29wcy1cXHUwMDNlZW50cnlmdW5jID0gZnRyYWNlX3BpZHNfZW5hYmxlZChvcCkgP1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyNjQ9c3RhdGljIHZvaWQgaW5pdF90YXNrX3ZhcnMoaW50IGlkeClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjgxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjgyOnN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9lbmFibGVfZGlyZWN0KGJvb2wgZW5hYmxlX2JyYW5jaCwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyODMte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEzMjU9c3RhdGljIGludCBmZ3JhcGhfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzMxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMzMyOmludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzMzMte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTMtXFx0aWYgKCFmZ3JhcGhfaW5pdGlhbGl6ZWQpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTM1NDpcXHRcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwiZmdyYXBoOm9ubGluZVxcXCIsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTUtXFx0XFx0XFx0XFx0XFx0ZmdyYXBoX2NwdV9pbml0LCBOVUxMKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDIxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNDIyOnZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE0MjMte1xcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTQ3PXN0YXRpYyBERUZJTkVfTVVURVgoZnByb2JlX211dGV4KTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9iZV9ncmFwaF9vcHM7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTQ5LVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIwMT1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9mcHJvYmVfaGVhZGVyKHVuc2lnbmVkIGxvbmcgKnN0YWNrLFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTIxMy0gKiBmcHJvYmUgc2hhZG93IHN0YWNrIG1hbmFnZW1lbnQ6XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjIxNDogKiBTaW5jZSBmcHJvYmUgc2hhcmVzIGEgc2luZ2xlIGZncmFwaF9vcHMsIGl0IG5lZWRzIHRvIHNoYXJlIHRoZSBzdGFjayBlbnRyeVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTUtICogYW1vbmcgdGhlIHByb2JlcyBvbiB0aGUgc2FtZSBmdW5jdGlvbiBleGl0LiBOb3RlIHRoYXQgYSBuZXcgcHJvYmUgY2FuIGJlXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjMxPXN0YXRpYyBpbmxpbmUgaW50IF9fZnByb2JlX2twcm9iZV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1Mi1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjUzOnN0YXRpYyBpbnQgZnByb2JlX2ZncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yNTU9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1NjpcXHRcXHRcXHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTctXFx0XFx0XFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU4LVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9iZV9ncmFwaF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI2MC1cXHQuZW50cnlmdW5jXFx0PSBmcHJvYmVfZmdyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTUzNj1zdGF0aWMgdm9pZCBmcHJvYmVfcmVtb3ZlX2lwcyh1bnNpZ25lZCBsb25nICppcHMsIHVuc2lnbmVkIGludCBjbnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTQ1LVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDY6LyogZmdyYXBoX29wcyBjYWxsYmFjaywgdGhpcyBwcm9jZXNzZXMgZnByb2JlcyB3aGljaCBoYXZlIGV4aXRfaGFuZGxlci4gKi9cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NTQ3OnN0YXRpYyBpbnQgZnByb2JlX2ZncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy01NDgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NjQzPXN0YXRpYyB2b2lkIGZwcm9iZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo2NDQ6XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNjQ1LVxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE9c3RhdGljIGludCBwcm9maWxlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQyOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODQzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg2Nj1zdGF0aWMgdm9pZCBwcm9maWxlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg2NzpcXHRcXHRcXHRcXHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg2OC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05MTYtXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjkxNzpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2ZpbGVyX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE4LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2cHJvZmlsZV9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz00NDUxPXN0YXRpYyB2b2lkIHByaW50X3N1Ym9wcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2NS1cXHRcXHRpZiAoc3Vib3BzLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZUUkFDRV9PUFNfRkxfR1JBUEgpIHtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2NjpcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcztcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2Ny1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2ODpcXHRcXHRcXHRnb3BzID0gY29udGFpbmVyX29mKHN1Ym9wcywgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjktXFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiIHtlbnQ6JXBTIHJldDolcFN9XFxcIixcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDk3PV9faW5pdCB2b2lkIGZ0cmFjZV9pbml0X2dsb2JhbF9hcnJheV9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTAyLVxcdGZ0cmFjZV9pbml0X3RyYWNlX2FycmF5KHRyKTtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODUwMzpcXHRpbml0X2FycmF5X2ZncmFwaF9vcHModHIsIHRyLVxcdTAwM2VvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTA0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTMzMz1zdHJ1Y3QgdHJhY2VfYXJyYXkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM3LSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6NDM4OlxcdHN0cnVjdCBmZ3JhcGhfb3BzXFx0KmdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM5LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9ODE3PXZvaWQgcHJpbnRfdHJhY2VfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MTgtXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6ODE5OnZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODIwLVxcdFxcdFxcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgyMTppbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjItXFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMDYwPWV4dGVybiB2b2lkIF9fdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY0LVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjU6ZXh0ZXJuIHZvaWQgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjY6ZXh0ZXJuIGludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjc6ZXh0ZXJuIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEwNjgtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMTYzPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjExNjQ6ZnRyYWNlX2dyYXBoX2FkZHJfZmluaXNoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTE2NS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjAxPXN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9ncmFwaF9ub3RyYWNlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNC19XFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIwNTpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2FkZHJfZmluaXNoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNi17IH1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMTM9c3RhdGljIGlubGluZSBib29sXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIxNDpmdHJhY2VfZ3JhcGhfaWdub3JlX2Z1bmMoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSlcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjE1LXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMzA9cHJpbnRfZ3JhcGhfZnVuY3Rpb25fZmxhZ3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1MzIgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjMzLX1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cikgeyB9XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzNS0vKiBmdHJhY2Vfb3BzIG1heSBub3QgYmUgZGVmaW5lZCAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzY6I2RlZmluZSBpbml0X2FycmF5X2ZncmFwaF9vcHModHIsIG9wcykgZG8geyB9IHdoaWxlICgwKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzc6I2RlZmluZSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCBvcHMpICh7IDA7IH0pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzOC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTg0PWludCBmdHJhY2VfY3JlYXRlX2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTctXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjk4OlxcdHJldCA9IGFsbG9jYXRlX2ZncmFwaF9vcHModHIsIHRyLVxcdTAwM2VvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM9MTA5PXZvaWQgZnRyYWNlX2Rlc3Ryb3lfZnVuY3Rpb25fZmlsZXMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTItXFx0ZnRyYWNlX2ZyZWVfZnRyYWNlX29wcyh0cik7XFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjExMzpcXHRmcmVlX2ZncmFwaF9vcHModHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTQtfVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTIyNT1zdGF0aWMgaW50IGdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MjI2OlxcdFxcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjI3LVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTI5ND1pbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzoyOTU6XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTI5Ni1cXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTMwMT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X2FyZ3Moc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozMDI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzAzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zNjg9dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozNjk6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTM3MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mzk5PXN0YXRpYyB2b2lkIHRyYWNlX2dyYXBoX3RocmVzaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0MDA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQwMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzNC1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDM1OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmdW5jZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzYtXFx0LmVudHJ5ZnVuYyA9IFxcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzktXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ0MDppbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDEte1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDI6XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ0My1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NTgtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ1OTp2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjAte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2My1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDY0Ol9faW5pdCB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjUte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0xNzg9c3RhdGljIGludCBpcnFzb2ZmX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjE3OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0xODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTIxNT1zdGF0aWMgdm9pZCBpcnFzb2ZmX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyMTY6XFx0XFx0XFx0XFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjE3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDAtXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyNDE6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDItXFx0LmVudHJ5ZnVuY1xcdFxcdD0gXFx1MDAyNmlycXNvZmZfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTQ4ND1zdGF0aWMgaW50IHJlZ2lzdGVyX2lycXNvZmZfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGdyYXBoLCBpbnQgc2V0KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTItXFx0aWYgKGdyYXBoKVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6NDkzOlxcdFxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTQtXFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz01MDM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaClcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTA4LVxcdGlmIChncmFwaClcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjUwOTpcXHRcXHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy01MTAtXFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTExNT1zdGF0aWMgaW50IHdha2V1cF9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjExNjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTE3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTUxPXN0YXRpYyB2b2lkIHdha2V1cF9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNTI6XFx0XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3Ny1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTc4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfd2FrZXVwX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTc5LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2d2FrZXVwX2dyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9NzY4PXN0cnVjdCBmZ3JhcGhfZml4dHVyZSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6NzY5OlxcdHN0cnVjdCBmZ3JhcGhfb3BzIGdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzcwLVxcdGludCBzdG9yZV9zaXplO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9Nzc2PXN0YXRpYyBfX2luaXQgaW50IHN0b3JlX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Nzc6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzc4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz04MTA9c3RhdGljIF9faW5pdCB2b2lkIHN0b3JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6ODExOlxcdFxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTgxMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9MTAyOT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDMwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwMzEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwNDctXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA0ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX29wcyBfX2luaXRkYXRhICA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ5LVxcdC5lbnRyeWZ1bmNcXHRcXHQ9IFxcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwNjI9dHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODAtXFx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcXHUwMDI2dHItXFx1MDAzZWFycmF5X2J1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MTpcXHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDgyOlxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA4My1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTAzLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDQ6XFx0LyogTmVlZCB0byBhbHNvIHNpbXVsYXRlIHRoZSB0ci1cXHUwMDNlcmVzZXQgdG8gcmVtb3ZlIHRoaXMgZmdyYXBoX29wcyAqL1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDUtXFx0dHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTEwNjpcXHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwNy1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjMtXFx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcXHUwMDI2dHItXFx1MDAzZWFycmF5X2J1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTEyNDpcXHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTI1LVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0NS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTQ2OlxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTU5LVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExNjA6XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjEyLjc5MDcxODg5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc4OTU4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlcioqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgdGVsbGluZyBtZSB0byBsb29rIGludG8gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDU3LiBUaGF0J3Mgd2hlcmUgdGhleSBhcmUgcG9pbnRpbmcgbWUgdG8gZmluZCBhIHNwZWNpZmljIGNhbGwgdG8gYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YC4gT2theSwgc28gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2hvd2luZyBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgdGhlcmUsIHRoZSBuYW1lIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAgaXRzZWxmLCB0ZWxscyBtZSwgdGhhdCB0aGUgZnVuY3Rpb24gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYSBsaW5rZWQgbGlzdCwgb3IgZGF0YSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyBvciBmdW5jdGlvbiBjYWxsIGhpc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTUuMTY5Njc5ODg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMzc9dHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnkgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YjtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDM5LS8qIFRyeSB0byBhc3NpZ24gYSByZXR1cm4gc3RhY2sgYXJyYXkgb24gRlRSQUNFX1JFVFNUQUNLX0FMTE9DX1NJWkUgdGFza3MuICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwNDA6c3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwNDEte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMzI9c3RhdGljIGludCBzdGFydF9ncmFwaF90cmFjaW5nKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI0OS1cXHRkbyB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyNTA6XFx0XFx0cmV0ID0gYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QocmV0X3N0YWNrX2xpc3QpO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjUxLVxcdH0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTUuMjE2MTk5Mzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTcxMjM2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVbndpbmQgRGVmZXJyYWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgdW53aW5kaW5nIHByb2Nlc3MuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmVycyB1bndpbmRpbmcgd29yaywgc28gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBtaWdodCBiZSBtYW5pZmVzdGluZy4gVGhpcyBmaWxlIHVzdWFsbHkgaG9sZHMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyB1bndpbmQgb3BlcmF0aW9ucyB0aGF0IGNhbid0IGJlIGltbWVkaWF0ZWx5IHByb2Nlc3NlZCwgc28gSSdsbCBzdGFydCBoZXJlIGFuZCBzZWUgd2hhdCBjbHVlcyBJIGNhbiB1bmVhcnRoLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjE3LjIxMzMyNTY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW53aW5kX2RlZmVycmVkX2NhbmNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdW53aW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdW53aW5kL2RlZmVycmVkLmM9MjI5PWludCB1bndpbmRfZGVmZXJyZWRfcmVxdWVzdChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmssIHU2NCAqY29va2llKVxcbi0tXFxua2VybmVsL3Vud2luZC9kZWZlcnJlZC5jLTI5Ny1cXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmM6Mjk4OnZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXFxua2VybmVsL3Vud2luZC9kZWZlcnJlZC5jLTI5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjE3LjI2MDk3MzcyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDM4MDkxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNob29zZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSd2ZSBzZWxlY3RlZCBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogdWJpcXVpdG91cywgZm9jdXNpbmcgb24gdGhvc2Ugd2hpY2ggZWl0aGVyIGltcGxlbWVudCBvciBkaXJlY3RseSBjYWxsIHRoZSBsb29wcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJJ3ZlIGdvdCBhIGdvb2QgbGlzdDogYF9fc2V0X29vbV9hZGpgLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCwgYHNjaGVkdWxlX3Rhc2tfd29ya2AsIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgY29sbGVjdF9wcm9jc19rc21gLCBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YCwgYW5kIGByZHRncm91cF90YXNrc19hc3NpZ25lZGAuXG5cbkkndmUgdmVyaWZpZWQgdGhhdCBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgaW5kZWVkIG5vbi11YmlxdWl0b3VzIGFuZCByZXByZXNlbnRzIGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gYF9fc2V0X29vbV9hZGpgIGlzIHRoZSBwcm9jZnMgb29tX2FkaiBoYW5kbGVyLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBkZWFscyB3aXRoIGxhbmRsb2NrIHRocmVhZCBzeW5jaW5nLCBgc2NoZWR1bGVfdGFza193b3JrYCBpcyBwYXJ0IG9mIGxhbmRsb2NrJ3MgdGFzayB3b3JrIHNjaGVkdWxpbmcsIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAgaXMgYSBoZWxwZXIgZnJvbSBgbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jYCwgYHNlbGVjdF9iYWRfcHJvY2Vzc2AgaXMgdGhlIE9PTSBraWxsZXIgdmljdGltIHNlbGVjdG9yLCBgY29sbGVjdF9wcm9jc19rc21gIGhhbmRsZXMgS1NNIHJldmVyc2UgbWFwcGluZywgYGNvbGxlY3RfcHJvY3NfYW5vbmAgaXMgaW52b2x2ZWQgaW4gbW0gbWVtb3J5IGZhaWx1cmUgcHJvY2VzcyBjb2xsZWN0aW9uLCBgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RgIGlzIHRoZSBmZ3JhcGggcmV0c3RhY2sgYWxsb2NhdG9yLCBhbmQgZmluYWxseSwgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBjaGVja3MgcmVzY3RybCByZHRncm91cCB0YXNrcy5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGFyZWFzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlbSBhbGwuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlOiBgUFJPQ19GU2AsIGBLU01gLCBgTUVNT1JZX0ZBSUxVUkVgLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCwgYW5kIGBSRVNDVFJMX0ZTYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpuZXcqIHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChgZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrYCwgYGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrYCwgYW5kIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgYW5kIHRoZW4gcmVmYWN0b3JzIGl0ZXJhdGlvbnMgb3ZlciBwcm9jZXNzIGFuZCB0aHJlYWQgbGlzdHMgYWNyb3NzIGEgbnVtYmVyIG9mIGNvcmUgc3Vic3lzdGVtcy4gIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBwcm9jZnMsIHRoZSBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgS1NNLCBMYW5kbG9jaywgZnVuY3Rpb24gZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIFRoaXMgb2J2aW91c2x5IGNoYW5nZXMgcmVhY2hhYmxlIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2Uga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IHBvcHVsYXRlZCBhbmQgdmVyaWZpZWQuIFRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5dGhpbmcgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Nzk5LCJPdXRwdXRUb2tlbnMiOjI1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDoyMi42OTkwNjc5OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk4MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiS1NNXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiLFxuICAgIFwiUkVTQ1RSTF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V0X29vbV9hZGpcIixcbiAgICBcImNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICAgIFwic2NoZWR1bGVfdGFza193b3JrXCIsXG4gICAgXCJjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZFwiLFxuICAgIFwic2VsZWN0X2JhZF9wcm9jZXNzXCIsXG4gICAgXCJjb2xsZWN0X3Byb2NzX2tzbVwiLFxuICAgIFwiY29sbGVjdF9wcm9jc19hbm9uXCIsXG4gICAgXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICAgIFwicmR0Z3JvdXBfdGFza3NfYXNzaWduZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzY29wZWQtZ3VhcmQgUkNVIG1hY3JvcyAoZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrLCBmb3JfZWFjaF90aHJlYWRfcmN1bG9jaywgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jaykgYW5kIHJlZmFjdG9ycyBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGluY2x1ZGluZyBwcm9jZnMsIE9PTSBraWxsZXIsIG1lbW9yeSBmYWlsdXJlLCBLU00sIExhbmRsb2NrLCBmZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGxvY2tpbmcgYW5kIGNvbnRyb2wtZmxvdyBjaGFuZ2VzIGFjcm9zcyB0aGVzZSBzdWJzeXN0ZW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIktTTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlNFQ1VSSVRZX0xBTkRMT0NLXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgICBcIlJFU0NUUkxfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NldF9vb21fYWRqXCIsXG4gICAgXCJjb3VudF9hZGRpdGlvbmFsX3RocmVhZHNcIixcbiAgICBcInNjaGVkdWxlX3Rhc2tfd29ya1wiLFxuICAgIFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIixcbiAgICBcInNlbGVjdF9iYWRfcHJvY2Vzc1wiLFxuICAgIFwiY29sbGVjdF9wcm9jc19rc21cIixcbiAgICBcImNvbGxlY3RfcHJvY3NfYW5vblwiLFxuICAgIFwiYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RcIixcbiAgICBcInJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jaywgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2ssIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2spIGFuZCByZWZhY3RvcnMgcHJvY2Vzcy90aHJlYWQgaXRlcmF0aW9uIGFjcm9zcyBtdWx0aXBsZSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBpbmNsdWRpbmcgcHJvY2ZzLCBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSwgS1NNLCBMYW5kbG9jaywgZmdyYXBoIHRyYWNpbmcsIGFuZCByZXNjdHJsLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBsb2NraW5nIGFuZCBjb250cm9sLWZsb3cgY2hhbmdlcyBhY3Jvc3MgdGhlc2Ugc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MjIuNzc4MDU5NjIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwMTQyODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjIyLjc3ODY2ODgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTAwODE0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxcblxcblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDU4YmUzODk0MjQ2MDUuLjJjNDdkODM4YTFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC0xMTYxLDggKzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbiBcdGlmIChtbSkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XG4rXHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXG4gXHRcdFx0fVxuIFx0XHRcdHRhc2tfdW5sb2NrKHApO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRtbWRyb3AobW0pO1xuIFx0fVxuIGVycl91bmxvY2s6XG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5pbmRleCA1ZGNiYjBhOTY0ZTgxLi5iMTRkZjhiMjNmMWE4IDEwMDY0NFxuLS0tIGEvZnMvcmVzY3RybC9yZHRncm91cC5jXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcbkBAIC03MDksMTQgKzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZHRncm91cF9tdXRleCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgKzgyNCwxMyBAQCBzdGF0aWMgdm9pZCBzaG93X3JkdF90YXNrcyhzdHJ1Y3QgcmR0Z3JvdXAgKnIsIHN0cnVjdCBzZXFfZmlsZSAqcylcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnQ7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cGlkID0gdGFza19waWRfdm5yKHQpO1xuIFx0XHRcdGlmIChwaWQpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJWRcXG5cIiwgcGlkKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLjExMGVhOWYxMzFmMzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMiw2ICsyLDcgQEBcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxuICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcbiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpXHRcXFxuIFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbiBcbisvKlxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4rICogZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoKSB0aGF0IGF1dG9tYXRpY2FsbHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGVcbisgKiBSQ1UgcmVhZCBsb2NrIHZpYSBzY29wZWRfZ3VhcmQocmN1KS4gIFRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZVxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuKyAqIGdvdG8sIG9yIHJldHVybi5cbisgKi9cbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdGZvciAocCA9IFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcdTAwMjZpbml0X3Rhc2sgOyApXG4rXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4rXG4rLypcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxuKyAqIFVzZSAnZ290bycgdG8gZXhpdCBib3RoIGxvb3BzOyB0aGUgUkNVIHJlYWQgbG9jayBpcyByZWxlYXNlZFxuKyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4rICovXG4rI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIFxcXG4rXHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuK1x0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbitcbiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTtcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2NwdS5jXG4rKysgYi9rZXJuZWwvY3B1LmNcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdFx0LypcbkBAIC0xMjY4LDcgKzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdFx0YXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtXHUwMDNlbW0pO1xuIFx0XHR0YXNrX3VubG9jayh0KTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZyZWV6ZXIuYyBiL2tlcm5lbC9mcmVlemVyLmNcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnJlZXplci5jXG4rKysgYi9rZXJuZWwvZnJlZXplci5jXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbitcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0X190aGF3X3Rhc2sodCk7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXG5pbmRleCA2ZmNjOTRjZTRjYTlkLi43M2E1YWQzYmU5YThiIDEwMDY0NFxuLS0tIGEva2VybmVsL2h1bmdfdGFzay5jXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcbkBAIC0zMTUsMTMgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRoaXNfcm91bmRfY291bnQgPSAwO1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcbiBcdFx0XHRpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICszMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbi0gdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4rb3V0OlxuIFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCJcXG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcIlxcblwiKTtcbiBcdHByX3dhcm4oXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcbmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3VwZGF0ZS5jXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5AQCAtNTQ3LDE1ICs1NDcsMTMgQEAgdm9pZCBzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KHZvaWQpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cbi1cdHJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbid0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyFcbiBcdFx0Ly8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLlxuIFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ0LVx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXG4gXHRcdFx0Y29udGludWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCk7XG4gI2VuZGlmIC8vICNpZiBJU19FTkFCTEVEKENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi43ZjlkYmQ0YzdkNjJmIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTIwMTUsOCArMjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZClcbiBcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcClcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCArMTAyOSwxMiBAQCBzdGF0aWMgdm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9jcHUpXG4gI2VuZGlmXG4gXHRcdCAgIFwiXFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICh0YXNrX2NwdShwKSAhPSBycV9jcHUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHByaW50X3Rhc2sobSwgcnEsIHApO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mZ3JhcGguYyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuKysrIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodC1cdTAwM2VyZXRfc3RhY2sgPT0gTlVMTCkge1xuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQrK107XG4gXHRcdH1cbiBcdH1cbi1cbi11bmxvY2s6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBmcmVlOlxuIFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSsrKVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuKysrIGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgKzMxOSw4IEBAIHZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnVud2luZF9zcmN1KTtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbiBcdC8qIENsZWFyIHRoaXMgYml0IGZyb20gYWxsIHRocmVhZHMgKi9cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xuIFx0XHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXG4gXHRcdFx0XHQgICBcdTAwMjZ0LVx1MDAzZXVud2luZF9pbmZvLnVud2luZF9tYXNrKTtcbiBcdFx0aWYgKHQtXHUwMDNldW53aW5kX2luZm8uY2FjaGUpXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG5pbmRleCA4Yzk4YjIwYmZjNDE0Li40ZTdmZTg1NDU0YWI4IDEwMDY0NFxuLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbkBAIC0yNiw4ICsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAodW5saWtlbHkocCA9PSB0YXNrLVx1MDAzZWdyb3VwX2xlYWRlcikpXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG4gXHR9XG4gXHRyZXQgPSB0cnVlO1xuIGZvdW5kOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li44MzBmMzMxY2I2ZjViIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtMzI4MSw4ICszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzIFx1MDAyNiBQQUdFX01BU0s7XG4gXHRcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCA9IHJtYXBfaXRlbS1cdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcbkBAIC0zMjk5LDcgKzMyOTgsNiBAQCB2b2lkIGNvbGxlY3RfcHJvY3Nfa3NtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XG5AQCAtNTcyLDcgKzU3MSw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcbiB9XG4gXG5AQCAtNTg5LDkgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXG5AQCAtNjExLDcgKzYwOCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdC8qXG5AQCAtNjUzLDcgKzY0OCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRlNfREFYICovXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcbiBcbiBcdFx0dCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpO1xuQEAgLTIzMDMsNyArMjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuIFx0XHRcdFx0YWRkX3RvX2tpbGxfcGdvZmYodCwgdm1hLCB0b19raWxsLCBwZ29mZik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbisrKyBiL21tL29vbV9raWxsLmNcbkBAIC05NCw4ICs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soc3RhcnQsIHRzaykge1xuIFx0XHRpZiAobWFzaykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhpcyBpcyBhIG1lbXBvbGljeSBjb25zdHJhaW5lZCBvb20sIHRzaydzXG5AQCAtMTE0LDcgKzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcdGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcbiBcdFx0XHRpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC00MjMsMTQgKzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRcdC8qIEF2b2lkIHBvdGVudGlhbCBzb2Z0bG9ja3VwIHdhcm5pbmcgKi9cbiBcdFx0XHRpZiAoKCsraSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCArODgxLDcgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdCAqIGFyZSBkeWluZyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSB0aGF0IGEpIG5vYm9keSBwaW5zIGl0cyBtbSBhbmRcbiBcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcbkBAIC04OTcsNyArODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHQgKiBUaGF0IHRocmVhZCB3aWxsIG5vdyBnZXQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBzaW5jZSBpdCBoYXMgYVxuIFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxuQEAgLTk3NSw3ICs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICszNTEsNyBAQCBzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuIFxuIFx0Y2FsbGVyID0gY3VycmVudDtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbi1cbi1cdGZvcl9lYWNoX3RocmVhZChjYWxsZXIsIHRocmVhZCkge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4rXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MjIuNzc4NjY5ODUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTAwNzkyOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkNVIExvY2tpbmcgUmVmYWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIHNvbWUgaGVscGVyIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGA6IGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLiBUaGV5J3JlIGxldmVyYWdpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgUkFJSSBhcHByb2FjaCBmb3IgbWFuYWdpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIC8gYHJjdV9yZWFkX3VubG9jaygpYCBwYWlyIHdpdGhpbiB0aGUgbG9vcHMuIFNtYXJ0OyBjbGVhbiBhbmQgaGVscHMgYXZvaWQgdGhvc2UgbmFzdHkgUkNVIGxvY2svdW5sb2NrIG1pc21hdGNoZXMuXG5cblRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBlbmNhcHN1bGF0ZXMgdGhlIFJDVSByZWFkIGxvY2tpbmcgYW5kIHVubG9ja2luZyBhcm91bmQgdGhlIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBnb29kIG1vdmUgdG8gbWluaW1pemUgcG90ZW50aWFsIGVycm9ycy5cblxuTm93LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIHRoZSBjb252ZXJzaW9uIG9mIGEgYnVuY2ggb2YgZmlsZXM6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBldGMuLCBhIGdvb2Qgc3ByZWFkIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIGEgY29uY2VydGVkIGVmZm9ydCB0byBzdGFuZGFyZGl6ZSBhbmQgc2ltcGxpZnkgUkNVIHVzYWdlIGFjcm9zcyB0aGUgY29kZWJhc2UuXG5cbk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3Mgc2VlLi4uIGlzIHRoZXJlIGFueXRoaW5nIGhlcmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCByZWFkcz8gTm9wZSwgbm90aGluZyB0aGF0IGxvb2tzIGxpa2UgaXQ6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgTm8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gIE5vIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCBpdCdzIGxvb2tpbmcgcHJldHR5IGNsZWFuIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLlxuXG5JJ20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZpbGUgY2hhbmdlcyB0byBiZSBleHRyYSBjZXJ0YWluLiBJbiBga2VybmVsL2h1bmdfdGFzay5jYCwgdGhlIGB1bmxvY2s6YCBsYWJlbCBpcyBub3cgYG91dDpgLCBhbmQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgaGFzIGEganVtcCB0byBgZnJlZTpgIGxhYmVsIGRpcmVjdGx5LCBiZWNhdXNlIHRoZSBgc2NvcGVkX2d1YXJkYCBoYW5kbGVzIHRoZSBSQ1UgdW5sb2NraW5nLiBPa2F5LCBqdXN0IHRpZHlpbmcgdXAgdGhvc2UgZXhwbGljaXQgbG9jay91bmxvY2sgY2FsbHMuIFRoaXMgaXMganVzdCBhIGNsZWFudXAsIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Mb29raW5nIGNsb3NlciBhdCB0aGUgbWFjcm9zIHRoZW1zZWx2ZXMsIHllcywgaXQncyBqdXN0IGEgcmVmYWN0b3JpbmcuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvL2Zyb20gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIGV4aXN0aW5nIGxvY2tpbmcgYmVoYXZpb3IsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG5vdCBiZWluZyBhbHRlcmVkLiBBbnkgbG9ja2luZyBidWdzLCBsaWtlIFJDVSBuZXN0aW5nIG9yIGxpZmV0aW1lIGlzc3Vlcywgc2hvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIGFuZCBQUk9WRV9MT0NLSU5HLiBNZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTi5cblxuVGhlIHF1ZXN0aW9uIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UuIEhvd2V2ZXIsIEkgYW0gbm90IHNlZWluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSdyZSBnb29kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTmAgYW5kIGBLTVNBTlJlYXNvbmluZ2AuIEFuZCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBkZXRhaWwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uXG5cbk9rYXksIGFsbCBzZXQuIExldCdzIGdldCB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbCBnb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMSwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDo0NS44Nzk0NjU0MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 12:39:38 +0000 UTC FinishedAt: 2026-09-07 13:00:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "KSM", "MEMORY_FAILURE", "SECURITY_LANDLOCK", "FUNCTION_GRAPH_TRACER", "RESCTRL_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "KSM", "MEMORY_FAILURE", "SECURITY_LANDLOCK", "FUNCTION_GRAPH_TRACER", "RESCTRL_FS" ], "series_id": "8167d448-23c8-491b-9423-4a29ef730226" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__set_oom_adj", "count_additional_threads", "schedule_task_work", "current_is_single_threaded", "select_bad_process", "collect_procs_ksm", "collect_procs_anon", "alloc_retstack_tasklist", "rdtgroup_tasks_assigned" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX0xBTkRMT0NLJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtSRVNDVFJMX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXRfb29tX2FkaiYjMzQ7LAogICAgJiMzNDtjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfdGFza193b3JrJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkJiMzNDssCiAgICAmIzM0O3NlbGVjdF9iYWRfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtjb2xsZWN0X3Byb2NzX2tzbSYjMzQ7LAogICAgJiMzNDtjb2xsZWN0X3Byb2NzX2Fub24mIzM0OywKICAgICYjMzQ7YWxsb2NfcmV0c3RhY2tfdGFza2xpc3QmIzM0OywKICAgICYjMzQ7cmR0Z3JvdXBfdGFza3NfYXNzaWduZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxuXG5UaGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiBSQ1UgbG9jayBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8vZnJvbSB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIFJDVSBsb2NraW5nIGNoYW5nZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIChlLmcuIHVzZS1hZnRlci1mcmVlKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA1OGJlMzg5NDI0NjA1Li4yYzQ3ZDgzOGExYzc2IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jXG5AQCAtMTE2MSw4ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgX19zZXRfb29tX2FkaihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9vbV9hZGosIGJvb2wgbGVnYWN5KVxuIFx0aWYgKG1tKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICYjNDM7MTE3Nyw2IEBAIHN0YXRpYyBpbnQgX19zZXRfb29tX2FkaihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9vbV9hZGosIGJvb2wgbGVnYWN5KVxuIFx0XHRcdH1cbiBcdFx0XHR0YXNrX3VubG9jayhwKTtcbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0bW1kcm9wKG1tKTtcbiBcdH1cbiBlcnJfdW5sb2NrOlxuZGlmZiAtLWdpdCBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYyBiL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuY1xuaW5kZXggNWRjYmIwYTk2NGU4MS4uYjE0ZGY4YjIzZjFhOCAxMDA2NDRcbi0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5AQCAtNzA5LDE0ICYjNDM7NzA5LDEyIEBAIGludCByZHRncm91cF90YXNrc19hc3NpZ25lZChzdHJ1Y3QgcmR0Z3JvdXAgKnIpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkdGdyb3VwX211dGV4KTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICp0O1xuIFx0cGlkX3QgcGlkO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkge1xuIFx0XHRpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHtcbiBcdFx0XHRwaWQgPSB0YXNrX3BpZF92bnIodCk7XG4gXHRcdFx0aWYgKHBpZClcbiBcdFx0XHRcdHNlcV9wcmludGYocywgXCYjMzQ7JWRcXG5cJiMzNDssIHBpZCk7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJkdGdyb3VwX3Rhc2tzX3Nob3coc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5pbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuQEAgLTIsNiAmIzQzOzIsNyBAQFxuICNpZm5kZWYgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gI2RlZmluZSBfTElOVVhfU0NIRURfU0lHTkFMX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7XG4gI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KVx0XFxcbiBcdGZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4mIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlXG4mIzQzOyAqIFJDVSByZWFkIGxvY2sgdmlhIHNjb3BlZF9ndWFyZChyY3UpLiAgVGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlXG4mIzQzOyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuJiM0MztcdHNjb3BlZF9ndWFyZChyY3UpIFxcXG4mIzQzO1x0Zm9yIChwID0gXHUwMDI2aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9IFx1MDAyNmluaXRfdGFzayA7IClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXFxcbiYjNDM7XHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuJiM0MztcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEb3VibGUgbG9vcDogJiMzOTticmVhayYjMzk7IG9ubHkgZXhpdHMgdGhlIGlubmVyIGZvcl9lYWNoX3RocmVhZCgpIGxvb3AuXG4mIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkXG4mIzQzOyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXFxcbiYjNDM7XHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpXG4mIzQzO1xuIHR5cGVkZWYgaW50ICgqcHJvY192aXNpdG9yKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHZvaWQgKmRhdGEpO1xuIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmNcbmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcHUuY1xuQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRcdC8qXG5AQCAtMTI2OCw3ICYjNDM7MTI2Nyw2IEBAIHZvaWQgY2xlYXJfdGFza3NfbW1fY3B1bWFzayhpbnQgY3B1KVxuIFx0XHRhcmNoX2NsZWFyX21tX2NwdW1hc2tfY3B1KGNwdSwgdC1cdTAwM2VtbSk7XG4gXHRcdHRhc2tfdW5sb2NrKHQpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qIFRha2UgdGhpcyBDUFUgZG93bi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuY1xuaW5kZXggYTc2YmY5NTdmYjMyZC4uN2E4NzBmNzFkY2Y2YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mcmVlemVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmNcbkBAIC0yMTcsMTEgJiM0MzsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSB7XG4gXHRcdF9fdGhhd190YXNrKHQpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9odW5nX3Rhc2suYyBiL2tlcm5lbC9odW5nX3Rhc2suY1xuaW5kZXggNmZjYzk0Y2U0Y2E5ZC4uNzNhNWFkM2JlOWE4YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9odW5nX3Rhc2suY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2h1bmdfdGFzay5jXG5AQCAtMzE1LDEzICYjNDM7MzE1LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2h1bmdfdW5pbnRlcnJ1cHRpYmxlX3Rhc2tzKHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGhpc19yb3VuZF9jb3VudCA9IDA7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2JyZWFrICYjNDM7IEhVTkdfVEFTS19MT0NLX0JSRUFLKSkge1xuIFx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIFx0XHRcdGh1bmdfdGFza19pbmZvKHQsIHRpbWVvdXQsIHRoaXNfcm91bmRfY291bnQpO1xuIFx0XHR9XG4gXHR9XG4tIHVubG9jazpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVxuJiM0MztvdXQ6XG4gXHRpZiAoIXRoaXNfcm91bmRfY291bnQpXG4gXHRcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IGM1NmE3ZjkxZDcyZTIuLmVhMjE4ZGM3NWFkNTQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTY4MzQsMTUgJiM0Mzs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCYjMzQ7XFxuU2hvd2luZyBhbGwgbG9ja3MgaGVsZCBpbiB0aGUgc3lzdGVtOlxcblwmIzM0Oyk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcJiMzNDtcXG5cJiMzNDspO1xuIFx0cHJfd2FybihcJiMzNDs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5pbmRleCBiNjI3MzVhNjc4ODQyLi5iYWM2MzY2ZGE0MWUwIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS91cGRhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuY1xuQEAgLTU0NywxNSAmIzQzOzU0NywxMyBAQCB2b2lkIHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQodm9pZClcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdHNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LlxuLVx0cmN1X3JlYWRfbG9jaygpOyAvLyBQcm90ZWN0IHRhc2sgbGlzdC5cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbiYjMzk7dCBkZWFkbG9jayBvbiBvdXJzZWx2ZXMhXG4gXHRcdC8vIE9yZGVyIGxhdGVyIHJjdV9yZWFkX2xvY2soKSBvbiBvdGhlciB0YXNrcyBhZnRlciBRUy5cbiBcdFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dC1cdTAwM2VyY3VfdHJpdmlhbF9wcmVlbXB0X25lc3RpbmcpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQpO1xuICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uN2Y5ZGJkNGM3ZDYyZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0yMDE1LDggJiM0MzsyMDE1LDcgQEAgc3RhdGljIHZvaWQgdWNsYW1wX3N5bmNfdXRpbF9taW5fcnRfZGVmYXVsdCh2b2lkKVxuIFx0c21wX21iX19hZnRlcl9zcGlubG9jaygpO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKVxuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KVxuICNlbmRpZlxuIFx0XHQgICBcJiMzNDtcXG5cJiMzNDspO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xuIFx0XHRpZiAodGFza19jcHUocCkgIT0gcnFfY3B1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwcmludF90YXNrKG0sIHJxLCBwKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIHByaW50X2Nmc19ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcbmluZGV4IDQwZDM3M2Q2NWY5YjkuLmY3OTdjZTExOTIyMzMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuQEAgLTEwNTcsMTEgJiM0MzsxMDU3LDEwIEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0XHRnb3RvIGZyZWU7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmV0X3N0YWNrID09IE5VTEwpIHtcbkBAIC0xMDc0LDkgJiM0MzsxMDczLDYgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpXG4gXHRcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSByZXRfc3RhY2tfbGlzdFtzdGFydCYjNDM7JiM0MztdO1xuIFx0XHR9XG4gXHR9XG4tXG4tdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gZnJlZTpcbiBcdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYyBlbmQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKVxuIFxuIFx0c3luY2hyb25pemVfc3JjdShcdTAwMjZ1bndpbmRfc3JjdSk7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4gXHQvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGF0b21pY19sb25nX2FuZG5vdChCSVQoYml0KSxcbiBcdFx0XHRcdCAgIFx1MDAyNnQtXHUwMDNldW53aW5kX2luZm8udW53aW5kX21hc2spO1xuIFx0XHRpZiAodC1cdTAwM2V1bndpbmRfaW5mby5jYWNoZSlcbmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbmluZGV4IDhjOThiMjBiZmM0MTQuLjRlN2ZlODU0NTRhYjggMTAwNjQ0XG4tLS0gYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuY1xuQEAgLTI2LDggJiM0MzsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdGlmICh1bmxpa2VseShwLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHVubGlrZWx5KHAgPT0gdGFzay1cdTAwM2Vncm91cF9sZWFkZXIpKVxuQEAgLTQ4LDcgJiM0Mzs0Nyw1IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdH1cbiBcdHJldCA9IHRydWU7XG4gZm91bmQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmNcbmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0XG4tLS0gYS9tbS9rc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va3NtLmNcbkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcbiBcdFx0XHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXg7XG5AQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li43ZDkzZGViMWY3YjNkIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTU1NSw4ICYjNDM7NTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIH1cbiBcbkBAIC01ODksOSAmIzQzOzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTtcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuQEAgLTYxMSw3ICYjNDM7NjA4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbkBAIC02MzUsOCAmIzQzOzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdHNrO1xuIFxuIFx0XHQvKlxuQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdGFkZF90b19raWxsX2ZzZGF4KHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cbkBAIC0yMjg4LDggJiM0MzsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4mIzQzO1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdHQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCB0cnVlKTtcbkBAIC0yMzAzLDcgJiM0MzsyMjk2LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9wZ29mZih0LCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXG5pbmRleCA1ZDQ4YmQ4NjJjMjdiLi45ZTNkMDIzOTMwNjRmIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuY1xuQEAgLTk0LDggJiM0Mzs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuJiM0MztcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHtcbiBcdFx0aWYgKG1hc2spIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoaXMgaXMgYSBtZW1wb2xpY3kgY29uc3RyYWluZWQgb29tLCB0c2smIzM5O3NcbkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICYjNDM7MzU5LDkgQEAgc3RhdGljIHZvaWQgc2VsZWN0X2JhZF9wcm9jZXNzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRlbHNlIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocClcbiYjNDM7XHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKVxuIFx0XHRcdGlmIChvb21fZXZhbHVhdGVfdGFzayhwLCBvYykpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG4gfVxuIFxuQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuJiM0MztcdFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0XHQvKiBBdm9pZCBwb3RlbnRpYWwgc29mdGxvY2t1cCB3YXJuaW5nICovXG4gXHRcdFx0aWYgKCgmIzQzOyYjNDM7aSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHQgKiBhcmUgZHlpbmcgYXMgd2VsbCB0byBtYWtlIHN1cmUgdGhhdCBhKSBub2JvZHkgcGlucyBpdHMgbW0gYW5kXG4gXHQgKiBiKSB0aGUgdGFzayBpcyBhbHNvIHJlYXBhYmxlIGJ5IHRoZSBvb20gcmVhcGVyLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuQEAgLTg5Nyw3ICYjNDM7ODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKVxuIFx0ICogVGhhdCB0aHJlYWQgd2lsbCBub3cgZ2V0IGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgc2luY2UgaXQgaGFzIGFcbiBcdCAqIHBlbmRpbmcgZmF0YWwgc2lnbmFsLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbiYjNDM7XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAsIHZpY3RpbSkpXG5AQCAtOTc1LDcgJiM0Mzs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcylcbiBcbiBcdGNhbGxlciA9IGN1cnJlbnQ7XG4gXG4tXHRndWFyZChyY3UpKCk7XG4tXG4tXHRmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHtcbiYjNDM7XHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM5Miw5ICYjNDM7MzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4mIzQzO1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAgICYjMzQ7UkVTQ1RSTF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2V0X29vbV9hZGomIzM0OywKICAgICYjMzQ7Y291bnRfYWRkaXRpb25hbF90aHJlYWRzJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX3Rhc2tfd29yayYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtzZWxlY3RfYmFkX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19rc20mIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19hbm9uJiMzNDssCiAgICAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgICAmIzM0O3JkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNThiZTM4OTQyNDYwNS4uMmM0N2Q4MzhhMWM3NiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTExNjEsOCAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSkKIAlpZiAobW0pIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMTc4LDcgJiM0MzsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpCiAJCQl9CiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJbW1kcm9wKG1tKTsKIAl9CiBlcnJfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jCmluZGV4IDVkY2JiMGE5NjRlODEuLmIxNGRmOGIyM2YxYTggMTAwNjQ0Ci0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmMKQEAgLTcwOSwxNCAmIzQzOzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKQogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkdGdyb3VwX211dGV4KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKIAlwaWRfdCBwaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHsKIAkJaWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7CiAJCQlwaWQgPSB0YXNrX3BpZF92bnIodCk7CiAJCQlpZiAocGlkKQogCQkJCXNlcV9wcmludGYocywgJiMzNDslZFxuJiMzNDssIHBpZCk7CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAppbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2lmbmRlZiBfTElOVVhfU0NIRURfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwpAQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7CiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpCVwKIAlmb3JfZWFjaF9wcm9jZXNzKHApIGZvcl9lYWNoX3RocmVhZChwLCB0KQogCiYjNDM7LyoKJiM0MzsgKiBWYXJpYW50cyBvZiBmb3JfZWFjaF9wcm9jZXNzKCksIGZvcl9lYWNoX3RocmVhZCgpIGFuZAomIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlCiYjNDM7ICogUkNVIHJlYWQgbG9jayB2aWEgc2NvcGVkX2d1YXJkKHJjdSkuICBUaGUgbG9jayBpcyBoZWxkIGZvciB0aGUKJiM0MzsgKiBkdXJhdGlvbiBvZiB0aGUgbG9vcCBhbmQgcmVsZWFzZWQgb24gZXhpdCwgaW5jbHVkaW5nIHZpYSBicmVhaywKJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvciAocCA9ICZhbXA7aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9ICZhbXA7aW5pdF90YXNrIDsgKQomIzQzOwomIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CV9fZm9yX2VhY2hfdGhyZWFkKChwKS0mZ3Q7c2lnbmFsLCB0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogRG91YmxlIGxvb3A6ICYjMzk7YnJlYWsmIzM5OyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLgomIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkCiYjNDM7ICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpCiYjNDM7CiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTsKIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3B1LmMKQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkgKiBmdWxsLWZsZWRnZWQgdGFza2xpc3RfbG9jay4KIAkgKi8KIAlXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAkJLyoKQEAgLTEyNjgsNyAmIzQzOzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkJYXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtJmd0O21tKTsKIAkJdGFza191bmxvY2sodCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCBhNzZiZjk1N2ZiMzJkLi43YTg3MGY3MWRjZjZhIDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTIxNywxMSAmIzQzOzIxNyw5IEBAIHZvaWQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfdGhyZWFkKHAsIHQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlfX3RoYXdfdGFzayh0KTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jCmluZGV4IDZmY2M5NGNlNGNhOWQuLjczYTVhZDNiZTlhOGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9odW5nX3Rhc2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvaHVuZ190YXNrLmMKQEAgLTMxNSwxMyAmIzQzOzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiAJCXJldHVybjsKIAogCXRoaXNfcm91bmRfY291bnQgPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkgewogCQlpZiAoIW1heF9jb3VudC0tKQotCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJZ290byBvdXQ7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7CiAJCQlpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKQotCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCQlnb3RvIG91dDsKIAkJCWxhc3RfYnJlYWsgPSBqaWZmaWVzOwogCQl9CiAKQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KQogCQkJaHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7CiAJCX0KIAl9Ci0gdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCiYjNDM7b3V0OgogCWlmICghdGhpc19yb3VuZF9jb3VudCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggYzU2YTdmOTFkNzJlMi4uZWEyMThkYzc1YWQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNjgzNCwxNSAmIzQzOzY4MzQsMTMgQEAgdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQogCX0KIAlwcl93YXJuKCYjMzQ7XG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKCFwLSZndDtsb2NrZGVwX2RlcHRoKQogCQkJY29udGludWU7CiAJCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhwKTsKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByX3dhcm4oJiMzNDtcbiYjMzQ7KTsKIAlwcl93YXJuKCYjMzQ7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtNTQ3LDE1ICYjNDM7NTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCXNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LgotCXJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHQgPT0gY3VycmVudCkKIAkJCWNvbnRpbnVlOyAgLy8gRG9uJiMzOTt0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyEKIAkJLy8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLgogCQl3aGlsZSAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3QtJmd0O3JjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpCiAJCQljb250aW51ZTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KTsKICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IGY3ODI3NTE5MjAzNmIuLjdmOWRiZDRjN2Q2MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjAxNSw4ICYjNDM7MjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZCkKIAlzbXBfbWJfX2FmdGVyX3NwaW5sb2NrKCk7CiAJcmVhZF91bmxvY2soJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAotCWd1YXJkKHJjdSkoKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKQomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApCiAJCXVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwppbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwpAQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KQogI2VuZGlmCiAJCSAgICYjMzQ7XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKHRhc2tfY3B1KHApICE9IHJxX2NwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXByaW50X3Rhc2sobSwgcnEsIHApOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmMKaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2ZncmFwaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguYwpAQCAtMTA1NywxMSAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpCiAJCX0KIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHN0YXJ0ID09IGVuZCkgewogCQkJcmV0ID0gLUVBR0FJTjsKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gZnJlZTsKIAkJfQogCiAJCWlmICh0LSZndDtyZXRfc3RhY2sgPT0gTlVMTCkgewpAQCAtMTA3NCw5ICYjNDM7MTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KQogCQkJdC0mZ3Q7cmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQmIzQzOyYjNDM7XTsKIAkJfQogCX0KLQotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZnJlZToKIAlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspCiAJCWttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2tfbGlzdFtpXSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMKaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYwpAQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKQogCiAJc3luY2hyb25pemVfc3JjdSgmYW1wO3Vud2luZF9zcmN1KTsKIAotCWd1YXJkKHJjdSkoKTsKIAkvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJYXRvbWljX2xvbmdfYW5kbm90KEJJVChiaXQpLAogCQkJCSAgICZhbXA7dC0mZ3Q7dW53aW5kX2luZm8udW53aW5kX21hc2spOwogCQlpZiAodC0mZ3Q7dW53aW5kX2luZm8uY2FjaGUpCmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMKaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDQKLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYwpAQCAtMjYsOCAmIzQzOzI2LDcgQEAgYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldCA9IGZhbHNlOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHsKIAkJaWYgKHVubGlrZWx5KHAtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKQogCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShwID09IHRhc2stJmd0O2dyb3VwX2xlYWRlcikpCkBAIC00OCw3ICYjNDM7NDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpCiAJfQogCXJldCA9IHRydWU7CiBmb3VuZDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJc3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS0mZ3Q7YW5vbl92bWE7CiAKIAkJYW5vbl92bWFfbG9ja19yZWFkKGF2KTsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQkJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLSZndDthZGRyZXNzICZhbXA7IFBBR0VfTUFTSzsKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tJmd0O2xpbmVhcl9wYWdlX2luZGV4OwpAQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJfQogCQkJfQogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwogCQlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NTUsOCAmIzQzOzU1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZXR1cm47CiAKIAlwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTsKQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQlhZGRfdG9fa2lsbF9hbm9uX2ZpbGUodCwgcGFnZSwgdm1hLCB0b19raWxsLCBhZGRyKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiB9CiAKQEAgLTU4OSw5ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcGdvZmZfdCBwZ29mZjsKIAogCWlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7Ci0JcmN1X3JlYWRfbG9jaygpOwogCXBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIApAQCAtNjExLDcgJiM0Mzs2MDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApAQCAtNjM1LDggJiM0Mzs2MzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJLyoKQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQlhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqLwpAQCAtMjI4OCw4ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLSZndDttYXBwaW5nOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpOwpAQCAtMjMwMyw3ICYjNDM7MjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCQkJCWFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jCkBAIC05NCw4ICYjNDM7OTQsNyBAQCBzdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQsCiAJYm9vbCByZXQgPSBmYWxzZTsKIAljb25zdCBub2RlbWFza190ICptYXNrID0gb2MtJmd0O25vZGVtYXNrOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3RocmVhZChzdGFydCwgdHNrKSB7CiYjNDM7CWZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHsKIAkJaWYgKG1hc2spIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGlzIGEgbWVtcG9saWN5IGNvbnN0cmFpbmVkIG9vbSwgdHNrJiMzOTtzCkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCwKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNjEsMTEgJiM0MzszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYykKIAllbHNlIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKQomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApCiAJCQlpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKQogCQkJCWJyZWFrOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAkJaW50IGkgPSAwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJLyogQXZvaWQgcG90ZW50aWFsIHNvZnRsb2NrdXAgd2FybmluZyAqLwogCQkJaWYgKCgmIzQzOyYjNDM7aSAmYW1wOyAxMDIzKSA9PSAwKQogCQkJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJCWR1bXBfdGFzayhwLCBvYyk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJICogYXJlIGR5aW5nIGFzIHdlbGwgdG8gbWFrZSBzdXJlIHRoYXQgYSkgbm9ib2R5IHBpbnMgaXRzIG1tIGFuZAogCSAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpCkBAIC04OTcsNyAmIzQzOzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCSAqIFRoYXQgdGhyZWFkIHdpbGwgbm93IGdldCBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIHNpbmNlIGl0IGhhcyBhCiAJICogcGVuZGluZyBmYXRhbCBzaWduYWwuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocCwgdmljdGltKSkKQEAgLTk3NSw3ICYjNDM7OTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCQkJY29udGludWU7CiAJCWRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoY2FuX29vbV9yZWFwKQogCQlxdWV1ZV9vb21fcmVhcGVyKHZpY3RpbSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYwppbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMKQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcykKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwpAQCAtMzkyLDkgJiM0MzszOTAsNyBAQCBzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcywKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzOiBSQ1UgTG9jayBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBkaWZmIGl0c2VsZi4gSXQgaW50cm9kdWNlcyB0aGVzZSBuZXcgbWFjcm9zIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYDogYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKWAsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KWAsIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KWAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgdXNlIG9mIGBzY29wZWRfZ3VhcmQocmN1KWAuIFRoYXQmIzM5O3MgbmVhdDsgYXV0b21hdGljIFJDVSByZWFkIGxvY2sgbWFuYWdlbWVudCBkdXJpbmcgaXRlcmF0aW9uLiBTb3VuZHMgbGlrZSBhIGdlbmVyYWxseSBwb3NpdGl2ZSBkaXJlY3Rpb24uCgpOb3cgZm9yIHRoZSByZWZhY3RvcmluZyBpdHNlbGYuIEl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbCDigJMgYW5kIHRoZSBhcmVhcyBpbXBhY3RlZCBhcmUgYnJvYWQ6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBga2VybmVsL2NwdS5jYCwgYGtlcm5lbC9mcmVlemVyLmNgLCBga2VybmVsL2h1bmdfdGFzay5jYCwgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AsIGBrZXJuZWwvcmN1L3VwZGF0ZS5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBga2VybmVsL3NjaGVkL2RlYnVnLmNgLCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCwgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AsIGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9vb21fa2lsbC5jYCwgYW5kIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYC4gVGhhdCYjMzk7cyBhIGxvdCBvZiBzdXJmYWNlIGFyZWEhCgpCZWZvcmUgSSBnZXQgdG9vIGV4Y2l0ZWQgYWJvdXQgdGhpcyByZWZhY3RvcmluZywgbGV0JiMzOTtzIHpvb20gb3V0LiBDb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gKlJlYWNoYWJsZSogcGF0aHMgYXJlIGNyaXRpY2FsLiAgYHByb2NmcyBvb21fYWRqYCwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgdGhlIE9PTSBraWxsZXIsIExhbmRsb2NrLCBhbmQgVFNZTkMgLSB0aGVzZSBhcmUgYWxsIGhpZ2gtdG91Y2ggYXJlYXMsIHNvIHRoZSByZWFjaGFiaWxpdHkgaXMgY2xlYXJseSBhIGNvbmNlcm4uIAoKVGhlIHBoaWxvc29waHkgYWxzbyBoYXMgc3Ryb25nIHdhcm5pbmdzIGFib3V0IGJsaW5kIHRydXN0LiBObyEgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWNhdGlvbnMgbmVlZCBmdXp6aW5nLiBBbmQsIHRoZSBtb2RpZmljYXRpb24gb2YgbG9ja2luZywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXM/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgZGFuZ2VyIGxpc3QhIFN0cnVjdHVyZSwgYWJzdHJhY3Rpb24sIGZsb3cgY2hhbmdlcyAtIHRoZXkgYWxsIG5lZWQgc2NydXRpbnkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGludG8gdGhlIHRlY2huaWNhbCB3ZWVkcyBmb3IgYSBzZWNvbmQgYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbiBhbmQgYHNjb3BlZF9ndWFyZGAmIzM5O3MgbWVjaGFuaWNzLiBBbmQsIGxldCYjMzk7cyBsb29rIGF0IGBrZXJuZWwvaHVuZ190YXNrLmNgLiBXYWl0ISBUaGUgY2hhbmdlIHRoZXJlLi4uCmBgYGMKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKCFtYXhfY291bnQtLSkKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gb3V0OwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2JyZWFrICYjNDM7IEhVTkdfVEFTS19MT0NLX0JSRUFLKSkgewogCQkJaWYgKCFyY3VfbG9ja19icmVhayhnLCB0KSkKLQkJCQlnb3RvIHVubG9jazsKJiM0MzsJCQkJZ290byBvdXQ7CiAJCQlsYXN0X2JyZWFrID0gamlmZmllczsKIAkJfQouLi4KYGBgCgpSaWdodCwgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkYCB3aXRoIHRoZSBuZXcgbWFjcm8uIEJ1dC4uLiB3aGF0ICpleGFjdGx5KiBkb2VzIGByY3VfbG9ja19icmVhayhnLCB0KWAgZG8/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwgdGhhdCBuZWVkcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGdyZXAgdGhlIGNvZGViYXNlIG9yIHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgaW1wbGljYXRpb25zIGluIHRoaXMgY29udGV4dC4gVGhpcyByZWZhY3RvciAqY291bGQqIGJlIGZpbmUsIGJ1dCB0aGUgZGV2aWxzIGluIHRob3NlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X2xvY2tfYnJlYWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvaHVuZ190YXNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2h1bmdfdGFzay5jPTIzNT1zdGF0aWMgdm9pZCBodW5nX3Rhc2tfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCxcbi0tXG5rZXJuZWwvaHVuZ190YXNrLmMtMjgwLSAqL1xua2VybmVsL2h1bmdfdGFzay5jOjI4MTpzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbmtlcm5lbC9odW5nX3Rhc2suYy0yODIte1xuLS1cbmtlcm5lbC9odW5nX3Rhc2suYz0zMDE9c3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuLS1cbmtlcm5lbC9odW5nX3Rhc2suYy0zMjEtXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7XG5rZXJuZWwvaHVuZ190YXNrLmM6MzIyOlx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG5rZXJuZWwvaHVuZ190YXNrLmMtMzIzLVx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcmN1X2xvY2tfYnJlYWtgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvaHVuZ190YXNrLmNgLiBNeSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGNvbnRleHQuIGBodW5nX3Rhc2suY2AuLi50aGF0IHNjcmVhbXMgZGVidWdnaW5nLCBzcGVjaWZpY2FsbHkgaWRlbnRpZnlpbmcgdW5yZXNwb25zaXZlIHRhc2tzLiBBbmQgJiMzNDtyY3VfbG9ja19icmVhayYjMzQ7PyBUaGF0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gaW50ZXJydXB0aW5nIG9yIGNpcmN1bXZlbnRpbmcgUkNVIGxvY2tzIGluIGEgc2NlbmFyaW8gd2hlcmUgYSB0YXNrIGhhcyBwb3RlbnRpYWxseSBiZWNvbWUgd2VkZ2VkLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gdGhlIG1lY2hhbmlzbSB0aGF0IHRoZSBrZXJuZWwgZW1wbG95cyB0byBkZXRlY3QgYW5kIGhhbmRsZSB0YXNrcyB0aGF0IGFyZSBzdHVjayB3YWl0aW5nIGZvciBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdG8gY29tcGxldGUsIHBvdGVudGlhbGx5IGluZGljYXRpbmcgYSBkZWFkbG9jayBvciBsaXZlbG9jayBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkLCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIGludGVycnVwdGluZyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFuZCB3aGF0IHJlY292ZXJ5IGFjdGlvbnMgdGhpcyBmdW5jdGlvbiBtaWdodCB0cmlnZ2VyLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyB0aGUgc2FmZXR5IGFuZCBlZmZpY2llbmN5IGNvbnNpZGVyYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2h1bmdfdGFzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHQgKiBUbyBhdm9pZCBleHRlbmRpbmcgdGhlIFJDVSBncmFjZSBwZXJpb2QgZm9yIGFuIHVuYm91bmRlZCBhbW91bnQgb2YgdGltZSxcbiAyNzY6XHQgKiBwZXJpb2RpY2FsbHkgZXhpdCB0aGUgY3JpdGljYWwgc2VjdGlvbiBhbmQgZW50ZXIgYSBuZXcgb25lLlxuIDI3NzpcdCAqXG4gMjc4Olx0ICogRm9yIHByZWVtcHRpYmxlIFJDVSBpdCBpcyBzdWZmaWNpZW50IHRvIGNhbGwgcmN1X3JlYWRfdW5sb2NrIGluIG9yZGVyXG4gMjc5Olx0ICogdG8gZXhpdCB0aGUgZ3JhY2UgcGVyaW9kLiBGb3IgY2xhc3NpYyBSQ1UsIGEgcmVzY2hlZHVsZSBpcyByZXF1aXJlZC5cbiAyODA6XHQgKi9cbiAyODE6XHRzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiAyODI6XHR7XG4gMjgzOlx0XHRib29sIGNhbl9jb250O1xuIDI4NDpcdFxuIDI4NTpcdFx0Z2V0X3Rhc2tfc3RydWN0KGcpO1xuIDI4NjpcdFx0Z2V0X3Rhc2tfc3RydWN0KHQpO1xuIDI4NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMjg4Olx0XHRjb25kX3Jlc2NoZWQoKTtcbiAyODk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyOTA6XHRcdGNhbl9jb250ID0gcGlkX2FsaXZlKGcpIFx1MDAyNlx1MDAyNiBwaWRfYWxpdmUodCk7XG4gMjkxOlx0XHRwdXRfdGFza19zdHJ1Y3QodCk7XG4gMjkyOlx0XHRwdXRfdGFza19zdHJ1Y3QoZyk7XG4gMjkzOlx0XG4gMjk0Olx0XHRyZXR1cm4gY2FuX2NvbnQ7XG4gMjk1Olx0fVxuIDI5NjpcdFxuIDI5NzpcdC8qXG4gMjk4Olx0ICogQ2hlY2sgd2hldGhlciBhIFRBU0tfVU5JTlRFUlJVUFRJQkxFIGRvZXMgbm90IGdldCB3b2tlbiB1cCBmb3JcbiAyOTk6XHQgKiBhIHJlYWxseSBsb25nIHRpbWUuIElmIHRoYXQgaGFwcGVucywgcHJpbnQgb3V0IGEgd2FybmluZy5cbiAzMDA6XHQgKi9cbiAzMDE6XHRzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gMzAyOlx0e1xuIDMwMzpcdFx0aW50IG1heF9jb3VudCA9IHN5c2N0bF9odW5nX3Rhc2tfY2hlY2tfY291bnQ7XG4gMzA0Olx0XHR1bnNpZ25lZCBsb25nIGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xuIDMwNTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDtcbiAzMDY6XHRcdHVuc2lnbmVkIGxvbmcgdGhpc19yb3VuZF9jb3VudDtcbiAzMDc6XHRcdGludCBuZWVkX3dhcm5pbmcgPSBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzO1xuIDMwODpcdFx0dW5zaWduZWQgbG9uZyBzaV9tYXNrID0gaHVuZ190YXNrX3NpX21hc2s7XG4gMzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBQYXRjaDogQ29yZSBTdWJzeXN0ZW0gSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlc2UgbG9ja2luZyBtYWNyb3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIGNvbnN0cnVjdCBhbmQgbm93IGl0cyBgcmN1bG9ja2AgdmFyaWFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBhbmQgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgZG91YmxlIGxvb3AuIFRoZW4sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkb3VibGUgbG9vcCB0byB1c2UgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLgoKT2theSwgc28gYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgIHV0aWxpemVzIGEgYHNjb3BlZF9ndWFyZChyY3UpYC4gTm93IEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGJyZWFrYCB3aXRoaW4gdGhlIGxvb3BzIGlzIGJlaGF2aW5nIGNvcnJlY3RseS4gTXkgY29uY2VybiBub3cgaXMgYWJvdXQgaG93IHRoYXQgYGJyZWFrYCBhZmZlY3RzIHRoZSBSQ1UgbG9jayYjMzk7cyBzY29wZS4gRG9lcyBpdCBnZXQgcmVsZWFzZWQgd2hlbiB0aGUgZ3VhcmQgc2NvcGUgaXMgbGVmdCwgZXZlbiBpZiB0aGUgaW5uZXIgbG9vcCBicmVha3MgZWFybHk/IEJhc2VkIG9uIHRoZSBtYWNybyBkZWZpbml0aW9uLCB0aGUgYGJyZWFrYCB3b3VsZCBvbmx5IGV4aXQgdGhlIGlubmVyIGxvb3AsIGNvbnRpbnVpbmcgdGhlIG91dGVyIHByb2Nlc3MgbG9vcCwgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIHdoZW4gdGhlIGBzY29wZWRfZ3VhcmRgIHNjb3BlIGVuZHMuIFRoZSBvbGQgY29kZSBhbmQgdGhlIHBhdGNoIGFyZSBkb2luZyB0aGUgc2FtZSB0aGluZy4KCk15IGNvbmNlcm4gaXMgbm93LCBkb2VzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgZml4IGFueXRoaW5nPyBNeSBjb25jZXJuIGlzIGFsc28gdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgYmVjYXVzZSBvZiB0aGUgbG9jayByZWxlYXNlIGJlaW5nIGluZGVwZW5kZW50IG9mIHRoZSBsb29wIGV4aXQuCgpCdXQgaGV5LCB3YWl0IGEgc2Vjb25kLiBUaGlzIGNoYW5nZSBpc24mIzM5O3QganVzdCBhIG1pbm9yIHR3ZWFrLiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyB2YXJpb3VzIGNvcmUgc3Vic3lzdGVtcywgbGlrZSB0aGUgc2NoZWR1bGVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHByb2NmcywgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGlzIGEgV29ydGhGdXp6aW5nPXRydWUgc2NlbmFyaW8hIGBmcy9wcm9jL2Jhc2UuY2AsIGBtbS9vb21fa2lsbC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0va3NtLmNgLCBhbmQgYHNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNgIGFyZSBhbGwgYWZmZWN0ZWQsIGFuZCB0aGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYCBmaWxlLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIGludGVyZXN0aW5nIGJ1Z3MhIFNvLCBpdOKAmXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB0b3VjaGVzIGNvcmUgYXJlYXMhCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBGaXJzdCB1cCBpcyBgZnMvcHJvYy9iYXNlLmNgIGFuZCBpdHMgYF9fc2V0X29vbV9hZGpgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3NldF9vb21fYWRqYCBmb3IgYSBiZXR0ZXIgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NldF9vb21fYWRqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTA4NT1zdGF0aWMgc3NpemVfdCBvb21fYWRqX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMTA2LVxuZnMvcHJvYy9iYXNlLmM6MTEwNzpzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbmZzL3Byb2MvYmFzZS5jLTExMDgte1xuLS1cbmZzL3Byb2MvYmFzZS5jPTExOTg9c3RhdGljIHNzaXplX3Qgb29tX2Fkal93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMjI5LVxuZnMvcHJvYy9iYXNlLmM6MTIzMDpcdGVyciA9IF9fc2V0X29vbV9hZGooZmlsZSwgb29tX2FkaiwgdHJ1ZSk7XG5mcy9wcm9jL2Jhc2UuYy0xMjMxLW91dDpcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjU3PXN0YXRpYyBzc2l6ZV90IG9vbV9zY29yZV9hZGpfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTI3OS1cbmZzL3Byb2MvYmFzZS5jOjEyODA6XHRlcnIgPSBfX3NldF9vb21fYWRqKGZpbGUsIG9vbV9zY29yZV9hZGosIGZhbHNlKTtcbmZzL3Byb2MvYmFzZS5jLTEyODEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgT09NIGtpbGxlciYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkb3VibGUtY2hlY2sgYG1tL29vbV9raWxsLmNgLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgb29tX2NwdXNldF9lbGlnaWJsZWAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgZHVtcF90YXNrc2AsIGB0YXNrX3dpbGxfZnJlZV9tZW1gLCBhbmQsIGNydWNpYWxseSwgYF9fb29tX2tpbGxfcHJvY2Vzc2AsIGFuZCBob3cgdGhleSYjMzk7cmUgb3JjaGVzdHJhdGVkLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGVudHJ5IHBvaW50IG9mIGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIE9PTSBsb2dpYyBsaWVzLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBMYW5kbG9jayB0c3luYyBzaXR1YXRpb24uIElzIHRoZSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYD8gT2theSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmaWxlIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBhbmQgYHNjaGVkdWxlX3Rhc2tfd29ya2AgaW4gcmVsYXRpb24gdG8gdHN5bmMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBMYW5kbG9jayBzeW5jaHJvbml6YXRpb24gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkdWxlX3Rhc2tfd29ya3xjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz0zMjQ9c3RhdGljIHZvaWQgdHN5bmNfd29ya3NfcmVsZWFzZShzdHJ1Y3QgdHN5bmNfd29ya3MgKnMpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDQtLypcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ1OiAqIGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyAtIGNvdW50cyB0aGUgc2libGluZyB0aHJlYWRzIHRoYXQgYXJlIG5vdCBpbiB3b3Jrc1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDYtICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM0NzpzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDgte1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzcyLS8qXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM3MzogKiBzY2hlZHVsZV90YXNrX3dvcmsgLSBhZGRzIHRhc2tfd29yayBmb3IgYWxsIGVsaWdpYmxlIHNpYmxpbmcgdGhyZWFkc1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNzQtICogICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaGF2ZSBub3QgYmVlbiBzY2hlZHVsZWQgeWV0XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODEtICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM4MjpzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcyxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzgzLVx0XHRcdCAgICAgICBzdHJ1Y3QgdHN5bmNfc2hhcmVkX2NvbnRleHQgKnNoYXJlZF9jdHgpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz00ODE9aW50IGxhbmRsb2NrX3Jlc3RyaWN0X3NpYmxpbmdfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkX2NyZWQsXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01NTAtXHRcdC8qIEluIFJDVSByZWFkLWxvY2ssIGNvdW50IHRoZSB0aHJlYWRzIHdlIG5lZWQuICovXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjU1MTpcdFx0bmV3bHlfZGlzY292ZXJlZF90aHJlYWRzID0gY291bnRfYWRkaXRpb25hbF90aHJlYWRzKFx1MDAyNndvcmtzKTtcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTUyLVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTgwLVx0XHQgKi9cbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6NTgxOlx0XHRmb3VuZF9tb3JlX3RocmVhZHMgPSBzY2hlZHVsZV90YXNrX3dvcmsoXHUwMDI2d29ya3MsIFx1MDAyNnNoYXJlZF9jdHgpO1xuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFNpbmdsZS1UaHJlYWRlZCBFeGVjdXRpb24qKgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaW5nbGUtdGhyZWFkZWQgYXNwZWN0IG9mIHRoaXMgY29kZS4gRmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9uIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBpbmZsdWVuY2luZyB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmg9NjMzPWV4dGVybiB2b2lkIGZsdXNoX2l0aW1lcl9zaWduYWxzKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgtNjQzLVxuaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaDo2NDQ6ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0NS1cbi0tXG5rZXJuZWwvZm9yay5jPTMxNTk9c3RhdGljIGludCBjaGVja191bnNoYXJlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncylcbi0tXG5rZXJuZWwvZm9yay5jLTMxNzktXHRpZiAodW5zaGFyZV9mbGFncyBcdTAwMjYgQ0xPTkVfVk0pIHtcbmtlcm5lbC9mb3JrLmM6MzE4MDpcdFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxua2VybmVsL2ZvcmsuYy0zMTgxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE5MT1zdGF0aWMgaW50IHRpbWVuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5ldylcbi0tXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xOTUtXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYzoxOTY6XHRpZiAoIWN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKCkpXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xOTctXHRcdHJldHVybiAtRVVTRVJTO1xuLS1cbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNC0gKi9cbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYzoxNTpib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG5saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMtMTYte1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jPTE0ODQ9aW50IGFhX2NoYW5nZV9wcm9maWxlKGNvbnN0IGNoYXIgKmZxbmFtZSwgaW50IGZsYWdzKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jLTE1ODctXHQvKiBUT0RPOiBhZGQgcGVybWlzc2lvbiBjaGVjayB0byBhbGxvdyB0aGlzXG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYzoxNTg4Olx0ICogaWYgKChmbGFncyBcdTAwMjYgQUFfQ0hBTkdFX09ORVhFQykgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYy0xNTg5LVx0ICogICAgICBpbmZvID0gXCYjMzQ7bm90IGEgc2luZ2xlIHRocmVhZGVkIHRhc2tcJiMzNDs7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3NDQ9c3RhdGljIGludCBzZWxpbnV4X2xzbV9zZXRhdHRyKHU2NCBhdHRyLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY4NTEtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Njg1MjpcdFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1My1cdFx0XHRlcnJvciA9IHNlY3VyaXR5X2JvdW5kZWRfdHJhbnNpdGlvbihjcnNlYy1cdTAwM2VzaWQsIHNpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIGxvY2F0aW9ucyBmb3IgdGhpcyB0YXNrLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBhIGZldyBsaWtlbHkgZmlsZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBkZWFsaW5nIHdpdGggcHJvY2VzcyBtYW5hZ2VtZW50LCBtZW1vcnkgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSBjb250cm9sLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIGZ1bmN0aW9uczoKCiogICBgbW0va3NtLmNgOiBJIHNob3VsZCBjaGVjayB0aGUgYGNvbGxlY3RfcHJvY3Nfa3NtYCBmdW5jdGlvbiB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGxlYWRzCiogICBgbW0vbWVtb3J5LWZhaWx1cmUuY2A6IEkmIzM5O2xsIGxvb2sgaW50byBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGNvbGxlY3RfcHJvY3NfZmlsZWAsIGBjb2xsZWN0X3Byb2NzX2ZzZGF4YCwgYW5kIGBjb2xsZWN0X3Byb2NzX3BmbmAuCiogICBgZnMvcmVzY3RybC9yZHRncm91cC5jYDogSSYjMzk7bGwgd2FudCB0byByZXZpZXcgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBhbmQgYHNob3dfcmR0X3Rhc2tzYC4KKiAgIGBrZXJuZWwvZnJlZXplci5jYDogSSYjMzk7bGwgY2hlY2sgYHRoYXdfcHJvY2Vzc2AuCiogICBga2VybmVsL3NjaGVkL2NvcmUuY2A6IEkgc2hvdWxkIGNoZWNrIGB1Y2xhbXBfc3luY191dGlsX21pbl9ydF9kZWZhdWx0YC4KKiAgIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgOiBJIG5lZWQgdG8gbG9vayBpbnRvIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAuCiogICBga2VybmVsL2h1bmdfdGFzay5jYDogSSBzaG91bGQgbG9vayBpbnRvIGBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrc2AuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHdpbGwgbmVlZCB0byBjaGVjayBLY29uZmlnIGZpbGVzIGZvciBtYWNyb3MgYW5kIGRlcGVuZGVuY2llcywga2VlcGluZyBpbiBtaW5kIHRoYXQgYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgIGlzIGxpa2VseSBpbnZvbHZlZC4gVGhlIG1vZGlmaWVkIGZpbGVzIEkgc2hvdWxkIGxvb2sgYXQ6CgoqICAgYGZzL3Byb2MvYmFzZS5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19QUk9DX0ZTYAoqICAgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfUkVTQ1RSTF9GU2AgYW5kIGBDT05GSUdfWDg2X0NQVV9SRVNDVFJMYC4gSXQgaXMgaW1wb3J0YW50IHRvIGFsc28gY2hlY2sgYEtjb25maWdgIGZvciBgZnMvcmVzY3RybGAuCiogICBga2VybmVsL2h1bmdfdGFzay5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19ERVRFQ1RfSFVOR19UQVNLYC4KKiAgIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX0xPQ0tERVBgLgoqICAgYG1tL2tzbS5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19LU01gLgoqICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4KKiAgIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19TRUNVUklUWV9MQU5ETE9DS2AuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgZnMvcmVzY3RybGAgdG8gc2VlIHdoYXQgZWxzZSBJIGNhbiBnbGVhbiBmcm9tIHRoZXJlLiBJIGFtIHJlYWR5IHRvIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHRncm91cC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcmVzY3RybC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVzY3RybC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmZzL3Jlc2N0cmwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkVTQ1RSTF9GUylcdFx0JiM0Mzs9IHJkdGdyb3VwLm8gY3RybG1vbmRhdGEubyBtb25pdG9yLm9cbmZzL3Jlc2N0cmwvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfUkVTQ1RSTF9GU19QU0VVRE9fTE9DSylcdCYjNDM7PSBwc2V1ZG9fbG9jay5vXG4tLVxuZnMvcmVzY3RybC9yZHRncm91cC5jPTMwMTY9c3RhdGljIHZvaWQgcm1kaXJfYWxsX3N1Yih2b2lkKVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI2LVxuZnMvcmVzY3RybC9yZHRncm91cC5jOjMwMjc6XHRcdC8qIFJlbW92ZSBlYWNoIHJkdGdyb3VwIG90aGVyIHRoYW4gcm9vdCAqL1xuZnMvcmVzY3RybC9yZHRncm91cC5jLTMwMjgtXHRcdGlmIChyZHRncnAgPT0gXHUwMDI2cmR0Z3JvdXBfZGVmYXVsdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTGFuZGxvY2sgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlYC4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dCwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyB0aGluZ3MsIGJ1dCBhIGZyZXNoIHBlcnNwZWN0aXZlIG5ldmVyIGh1cnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgYnVpbHQsIGhvdyB0aGUgdGFyZ2V0cyBhcmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcmVjZW50IGNoYW5nZXMsIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIG9yIHRoZSBzZWN1cml0eSBwb3N0dXJlIG9mIExhbmRsb2NrIGl0c2VsZi4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IHRhcmdldHMg4oCTIHRoZSBrZXJuZWwgbW9kdWxlIGJ1aWxkLCBhbnkgdXNlci1zcGFjZSB0b29scywgYW5kIHRoZSByZWxldmFudCBpbmNsdWRlIHBhdGhzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3Mgcm9idXN0IGFuZCBzZWN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RzeW5jLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9sYW5kbG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGU9Mz1sYW5kbG9jay15IDo9IFxcXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGUtMTAtXHRmcy5vIFxcXG5zZWN1cml0eS9sYW5kbG9jay9NYWtlZmlsZToxMTpcdHRzeW5jLm8gXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEyLVx0ZG9tYWluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGZncmFwaC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBzaG91bGQgSSBzdGFydCBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIHRyYWNpbmcgYmVoYXZpb3I/IE15IGd1dCB0ZWxscyBtZSB0aGF0IGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgIGlzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gVGhhdCBmaWxlJiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhvb2tzIHRoYXQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBzbyB0aGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZncmFwaC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTI9b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICYjNDM7PSBibGt0cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTM6b2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IGZncmFwaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTQtaWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQxLSAqIEZvciB0eXBlIHdpdGggXCYjMzQ7Yml0bWFwIG9mIGZncmFwaF9hcnJheSBpbmRleFwmIzM0OyAoRkdSQVBIX1RZUEVfQklUTUFQKTpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MjogKiAgYml0czogMTIgLSAyN1x0VGhlIGJpdG1hcCBvZiBmZ3JhcGhfb3BzIGZncmFwaF9hcnJheSBpbmRleFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQzLSAqXHRcdFx0VGhhdCBpcywgaXQmIzM5O3MgYSBiaXRtYXNrIG9mIDAtMTUgKDE2IGJpdHMpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU2LSAqIFRoYXQgaXMsIGF0IHRoZSBlbmQgb2YgZnVuY3Rpb25fZ3JhcGhfZW50ZXIsIGlmIHRoZSBmaXJzdCBhbmQgZm9ydGhcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1NzogKiBmZ3JhcGhfb3BzIG9uIHRoZSBmZ3JhcGhfYXJyYXlbXSAoaW5kZXggMCBhbmQgMykgbmVlZHMgdGhlaXIgcmV0ZnVuYyBjYWxsZWRcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1ODogKiBvbiB0aGUgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQsIGFuZCB0aGUgZm9ydGggZmdyYXBoX29wc1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU5LSAqIHN0b3JlZCB0d28gd29yZHMgb2YgZGF0YSwgdGhpcyBpcyB3aGF0IHdpbGwgYmUgb24gdGhlIHRhc2smIzM5O3Mgc2hhZG93XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTcxLSAqIHwgICAgICAgICAqb3IgcHV0IGFub3RoZXIgd2F5KiAgICAgICAgICAgICAgIHxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo3MjogKiB8ICgzIFx1MDAzY1x1MDAzYyBGR1JBUEhfREFUQV9JTkRFWF9TSElGVCl8IFxcICAgICAgICAgIHwgVGhpcyBpcyBmb3IgZmdyYXBoX29wc1szXS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy03My0gKiB8ICgoMiAtIDEpIFx1MDAzY1x1MDAzYyBGR1JBUEhfREFUQV9TSElGVCl8IFxcICAgICAgICAgIHwgVGhlIGRhdGEgc2l6ZSBpcyAyIHdvcmRzLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTU9ZW51bSB7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2NS0vKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE2NjogKiBFYWNoIGZncmFwaF9vcHMgaGFzIGEgcmVzZXJ2ZWQgdW5zaWduZWQgbG9uZyBhdCB0aGUgZW5kICh0b3ApIG9mIHRoZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2Ny0gKiByZXRfc3RhY2sgdG8gc3RvcmUgdGFzayBzcGVjaWZpYyBzdGF0ZS5cbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTc1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmdyYXBoX3N0YWNrX2NhY2hlcDtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzYtXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTc3OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyAqZmdyYXBoX2FycmF5W0ZHUkFQSF9BUlJBWV9TSVpFXTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgZmdyYXBoX2FycmF5X2JpdG1hc2s7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTI4Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9kYXRhX3R5cGVfdmFsKGludCBpZHgsIGludCBzaXplLCBpbnQgb2Zmc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0yOTQtLyogZnRyYWNlX2dyYXBoX2VudHJ5IHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoyOTU6c3RhdGljIGludCBlbnRyeV9ydW4oc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5Ni1cdFx0ICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMDEtLyogZnRyYWNlX2dyYXBoX3JldHVybiBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzAyOnN0YXRpYyB2b2lkIHJldHVybl9ydW4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTMyMj1zdGF0aWMgdm9pZCByZXRfc3RhY2tfaW5pdF90YXNrX3ZhcnModW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzQtICogUmVzZXJ2ZXMgc3BhY2Ugb2YgdXAgdG8gRkdSQVBIX01BWF9EQVRBX1NJWkUgYnl0ZXMgb24gdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM1OiAqIHRhc2smIzM5O3MgcmV0X3N0YWNrIHNoYWRvdyBzdGFjaywgZm9yIGEgZ2l2ZW4gZmdyYXBoX29wcyBkdXJpbmdcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzYtICogdGhlIGVudHJ5ZnVuYygpIGNhbGwuIElmIGVudHJ5ZnVuYygpIHJldHVybnMgemVybywgdGhlIHN0b3JhZ2Vcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzctICogaXMgZGlzY2FyZGVkLiBBbiBlbnRyeWZ1bmMoKSBjYW4gb25seSBjYWxsIHRoaXMgb25jZSBwZXIgaXRlcmF0aW9uLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzODogKiBUaGUgZmdyYXBoX29wcyByZXRmdW5jKCkgY2FuIHJldHJpZXZlIHRoaXMgc3RvcmVkIGRhdGEgd2l0aFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzOS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSgpLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zNDY9dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzgxLSAqIGZncmFwaF9yZXRyaWV2ZV9kYXRhIC0gUmV0cmlldmUgc3RvcmVkIGRhdGEgZnJvbSBmZ3JhcGhfcmVzZXJ2ZV9kYXRhKClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODI6ICogQGlkeDpcdHRoZSBpbmRleCBvZiBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODMtICogQHNpemVfYnl0ZXM6IHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODQtICpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODU6ICogVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgYSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSwgdG8gcmV0cmlldmUgZGF0YSB0aGF0XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg2OiAqIHdhcyBzdG9yZWQgYnkgdGhlIGZncmFwaF9vcHMgZW50cnlmdW5jKCkgb24gdGhlIGZ1bmN0aW9uIGVudHJ5Llxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4Ny0gKiBUaGF0IGlzLCB0aGlzIHdpbGwgcmV0cmlldmUgdGhlIGRhdGEgdGhhdCB3YXMgcmVzZXJ2ZWQgb24gdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg4LSAqIGVudHJ5IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBleGl0IG9mIHRoZSBmdW5jdGlvblxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4OTogKiB0aGF0IHRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBpcyBjYWxsZWQgb24uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzkwLSAqXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM5NT12b2lkICpmZ3JhcGhfcmV0cmlldmVfZGF0YShpbnQgaWR4LCBpbnQgKnNpemVfYnl0ZXMpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwMy0gKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQwNDogKiBFdmVyeSByZWdpc3RlcmVkIGZncmFwaF9vcHMgaGFzIGEgdGFzayBzdGF0ZSB2YXJpYWJsZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNS0gKiByZXNlcnZlZCBvbiB0aGUgdGFzayYjMzk7cyByZXRfc3RhY2suIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGVcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA3LSAqXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA4OiAqIFJldHVybnMgdGhlIGFkZHJlc3MgdG8gdGhlIGZncmFwaF9vcHMgQGdvcHMgdGFza3Mgc3BlY2lmaWNcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDktICogdW5zaWduZWQgbG9uZyB2YXJpYWJsZS5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTAtICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDExOnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEyLXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NDM0PWdldF9yZXRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgb2Zmc2V0LCBpbnQgKmZyYW1lX29mZnNldClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU0LSAqIGZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YSAtIGdldCBkYXRhIGZyb20gYSBwYXJlbnQgZnVuY3Rpb25cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0NTU6ICogQGlkeDogVGhlIGluZGV4IGludG8gdGhlIGZncmFwaF9hcnJheSAoZmdyYXBoX29wczo6aWR4KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1Ni0gKiBAc2l6ZV9ieXRlczogQSBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemVcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTIxPWludCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTIyOlx0XHRcdCAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MjMtXHRcdFx0ICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyOD1zdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfcmV0X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUyOTpcdFx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTMwLVx0XHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzMtXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTM0OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfc3R1YiA9IHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzUtXHQuZW50cnlmdW5jID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzOC1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mzk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfZGlyZWN0X2dvcHMgPSBcdTAwMjZmZ3JhcGhfc3R1Yjtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01NDAtREVGSU5FX1NUQVRJQ19DQUxMKGZncmFwaF9mdW5jLCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1Yik7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTY1Mj1pbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODYtXHRcdFx0XHRcdCBzaXplb2YoZmdyYXBoX2FycmF5X2JpdG1hc2spICogQklUU19QRVJfQllURSkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjY4NzpcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyA9IFJFQURfT05DRShmZ3JhcGhfYXJyYXlbaV0pO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4OC1cdFx0XHRpbnQgc2F2ZV9jdXJyX3JldF9zdGFjaztcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9ODEyPV9fZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MsIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcilcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU2LVx0XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmJpdG1hcCwgc2l6ZW9mKGJpdG1hcCkgKiBCSVRTX1BFUl9CWVRFKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6ODU3Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU4LVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDEyPXZvaWQgZmdyYXBoX2luaXRfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICpkc3Rfb3BzLFxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDMxLSAqL1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwMzI6dm9pZCBmdHJhY2Vfc3R1Yl9ncmFwaChzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzMtXHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTE5Mj1zdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE5MzpcdFx0XHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTk0LVx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMTE9dm9pZCBmZ3JhcGhfdXBkYXRlX3BpZF9mdW5jKHZvaWQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxMi17XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTIxMzpcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTQtXHRzdHJ1Y3QgZnRyYWNlX29wcyAqb3A7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjAtXHRcdGlmIChvcC1cdTAwM2VmbGFncyBcdTAwMjYgRlRSQUNFX09QU19GTF9QSUQpIHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjIxOlx0XHRcdGdvcHMgPSBjb250YWluZXJfb2Yob3AsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjItXHRcdFx0Z29wcy1cdTAwM2VlbnRyeWZ1bmMgPSBmdHJhY2VfcGlkc19lbmFibGVkKG9wKSA/XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyNjQ9c3RhdGljIHZvaWQgaW5pdF90YXNrX3ZhcnMoaW50IGlkeClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4MS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjgyOnN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9lbmFibGVfZGlyZWN0KGJvb2wgZW5hYmxlX2JyYW5jaCwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4My17XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEzMjU9c3RhdGljIGludCBmZ3JhcGhfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzMS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMzMyOmludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzMy17XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTMtXHRpZiAoIWZncmFwaF9pbml0aWFsaXplZCkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzNTQ6XHRcdHJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O2ZncmFwaDpvbmxpbmVcJiMzNDssXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTM1NS1cdFx0XHRcdFx0ZmdyYXBoX2NwdV9pbml0LCBOVUxMKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyMS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNDIyOnZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyMy17XG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTQ3PXN0YXRpYyBERUZJTkVfTVVURVgoZnByb2JlX211dGV4KTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo0ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2JlX2dyYXBoX29wcztcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy00OS1cbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjAxPXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX2Zwcm9iZV9oZWFkZXIodW5zaWduZWQgbG9uZyAqc3RhY2ssXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTIxMy0gKiBmcHJvYmUgc2hhZG93IHN0YWNrIG1hbmFnZW1lbnQ6XG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjE0OiAqIFNpbmNlIGZwcm9iZSBzaGFyZXMgYSBzaW5nbGUgZmdyYXBoX29wcywgaXQgbmVlZHMgdG8gc2hhcmUgdGhlIHN0YWNrIGVudHJ5XG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjE1LSAqIGFtb25nIHRoZSBwcm9iZXMgb24gdGhlIHNhbWUgZnVuY3Rpb24gZXhpdC4gTm90ZSB0aGF0IGEgbmV3IHByb2JlIGNhbiBiZVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMzE9c3RhdGljIGlubGluZSBpbnQgX19mcHJvYmVfa3Byb2JlX2hhbmRsZXIodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1Mi1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTM6c3RhdGljIGludCBmcHJvYmVfZmdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yNTU9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU2Olx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU3LVx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU4LVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1OTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2JlX2dyYXBoX29wcyA9IHtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNjAtXHQuZW50cnlmdW5jXHQ9IGZwcm9iZV9mZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTUzNj1zdGF0aWMgdm9pZCBmcHJvYmVfcmVtb3ZlX2lwcyh1bnNpZ25lZCBsb25nICppcHMsIHVuc2lnbmVkIGludCBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTU0NS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDY6LyogZmdyYXBoX29wcyBjYWxsYmFjaywgdGhpcyBwcm9jZXNzZXMgZnByb2JlcyB3aGljaCBoYXZlIGV4aXRfaGFuZGxlci4gKi9cbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDc6c3RhdGljIGludCBmcHJvYmVfZmdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTQ4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz02NDM9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NjQ0Olx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNjQ1LVx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQxPXN0YXRpYyBpbnQgcHJvZmlsZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQyOlx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDMtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg2Nj1zdGF0aWMgdm9pZCBwcm9maWxlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODY3Olx0XHRcdFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg2OC1cdFx0XHRcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05MTYtXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTE3OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvZmlsZXJfb3BzID0ge1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxOC1cdC5lbnRyeWZ1bmMgPSBcdTAwMjZwcm9maWxlX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz00NDUxPXN0YXRpYyB2b2lkIHByaW50X3N1Ym9wcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjUtXHRcdGlmIChzdWJvcHMtXHUwMDNlZmxhZ3MgXHUwMDI2IEZUUkFDRV9PUFNfRkxfR1JBUEgpIHtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo0NDY2Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjctXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2ODpcdFx0XHRnb3BzID0gY29udGFpbmVyX29mKHN1Ym9wcywgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2OS1cdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyB7ZW50OiVwUyByZXQ6JXBTfVwmIzM0Oyxcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQ5Nz1fX2luaXQgdm9pZCBmdHJhY2VfaW5pdF9nbG9iYWxfYXJyYXlfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1MDItXHRmdHJhY2VfaW5pdF90cmFjZV9hcnJheSh0cik7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODUwMzpcdGluaXRfYXJyYXlfZmdyYXBoX29wcyh0ciwgdHItXHUwMDNlb3BzKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTA0LX1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zMzM9c3RydWN0IHRyYWNlX2FycmF5IHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC00MzctI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJcbmtlcm5lbC90cmFjZS90cmFjZS5oOjQzODpcdHN0cnVjdCBmZ3JhcGhfb3BzXHQqZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzOS0jZW5kaWZcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD04MTc9dm9pZCBwcmludF90cmFjZV9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtODE4LVxua2VybmVsL3RyYWNlL3RyYWNlLmg6ODE5OnZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjAtXHRcdFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MjE6aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjItXHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEwNjA9ZXh0ZXJuIHZvaWQgX190cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IHRyYWNlX2FycmF5ICp0cixcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY0LVxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTA2NTpleHRlcm4gdm9pZCBpbml0X2FycmF5X2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY2OmV4dGVybiBpbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjc6ZXh0ZXJuIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtMTA2OC1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMTYzPXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTE2NDpmdHJhY2VfZ3JhcGhfYWRkcl9maW5pc2goc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTExNjUte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMDE9c3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2dyYXBoX25vdHJhY2VfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNC19XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjA1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfYWRkcl9maW5pc2goc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDYteyB9XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIxMz1zdGF0aWMgaW5saW5lIGJvb2xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMTQ6ZnRyYWNlX2dyYXBoX2lnbm9yZV9mdW5jKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjE1LXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjMwPXByaW50X2dyYXBoX2Z1bmN0aW9uX2ZsYWdzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTMyIGZsYWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzMtfVxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNDpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpIHsgfVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzNS0vKiBmdHJhY2Vfb3BzIG1heSBub3QgYmUgZGVmaW5lZCAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNjojZGVmaW5lIGluaXRfYXJyYXlfZmdyYXBoX29wcyh0ciwgb3BzKSBkbyB7IH0gd2hpbGUgKDApXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM3OiNkZWZpbmUgYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgb3BzKSAoeyAwOyB9KVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzOC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYz04ND1pbnQgZnRyYWNlX2NyZWF0ZV9mdW5jdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzo5ODpcdHJldCA9IGFsbG9jYXRlX2ZncmFwaF9vcHModHIsIHRyLVx1MDAzZW9wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTktXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTEwOT12b2lkIGZ0cmFjZV9kZXN0cm95X2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTExMi1cdGZ0cmFjZV9mcmVlX2Z0cmFjZV9vcHModHIpO1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjExMzpcdGZyZWVfZmdyYXBoX29wcyh0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTE0LX1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MjI1PXN0YXRpYyBpbnQgZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjIyNjpcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTIyNy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTI5ND1pbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjI5NTpcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjk2LVx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zMDE9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV9hcmdzKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozMDI6XHRcdFx0XHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTMwMy1cdFx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MzY4PXZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozNjk6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzcwLXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mzk5PXN0YXRpYyB2b2lkIHRyYWNlX2dyYXBoX3RocmVzaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQwMDpcdFx0XHRcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQwMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzNC1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0MzU6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZ1bmNncmFwaF9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM2LVx0LmVudHJ5ZnVuYyA9IFx1MDAyNnRyYWNlX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzktXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDQwOmludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDQxLXtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDI6XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDMtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ1OC1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NTk6dm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjAte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjMtXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDY0Ol9faW5pdCB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2NS17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0xNzg9c3RhdGljIGludCBpcnFzb2ZmX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MTc5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMTgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9MjE1PXN0YXRpYyB2b2lkIGlycXNvZmZfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjE2Olx0XHRcdFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yMTctXHRcdFx0XHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTI0MC1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjQxOnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDItXHQuZW50cnlmdW5jXHRcdD0gXHUwMDI2aXJxc29mZl9ncmFwaF9lbnRyeSxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTQ4ND1zdGF0aWMgaW50IHJlZ2lzdGVyX2lycXNvZmZfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGdyYXBoLCBpbnQgc2V0KVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDkyLVx0aWYgKGdyYXBoKVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzo0OTM6XHRcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDk0LVx0ZWxzZVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NTAzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy01MDgtXHRpZiAoZ3JhcGgpXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjUwOTpcdFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUxMC1cdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTE1PXN0YXRpYyBpbnQgd2FrZXVwX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxMTY6XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTE3LVx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTE1MT1zdGF0aWMgdm9pZCB3YWtldXBfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNTI6XHRcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNTMtXHRcdFx0XHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzctXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTc4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfd2FrZXVwX29wcyA9IHtcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzktXHQuZW50cnlmdW5jID0gXHUwMDI2d2FrZXVwX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc2OD1zdHJ1Y3QgZmdyYXBoX2ZpeHR1cmUge1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6NzY5Olx0c3RydWN0IGZncmFwaF9vcHMgZ29wcztcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3MC1cdGludCBzdG9yZV9zaXplO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc3Nj1zdGF0aWMgX19pbml0IGludCBzdG9yZV9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Nzc6XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy03NzgtXHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz04MTA9c3RhdGljIF9faW5pdCB2b2lkIHN0b3JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo4MTE6XHRcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTgxMi1cdFx0XHRcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9MTAyOT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwMzA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwMzEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwNDctXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzIF9faW5pdGRhdGEgID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0OS1cdC5lbnRyeWZ1bmNcdFx0PSBcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDYyPXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA4MC1cdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXHUwMDI2dHItXHUwMDNlYXJyYXlfYnVmZmVyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODE6XHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODI6XHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgzLVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDMtXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA0Olx0LyogTmVlZCB0byBhbHNvIHNpbXVsYXRlIHRoZSB0ci1cdTAwM2VyZXNldCB0byByZW1vdmUgdGhpcyBmZ3JhcGhfb3BzICovXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA1LVx0dHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA2Olx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA3LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjMtXHR0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKFx1MDAyNnRyLVx1MDAzZWFycmF5X2J1ZmZlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTI0Olx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTI1LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDUtXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTQ2Olx0cmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0Ny1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTU5LVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTE2MDpcdHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIHRlbGxpbmcgbWUgdG8gbG9vayBpbnRvIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1Ny4gVGhhdCYjMzk7cyB3aGVyZSB0aGV5IGFyZSBwb2ludGluZyBtZSB0byBmaW5kIGEgc3BlY2lmaWMgY2FsbCB0byBgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RgLiBPa2F5LCBzbyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuCgpMZXQgbWUgdGFrZSBhIGxvb2sgdGhlcmUsIHRoZSBuYW1lIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAgaXRzZWxmLCB0ZWxscyBtZSwgdGhhdCB0aGUgZnVuY3Rpb24gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYSBsaW5rZWQgbGlzdCwgb3IgZGF0YSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyBvciBmdW5jdGlvbiBjYWxsIGhpc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDM3PXRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5ID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWI7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzktLyogVHJ5IHRvIGFzc2lnbiBhIHJldHVybiBzdGFjayBhcnJheSBvbiBGVFJBQ0VfUkVUU1RBQ0tfQUxMT0NfU0laRSB0YXNrcy4gKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMDQwOnN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwNDEte1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMjMyPXN0YXRpYyBpbnQgc3RhcnRfZ3JhcGhfdHJhY2luZyh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjQ5LVx0ZG8ge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyNTA6XHRcdHJldCA9IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHJldF9zdGFja19saXN0KTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjUxLVx0fSB3aGlsZSAocmV0ID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBVbndpbmQgRGVmZXJyYWwqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgdW53aW5kaW5nIHByb2Nlc3MuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmVycyB1bndpbmRpbmcgd29yaywgc28gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBtaWdodCBiZSBtYW5pZmVzdGluZy4gVGhpcyBmaWxlIHVzdWFsbHkgaG9sZHMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyB1bndpbmQgb3BlcmF0aW9ucyB0aGF0IGNhbiYjMzk7dCBiZSBpbW1lZGlhdGVseSBwcm9jZXNzZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IGhlcmUgYW5kIHNlZSB3aGF0IGNsdWVzIEkgY2FuIHVuZWFydGguIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSBjbG9zZXIgdG8gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vud2luZF9kZWZlcnJlZF9jYW5jZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdW53aW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdW53aW5kL2RlZmVycmVkLmM9MjI5PWludCB1bndpbmRfZGVmZXJyZWRfcmVxdWVzdChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmssIHU2NCAqY29va2llKVxuLS1cbmtlcm5lbC91bndpbmQvZGVmZXJyZWQuYy0yOTctXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmM6Mjk4OnZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMtMjk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTkKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBzZWxlY3RlZCBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogdWJpcXVpdG91cywgZm9jdXNpbmcgb24gdGhvc2Ugd2hpY2ggZWl0aGVyIGltcGxlbWVudCBvciBkaXJlY3RseSBjYWxsIHRoZSBsb29wcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGxpc3Q6IGBfX3NldF9vb21fYWRqYCwgYGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc2AsIGBzY2hlZHVsZV90YXNrX3dvcmtgLCBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgLCBgc2VsZWN0X2JhZF9wcm9jZXNzYCwgYGNvbGxlY3RfcHJvY3Nfa3NtYCwgYGNvbGxlY3RfcHJvY3NfYW5vbmAsIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAsIGFuZCBgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWRgLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgaW5kZWVkIG5vbi11YmlxdWl0b3VzIGFuZCByZXByZXNlbnRzIGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gYF9fc2V0X29vbV9hZGpgIGlzIHRoZSBwcm9jZnMgb29tX2FkaiBoYW5kbGVyLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBkZWFscyB3aXRoIGxhbmRsb2NrIHRocmVhZCBzeW5jaW5nLCBgc2NoZWR1bGVfdGFza193b3JrYCBpcyBwYXJ0IG9mIGxhbmRsb2NrJiMzOTtzIHRhc2sgd29yayBzY2hlZHVsaW5nLCBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgIGlzIGEgaGVscGVyIGZyb20gYGxpYi9pc19zaW5nbGVfdGhyZWFkZWQuY2AsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgIGlzIHRoZSBPT00ga2lsbGVyIHZpY3RpbSBzZWxlY3RvciwgYGNvbGxlY3RfcHJvY3Nfa3NtYCBoYW5kbGVzIEtTTSByZXZlcnNlIG1hcHBpbmcsIGBjb2xsZWN0X3Byb2NzX2Fub25gIGlzIGludm9sdmVkIGluIG1tIG1lbW9yeSBmYWlsdXJlIHByb2Nlc3MgY29sbGVjdGlvbiwgYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YCBpcyB0aGUgZmdyYXBoIHJldHN0YWNrIGFsbG9jYXRvciwgYW5kIGZpbmFsbHksIGByZHRncm91cF90YXNrc19hc3NpZ25lZGAgY2hlY2tzIHJlc2N0cmwgcmR0Z3JvdXAgdGFza3MuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgYXJlYXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVtIGFsbC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlOiBgUFJPQ19GU2AsIGBLU01gLCBgTUVNT1JZX0ZBSUxVUkVgLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCwgYW5kIGBSRVNDVFJMX0ZTYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSB2ZXJkaWN0IGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgKSBhbmQgdGhlbiByZWZhY3RvcnMgaXRlcmF0aW9ucyBvdmVyIHByb2Nlc3MgYW5kIHRocmVhZCBsaXN0cyBhY3Jvc3MgYSBudW1iZXIgb2YgY29yZSBzdWJzeXN0ZW1zLiAgU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyBwcm9jZnMsIHRoZSBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgS1NNLCBMYW5kbG9jaywgZnVuY3Rpb24gZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIFRoaXMgb2J2aW91c2x5IGNoYW5nZXMgcmVhY2hhYmxlIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2Uga2VybmVsIHN1YnN5c3RlbXMuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgYWxyZWFkeSBwb3B1bGF0ZWQgYW5kIHZlcmlmaWVkLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5dGhpbmcgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtLU00mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTEFORExPQ0smIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDssCiAgICAmIzM0O1JFU0NUUkxfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NldF9vb21fYWRqJiMzNDssCiAgICAmIzM0O2NvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyYjMzQ7LAogICAgJiMzNDtzY2hlZHVsZV90YXNrX3dvcmsmIzM0OywKICAgICYjMzQ7Y3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7c2VsZWN0X2JhZF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2NvbGxlY3RfcHJvY3Nfa3NtJiMzNDssCiAgICAmIzM0O2NvbGxlY3RfcHJvY3NfYW5vbiYjMzQ7LAogICAgJiMzNDthbGxvY19yZXRzdGFja190YXNrbGlzdCYjMzQ7LAogICAgJiMzNDtyZHRncm91cF90YXNrc19hc3NpZ25lZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzY29wZWQtZ3VhcmQgUkNVIG1hY3JvcyAoZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrLCBmb3JfZWFjaF90aHJlYWRfcmN1bG9jaywgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jaykgYW5kIHJlZmFjdG9ycyBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGluY2x1ZGluZyBwcm9jZnMsIE9PTSBraWxsZXIsIG1lbW9yeSBmYWlsdXJlLCBLU00sIExhbmRsb2NrLCBmZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGxvY2tpbmcgYW5kIGNvbnRyb2wtZmxvdyBjaGFuZ2VzIGFjcm9zcyB0aGVzZSBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9MQU5ETE9DSyYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAgICYjMzQ7UkVTQ1RSTF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2V0X29vbV9hZGomIzM0OywKICAgICYjMzQ7Y291bnRfYWRkaXRpb25hbF90aHJlYWRzJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX3Rhc2tfd29yayYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtzZWxlY3RfYmFkX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19rc20mIzM0OywKICAgICYjMzQ7Y29sbGVjdF9wcm9jc19hbm9uJiMzNDssCiAgICAmIzM0O2FsbG9jX3JldHN0YWNrX3Rhc2tsaXN0JiMzNDssCiAgICAmIzM0O3JkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxuXG5UaGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiBSQ1UgbG9jayBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8vZnJvbSB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBjcmVhdGUgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIFJDVSBsb2NraW5nIGNoYW5nZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIChlLmcuIHVzZS1hZnRlci1mcmVlKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNThiZTM4OTQyNDYwNS4uMmM0N2Q4MzhhMWM3NiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTExNjEsOCAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSkKIAlpZiAobW0pIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMTc4LDcgJiM0MzsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpCiAJCQl9CiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJbW1kcm9wKG1tKTsKIAl9CiBlcnJfdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jCmluZGV4IDVkY2JiMGE5NjRlODEuLmIxNGRmOGIyM2YxYTggMTAwNjQ0Ci0tLSBhL2ZzL3Jlc2N0cmwvcmR0Z3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmMKQEAgLTcwOSwxNCAmIzQzOzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKQogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkdGdyb3VwX211dGV4KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlpZiAoaXNfY2xvc2lkX21hdGNoKHQsIHIpIHx8IGlzX3JtaWRfbWF0Y2godCwgcikpIHsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MjYsMTUgJiM0Mzs4MjQsMTMgQEAgc3RhdGljIHZvaWQgc2hvd19yZHRfdGFza3Moc3RydWN0IHJkdGdyb3VwICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKIAlwaWRfdCBwaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHsKIAkJaWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7CiAJCQlwaWQgPSB0YXNrX3BpZF92bnIodCk7CiAJCQlpZiAocGlkKQogCQkJCXNlcV9wcmludGYocywgJiMzNDslZFxuJiMzNDssIHBpZCk7CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAppbmRleCA1ODRhZTg4YjQzNWU5Li4xMTBlYTlmMTMxZjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2lmbmRlZiBfTElOVVhfU0NIRURfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwpAQCAtNjYzLDYgJiM0Mzs2NjQsMzAgQEAgZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7CiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpCVwKIAlmb3JfZWFjaF9wcm9jZXNzKHApIGZvcl9lYWNoX3RocmVhZChwLCB0KQogCiYjNDM7LyoKJiM0MzsgKiBWYXJpYW50cyBvZiBmb3JfZWFjaF9wcm9jZXNzKCksIGZvcl9lYWNoX3RocmVhZCgpIGFuZAomIzQzOyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlCiYjNDM7ICogUkNVIHJlYWQgbG9jayB2aWEgc2NvcGVkX2d1YXJkKHJjdSkuICBUaGUgbG9jayBpcyBoZWxkIGZvciB0aGUKJiM0MzsgKiBkdXJhdGlvbiBvZiB0aGUgbG9vcCBhbmQgcmVsZWFzZWQgb24gZXhpdCwgaW5jbHVkaW5nIHZpYSBicmVhaywKJiM0MzsgKiBnb3RvLCBvciByZXR1cm4uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvciAocCA9ICZhbXA7aW5pdF90YXNrIDsgKHAgPSBuZXh0X3Rhc2socCkpICE9ICZhbXA7aW5pdF90YXNrIDsgKQomIzQzOwomIzQzOyNkZWZpbmUgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CV9fZm9yX2VhY2hfdGhyZWFkKChwKS0mZ3Q7c2lnbmFsLCB0KQomIzQzOwomIzQzOy8qCiYjNDM7ICogRG91YmxlIGxvb3A6ICYjMzk7YnJlYWsmIzM5OyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLgomIzQzOyAqIFVzZSAmIzM5O2dvdG8mIzM5OyB0byBleGl0IGJvdGggbG9vcHM7IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIHJlbGVhc2VkCiYjNDM7ICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2socCwgdCkgXAomIzQzOwlzY29wZWRfZ3VhcmQocmN1KSBcCiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3MocCkgZm9yX2VhY2hfdGhyZWFkKHAsIHQpCiYjNDM7CiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTsKIHZvaWQgd2Fsa19wcm9jZXNzX3RyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0b3AsIHByb2NfdmlzaXRvciwgdm9pZCAqKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IGIzYzg1NTNkN2JkNmMuLjAwNjM4ZDJhYmMwZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY3B1LmMKQEAgLTEyNTQsOCAmIzQzOzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkgKiBmdWxsLWZsZWRnZWQgdGFza2xpc3RfbG9jay4KIAkgKi8KIAlXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAkJLyoKQEAgLTEyNjgsNyAmIzQzOzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSkKIAkJYXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtJmd0O21tKTsKIAkJdGFza191bmxvY2sodCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCBhNzZiZjk1N2ZiMzJkLi43YTg3MGY3MWRjZjZhIDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTIxNywxMSAmIzQzOzIxNyw5IEBAIHZvaWQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfdGhyZWFkKHAsIHQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2socCwgdCkgewogCQlfX3RoYXdfdGFzayh0KTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jCmluZGV4IDZmY2M5NGNlNGNhOWQuLjczYTVhZDNiZTlhOGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9odW5nX3Rhc2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvaHVuZ190YXNrLmMKQEAgLTMxNSwxMyAmIzQzOzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiAJCXJldHVybjsKIAogCXRoaXNfcm91bmRfY291bnQgPSAwOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7CiYjNDM7CWZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkgewogCQlpZiAoIW1heF9jb3VudC0tKQotCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJZ290byBvdXQ7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgJiM0MzsgSFVOR19UQVNLX0xPQ0tfQlJFQUspKSB7CiAJCQlpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKQotCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCQlnb3RvIG91dDsKIAkJCWxhc3RfYnJlYWsgPSBqaWZmaWVzOwogCQl9CiAKQEAgLTMzNyw5ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KQogCQkJaHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7CiAJCX0KIAl9Ci0gdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCiYjNDM7b3V0OgogCWlmICghdGhpc19yb3VuZF9jb3VudCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggYzU2YTdmOTFkNzJlMi4uZWEyMThkYzc1YWQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNjgzNCwxNSAmIzQzOzY4MzQsMTMgQEAgdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQogCX0KIAlwcl93YXJuKCYjMzQ7XG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKCFwLSZndDtsb2NrZGVwX2RlcHRoKQogCQkJY29udGludWU7CiAJCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhwKTsKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByX3dhcm4oJiMzNDtcbiYjMzQ7KTsKIAlwcl93YXJuKCYjMzQ7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtNTQ3LDE1ICYjNDM7NTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAogCXNtcF9tYigpOyAvLyBPcmRlciBwcmlvciBhY2Nlc3NlcyBiZWZvcmUgZ3JhY2UtcGVyaW9kIHN0YXJ0LgotCXJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHQgPT0gY3VycmVudCkKIAkJCWNvbnRpbnVlOyAgLy8gRG9uJiMzOTt0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyEKIAkJLy8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLgogCQl3aGlsZSAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3QtJmd0O3JjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpCiAJCQljb250aW51ZTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KTsKICNlbmRpZiAvLyAjaWYgSVNfRU5BQkxFRChDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jCmluZGV4IGY3ODI3NTE5MjAzNmIuLjdmOWRiZDRjN2Q2MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMjAxNSw4ICYjNDM7MjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZCkKIAlzbXBfbWJfX2FmdGVyX3NwaW5sb2NrKCk7CiAJcmVhZF91bmxvY2soJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAotCWd1YXJkKHJjdSkoKTsKLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKQomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApCiAJCXVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwppbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZGVidWcuYwpAQCAtMTAyOSwxNCAmIzQzOzEwMjksMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRfcnEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgcnFfY3B1KQogI2VuZGlmCiAJCSAgICYjMzQ7XG4mIzM0Oyk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApIHsKIAkJaWYgKHRhc2tfY3B1KHApICE9IHJxX2NwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXByaW50X3Rhc2sobSwgcnEsIHApOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmMgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmMKaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2ZncmFwaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguYwpAQCAtMTA1NywxMSAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpCiAJCX0KIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJaWYgKHN0YXJ0ID09IGVuZCkgewogCQkJcmV0ID0gLUVBR0FJTjsKLQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWdvdG8gZnJlZTsKIAkJfQogCiAJCWlmICh0LSZndDtyZXRfc3RhY2sgPT0gTlVMTCkgewpAQCAtMTA3NCw5ICYjNDM7MTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KQogCQkJdC0mZ3Q7cmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQmIzQzOyYjNDM7XTsKIAkJfQogCX0KLQotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZnJlZToKIAlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspCiAJCWttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2tfbGlzdFtpXSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMKaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDQKLS0tIGEva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYwpAQCAtMzE5LDkgJiM0MzszMTksOCBAQCB2b2lkIHVud2luZF9kZWZlcnJlZF9jYW5jZWwoc3RydWN0IHVud2luZF93b3JrICp3b3JrKQogCiAJc3luY2hyb25pemVfc3JjdSgmYW1wO3Vud2luZF9zcmN1KTsKIAotCWd1YXJkKHJjdSkoKTsKIAkvKiBDbGVhciB0aGlzIGJpdCBmcm9tIGFsbCB0aHJlYWRzICovCi0JZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHsKIAkJYXRvbWljX2xvbmdfYW5kbm90KEJJVChiaXQpLAogCQkJCSAgICZhbXA7dC0mZ3Q7dW53aW5kX2luZm8udW53aW5kX21hc2spOwogCQlpZiAodC0mZ3Q7dW53aW5kX2luZm8uY2FjaGUpCmRpZmYgLS1naXQgYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMKaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDQKLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYwpAQCAtMjYsOCAmIzQzOzI2LDcgQEAgYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldCA9IGZhbHNlOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHsKIAkJaWYgKHVubGlrZWx5KHAtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKQogCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShwID09IHRhc2stJmd0O2dyb3VwX2xlYWRlcikpCkBAIC00OCw3ICYjNDM7NDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpCiAJfQogCXJldCA9IHRydWU7CiBmb3VuZDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjgzMGYzMzFjYjZmNWIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC0zMjgxLDggJiM0MzszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJc3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS0mZ3Q7YW5vbl92bWE7CiAKIAkJYW5vbl92bWFfbG9ja19yZWFkKGF2KTsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQkJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLSZndDthZGRyZXNzICZhbXA7IFBBR0VfTUFTSzsKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSBybWFwX2l0ZW0tJmd0O2xpbmVhcl9wYWdlX2luZGV4OwpAQCAtMzI5OSw3ICYjNDM7MzI5OCw2IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJfQogCQkJfQogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwogCQlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NTUsOCAmIzQzOzU1NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZXR1cm47CiAKIAlwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpOwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9wcm9jZXNzKHRzaykgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIGZvcmNlX2Vhcmx5KTsKQEAgLTU3Miw3ICYjNDM7NTcxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQlhZGRfdG9fa2lsbF9hbm9uX2ZpbGUodCwgcGFnZSwgdm1hLCB0b19raWxsLCBhZGRyKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlhbm9uX3ZtYV91bmxvY2tfcmVhZChhdik7CiB9CiAKQEAgLTU4OSw5ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcGdvZmZfdCBwZ29mZjsKIAogCWlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7Ci0JcmN1X3JlYWRfbG9jaygpOwogCXBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIApAQCAtNjExLDcgJiM0Mzs2MDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApAQCAtNjM1LDggJiM0Mzs2MzEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJLyoKQEAgLTY1Myw3ICYjNDM7NjQ4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQlhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTsKIAkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqLwpAQCAtMjI4OCw4ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLSZndDttYXBwaW5nOwogCiAJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKJiM0MzsJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7CiAKIAkJdCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpOwpAQCAtMjMwMyw3ICYjNDM7MjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLAogCQkJCWFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jCkBAIC05NCw4ICYjNDM7OTQsNyBAQCBzdGF0aWMgYm9vbCBvb21fY3B1c2V0X2VsaWdpYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQsCiAJYm9vbCByZXQgPSBmYWxzZTsKIAljb25zdCBub2RlbWFza190ICptYXNrID0gb2MtJmd0O25vZGVtYXNrOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3RocmVhZChzdGFydCwgdHNrKSB7CiYjNDM7CWZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHN0YXJ0LCB0c2spIHsKIAkJaWYgKG1hc2spIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGlzIGEgbWVtcG9saWN5IGNvbnN0cmFpbmVkIG9vbSwgdHNrJiMzOTtzCkBAIC0xMTQsNyAmIzQzOzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCwKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNjEsMTEgJiM0MzszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYykKIAllbHNlIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKQomIzQzOwkJZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApCiAJCQlpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKQogCQkJCWJyZWFrOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKQEAgLTQyMywxNCAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAkJaW50IGkgPSAwOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CiYjNDM7CQlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQkJLyogQXZvaWQgcG90ZW50aWFsIHNvZnRsb2NrdXAgd2FybmluZyAqLwogCQkJaWYgKCgmIzQzOyYjNDM7aSAmYW1wOyAxMDIzKSA9PSAwKQogCQkJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJCWR1bXBfdGFzayhwLCBvYyk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCkBAIC04ODcsOCAmIzQzOzg4MSw3IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJICogYXJlIGR5aW5nIGFzIHdlbGwgdG8gbWFrZSBzdXJlIHRoYXQgYSkgbm9ib2R5IHBpbnMgaXRzIG1tIGFuZAogCSAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpCkBAIC04OTcsNyAmIzQzOzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk1Myw4ICYjNDM7OTQ1LDcgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCSAqIFRoYXQgdGhyZWFkIHdpbGwgbm93IGdldCBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIHNpbmNlIGl0IGhhcyBhCiAJICogcGVuZGluZyBmYXRhbCBzaWduYWwuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX3Byb2Nlc3MocCkgewomIzQzOwlmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkgewogCQlpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocCwgdmljdGltKSkKQEAgLTk3NSw3ICYjNDM7OTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKQogCQkJY29udGludWU7CiAJCWRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoY2FuX29vbV9yZWFwKQogCQlxdWV1ZV9vb21fcmVhcGVyKHZpY3RpbSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYwppbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMKQEAgLTM1MSw5ICYjNDM7MzUxLDcgQEAgc3RhdGljIHNpemVfdCBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoY29uc3Qgc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcykKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwpAQCAtMzkyLDkgJiM0MzszOTAsNyBAQCBzdGF0aWMgYm9vbCBzY2hlZHVsZV90YXNrX3dvcmsoc3RydWN0IHRzeW5jX3dvcmtzICp3b3JrcywKIAogCWNhbGxlciA9IGN1cnJlbnQ7CiAKLQlndWFyZChyY3UpKCk7Ci0KLQlmb3JfZWFjaF90aHJlYWQoY2FsbGVyLCB0aHJlYWQpIHsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHsKIAkJLyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqLwogCQlpZiAodGhyZWFkID09IGNhbGxlcikKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxMQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA5MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgTG9ja2luZyBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgc29tZSBoZWxwZXIgbWFjcm9zIGluIGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYDogYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2AuIFRoZXkmIzM5O3JlIGxldmVyYWdpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgUkFJSSBhcHByb2FjaCBmb3IgbWFuYWdpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIC8gYHJjdV9yZWFkX3VubG9jaygpYCBwYWlyIHdpdGhpbiB0aGUgbG9vcHMuIFNtYXJ0OyBjbGVhbiBhbmQgaGVscHMgYXZvaWQgdGhvc2UgbmFzdHkgUkNVIGxvY2svdW5sb2NrIG1pc21hdGNoZXMuCgpUaGUgbWFjcm8gaW1wbGVtZW50YXRpb24gaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZW5jYXBzdWxhdGVzIHRoZSBSQ1UgcmVhZCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYXJvdW5kIHRoZSBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24sIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIG1pbmltaXplIHBvdGVudGlhbCBlcnJvcnMuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdGhlIGNvbnZlcnNpb24gb2YgYSBidW5jaCBvZiBmaWxlczogYGZzL3Byb2MvYmFzZS5jYCwgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2AsIGV0Yy4sIGEgZ29vZCBzcHJlYWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgc3VnZ2VzdHMgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIHN0YW5kYXJkaXplIGFuZCBzaW1wbGlmeSBSQ1UgdXNhZ2UgYWNyb3NzIHRoZSBjb2RlYmFzZS4KCk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIHNlZS4uLiBpcyB0aGVyZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIG5vdGhpbmcgdGhhdCBsb29rcyBsaWtlIGl0OgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBnZXR0aW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLgozLiAgTm8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgTm8gbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZpbGUgY2hhbmdlcyB0byBiZSBleHRyYSBjZXJ0YWluLiBJbiBga2VybmVsL2h1bmdfdGFzay5jYCwgdGhlIGB1bmxvY2s6YCBsYWJlbCBpcyBub3cgYG91dDpgLCBhbmQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgaGFzIGEganVtcCB0byBgZnJlZTpgIGxhYmVsIGRpcmVjdGx5LCBiZWNhdXNlIHRoZSBgc2NvcGVkX2d1YXJkYCBoYW5kbGVzIHRoZSBSQ1UgdW5sb2NraW5nLiBPa2F5LCBqdXN0IHRpZHlpbmcgdXAgdGhvc2UgZXhwbGljaXQgbG9jay91bmxvY2sgY2FsbHMuIFRoaXMgaXMganVzdCBhIGNsZWFudXAsIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTG9va2luZyBjbG9zZXIgYXQgdGhlIG1hY3JvcyB0aGVtc2VsdmVzLCB5ZXMsIGl0JiMzOTtzIGp1c3QgYSByZWZhY3RvcmluZy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8vZnJvbSB1c2VyIHNwYWNlLCBubyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSBiZWluZyBjaGFuZ2VkLiBUaGUgZXhpc3RpbmcgbG9ja2luZyBiZWhhdmlvciwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgbm90IGJlaW5nIGFsdGVyZWQuIEFueSBsb2NraW5nIGJ1Z3MsIGxpa2UgUkNVIG5lc3Rpbmcgb3IgbGlmZXRpbWUgaXNzdWVzLCBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIFBST1ZFX0xPQ0tJTkcuIE1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLgoKVGhlIHF1ZXN0aW9uIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UuIEhvd2V2ZXIsIEkgYW0gbm90IHNlZWluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UmIzM5O3JlIGdvb2QuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOYCBhbmQgYEtNU0FOUmVhc29uaW5nYC4gQW5kIGBLTVNBTlJlYXNvbmluZ2Agc2hvdWxkIGRldGFpbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4KCk9rYXksIGFsbCBzZXQuIExldCYjMzk7cyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwgZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MjguMzE1MDY4NTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1NjQ0MzE1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiS1NNXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiLFxuICAgIFwiUkVTQ1RSTF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V0X29vbV9hZGpcIixcbiAgICBcImNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICAgIFwic2NoZWR1bGVfdGFza193b3JrXCIsXG4gICAgXCJjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZFwiLFxuICAgIFwic2VsZWN0X2JhZF9wcm9jZXNzXCIsXG4gICAgXCJjb2xsZWN0X3Byb2NzX2tzbVwiLFxuICAgIFwiY29sbGVjdF9wcm9jc19hbm9uXCIsXG4gICAgXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICAgIFwicmR0Z3JvdXBfdGFza3NfYXNzaWduZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2ssIGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrLCBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKSBhbmQgcmVmYWN0b3JzIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgaW5jbHVkaW5nIHByb2NmcywgT09NIGtpbGxlciwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgTGFuZGxvY2ssIGZncmFwaCB0cmFjaW5nLCBhbmQgcmVzY3RybC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgbG9ja2luZyBhbmQgY29udHJvbC1mbG93IGNoYW5nZXMgYWNyb3NzIHRoZXNlIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjI4LjMxNTA3NDUxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM2MjIzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODY4ZDc3NzA0NzgxNmZlNjFjMmNiNGFkYjEzYzM4OGUyOTI5NjQ0ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDEyOjU5OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcXG5pbmRleCA1OGJlMzg5NDI0NjA1Li4yYzQ3ZDgzOGExYzc2IDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvYmFzZS5jXFxuKysrIGIvZnMvcHJvYy9iYXNlLmNcXG5AQCAtMTE2MSw4ICsxMTYxLDcgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuIFxcdGlmIChtbSkge1xcbiBcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XFxuIFxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRcXHRpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgcCkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0dGFza191bmxvY2socCk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdG1tZHJvcChtbSk7XFxuIFxcdH1cXG4gZXJyX3VubG9jazpcXG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXFxuaW5kZXggNWRjYmIwYTk2NGU4MS4uYjE0ZGY4YjIzZjFhOCAxMDA2NDRcXG4tLS0gYS9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcXG5AQCAtNzA5LDE0ICs3MDksMTIgQEAgaW50IHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkKHN0cnVjdCByZHRncm91cCAqcilcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkdGdyb3VwX211dGV4KTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQocCwgdCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcXG4gXFx0XFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XFxuIFxcdFxcdFxcdHJldCA9IDE7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTgyNiwxNSArODI0LDEzIEBAIHN0YXRpYyB2b2lkIHNob3dfcmR0X3Rhc2tzKHN0cnVjdCByZHRncm91cCAqciwgc3RydWN0IHNlcV9maWxlICpzKVxcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICp0O1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KSB7XFxuIFxcdFxcdGlmIChpc19jbG9zaWRfbWF0Y2godCwgcikgfHwgaXNfcm1pZF9tYXRjaCh0LCByKSkge1xcbiBcXHRcXHRcXHRwaWQgPSB0YXNrX3BpZF92bnIodCk7XFxuIFxcdFxcdFxcdGlmIChwaWQpXFxuIFxcdFxcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiVkXFxcXG5cXFwiLCBwaWQpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uMTEwZWE5ZjEzMWYzMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxcbkBAIC0yLDYgKzIsNyBAQFxcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxcbiAjZGVmaW5lIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcXG4gI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KVxcdFxcXFxcXG4gXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcXG4gXFxuKy8qXFxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXFxuKyAqIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlXFxuKyAqIFJDVSByZWFkIGxvY2sgdmlhIHNjb3BlZF9ndWFyZChyY3UpLiAgVGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlXFxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxcbisgKiBnb3RvLCBvciByZXR1cm4uXFxuKyAqL1xcbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0Zm9yIChwID0gXFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcXHUwMDI2aW5pdF90YXNrIDsgKVxcbitcXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0X19mb3JfZWFjaF90aHJlYWQoKHApLVxcdTAwM2VzaWduYWwsIHQpXFxuK1xcbisvKlxcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxcbisgKiBVc2UgJ2dvdG8nIHRvIGV4aXQgYm90aCBsb29wczsgdGhlIFJDVSByZWFkIGxvY2sgaXMgcmVsZWFzZWRcXG4rICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY29wZWRfZ3VhcmQgc2NvcGUgaXMgbGVmdC5cXG4rICovXFxuKyNkZWZpbmUgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxcXFxuK1xcdHNjb3BlZF9ndWFyZChyY3UpIFxcXFxcXG4rXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcXG4rXFxuIHR5cGVkZWYgaW50ICgqcHJvY192aXNpdG9yKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHZvaWQgKmRhdGEpO1xcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmNcXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9jcHUuY1xcbisrKyBiL2tlcm5lbC9jcHUuY1xcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcXG4gXFx0ICogZnVsbC1mbGVkZ2VkIHRhc2tsaXN0X2xvY2suXFxuIFxcdCAqL1xcbiBcXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTEyNjgsNyArMTI2Nyw2IEBAIHZvaWQgY2xlYXJfdGFza3NfbW1fY3B1bWFzayhpbnQgY3B1KVxcbiBcXHRcXHRhcmNoX2NsZWFyX21tX2NwdW1hc2tfY3B1KGNwdSwgdC1cXHUwMDNlbW0pO1xcbiBcXHRcXHR0YXNrX3VubG9jayh0KTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyogVGFrZSB0aGlzIENQVSBkb3duLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuY1xcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2ZyZWV6ZXIuY1xcbisrKyBiL2tlcm5lbC9mcmVlemVyLmNcXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF90aHJlYWQocCwgdCkge1xcbitcXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSB7XFxuIFxcdFxcdF9fdGhhd190YXNrKHQpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXFxuaW5kZXggNmZjYzk0Y2U0Y2E5ZC4uNzNhNWFkM2JlOWE4YiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvaHVuZ190YXNrLmNcXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcXG5AQCAtMzE1LDEzICszMTUsMTIgQEAgc3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0aGlzX3JvdW5kX2NvdW50ID0gMDtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xcbiBcXHRcXHRpZiAoIW1heF9jb3VudC0tKVxcbi1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcXG4gXFx0XFx0XFx0aWYgKCFyY3VfbG9ja19icmVhayhnLCB0KSlcXG4tXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHRsYXN0X2JyZWFrID0gamlmZmllcztcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzM3LDkgKzMzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2h1bmdfdW5pbnRlcnJ1cHRpYmxlX3Rhc2tzKHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gXFx0XFx0XFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi0gdW5sb2NrOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFxuK291dDpcXG4gXFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcXG4gXFx0fVxcbiBcXHRwcl93YXJuKFxcXCJcXFxcblNob3dpbmcgYWxsIGxvY2tzIGhlbGQgaW4gdGhlIHN5c3RlbTpcXFxcblxcXCIpO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xcbiBcXHRcXHRpZiAoIXAtXFx1MDAzZWxvY2tkZXBfZGVwdGgpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XFxuIFxcdFxcdHRvdWNoX25taV93YXRjaGRvZygpO1xcbiBcXHRcXHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHByX3dhcm4oXFxcIlxcXFxuXFxcIik7XFxuIFxcdHByX3dhcm4oXFxcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcXFxuXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcXG5pbmRleCBiNjI3MzVhNjc4ODQyLi5iYWM2MzY2ZGE0MWUwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXFxuQEAgLTU0NywxNSArNTQ3LDEzIEBAIHZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKVxcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XFxuIFxcbiBcXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cXG4tXFx0cmN1X3JlYWRfbG9jaygpOyAvLyBQcm90ZWN0IHRhc2sgbGlzdC5cXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcXG4gXFx0XFx0aWYgKHQgPT0gY3VycmVudClcXG4gXFx0XFx0XFx0Y29udGludWU7ICAvLyBEb24ndCBkZWFkbG9jayBvbiBvdXJzZWx2ZXMhXFxuIFxcdFxcdC8vIE9yZGVyIGxhdGVyIHJjdV9yZWFkX2xvY2soKSBvbiBvdGhlciB0YXNrcyBhZnRlciBRUy5cXG4gXFx0XFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnQtXFx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90cml2aWFsX3ByZWVtcHQpO1xcbiAjZW5kaWYgLy8gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1UpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uN2Y5ZGJkNGM3ZDYyZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0yMDE1LDggKzIwMTUsNyBAQCBzdGF0aWMgdm9pZCB1Y2xhbXBfc3luY191dGlsX21pbl9ydF9kZWZhdWx0KHZvaWQpXFxuIFxcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKVxcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHApXFxuIFxcdFxcdHVjbGFtcF91cGRhdGVfdXRpbF9taW5fcnRfZGVmYXVsdChwKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYnVnLmMgYi9rZXJuZWwvc2NoZWQvZGVidWcuY1xcbmluZGV4IDcyMjM2ZGI2Nzk4M2IuLmNkYWUxNjViOThmN2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZGVidWcuY1xcbkBAIC0xMDI5LDE0ICsxMDI5LDEyIEBAIHN0YXRpYyB2b2lkIHByaW50X3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJxICpycSwgaW50IHJxX2NwdSlcXG4gI2VuZGlmXFxuIFxcdFxcdCAgIFxcXCJcXFxcblxcXCIpO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcCkge1xcbiBcXHRcXHRpZiAodGFza19jcHUocCkgIT0gcnFfY3B1KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHByaW50X3Rhc2sobSwgcnEsIHApO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIHByaW50X2Nmc19ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ZncmFwaC5jIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXFxuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvZmdyYXBoLmNcXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XFxuIFxcdFxcdGlmIChzdGFydCA9PSBlbmQpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4tXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHQtXFx1MDAzZXJldF9zdGFjayA9PSBOVUxMKSB7XFxuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxcbiBcXHRcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSByZXRfc3RhY2tfbGlzdFtzdGFydCsrXTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcbi11bmxvY2s6XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBmcmVlOlxcbiBcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKVxcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmMgYi9rZXJuZWwvdW53aW5kL2RlZmVycmVkLmNcXG5pbmRleCA1YmVhNDczMTQyNTQ5Li5lY2ZlMTMzNjA5NWU3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xcbisrKyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xcbkBAIC0zMTksOSArMzE5LDggQEAgdm9pZCB1bndpbmRfZGVmZXJyZWRfY2FuY2VsKHN0cnVjdCB1bndpbmRfd29yayAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3NyY3UoXFx1MDAyNnVud2luZF9zcmN1KTtcXG4gXFxuLVxcdGd1YXJkKHJjdSkoKTtcXG4gXFx0LyogQ2xlYXIgdGhpcyBiaXQgZnJvbSBhbGwgdGhyZWFkcyAqL1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xcbiBcXHRcXHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXFxuIFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ0LVxcdTAwM2V1bndpbmRfaW5mby51bndpbmRfbWFzayk7XFxuIFxcdFxcdGlmICh0LVxcdTAwM2V1bndpbmRfaW5mby5jYWNoZSlcXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXFxuaW5kZXggOGM5OGIyMGJmYzQxNC4uNGU3ZmU4NTQ1NGFiOCAxMDA2NDRcXG4tLS0gYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcXG5AQCAtMjYsOCArMjYsNyBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0ID0gZmFsc2U7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0tUSFJFQUQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHAgPT0gdGFzay1cXHUwMDNlZ3JvdXBfbGVhZGVyKSlcXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXFxuIFxcdH1cXG4gXFx0cmV0ID0gdHJ1ZTtcXG4gZm91bmQ6XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXFxuaW5kZXggNjI0ZjM3OTc1ZTEyOS4uODMwZjMzMWNiNmY1YiAxMDA2NDRcXG4tLS0gYS9tbS9rc20uY1xcbisrKyBiL21tL2tzbS5jXFxuQEAgLTMyODEsOCArMzI4MSw3IEBAIHZvaWQgY29sbGVjdF9wcm9jc19rc20oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYXYgPSBybWFwX2l0ZW0tXFx1MDAzZWFub25fdm1hO1xcbiBcXG4gXFx0XFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRcXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYztcXG4gXFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXHRcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGluZGV4ID0gcm1hcF9pdGVtLVxcdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcXG5AQCAtMzI5OSw3ICszMjk4LDYgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcXG4rXFx0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xcbiBcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0XFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xcbiBcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XFxuQEAgLTU3Miw3ICs1NzEsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2Fub24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0XFx0YWRkX3RvX2tpbGxfYW5vbl9maWxlKHQsIHBhZ2UsIHZtYSwgdG9fa2lsbCwgYWRkcik7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xcbiB9XFxuIFxcbkBAIC01ODksOSArNTg3LDggQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHBnb2ZmX3QgcGdvZmY7XFxuIFxcbiBcXHRpX21tYXBfbG9ja19yZWFkKG1hcHBpbmcpO1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XFxuK1xcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcXG4gXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcbkBAIC02MTEsNyArNjA4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcXG4gfVxcbiBcXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbiBcXG4gXFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTY1Myw3ICs2NDgsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZzZGF4KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGZuX3NwYWNlLVxcdTAwM2VtYXBwaW5nO1xcbiBcXG4gXFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcXG4gXFxuIFxcdFxcdHQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCB0cnVlKTtcXG5AQCAtMjMwMyw3ICsyMjk2LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXFxuIFxcdFxcdFxcdFxcdGFkZF90b19raWxsX3Bnb2ZmKHQsIHZtYSwgdG9fa2lsbCwgcGdvZmYpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZDQ4YmQ4NjJjMjdiLi45ZTNkMDIzOTMwNjRmIDEwMDY0NFxcbi0tLSBhL21tL29vbV9raWxsLmNcXG4rKysgYi9tbS9vb21fa2lsbC5jXFxuQEAgLTk0LDggKzk0LDcgQEAgc3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0LFxcbiBcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXFx1MDAzZW5vZGVtYXNrO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xcbitcXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhzdGFydCwgdHNrKSB7XFxuIFxcdFxcdGlmIChtYXNrKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElmIHRoaXMgaXMgYSBtZW1wb2xpY3kgY29uc3RyYWluZWQgb29tLCB0c2snc1xcbkBAIC0xMTQsNyArMTEzLDYgQEAgc3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0LFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4gXFx0ZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcXG4gXFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcXG4gXFx0XFx0XFx0aWYgKG9vbV9ldmFsdWF0ZV90YXNrKHAsIG9jKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTQyMywxNCArNDE5LDEyIEBAIHN0YXRpYyB2b2lkIGR1bXBfdGFza3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4gXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwO1xcbiBcXHRcXHRpbnQgaSA9IDA7XFxuIFxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRcXHQvKiBBdm9pZCBwb3RlbnRpYWwgc29mdGxvY2t1cCB3YXJuaW5nICovXFxuIFxcdFxcdFxcdGlmICgoKytpIFxcdTAwMjYgMTAyMykgPT0gMClcXG4gXFx0XFx0XFx0XFx0dG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpO1xcbiBcXHRcXHRcXHRkdW1wX3Rhc2socCwgb2MpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTg4Nyw4ICs4ODEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX3dpbGxfZnJlZV9tZW0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiBcXHQgKiBhcmUgZHlpbmcgYXMgd2VsbCB0byBtYWtlIHN1cmUgdGhhdCBhKSBub2JvZHkgcGlucyBpdHMgbW0gYW5kXFxuIFxcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXFxuIFxcdCAqL1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcXG5AQCAtODk3LDcgKzg5MCw2IEBAIHN0YXRpYyBib29sIHRhc2tfd2lsbF9mcmVlX21lbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIFxcdFxcdGlmICghcmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtOTUzLDggKzk0NSw3IEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4gXFx0ICogVGhhdCB0aHJlYWQgd2lsbCBub3cgZ2V0IGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgc2luY2UgaXQgaGFzIGFcXG4gXFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXFxuIFxcdCAqL1xcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xcbitcXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xcbiBcXHRcXHRpZiAoIXByb2Nlc3Nfc2hhcmVzX21tKHAsIG1tKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxcbkBAIC05NzUsNyArOTY2LDYgQEAgc3RhdGljIHZvaWQgX19vb21fa2lsbF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBjb25zdCBjaGFyICptZXNzYWdlKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZG9fc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCBwLCBQSURUWVBFX1RHSUQpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGNhbl9vb21fcmVhcClcXG4gXFx0XFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xcbmluZGV4IGNmYTczYTJhNjdjYWQuLmVjMWZhYjBiZWFjOWYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xcbisrKyBiL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNcXG5AQCAtMzUxLDkgKzM1MSw3IEBAIHN0YXRpYyBzaXplX3QgY291bnRfYWRkaXRpb25hbF90aHJlYWRzKGNvbnN0IHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MpXFxuIFxcbiBcXHRjYWxsZXIgPSBjdXJyZW50O1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXG4tXFx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XFxuK1xcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKGNhbGxlciwgdGhyZWFkKSB7XFxuIFxcdFxcdC8qIFNraXAgY3VycmVudCwgc2luY2UgaXQgaXMgaW5pdGlhdGluZyB0aGUgc3luYy4gKi9cXG4gXFx0XFx0aWYgKHRocmVhZCA9PSBjYWxsZXIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXFxuIFxcbiBcXHRjYWxsZXIgPSBjdXJyZW50O1xcbiBcXG4tXFx0Z3VhcmQocmN1KSgpO1xcbi1cXG4tXFx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XFxuK1xcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKGNhbGxlciwgdGhyZWFkKSB7XFxuIFxcdFxcdC8qIFNraXAgY3VycmVudCwgc2luY2UgaXQgaXMgaW5pdGlhdGluZyB0aGUgc3luYy4gKi9cXG4gXFx0XFx0aWYgKHRocmVhZCA9PSBjYWxsZXIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjo1OToyOS4wNTE5Mjk3NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUzNzI2MTI1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIktTTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlNFQ1VSSVRZX0xBTkRMT0NLXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgICBcIlJFU0NUUkxfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NldF9vb21fYWRqXCIsXG4gICAgXCJjb3VudF9hZGRpdGlvbmFsX3RocmVhZHNcIixcbiAgICBcInNjaGVkdWxlX3Rhc2tfd29ya1wiLFxuICAgIFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIixcbiAgICBcInNlbGVjdF9iYWRfcHJvY2Vzc1wiLFxuICAgIFwiY29sbGVjdF9wcm9jc19rc21cIixcbiAgICBcImNvbGxlY3RfcHJvY3NfYW5vblwiLFxuICAgIFwiYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RcIixcbiAgICBcInJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jaywgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2ssIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2spIGFuZCByZWZhY3RvcnMgcHJvY2Vzcy90aHJlYWQgaXRlcmF0aW9uIGFjcm9zcyBtdWx0aXBsZSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBpbmNsdWRpbmcgcHJvY2ZzLCBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSwgS1NNLCBMYW5kbG9jaywgZmdyYXBoIHRyYWNpbmcsIGFuZCByZXNjdHJsLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBsb2NraW5nIGFuZCBjb250cm9sLWZsb3cgY2hhbmdlcyBhY3Jvc3MgdGhlc2Ugc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDU4YmUzODk0MjQ2MDUuLjJjNDdkODM4YTFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC0xMTYxLDggKzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbiBcdGlmIChtbSkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XG4rXHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXG4gXHRcdFx0fVxuIFx0XHRcdHRhc2tfdW5sb2NrKHApO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRtbWRyb3AobW0pO1xuIFx0fVxuIGVycl91bmxvY2s6XG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5pbmRleCA1ZGNiYjBhOTY0ZTgxLi5iMTRkZjhiMjNmMWE4IDEwMDY0NFxuLS0tIGEvZnMvcmVzY3RybC9yZHRncm91cC5jXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcbkBAIC03MDksMTQgKzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZHRncm91cF9tdXRleCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgKzgyNCwxMyBAQCBzdGF0aWMgdm9pZCBzaG93X3JkdF90YXNrcyhzdHJ1Y3QgcmR0Z3JvdXAgKnIsIHN0cnVjdCBzZXFfZmlsZSAqcylcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnQ7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cGlkID0gdGFza19waWRfdm5yKHQpO1xuIFx0XHRcdGlmIChwaWQpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJWRcXG5cIiwgcGlkKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLjExMGVhOWYxMzFmMzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMiw2ICsyLDcgQEBcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxuICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcbiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpXHRcXFxuIFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbiBcbisvKlxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4rICogZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoKSB0aGF0IGF1dG9tYXRpY2FsbHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGVcbisgKiBSQ1UgcmVhZCBsb2NrIHZpYSBzY29wZWRfZ3VhcmQocmN1KS4gIFRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZVxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuKyAqIGdvdG8sIG9yIHJldHVybi5cbisgKi9cbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdGZvciAocCA9IFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcdTAwMjZpbml0X3Rhc2sgOyApXG4rXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4rXG4rLypcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxuKyAqIFVzZSAnZ290bycgdG8gZXhpdCBib3RoIGxvb3BzOyB0aGUgUkNVIHJlYWQgbG9jayBpcyByZWxlYXNlZFxuKyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4rICovXG4rI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIFxcXG4rXHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuK1x0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbitcbiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTtcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2NwdS5jXG4rKysgYi9rZXJuZWwvY3B1LmNcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdFx0LypcbkBAIC0xMjY4LDcgKzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdFx0YXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtXHUwMDNlbW0pO1xuIFx0XHR0YXNrX3VubG9jayh0KTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZyZWV6ZXIuYyBiL2tlcm5lbC9mcmVlemVyLmNcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnJlZXplci5jXG4rKysgYi9rZXJuZWwvZnJlZXplci5jXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbitcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0X190aGF3X3Rhc2sodCk7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXG5pbmRleCA2ZmNjOTRjZTRjYTlkLi43M2E1YWQzYmU5YThiIDEwMDY0NFxuLS0tIGEva2VybmVsL2h1bmdfdGFzay5jXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcbkBAIC0zMTUsMTMgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRoaXNfcm91bmRfY291bnQgPSAwO1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcbiBcdFx0XHRpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICszMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbi0gdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4rb3V0OlxuIFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCJcXG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcIlxcblwiKTtcbiBcdHByX3dhcm4oXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcbmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3VwZGF0ZS5jXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5AQCAtNTQ3LDE1ICs1NDcsMTMgQEAgdm9pZCBzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KHZvaWQpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cbi1cdHJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbid0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyFcbiBcdFx0Ly8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLlxuIFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ0LVx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXG4gXHRcdFx0Y29udGludWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCk7XG4gI2VuZGlmIC8vICNpZiBJU19FTkFCTEVEKENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi43ZjlkYmQ0YzdkNjJmIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTIwMTUsOCArMjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZClcbiBcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcClcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCArMTAyOSwxMiBAQCBzdGF0aWMgdm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9jcHUpXG4gI2VuZGlmXG4gXHRcdCAgIFwiXFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICh0YXNrX2NwdShwKSAhPSBycV9jcHUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHByaW50X3Rhc2sobSwgcnEsIHApO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mZ3JhcGguYyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuKysrIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodC1cdTAwM2VyZXRfc3RhY2sgPT0gTlVMTCkge1xuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQrK107XG4gXHRcdH1cbiBcdH1cbi1cbi11bmxvY2s6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBmcmVlOlxuIFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSsrKVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuKysrIGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgKzMxOSw4IEBAIHZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnVud2luZF9zcmN1KTtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbiBcdC8qIENsZWFyIHRoaXMgYml0IGZyb20gYWxsIHRocmVhZHMgKi9cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xuIFx0XHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXG4gXHRcdFx0XHQgICBcdTAwMjZ0LVx1MDAzZXVud2luZF9pbmZvLnVud2luZF9tYXNrKTtcbiBcdFx0aWYgKHQtXHUwMDNldW53aW5kX2luZm8uY2FjaGUpXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG5pbmRleCA4Yzk4YjIwYmZjNDE0Li40ZTdmZTg1NDU0YWI4IDEwMDY0NFxuLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbkBAIC0yNiw4ICsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAodW5saWtlbHkocCA9PSB0YXNrLVx1MDAzZWdyb3VwX2xlYWRlcikpXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG4gXHR9XG4gXHRyZXQgPSB0cnVlO1xuIGZvdW5kOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li44MzBmMzMxY2I2ZjViIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtMzI4MSw4ICszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzIFx1MDAyNiBQQUdFX01BU0s7XG4gXHRcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCA9IHJtYXBfaXRlbS1cdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcbkBAIC0zMjk5LDcgKzMyOTgsNiBAQCB2b2lkIGNvbGxlY3RfcHJvY3Nfa3NtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XG5AQCAtNTcyLDcgKzU3MSw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcbiB9XG4gXG5AQCAtNTg5LDkgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXG5AQCAtNjExLDcgKzYwOCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdC8qXG5AQCAtNjUzLDcgKzY0OCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRlNfREFYICovXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcbiBcbiBcdFx0dCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpO1xuQEAgLTIzMDMsNyArMjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuIFx0XHRcdFx0YWRkX3RvX2tpbGxfcGdvZmYodCwgdm1hLCB0b19raWxsLCBwZ29mZik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbisrKyBiL21tL29vbV9raWxsLmNcbkBAIC05NCw4ICs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soc3RhcnQsIHRzaykge1xuIFx0XHRpZiAobWFzaykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhpcyBpcyBhIG1lbXBvbGljeSBjb25zdHJhaW5lZCBvb20sIHRzaydzXG5AQCAtMTE0LDcgKzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcdGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcbiBcdFx0XHRpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC00MjMsMTQgKzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRcdC8qIEF2b2lkIHBvdGVudGlhbCBzb2Z0bG9ja3VwIHdhcm5pbmcgKi9cbiBcdFx0XHRpZiAoKCsraSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCArODgxLDcgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdCAqIGFyZSBkeWluZyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSB0aGF0IGEpIG5vYm9keSBwaW5zIGl0cyBtbSBhbmRcbiBcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcbkBAIC04OTcsNyArODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHQgKiBUaGF0IHRocmVhZCB3aWxsIG5vdyBnZXQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBzaW5jZSBpdCBoYXMgYVxuIFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxuQEAgLTk3NSw3ICs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICszNTEsNyBAQCBzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuIFxuIFx0Y2FsbGVyID0gY3VycmVudDtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbi1cbi1cdGZvcl9lYWNoX3RocmVhZChjYWxsZXIsIHRocmVhZCkge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4rXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MjkuMDUxOTMwOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk0OTI1NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogUkNVIExvY2sgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGRpZmYgaXRzZWxmLiBJdCBpbnRyb2R1Y2VzIHRoZXNlIG5ldyBtYWNyb3MgaW4gYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgOiBgZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApYCwgYGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpYCwgYW5kIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpYC4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYHNjb3BlZF9ndWFyZChyY3UpYC4gVGhhdCdzIG5lYXQ7IGF1dG9tYXRpYyBSQ1UgcmVhZCBsb2NrIG1hbmFnZW1lbnQgZHVyaW5nIGl0ZXJhdGlvbi4gU291bmRzIGxpa2UgYSBnZW5lcmFsbHkgcG9zaXRpdmUgZGlyZWN0aW9uLlxuXG5Ob3cgZm9yIHRoZSByZWZhY3RvcmluZyBpdHNlbGYuIEl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbCDigJMgYW5kIHRoZSBhcmVhcyBpbXBhY3RlZCBhcmUgYnJvYWQ6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBga2VybmVsL2NwdS5jYCwgYGtlcm5lbC9mcmVlemVyLmNgLCBga2VybmVsL2h1bmdfdGFzay5jYCwgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AsIGBrZXJuZWwvcmN1L3VwZGF0ZS5jYCwgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBga2VybmVsL3NjaGVkL2RlYnVnLmNgLCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCwgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AsIGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLCBgbW0va3NtLmNgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBtbS9vb21fa2lsbC5jYCwgYW5kIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYC4gVGhhdCdzIGEgbG90IG9mIHN1cmZhY2UgYXJlYSFcblxuQmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkIGFib3V0IHRoaXMgcmVmYWN0b3JpbmcsIGxldCdzIHpvb20gb3V0LiBDb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gKlJlYWNoYWJsZSogcGF0aHMgYXJlIGNyaXRpY2FsLiAgYHByb2NmcyBvb21fYWRqYCwgbWVtb3J5IGZhaWx1cmUsIEtTTSwgdGhlIE9PTSBraWxsZXIsIExhbmRsb2NrLCBhbmQgVFNZTkMgLSB0aGVzZSBhcmUgYWxsIGhpZ2gtdG91Y2ggYXJlYXMsIHNvIHRoZSByZWFjaGFiaWxpdHkgaXMgY2xlYXJseSBhIGNvbmNlcm4uIFxuXG5UaGUgcGhpbG9zb3BoeSBhbHNvIGhhcyBzdHJvbmcgd2FybmluZ3MgYWJvdXQgYmxpbmQgdHJ1c3QuIE5vISBFeGVjdXRhYmxlIGNvZGUgbW9kaWZpY2F0aW9ucyBuZWVkIGZ1enppbmcuIEFuZCwgdGhlIG1vZGlmaWNhdGlvbiBvZiBsb2NraW5nLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gVGhhdCdzIGRlZmluaXRlbHkgb24gdGhlIGRhbmdlciBsaXN0ISBTdHJ1Y3R1cmUsIGFic3RyYWN0aW9uLCBmbG93IGNoYW5nZXMgLSB0aGV5IGFsbCBuZWVkIHNjcnV0aW55LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgaW50byB0aGUgdGVjaG5pY2FsIHdlZWRzIGZvciBhIHNlY29uZCBhbmQgY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIG1hY3JvIGltcGxlbWVudGF0aW9uIGFuZCBgc2NvcGVkX2d1YXJkYCdzIG1lY2hhbmljcy4gQW5kLCBsZXQncyBsb29rIGF0IGBrZXJuZWwvaHVuZ190YXNrLmNgLiBXYWl0ISBUaGUgY2hhbmdlIHRoZXJlLi4uXG5gYGBjXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKCFtYXhfY291bnQtLSlcbi1cdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRnb3RvIG91dDtcbiBcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF9icmVhayArIEhVTkdfVEFTS19MT0NLX0JSRUFLKSkge1xuIFx0XHRcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xuIFx0XHR9XG4uLi5cbmBgYFxuXG5SaWdodCwgdGhleSd2ZSByZXBsYWNlZCB0aGUgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIHdpdGggdGhlIG5ldyBtYWNyby4gQnV0Li4uIHdoYXQgKmV4YWN0bHkqIGRvZXMgYHJjdV9sb2NrX2JyZWFrKGcsIHQpYCBkbz8gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBncmVwIHRoZSBjb2RlYmFzZSBvciByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIGltcGxpY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQuIFRoaXMgcmVmYWN0b3IgKmNvdWxkKiBiZSBmaW5lLCBidXQgdGhlIGRldmlscyBpbiB0aG9zZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MzcuMDAxMTg3NTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTkwMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJjdV9sb2NrX2JyZWFrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9odW5nX3Rhc2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvaHVuZ190YXNrLmM9MjM1PXN0YXRpYyB2b2lkIGh1bmdfdGFza19pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LFxcbi0tXFxua2VybmVsL2h1bmdfdGFzay5jLTI4MC0gKi9cXG5rZXJuZWwvaHVuZ190YXNrLmM6MjgxOnN0YXRpYyBib29sIHJjdV9sb2NrX2JyZWFrKHN0cnVjdCB0YXNrX3N0cnVjdCAqZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC9odW5nX3Rhc2suYy0yODIte1xcbi0tXFxua2VybmVsL2h1bmdfdGFzay5jPTMwMT1zdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5rZXJuZWwvaHVuZ190YXNrLmMtMzIxLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcXG5rZXJuZWwvaHVuZ190YXNrLmM6MzIyOlxcdFxcdFxcdGlmICghcmN1X2xvY2tfYnJlYWsoZywgdCkpXFxua2VybmVsL2h1bmdfdGFzay5jLTMyMy1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6MzcuMDQ5MTg0NDkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1ODQ5MDM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByY3VfbG9ja19icmVha2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9odW5nX3Rhc2suY2AuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciB0aGUgY29udGV4dC4gYGh1bmdfdGFzay5jYC4uLnRoYXQgc2NyZWFtcyBkZWJ1Z2dpbmcsIHNwZWNpZmljYWxseSBpZGVudGlmeWluZyB1bnJlc3BvbnNpdmUgdGFza3MuIEFuZCBcInJjdV9sb2NrX2JyZWFrXCI/IFRoYXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBpbnRlcnJ1cHRpbmcgb3IgY2lyY3VtdmVudGluZyBSQ1UgbG9ja3MgaW4gYSBzY2VuYXJpbyB3aGVyZSBhIHRhc2sgaGFzIHBvdGVudGlhbGx5IGJlY29tZSB3ZWRnZWQuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiB0aGUgbWVjaGFuaXNtIHRoYXQgdGhlIGtlcm5lbCBlbXBsb3lzIHRvIGRldGVjdCBhbmQgaGFuZGxlIHRhc2tzIHRoYXQgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiB0byBjb21wbGV0ZSwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBhIGRlYWRsb2NrIG9yIGxpdmVsb2NrIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiBpbnRlcnJ1cHRpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgd2hhdCByZWNvdmVyeSBhY3Rpb25zIHRoaXMgZnVuY3Rpb24gbWlnaHQgdHJpZ2dlci4gSSdtIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyB0aGUgc2FmZXR5IGFuZCBlZmZpY2llbmN5IGNvbnNpZGVyYXRpb25zLiBMZXQncyBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NDguNjM0MDkwODg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2h1bmdfdGFzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKiBUbyBhdm9pZCBleHRlbmRpbmcgdGhlIFJDVSBncmFjZSBwZXJpb2QgZm9yIGFuIHVuYm91bmRlZCBhbW91bnQgb2YgdGltZSxcXG4gMjc2OlxcdCAqIHBlcmlvZGljYWxseSBleGl0IHRoZSBjcml0aWNhbCBzZWN0aW9uIGFuZCBlbnRlciBhIG5ldyBvbmUuXFxuIDI3NzpcXHQgKlxcbiAyNzg6XFx0ICogRm9yIHByZWVtcHRpYmxlIFJDVSBpdCBpcyBzdWZmaWNpZW50IHRvIGNhbGwgcmN1X3JlYWRfdW5sb2NrIGluIG9yZGVyXFxuIDI3OTpcXHQgKiB0byBleGl0IHRoZSBncmFjZSBwZXJpb2QuIEZvciBjbGFzc2ljIFJDVSwgYSByZXNjaGVkdWxlIGlzIHJlcXVpcmVkLlxcbiAyODA6XFx0ICovXFxuIDI4MTpcXHRzdGF0aWMgYm9vbCByY3VfbG9ja19icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdGJvb2wgY2FuX2NvbnQ7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdGdldF90YXNrX3N0cnVjdChnKTtcXG4gMjg2OlxcdFxcdGdldF90YXNrX3N0cnVjdCh0KTtcXG4gMjg3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAyODg6XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDI4OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDI5MDpcXHRcXHRjYW5fY29udCA9IHBpZF9hbGl2ZShnKSBcXHUwMDI2XFx1MDAyNiBwaWRfYWxpdmUodCk7XFxuIDI5MTpcXHRcXHRwdXRfdGFza19zdHJ1Y3QodCk7XFxuIDI5MjpcXHRcXHRwdXRfdGFza19zdHJ1Y3QoZyk7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdHJldHVybiBjYW5fY29udDtcXG4gMjk1OlxcdH1cXG4gMjk2OlxcdFxcbiAyOTc6XFx0LypcXG4gMjk4OlxcdCAqIENoZWNrIHdoZXRoZXIgYSBUQVNLX1VOSU5URVJSVVBUSUJMRSBkb2VzIG5vdCBnZXQgd29rZW4gdXAgZm9yXFxuIDI5OTpcXHQgKiBhIHJlYWxseSBsb25nIHRpbWUuIElmIHRoYXQgaGFwcGVucywgcHJpbnQgb3V0IGEgd2FybmluZy5cXG4gMzAwOlxcdCAqL1xcbiAzMDE6XFx0c3RhdGljIHZvaWQgY2hlY2tfaHVuZ191bmludGVycnVwdGlibGVfdGFza3ModW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiAzMDI6XFx0e1xcbiAzMDM6XFx0XFx0aW50IG1heF9jb3VudCA9IHN5c2N0bF9odW5nX3Rhc2tfY2hlY2tfY291bnQ7XFxuIDMwNDpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfYnJlYWsgPSBqaWZmaWVzO1xcbiAzMDU6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDtcXG4gMzA2OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGhpc19yb3VuZF9jb3VudDtcXG4gMzA3OlxcdFxcdGludCBuZWVkX3dhcm5pbmcgPSBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzO1xcbiAzMDg6XFx0XFx0dW5zaWduZWQgbG9uZyBzaV9tYXNrID0gaHVuZ190YXNrX3NpX21hc2s7XFxuIDMwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NDguNjM0MTkwODk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkwNzEwMTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIFBhdGNoOiBDb3JlIFN1YnN5c3RlbSBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlc2UgbG9ja2luZyBtYWNyb3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRgIGNvbnN0cnVjdCBhbmQgbm93IGl0cyBgcmN1bG9ja2AgdmFyaWFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBhbmQgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgZG91YmxlIGxvb3AuIFRoZW4sIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkb3VibGUgbG9vcCB0byB1c2UgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLlxuXG5Pa2F5LCBzbyBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2AgdXRpbGl6ZXMgYSBgc2NvcGVkX2d1YXJkKHJjdSlgLiBOb3cgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgYnJlYWtgIHdpdGhpbiB0aGUgbG9vcHMgaXMgYmVoYXZpbmcgY29ycmVjdGx5LiBNeSBjb25jZXJuIG5vdyBpcyBhYm91dCBob3cgdGhhdCBgYnJlYWtgIGFmZmVjdHMgdGhlIFJDVSBsb2NrJ3Mgc2NvcGUuIERvZXMgaXQgZ2V0IHJlbGVhc2VkIHdoZW4gdGhlIGd1YXJkIHNjb3BlIGlzIGxlZnQsIGV2ZW4gaWYgdGhlIGlubmVyIGxvb3AgYnJlYWtzIGVhcmx5PyBCYXNlZCBvbiB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgdGhlIGBicmVha2Agd291bGQgb25seSBleGl0IHRoZSBpbm5lciBsb29wLCBjb250aW51aW5nIHRoZSBvdXRlciBwcm9jZXNzIGxvb3AsIGFuZCB0aGUgbG9jayBpcyByZWxlYXNlZCB3aGVuIHRoZSBgc2NvcGVkX2d1YXJkYCBzY29wZSBlbmRzLiBUaGUgb2xkIGNvZGUgYW5kIHRoZSBwYXRjaCBhcmUgZG9pbmcgdGhlIHNhbWUgdGhpbmcuXG5cbk15IGNvbmNlcm4gaXMgbm93LCBkb2VzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgZml4IGFueXRoaW5nPyBNeSBjb25jZXJuIGlzIGFsc28gdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgYmVjYXVzZSBvZiB0aGUgbG9jayByZWxlYXNlIGJlaW5nIGluZGVwZW5kZW50IG9mIHRoZSBsb29wIGV4aXQuXG5cbkJ1dCBoZXksIHdhaXQgYSBzZWNvbmQuIFRoaXMgY2hhbmdlIGlzbid0IGp1c3QgYSBtaW5vciB0d2Vhay4gVGhlIGZhY3QgdGhhdCB0aGlzIGltcGFjdHMgdmFyaW91cyBjb3JlIHN1YnN5c3RlbXMsIGxpa2UgdGhlIHNjaGVkdWxlciwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwcm9jZnMsIG1lYW5zIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGlzIGEgV29ydGhGdXp6aW5nPXRydWUgc2NlbmFyaW8hIGBmcy9wcm9jL2Jhc2UuY2AsIGBtbS9vb21fa2lsbC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0va3NtLmNgLCBhbmQgYHNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmNgIGFyZSBhbGwgYWZmZWN0ZWQsIGFuZCB0aGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oYCBmaWxlLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQgZm9yIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncyEgU28sIGl04oCZcyBleGVjdXRhYmxlIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSBhbmQgdG91Y2hlcyBjb3JlIGFyZWFzIVxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEZpcnN0IHVwIGlzIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGl0cyBgX19zZXRfb29tX2FkamAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fc2V0X29vbV9hZGpgIGZvciBhIGJldHRlciB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjUzLjU0MTI5NTU0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NldF9vb21fYWRqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEwODU9c3RhdGljIHNzaXplX3Qgb29tX2Fkal9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMTA2LVxcbmZzL3Byb2MvYmFzZS5jOjExMDc6c3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXFxuZnMvcHJvYy9iYXNlLmMtMTEwOC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMTk4PXN0YXRpYyBzc2l6ZV90IG9vbV9hZGpfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMjI5LVxcbmZzL3Byb2MvYmFzZS5jOjEyMzA6XFx0ZXJyID0gX19zZXRfb29tX2FkaihmaWxlLCBvb21fYWRqLCB0cnVlKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMjMxLW91dDpcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEyNTc9c3RhdGljIHNzaXplX3Qgb29tX3Njb3JlX2Fkal93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEyNzktXFxuZnMvcHJvYy9iYXNlLmM6MTI4MDpcXHRlcnIgPSBfX3NldF9vb21fYWRqKGZpbGUsIG9vbV9zY29yZV9hZGosIGZhbHNlKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMjgxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NTMuNTg5NDA4MjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NjMyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBPT00ga2lsbGVyJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBtbS9vb21fa2lsbC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gZmFtaWxpYXIgd2l0aCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgb29tX2NwdXNldF9lbGlnaWJsZWAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgZHVtcF90YXNrc2AsIGB0YXNrX3dpbGxfZnJlZV9tZW1gLCBhbmQsIGNydWNpYWxseSwgYF9fb29tX2tpbGxfcHJvY2Vzc2AsIGFuZCBob3cgdGhleSdyZSBvcmNoZXN0cmF0ZWQsIHNwZWNpZmljYWxseSBhdCB0aGUgZW50cnkgcG9pbnQgb2YgYG91dF9vZl9tZW1vcnlgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBPT00gbG9naWMgbGllcy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBMYW5kbG9jayB0c3luYyBzaXR1YXRpb24uIElzIHRoZSBlbnRyeXBvaW50IGluIGBzZWN1cml0eS9sYW5kbG9jay90c3luYy5jYD8gT2theSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmaWxlIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBhbmQgYHNjaGVkdWxlX3Rhc2tfd29ya2AgaW4gcmVsYXRpb24gdG8gdHN5bmMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBMYW5kbG9jayBzeW5jaHJvbml6YXRpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjU5OjU1Ljk2NTczMzgzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NTAyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWR1bGVfdGFza193b3JrfGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYz0zMjQ9c3RhdGljIHZvaWQgdHN5bmNfd29ya3NfcmVsZWFzZShzdHJ1Y3QgdHN5bmNfd29ya3MgKnMpXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTM0NC0vKlxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ1OiAqIGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyAtIGNvdW50cyB0aGUgc2libGluZyB0aHJlYWRzIHRoYXQgYXJlIG5vdCBpbiB3b3Jrc1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzQ2LSAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6MzQ3OnN0YXRpYyBzaXplX3QgY291bnRfYWRkaXRpb25hbF90aHJlYWRzKGNvbnN0IHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MpXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNDgte1xcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zNzItLypcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjM3MzogKiBzY2hlZHVsZV90YXNrX3dvcmsgLSBhZGRzIHRhc2tfd29yayBmb3IgYWxsIGVsaWdpYmxlIHNpYmxpbmcgdGhyZWFkc1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtMzc0LSAqICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGhhdmUgbm90IGJlZW4gc2NoZWR1bGVkIHlldFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODEtICovXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYzozODI6c3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy0zODMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0c3luY19zaGFyZWRfY29udGV4dCAqc2hhcmVkX2N0eClcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM9NDgxPWludCBsYW5kbG9ja19yZXN0cmljdF9zaWJsaW5nX3RocmVhZHMoY29uc3Qgc3RydWN0IGNyZWQgKm9sZF9jcmVkLFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuYy01NTAtXFx0XFx0LyogSW4gUkNVIHJlYWQtbG9jaywgY291bnQgdGhlIHRocmVhZHMgd2UgbmVlZC4gKi9cXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jOjU1MTpcXHRcXHRuZXdseV9kaXNjb3ZlcmVkX3RocmVhZHMgPSBjb3VudF9hZGRpdGlvbmFsX3RocmVhZHMoXFx1MDAyNndvcmtzKTtcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTU1Mi1cXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMtNTgwLVxcdFxcdCAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmM6NTgxOlxcdFxcdGZvdW5kX21vcmVfdGhyZWFkcyA9IHNjaGVkdWxlX3Rhc2tfd29yayhcXHUwMDI2d29ya3MsIFxcdTAwMjZzaGFyZWRfY3R4KTtcXG5zZWN1cml0eS9sYW5kbG9jay90c3luYy5jLTU4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6NTk6NTYuMDIwMzkxOTc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODA3MzkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBTaW5nbGUtVGhyZWFkZWQgRXhlY3V0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaW5nbGUtdGhyZWFkZWQgYXNwZWN0IG9mIHRoaXMgY29kZS4gRmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBsaWIvaXNfc2luZ2xlX3RocmVhZGVkLmNgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQncyBpbmZsdWVuY2luZyB0aGUgcHJvZ3JhbSdzIGJlaGF2aW9yLiBUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDowMC4wMDExMzQ1NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAzMTY4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaD02MzM9ZXh0ZXJuIHZvaWQgZmx1c2hfaXRpbWVyX3NpZ25hbHModm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0My1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oOjY0NDpleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oLTY0NS1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MzE1OT1zdGF0aWMgaW50IGNoZWNrX3Vuc2hhcmVfZmxhZ3ModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMTc5LVxcdGlmICh1bnNoYXJlX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pIHtcXG5rZXJuZWwvZm9yay5jOjMxODA6XFx0XFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxcbmtlcm5lbC9mb3JrLmMtMzE4MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jPTE5MT1zdGF0aWMgaW50IHRpbWVuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5ldylcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE5NS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYzoxOTY6XFx0aWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZS5jLTE5Ny1cXHRcXHRyZXR1cm4gLUVVU0VSUztcXG4tLVxcbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNC0gKi9cXG5saWIvaXNfc2luZ2xlX3RocmVhZGVkLmM6MTU6Ym9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKVxcbmxpYi9pc19zaW5nbGVfdGhyZWFkZWQuYy0xNi17XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9kb21haW4uYz0xNDg0PWludCBhYV9jaGFuZ2VfcHJvZmlsZShjb25zdCBjaGFyICpmcW5hbWUsIGludCBmbGFncylcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jLTE1ODctXFx0LyogVE9ETzogYWRkIHBlcm1pc3Npb24gY2hlY2sgdG8gYWxsb3cgdGhpc1xcbnNlY3VyaXR5L2FwcGFybW9yL2RvbWFpbi5jOjE1ODg6XFx0ICogaWYgKChmbGFncyBcXHUwMDI2IEFBX0NIQU5HRV9PTkVYRUMpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKSB7XFxuc2VjdXJpdHkvYXBwYXJtb3IvZG9tYWluLmMtMTU4OS1cXHQgKiAgICAgIGluZm8gPSBcXFwibm90IGEgc2luZ2xlIHRocmVhZGVkIHRhc2tcXFwiO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3NDQ9c3RhdGljIGludCBzZWxpbnV4X2xzbV9zZXRhdHRyKHU2NCBhdHRyLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1MS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Njg1MjpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKCkpIHtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjg1My1cXHRcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2JvdW5kZWRfdHJhbnNpdGlvbihjcnNlYy1cXHUwMDNlc2lkLCBzaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDowMS43NTE0NjA4NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyNjM3NTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgbG9jYXRpb25zIGZvciB0aGlzIHRhc2suIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcgbGlrZWx5IGZpbGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgZGVhbGluZyB3aXRoIHByb2Nlc3MgbWFuYWdlbWVudCwgbWVtb3J5IGhhbmRsaW5nLCBhbmQgcmVzb3VyY2UgY29udHJvbC4gSSB3aWxsIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZCBmdW5jdGlvbnM6XG5cbiogICBgbW0va3NtLmNgOiBJIHNob3VsZCBjaGVjayB0aGUgYGNvbGxlY3RfcHJvY3Nfa3NtYCBmdW5jdGlvbiB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGxlYWRzXG4qICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgOiBJJ2xsIGxvb2sgaW50byBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGNvbGxlY3RfcHJvY3NfZmlsZWAsIGBjb2xsZWN0X3Byb2NzX2ZzZGF4YCwgYW5kIGBjb2xsZWN0X3Byb2NzX3BmbmAuXG4qICAgYGZzL3Jlc2N0cmwvcmR0Z3JvdXAuY2A6IEknbGwgd2FudCB0byByZXZpZXcgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBhbmQgYHNob3dfcmR0X3Rhc2tzYC5cbiogICBga2VybmVsL2ZyZWV6ZXIuY2A6IEknbGwgY2hlY2sgYHRoYXdfcHJvY2Vzc2AuXG4qICAgYGtlcm5lbC9zY2hlZC9jb3JlLmNgOiBJIHNob3VsZCBjaGVjayBgdWNsYW1wX3N5bmNfdXRpbF9taW5fcnRfZGVmYXVsdGAuXG4qICAgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2A6IEkgbmVlZCB0byBsb29rIGludG8gYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YC5cbiogICBga2VybmVsL2h1bmdfdGFzay5jYDogSSBzaG91bGQgbG9vayBpbnRvIGBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrc2AuXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIEtjb25maWcgZmlsZXMgZm9yIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzLCBrZWVwaW5nIGluIG1pbmQgdGhhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGAgaXMgbGlrZWx5IGludm9sdmVkLiBUaGUgbW9kaWZpZWQgZmlsZXMgSSBzaG91bGQgbG9vayBhdDpcblxuKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfUFJPQ19GU2BcbiogICBgZnMvcmVzY3RybC9yZHRncm91cC5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19SRVNDVFJMX0ZTYCBhbmQgYENPTkZJR19YODZfQ1BVX1JFU0NUUkxgLiBJdCBpcyBpbXBvcnRhbnQgdG8gYWxzbyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBmcy9yZXNjdHJsYC5cbiogICBga2VybmVsL2h1bmdfdGFzay5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19ERVRFQ1RfSFVOR19UQVNLYC5cbiogICBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYCBpcyBjb25uZWN0ZWQgdG8gYENPTkZJR19MT0NLREVQYC5cbiogICBgbW0va3NtLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX0tTTWAuXG4qICAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzIGNvbm5lY3RlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC5cbiogICBgc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY2AgaXMgY29ubmVjdGVkIHRvIGBDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIGBmcy9yZXNjdHJsYCB0byBzZWUgd2hhdCBlbHNlIEkgY2FuIGdsZWFuIGZyb20gdGhlcmUuIEkgYW0gcmVhZHkgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA2Ljc3NzgzODUwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMDM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmR0Z3JvdXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9yZXNjdHJsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9yZXNjdHJsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmZzL3Jlc2N0cmwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkVTQ1RSTF9GUylcXHRcXHQrPSByZHRncm91cC5vIGN0cmxtb25kYXRhLm8gbW9uaXRvci5vXFxuZnMvcmVzY3RybC9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19SRVNDVFJMX0ZTX1BTRVVET19MT0NLKVxcdCs9IHBzZXVkb19sb2NrLm9cXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz0zMDE2PXN0YXRpYyB2b2lkIHJtZGlyX2FsbF9zdWIodm9pZClcXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI2LVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzozMDI3OlxcdFxcdC8qIFJlbW92ZSBlYWNoIHJkdGdyb3VwIG90aGVyIHRoYW4gcm9vdCAqL1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy0zMDI4LVxcdFxcdGlmIChyZHRncnAgPT0gXFx1MDAyNnJkdGdyb3VwX2RlZmF1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA2LjgyNDE0NzU3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQwODE0NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTGFuZGxvY2sgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGVgLiBJIGtub3cgdGhpcyBhcmVhIGluc2lkZSBhbmQgb3V0LCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgdGhpbmdzLCBidXQgYSBmcmVzaCBwZXJzcGVjdGl2ZSBuZXZlciBodXJ0cy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBidWlsdCwgaG93IHRoZSB0YXJnZXRzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHJlY2VudCBjaGFuZ2VzLCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2VzcyBvciB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiBMYW5kbG9jayBpdHNlbGYuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IHRhcmdldHMg4oCTIHRoZSBrZXJuZWwgbW9kdWxlIGJ1aWxkLCBhbnkgdXNlci1zcGFjZSB0b29scywgYW5kIHRoZSByZWxldmFudCBpbmNsdWRlIHBhdGhzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHJvYnVzdCBhbmQgc2VjdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA5LjY2NDk2NDc2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MDM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHN5bmMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9sYW5kbG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvbGFuZGxvY2svTWFrZWZpbGU9Mz1sYW5kbG9jay15IDo9IFxcXFxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEwLVxcdGZzLm8gXFxcXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlOjExOlxcdHRzeW5jLm8gXFxcXFxcbnNlY3VyaXR5L2xhbmRsb2NrL01ha2VmaWxlLTEyLVxcdGRvbWFpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjA5LjcxMzQ3Mzk3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI1OTcwMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZncmFwaC5jYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciB0cmFjaW5nIGJlaGF2aW9yPyBNeSBndXQgdGVsbHMgbWUgdGhhdCBga2VybmVsL3RyYWNlL2ZncmFwaC5jYCBpcyBwcm9iYWJseSB0aGUgcmlnaHQgcGxhY2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIFRoYXQgZmlsZSdzIHByb2JhYmx5IGdvaW5nIHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhvb2tzIHRoYXQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTIuNzM5NDQ2OTI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI2NjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZ3JhcGgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT05Mj1vYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MzpvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05NC1pZmVxICgkKENPTkZJR19CTE9DSykseSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MS0gKiBGb3IgdHlwZSB3aXRoIFxcXCJiaXRtYXAgb2YgZmdyYXBoX2FycmF5IGluZGV4XFxcIiAoRkdSQVBIX1RZUEVfQklUTUFQKTpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDI6ICogIGJpdHM6IDEyIC0gMjdcXHRUaGUgYml0bWFwIG9mIGZncmFwaF9vcHMgZmdyYXBoX2FycmF5IGluZGV4XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQzLSAqXFx0XFx0XFx0VGhhdCBpcywgaXQncyBhIGJpdG1hc2sgb2YgMC0xNSAoMTYgYml0cylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01Ni0gKiBUaGF0IGlzLCBhdCB0aGUgZW5kIG9mIGZ1bmN0aW9uX2dyYXBoX2VudGVyLCBpZiB0aGUgZmlyc3QgYW5kIGZvcnRoXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU3OiAqIGZncmFwaF9vcHMgb24gdGhlIGZncmFwaF9hcnJheVtdIChpbmRleCAwIGFuZCAzKSBuZWVkcyB0aGVpciByZXRmdW5jIGNhbGxlZFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1ODogKiBvbiB0aGUgcmV0dXJuIG9mIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQsIGFuZCB0aGUgZm9ydGggZmdyYXBoX29wc1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01OS0gKiBzdG9yZWQgdHdvIHdvcmRzIG9mIGRhdGEsIHRoaXMgaXMgd2hhdCB3aWxsIGJlIG9uIHRoZSB0YXNrJ3Mgc2hhZG93XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNzEtICogfCAgICAgICAgICpvciBwdXQgYW5vdGhlciB3YXkqICAgICAgICAgICAgICAgfFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo3MjogKiB8ICgzIFxcdTAwM2NcXHUwMDNjIEZHUkFQSF9EQVRBX0lOREVYX1NISUZUKXwgXFxcXCAgICAgICAgICB8IFRoaXMgaXMgZm9yIGZncmFwaF9vcHNbM10uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTczLSAqIHwgKCgyIC0gMSkgXFx1MDAzY1xcdTAwM2MgRkdSQVBIX0RBVEFfU0hJRlQpfCBcXFxcICAgICAgICAgIHwgVGhlIGRhdGEgc2l6ZSBpcyAyIHdvcmRzLlxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNT1lbnVtIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNjUtLypcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTY2OiAqIEVhY2ggZmdyYXBoX29wcyBoYXMgYSByZXNlcnZlZCB1bnNpZ25lZCBsb25nIGF0IHRoZSBlbmQgKHRvcCkgb2YgdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE2Ny0gKiByZXRfc3RhY2sgdG8gc3RvcmUgdGFzayBzcGVjaWZpYyBzdGF0ZS5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xNzU9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmZ3JhcGhfc3RhY2tfY2FjaGVwO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzYtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE3NzpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9hcnJheVtGR1JBUEhfQVJSQVlfU0laRV07XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3OC1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZ3JhcGhfYXJyYXlfYml0bWFzaztcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0yODc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfZGF0YV90eXBlX3ZhbChpbnQgaWR4LCBpbnQgc2l6ZSwgaW50IG9mZnNldClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0yOTQtLyogZnRyYWNlX2dyYXBoX2VudHJ5IHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mjk1OnN0YXRpYyBpbnQgZW50cnlfcnVuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKm9wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk2LVxcdFxcdCAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMDEtLyogZnRyYWNlX2dyYXBoX3JldHVybiBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMwMjpzdGF0aWMgdm9pZCByZXR1cm5fcnVuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKm9wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAzLVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTMyMj1zdGF0aWMgdm9pZCByZXRfc3RhY2tfaW5pdF90YXNrX3ZhcnModW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNC0gKiBSZXNlcnZlcyBzcGFjZSBvZiB1cCB0byBGR1JBUEhfTUFYX0RBVEFfU0laRSBieXRlcyBvbiB0aGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM1OiAqIHRhc2sncyByZXRfc3RhY2sgc2hhZG93IHN0YWNrLCBmb3IgYSBnaXZlbiBmZ3JhcGhfb3BzIGR1cmluZ1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzYtICogdGhlIGVudHJ5ZnVuYygpIGNhbGwuIElmIGVudHJ5ZnVuYygpIHJldHVybnMgemVybywgdGhlIHN0b3JhZ2VcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM3LSAqIGlzIGRpc2NhcmRlZC4gQW4gZW50cnlmdW5jKCkgY2FuIG9ubHkgY2FsbCB0aGlzIG9uY2UgcGVyIGl0ZXJhdGlvbi5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM4OiAqIFRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBjYW4gcmV0cmlldmUgdGhpcyBzdG9yZWQgZGF0YSB3aXRoXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzOS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSgpLlxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM0Nj12b2lkICpmZ3JhcGhfcmVzZXJ2ZV9kYXRhKGludCBpZHgsIGludCBzaXplX2J5dGVzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4MS0gKiBmZ3JhcGhfcmV0cmlldmVfZGF0YSAtIFJldHJpZXZlIHN0b3JlZCBkYXRhIGZyb20gZmdyYXBoX3Jlc2VydmVfZGF0YSgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4MjogKiBAaWR4OlxcdHRoZSBpbmRleCBvZiBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzgzLSAqIEBzaXplX2J5dGVzOiBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemUuXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4NC0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODU6ICogVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgYSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSwgdG8gcmV0cmlldmUgZGF0YSB0aGF0XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4NjogKiB3YXMgc3RvcmVkIGJ5IHRoZSBmZ3JhcGhfb3BzIGVudHJ5ZnVuYygpIG9uIHRoZSBmdW5jdGlvbiBlbnRyeS5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg3LSAqIFRoYXQgaXMsIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgZGF0YSB0aGF0IHdhcyByZXNlcnZlZCBvbiB0aGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg4LSAqIGVudHJ5IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBleGl0IG9mIHRoZSBmdW5jdGlvblxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODk6ICogdGhhdCB0aGUgZmdyYXBoX29wcyByZXRmdW5jKCkgaXMgY2FsbGVkIG9uLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zOTAtICpcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zOTU9dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwMy0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDQ6ICogRXZlcnkgcmVnaXN0ZXJlZCBmZ3JhcGhfb3BzIGhhcyBhIHRhc2sgc3RhdGUgdmFyaWFibGVcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA1LSAqIHJlc2VydmVkIG9uIHRoZSB0YXNrJ3MgcmV0X3N0YWNrLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA3LSAqXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQwODogKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHRvIHRoZSBmZ3JhcGhfb3BzIEBnb3BzIHRhc2tzIHNwZWNpZmljXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwOS0gKiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTAtICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQxMTp1bnNpZ25lZCBsb25nICpmZ3JhcGhfZ2V0X3Rhc2tfdmFyKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTIte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTQzND1nZXRfcmV0X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IG9mZnNldCwgaW50ICpmcmFtZV9vZmZzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU0LSAqIGZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YSAtIGdldCBkYXRhIGZyb20gYSBwYXJlbnQgZnVuY3Rpb25cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDU1OiAqIEBpZHg6IFRoZSBpbmRleCBpbnRvIHRoZSBmZ3JhcGhfYXJyYXkgKGZncmFwaF9vcHM6OmlkeClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU2LSAqIEBzaXplX2J5dGVzOiBBIHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyMT1pbnQgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MjI6XFx0XFx0XFx0ICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MjMtXFx0XFx0XFx0ICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTI4PXN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9yZXRfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUyOTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzMy1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTM0OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfc3R1YiA9IHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM1LVxcdC5lbnRyeWZ1bmMgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YixcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzgtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzOTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9kaXJlY3RfZ29wcyA9IFxcdTAwMjZmZ3JhcGhfc3R1YjtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTQwLURFRklORV9TVEFUSUNfQ0FMTChmZ3JhcGhfZnVuYywgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIpO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTY1Mj1pbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4Ni1cXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGZncmFwaF9hcnJheV9iaXRtYXNrKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Njg3OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4OC1cXHRcXHRcXHRpbnQgc2F2ZV9jdXJyX3JldF9zdGFjaztcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz04MTI9X19mdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIoc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncywgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTg1Ni1cXHRcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZiaXRtYXAsIHNpemVvZihiaXRtYXApICogQklUU19QRVJfQllURSkge1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo4NTc6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMgPSBSRUFEX09OQ0UoZmdyYXBoX2FycmF5W2ldKTtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtODU4LVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMTI9dm9pZCBmZ3JhcGhfaW5pdF9vcHMoc3RydWN0IGZ0cmFjZV9vcHMgKmRzdF9vcHMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTAzMS0gKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTAzMjp2b2lkIGZ0cmFjZV9zdHViX2dyYXBoKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzMtXFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExOTI9c3RhdGljIGludCBmZ3JhcGhfcGlkX2Z1bmMoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTkzOlxcdFxcdFxcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTk0LVxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTIxMT12b2lkIGZncmFwaF91cGRhdGVfcGlkX2Z1bmModm9pZClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxMi17XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMTM6XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTQtXFx0c3RydWN0IGZ0cmFjZV9vcHMgKm9wO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjAtXFx0XFx0aWYgKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZUUkFDRV9PUFNfRkxfUElEKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMjE6XFx0XFx0XFx0Z29wcyA9IGNvbnRhaW5lcl9vZihvcCwgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMjItXFx0XFx0XFx0Z29wcy1cXHUwMDNlZW50cnlmdW5jID0gZnRyYWNlX3BpZHNfZW5hYmxlZChvcCkgP1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyNjQ9c3RhdGljIHZvaWQgaW5pdF90YXNrX3ZhcnMoaW50IGlkeClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjgxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjgyOnN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9lbmFibGVfZGlyZWN0KGJvb2wgZW5hYmxlX2JyYW5jaCwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyODMte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEzMjU9c3RhdGljIGludCBmZ3JhcGhfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzMxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMzMyOmludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzMzMte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTMtXFx0aWYgKCFmZ3JhcGhfaW5pdGlhbGl6ZWQpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTM1NDpcXHRcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwiZmdyYXBoOm9ubGluZVxcXCIsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEzNTUtXFx0XFx0XFx0XFx0XFx0ZmdyYXBoX2NwdV9pbml0LCBOVUxMKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDIxLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNDIyOnZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE0MjMte1xcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTQ3PXN0YXRpYyBERUZJTkVfTVVURVgoZnByb2JlX211dGV4KTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9iZV9ncmFwaF9vcHM7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTQ5LVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIwMT1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9mcHJvYmVfaGVhZGVyKHVuc2lnbmVkIGxvbmcgKnN0YWNrLFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTIxMy0gKiBmcHJvYmUgc2hhZG93IHN0YWNrIG1hbmFnZW1lbnQ6XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjIxNDogKiBTaW5jZSBmcHJvYmUgc2hhcmVzIGEgc2luZ2xlIGZncmFwaF9vcHMsIGl0IG5lZWRzIHRvIHNoYXJlIHRoZSBzdGFjayBlbnRyeVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTUtICogYW1vbmcgdGhlIHByb2JlcyBvbiB0aGUgc2FtZSBmdW5jdGlvbiBleGl0LiBOb3RlIHRoYXQgYSBuZXcgcHJvYmUgY2FuIGJlXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjMxPXN0YXRpYyBpbmxpbmUgaW50IF9fZnByb2JlX2twcm9iZV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1Mi1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjUzOnN0YXRpYyBpbnQgZnByb2JlX2ZncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yNTU9c3RhdGljIHZvaWQgZnByb2JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1NjpcXHRcXHRcXHQgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTctXFx0XFx0XFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU4LVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9iZV9ncmFwaF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI2MC1cXHQuZW50cnlmdW5jXFx0PSBmcHJvYmVfZmdyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTUzNj1zdGF0aWMgdm9pZCBmcHJvYmVfcmVtb3ZlX2lwcyh1bnNpZ25lZCBsb25nICppcHMsIHVuc2lnbmVkIGludCBjbnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTQ1LVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo1NDY6LyogZmdyYXBoX29wcyBjYWxsYmFjaywgdGhpcyBwcm9jZXNzZXMgZnByb2JlcyB3aGljaCBoYXZlIGV4aXRfaGFuZGxlci4gKi9cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NTQ3OnN0YXRpYyBpbnQgZnByb2JlX2ZncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy01NDgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NjQzPXN0YXRpYyB2b2lkIGZwcm9iZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo2NDQ6XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNjQ1LVxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE9c3RhdGljIGludCBwcm9maWxlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQyOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODQzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg2Nj1zdGF0aWMgdm9pZCBwcm9maWxlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg2NzpcXHRcXHRcXHRcXHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg2OC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05MTYtXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjkxNzpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnByb2ZpbGVyX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE4LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2cHJvZmlsZV9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz00NDUxPXN0YXRpYyB2b2lkIHByaW50X3N1Ym9wcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2NS1cXHRcXHRpZiAoc3Vib3BzLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZUUkFDRV9PUFNfRkxfR1JBUEgpIHtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2NjpcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcztcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2Ny1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6NDQ2ODpcXHRcXHRcXHRnb3BzID0gY29udGFpbmVyX29mKHN1Ym9wcywgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjktXFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiIHtlbnQ6JXBTIHJldDolcFN9XFxcIixcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDk3PV9faW5pdCB2b2lkIGZ0cmFjZV9pbml0X2dsb2JhbF9hcnJheV9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTAyLVxcdGZ0cmFjZV9pbml0X3RyYWNlX2FycmF5KHRyKTtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODUwMzpcXHRpbml0X2FycmF5X2ZncmFwaF9vcHModHIsIHRyLVxcdTAwM2VvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NTA0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTMzMz1zdHJ1Y3QgdHJhY2VfYXJyYXkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM3LSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6NDM4OlxcdHN0cnVjdCBmZ3JhcGhfb3BzXFx0KmdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM5LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9ODE3PXZvaWQgcHJpbnRfdHJhY2VfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MTgtXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6ODE5OnZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODIwLVxcdFxcdFxcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgyMTppbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MjItXFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMDYwPWV4dGVybiB2b2lkIF9fdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY0LVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjU6ZXh0ZXJuIHZvaWQgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjY6ZXh0ZXJuIGludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjc6ZXh0ZXJuIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEwNjgtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMTYzPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjExNjQ6ZnRyYWNlX2dyYXBoX2FkZHJfZmluaXNoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTE2NS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjAxPXN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9ncmFwaF9ub3RyYWNlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNC19XFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIwNTpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2FkZHJfZmluaXNoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNi17IH1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMTM9c3RhdGljIGlubGluZSBib29sXFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIxNDpmdHJhY2VfZ3JhcGhfaWdub3JlX2Z1bmMoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSlcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjE1LXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMzA9cHJpbnRfZ3JhcGhfZnVuY3Rpb25fZmxhZ3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1MzIgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjMzLX1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cikgeyB9XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzNS0vKiBmdHJhY2Vfb3BzIG1heSBub3QgYmUgZGVmaW5lZCAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzY6I2RlZmluZSBpbml0X2FycmF5X2ZncmFwaF9vcHModHIsIG9wcykgZG8geyB9IHdoaWxlICgwKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzc6I2RlZmluZSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCBvcHMpICh7IDA7IH0pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzOC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTg0PWludCBmdHJhY2VfY3JlYXRlX2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTctXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjk4OlxcdHJldCA9IGFsbG9jYXRlX2ZncmFwaF9vcHModHIsIHRyLVxcdTAwM2VvcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM9MTA5PXZvaWQgZnRyYWNlX2Rlc3Ryb3lfZnVuY3Rpb25fZmlsZXMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTItXFx0ZnRyYWNlX2ZyZWVfZnRyYWNlX29wcyh0cik7XFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjExMzpcXHRmcmVlX2ZncmFwaF9vcHModHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTQtfVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTIyNT1zdGF0aWMgaW50IGdyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MjI2OlxcdFxcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjI3LVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTI5ND1pbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzoyOTU6XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTI5Ni1cXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTMwMT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X2FyZ3Moc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozMDI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzAzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zNjg9dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzozNjk6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTM3MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mzk5PXN0YXRpYyB2b2lkIHRyYWNlX2dyYXBoX3RocmVzaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0MDA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQwMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzNC1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDM1OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmdW5jZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzYtXFx0LmVudHJ5ZnVuYyA9IFxcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzktXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ0MDppbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDEte1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDI6XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ0My1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NTgtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ1OTp2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjAte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2My1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDY0Ol9faW5pdCB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjUte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0xNzg9c3RhdGljIGludCBpcnFzb2ZmX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjE3OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0xODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTIxNT1zdGF0aWMgdm9pZCBpcnFzb2ZmX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyMTY6XFx0XFx0XFx0XFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjE3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDAtXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyNDE6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0yNDItXFx0LmVudHJ5ZnVuY1xcdFxcdD0gXFx1MDAyNmlycXNvZmZfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTQ4ND1zdGF0aWMgaW50IHJlZ2lzdGVyX2lycXNvZmZfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGdyYXBoLCBpbnQgc2V0KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTItXFx0aWYgKGdyYXBoKVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6NDkzOlxcdFxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTQtXFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz01MDM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaClcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTA4LVxcdGlmIChncmFwaClcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjUwOTpcXHRcXHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy01MTAtXFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTExNT1zdGF0aWMgaW50IHdha2V1cF9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjExNjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTE3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTUxPXN0YXRpYyB2b2lkIHdha2V1cF9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNTI6XFx0XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3Ny1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTc4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfd2FrZXVwX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMtMTc5LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2d2FrZXVwX2dyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9NzY4PXN0cnVjdCBmZ3JhcGhfZml4dHVyZSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6NzY5OlxcdHN0cnVjdCBmZ3JhcGhfb3BzIGdvcHM7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzcwLVxcdGludCBzdG9yZV9zaXplO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9Nzc2PXN0YXRpYyBfX2luaXQgaW50IHN0b3JlX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Nzc6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzc4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz04MTA9c3RhdGljIF9faW5pdCB2b2lkIHN0b3JlX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6ODExOlxcdFxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTgxMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9MTAyOT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDMwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwMzEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwNDctXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA0ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX29wcyBfX2luaXRkYXRhICA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ5LVxcdC5lbnRyeWZ1bmNcXHRcXHQ9IFxcdTAwMjZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwNjI9dHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODAtXFx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcXHUwMDI2dHItXFx1MDAzZWFycmF5X2J1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MTpcXHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMDgyOlxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA4My1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTAzLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDQ6XFx0LyogTmVlZCB0byBhbHNvIHNpbXVsYXRlIHRoZSB0ci1cXHUwMDNlcmVzZXQgdG8gcmVtb3ZlIHRoaXMgZmdyYXBoX29wcyAqL1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDUtXFx0dHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTEwNjpcXHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwNy1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjMtXFx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcXHUwMDI2dHItXFx1MDAzZWFycmF5X2J1ZmZlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTEyNDpcXHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTI1LVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0NS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTQ2OlxcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcXHUwMDI2ZmdyYXBoX29wcyk7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTU5LVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExNjA6XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjEyLjc5MDcxODg5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc4OTU4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlcioqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgdGVsbGluZyBtZSB0byBsb29rIGludG8gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDU3LiBUaGF0J3Mgd2hlcmUgdGhleSBhcmUgcG9pbnRpbmcgbWUgdG8gZmluZCBhIHNwZWNpZmljIGNhbGwgdG8gYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YC4gT2theSwgc28gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2hvd2luZyBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgdGhlcmUsIHRoZSBuYW1lIGBhbGxvY19yZXRzdGFja190YXNrbGlzdGAgaXRzZWxmLCB0ZWxscyBtZSwgdGhhdCB0aGUgZnVuY3Rpb24gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYSBsaW5rZWQgbGlzdCwgb3IgZGF0YSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyBvciBmdW5jdGlvbiBjYWxsIGhpc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTUuMTY5Njc5ODg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMzc9dHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnkgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YjtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDM5LS8qIFRyeSB0byBhc3NpZ24gYSByZXR1cm4gc3RhY2sgYXJyYXkgb24gRlRSQUNFX1JFVFNUQUNLX0FMTE9DX1NJWkUgdGFza3MuICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwNDA6c3RhdGljIGludCBhbGxvY19yZXRzdGFja190YXNrbGlzdCh1bnNpZ25lZCBsb25nICoqcmV0X3N0YWNrX2xpc3QpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwNDEte1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMzI9c3RhdGljIGludCBzdGFydF9ncmFwaF90cmFjaW5nKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI0OS1cXHRkbyB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyNTA6XFx0XFx0cmV0ID0gYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QocmV0X3N0YWNrX2xpc3QpO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjUxLVxcdH0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MTUuMjE2MTk5Mzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTcxMjM2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVbndpbmQgRGVmZXJyYWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgdW53aW5kaW5nIHByb2Nlc3MuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYGtlcm5lbC91bndpbmQvZGVmZXJyZWQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmVycyB1bndpbmRpbmcgd29yaywgc28gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBtaWdodCBiZSBtYW5pZmVzdGluZy4gVGhpcyBmaWxlIHVzdWFsbHkgaG9sZHMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyB1bndpbmQgb3BlcmF0aW9ucyB0aGF0IGNhbid0IGJlIGltbWVkaWF0ZWx5IHByb2Nlc3NlZCwgc28gSSdsbCBzdGFydCBoZXJlIGFuZCBzZWUgd2hhdCBjbHVlcyBJIGNhbiB1bmVhcnRoLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjE3LjIxMzMyNTY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW53aW5kX2RlZmVycmVkX2NhbmNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdW53aW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdW53aW5kL2RlZmVycmVkLmM9MjI5PWludCB1bndpbmRfZGVmZXJyZWRfcmVxdWVzdChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmssIHU2NCAqY29va2llKVxcbi0tXFxua2VybmVsL3Vud2luZC9kZWZlcnJlZC5jLTI5Ny1cXG5rZXJuZWwvdW53aW5kL2RlZmVycmVkLmM6Mjk4OnZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXFxua2VybmVsL3Vud2luZC9kZWZlcnJlZC5jLTI5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjE3LjI2MDk3MzcyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDM4MDkxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgRGVmaW5pdGVseSBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNob29zZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSd2ZSBzZWxlY3RlZCBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogdWJpcXVpdG91cywgZm9jdXNpbmcgb24gdGhvc2Ugd2hpY2ggZWl0aGVyIGltcGxlbWVudCBvciBkaXJlY3RseSBjYWxsIHRoZSBsb29wcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJJ3ZlIGdvdCBhIGdvb2QgbGlzdDogYF9fc2V0X29vbV9hZGpgLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCwgYHNjaGVkdWxlX3Rhc2tfd29ya2AsIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAsIGBzZWxlY3RfYmFkX3Byb2Nlc3NgLCBgY29sbGVjdF9wcm9jc19rc21gLCBgY29sbGVjdF9wcm9jc19hbm9uYCwgYGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0YCwgYW5kIGByZHRncm91cF90YXNrc19hc3NpZ25lZGAuXG5cbkkndmUgdmVyaWZpZWQgdGhhdCBlYWNoIG9mIHRob3NlIHN5bWJvbHMgaXMgaW5kZWVkIG5vbi11YmlxdWl0b3VzIGFuZCByZXByZXNlbnRzIGEgc3BlY2lmaWMgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gYF9fc2V0X29vbV9hZGpgIGlzIHRoZSBwcm9jZnMgb29tX2FkaiBoYW5kbGVyLCBgY291bnRfYWRkaXRpb25hbF90aHJlYWRzYCBkZWFscyB3aXRoIGxhbmRsb2NrIHRocmVhZCBzeW5jaW5nLCBgc2NoZWR1bGVfdGFza193b3JrYCBpcyBwYXJ0IG9mIGxhbmRsb2NrJ3MgdGFzayB3b3JrIHNjaGVkdWxpbmcsIGBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZGAgaXMgYSBoZWxwZXIgZnJvbSBgbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jYCwgYHNlbGVjdF9iYWRfcHJvY2Vzc2AgaXMgdGhlIE9PTSBraWxsZXIgdmljdGltIHNlbGVjdG9yLCBgY29sbGVjdF9wcm9jc19rc21gIGhhbmRsZXMgS1NNIHJldmVyc2UgbWFwcGluZywgYGNvbGxlY3RfcHJvY3NfYW5vbmAgaXMgaW52b2x2ZWQgaW4gbW0gbWVtb3J5IGZhaWx1cmUgcHJvY2VzcyBjb2xsZWN0aW9uLCBgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RgIGlzIHRoZSBmZ3JhcGggcmV0c3RhY2sgYWxsb2NhdG9yLCBhbmQgZmluYWxseSwgYHJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkYCBjaGVja3MgcmVzY3RybCByZHRncm91cCB0YXNrcy5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGFyZWFzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlbSBhbGwuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlOiBgUFJPQ19GU2AsIGBLU01gLCBgTUVNT1JZX0ZBSUxVUkVgLCBgU0VDVVJJVFlfTEFORExPQ0tgLCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCwgYW5kIGBSRVNDVFJMX0ZTYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgdmVyZGljdCBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpuZXcqIHNjb3BlZC1ndWFyZCBSQ1UgbWFjcm9zIChgZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrYCwgYGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrYCwgYW5kIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgYW5kIHRoZW4gcmVmYWN0b3JzIGl0ZXJhdGlvbnMgb3ZlciBwcm9jZXNzIGFuZCB0aHJlYWQgbGlzdHMgYWNyb3NzIGEgbnVtYmVyIG9mIGNvcmUgc3Vic3lzdGVtcy4gIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyBwcm9jZnMsIHRoZSBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgS1NNLCBMYW5kbG9jaywgZnVuY3Rpb24gZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIFRoaXMgb2J2aW91c2x5IGNoYW5nZXMgcmVhY2hhYmxlIGxvY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhvc2Uga2VybmVsIHN1YnN5c3RlbXMuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IHBvcHVsYXRlZCBhbmQgdmVyaWZpZWQuIFRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHRoYXQgSSd2ZSBhY2NvdW50ZWQgZm9yIGV2ZXJ5dGhpbmcgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Nzk5LCJPdXRwdXRUb2tlbnMiOjI1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDoyMi42OTkwNjc5OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk4MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiS1NNXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiU0VDVVJJVFlfTEFORExPQ0tcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiLFxuICAgIFwiUkVTQ1RSTF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V0X29vbV9hZGpcIixcbiAgICBcImNvdW50X2FkZGl0aW9uYWxfdGhyZWFkc1wiLFxuICAgIFwic2NoZWR1bGVfdGFza193b3JrXCIsXG4gICAgXCJjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZFwiLFxuICAgIFwic2VsZWN0X2JhZF9wcm9jZXNzXCIsXG4gICAgXCJjb2xsZWN0X3Byb2NzX2tzbVwiLFxuICAgIFwiY29sbGVjdF9wcm9jc19hbm9uXCIsXG4gICAgXCJhbGxvY19yZXRzdGFja190YXNrbGlzdFwiLFxuICAgIFwicmR0Z3JvdXBfdGFza3NfYXNzaWduZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzY29wZWQtZ3VhcmQgUkNVIG1hY3JvcyAoZm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrLCBmb3JfZWFjaF90aHJlYWRfcmN1bG9jaywgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jaykgYW5kIHJlZmFjdG9ycyBwcm9jZXNzL3RocmVhZCBpdGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGluY2x1ZGluZyBwcm9jZnMsIE9PTSBraWxsZXIsIG1lbW9yeSBmYWlsdXJlLCBLU00sIExhbmRsb2NrLCBmZ3JhcGggdHJhY2luZywgYW5kIHJlc2N0cmwuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIGxvY2tpbmcgYW5kIGNvbnRyb2wtZmxvdyBjaGFuZ2VzIGFjcm9zcyB0aGVzZSBzdWJzeXN0ZW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIktTTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlNFQ1VSSVRZX0xBTkRMT0NLXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgICBcIlJFU0NUUkxfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NldF9vb21fYWRqXCIsXG4gICAgXCJjb3VudF9hZGRpdGlvbmFsX3RocmVhZHNcIixcbiAgICBcInNjaGVkdWxlX3Rhc2tfd29ya1wiLFxuICAgIFwiY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWRcIixcbiAgICBcInNlbGVjdF9iYWRfcHJvY2Vzc1wiLFxuICAgIFwiY29sbGVjdF9wcm9jc19rc21cIixcbiAgICBcImNvbGxlY3RfcHJvY3NfYW5vblwiLFxuICAgIFwiYWxsb2NfcmV0c3RhY2tfdGFza2xpc3RcIixcbiAgICBcInJkdGdyb3VwX3Rhc2tzX2Fzc2lnbmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2NvcGVkLWd1YXJkIFJDVSBtYWNyb3MgKGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jaywgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2ssIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2spIGFuZCByZWZhY3RvcnMgcHJvY2Vzcy90aHJlYWQgaXRlcmF0aW9uIGFjcm9zcyBtdWx0aXBsZSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBpbmNsdWRpbmcgcHJvY2ZzLCBPT00ga2lsbGVyLCBtZW1vcnkgZmFpbHVyZSwgS1NNLCBMYW5kbG9jaywgZmdyYXBoIHRyYWNpbmcsIGFuZCByZXNjdHJsLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSBsb2NraW5nIGFuZCBjb250cm9sLWZsb3cgY2hhbmdlcyBhY3Jvc3MgdGhlc2Ugc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MjIuNzc4MDU5NjIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwMTQyODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjAwOjIyLjc3ODY2ODgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTAwODE0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNjb3BlZCBSQ1UgbG9ja2luZyBtYWNyb3MgKGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBgZm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9ja2ApIHVzaW5nIGBzY29wZWRfZ3VhcmQocmN1KWAgdG8gYXV0b21hdGljYWxseSBoYW5kbGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3aGVuIGl0ZXJhdGluZyBvdmVyIHByb2Nlc3NlcyBhbmQgdGhyZWFkcywgYW5kIHJlcGxhY2VzIG1hbnVhbCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHBhaXJzIGFjcm9zcyB2YXJpb3VzIGtlcm5lbCBzdWJzeXN0ZW1zLlxcblxcblRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIFJDVSBsb2NrIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0by9mcm9tIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGNyZWF0ZSBhbnkgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gUkNVIGxvY2tpbmcgY2hhbmdlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gKGUuZy4gdXNlLWFmdGVyLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjhkNzc3MDQ3ODE2ZmU2MWMyY2I0YWRiMTNjMzg4ZTI5Mjk2NDRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjo1OToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDU4YmUzODk0MjQ2MDUuLjJjNDdkODM4YTFjNzYgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC0xMTYxLDggKzExNjEsNyBAQCBzdGF0aWMgaW50IF9fc2V0X29vbV9hZGooc3RydWN0IGZpbGUgKmZpbGUsIGludCBvb21fYWRqLCBib29sIGxlZ2FjeSlcbiBcdGlmIChtbSkge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSB7XG4rXHRcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdFx0aWYgKHNhbWVfdGhyZWFkX2dyb3VwKHRhc2ssIHApKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG5AQCAtMTE3OCw3ICsxMTc3LDYgQEAgc3RhdGljIGludCBfX3NldF9vb21fYWRqKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb29tX2FkaiwgYm9vbCBsZWdhY3kpXG4gXHRcdFx0fVxuIFx0XHRcdHRhc2tfdW5sb2NrKHApO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRtbWRyb3AobW0pO1xuIFx0fVxuIGVycl91bmxvY2s6XG5kaWZmIC0tZ2l0IGEvZnMvcmVzY3RybC9yZHRncm91cC5jIGIvZnMvcmVzY3RybC9yZHRncm91cC5jXG5pbmRleCA1ZGNiYjBhOTY0ZTgxLi5iMTRkZjhiMjNmMWE4IDEwMDY0NFxuLS0tIGEvZnMvcmVzY3RybC9yZHRncm91cC5jXG4rKysgYi9mcy9yZXNjdHJsL3JkdGdyb3VwLmNcbkBAIC03MDksMTQgKzcwOSwxMiBAQCBpbnQgcmR0Z3JvdXBfdGFza3NfYXNzaWduZWQoc3RydWN0IHJkdGdyb3VwICpyKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZHRncm91cF9tdXRleCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjYsMTUgKzgyNCwxMyBAQCBzdGF0aWMgdm9pZCBzaG93X3JkdF90YXNrcyhzdHJ1Y3QgcmR0Z3JvdXAgKnIsIHN0cnVjdCBzZXFfZmlsZSAqcylcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnQ7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChwLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0aWYgKGlzX2Nsb3NpZF9tYXRjaCh0LCByKSB8fCBpc19ybWlkX21hdGNoKHQsIHIpKSB7XG4gXHRcdFx0cGlkID0gdGFza19waWRfdm5yKHQpO1xuIFx0XHRcdGlmIChwaWQpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKHMsIFwiJWRcXG5cIiwgcGlkKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcmR0Z3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLjExMGVhOWYxMzFmMzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMiw2ICsyLDcgQEBcbiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9TSUdOQUxfSFxuICNkZWZpbmUgX0xJTlVYX1NDSEVEX1NJR05BTF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG5AQCAtNjYzLDYgKzY2NCwzMCBAQCBleHRlcm4gYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKTtcbiAjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKHAsIHQpXHRcXFxuIFx0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbiBcbisvKlxuKyAqIFZhcmlhbnRzIG9mIGZvcl9lYWNoX3Byb2Nlc3MoKSwgZm9yX2VhY2hfdGhyZWFkKCkgYW5kXG4rICogZm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoKSB0aGF0IGF1dG9tYXRpY2FsbHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGVcbisgKiBSQ1UgcmVhZCBsb2NrIHZpYSBzY29wZWRfZ3VhcmQocmN1KS4gIFRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZVxuKyAqIGR1cmF0aW9uIG9mIHRoZSBsb29wIGFuZCByZWxlYXNlZCBvbiBleGl0LCBpbmNsdWRpbmcgdmlhIGJyZWFrLFxuKyAqIGdvdG8sIG9yIHJldHVybi5cbisgKi9cbisjZGVmaW5lIGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdGZvciAocCA9IFx1MDAyNmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSBcdTAwMjZpbml0X3Rhc2sgOyApXG4rXG4rI2RlZmluZSBmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhwLCB0KSBcXFxuK1x0c2NvcGVkX2d1YXJkKHJjdSkgXFxcbitcdF9fZm9yX2VhY2hfdGhyZWFkKChwKS1cdTAwM2VzaWduYWwsIHQpXG4rXG4rLypcbisgKiBEb3VibGUgbG9vcDogJ2JyZWFrJyBvbmx5IGV4aXRzIHRoZSBpbm5lciBmb3JfZWFjaF90aHJlYWQoKSBsb29wLlxuKyAqIFVzZSAnZ290bycgdG8gZXhpdCBib3RoIGxvb3BzOyB0aGUgUkNVIHJlYWQgbG9jayBpcyByZWxlYXNlZFxuKyAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgc2NvcGVkX2d1YXJkIHNjb3BlIGlzIGxlZnQuXG4rICovXG4rI2RlZmluZSBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKHAsIHQpIFxcXG4rXHRzY29wZWRfZ3VhcmQocmN1KSBcXFxuK1x0Zm9yX2VhY2hfcHJvY2VzcyhwKSBmb3JfZWFjaF90aHJlYWQocCwgdClcbitcbiB0eXBlZGVmIGludCAoKnByb2NfdmlzaXRvcikoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB2b2lkICpkYXRhKTtcbiB2b2lkIHdhbGtfcHJvY2Vzc190cmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wLCBwcm9jX3Zpc2l0b3IsIHZvaWQgKik7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jXG5pbmRleCBiM2M4NTUzZDdiZDZjLi4wMDYzOGQyYWJjMGY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2NwdS5jXG4rKysgYi9rZXJuZWwvY3B1LmNcbkBAIC0xMjU0LDggKzEyNTQsNyBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdCAqIGZ1bGwtZmxlZGdlZCB0YXNrbGlzdF9sb2NrLlxuIFx0ICovXG4gXHRXQVJOX09OKGNwdV9vbmxpbmUoY3B1KSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHApIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayhwKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiBcbiBcdFx0LypcbkBAIC0xMjY4LDcgKzEyNjcsNiBAQCB2b2lkIGNsZWFyX3Rhc2tzX21tX2NwdW1hc2soaW50IGNwdSlcbiBcdFx0YXJjaF9jbGVhcl9tbV9jcHVtYXNrX2NwdShjcHUsIHQtXHUwMDNlbW0pO1xuIFx0XHR0YXNrX3VubG9jayh0KTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKiBUYWtlIHRoaXMgQ1BVIGRvd24uICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZyZWV6ZXIuYyBiL2tlcm5lbC9mcmVlemVyLmNcbmluZGV4IGE3NmJmOTU3ZmIzMmQuLjdhODcwZjcxZGNmNmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnJlZXplci5jXG4rKysgYi9rZXJuZWwvZnJlZXplci5jXG5AQCAtMjE3LDExICsyMTcsOSBAQCB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfdGhyZWFkKHAsIHQpIHtcbitcdGZvcl9lYWNoX3RocmVhZF9yY3Vsb2NrKHAsIHQpIHtcbiBcdFx0X190aGF3X3Rhc2sodCk7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jXG5pbmRleCA2ZmNjOTRjZTRjYTlkLi43M2E1YWQzYmU5YThiIDEwMDY0NFxuLS0tIGEva2VybmVsL2h1bmdfdGFzay5jXG4rKysgYi9rZXJuZWwvaHVuZ190YXNrLmNcbkBAIC0zMTUsMTMgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRoaXNfcm91bmRfY291bnQgPSAwO1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmICghbWF4X2NvdW50LS0pXG4tXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfYnJlYWsgKyBIVU5HX1RBU0tfTE9DS19CUkVBSykpIHtcbiBcdFx0XHRpZiAoIXJjdV9sb2NrX2JyZWFrKGcsIHQpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRsYXN0X2JyZWFrID0gamlmZmllcztcbiBcdFx0fVxuIFxuQEAgLTMzNyw5ICszMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gXHRcdFx0aHVuZ190YXNrX2luZm8odCwgdGltZW91dCwgdGhpc19yb3VuZF9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbi0gdW5sb2NrOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4rb3V0OlxuIFx0aWYgKCF0aGlzX3JvdW5kX2NvdW50KVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCBjNTZhN2Y5MWQ3MmUyLi5lYTIxOGRjNzVhZDU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC02ODM0LDE1ICs2ODM0LDEzIEBAIHZvaWQgZGVidWdfc2hvd19hbGxfbG9ja3Modm9pZClcbiBcdH1cbiBcdHByX3dhcm4oXCJcXG5TaG93aW5nIGFsbCBsb2NrcyBoZWxkIGluIHRoZSBzeXN0ZW06XFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICghcC1cdTAwM2Vsb2NrZGVwX2RlcHRoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MocCk7XG4gXHRcdHRvdWNoX25taV93YXRjaGRvZygpO1xuIFx0XHR0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MoKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cHJfd2FybihcIlxcblwiKTtcbiBcdHByX3dhcm4oXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5cXG5cIik7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS91cGRhdGUuYyBiL2tlcm5lbC9yY3UvdXBkYXRlLmNcbmluZGV4IGI2MjczNWE2Nzg4NDIuLmJhYzYzNjZkYTQxZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3VwZGF0ZS5jXG4rKysgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jXG5AQCAtNTQ3LDE1ICs1NDcsMTMgQEAgdm9pZCBzeW5jaHJvbml6ZV9yY3VfdHJpdmlhbF9wcmVlbXB0KHZvaWQpXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7XG4gXG4gXHRzbXBfbWIoKTsgLy8gT3JkZXIgcHJpb3IgYWNjZXNzZXMgYmVmb3JlIGdyYWNlLXBlcmlvZCBzdGFydC5cbi1cdHJjdV9yZWFkX2xvY2soKTsgLy8gUHJvdGVjdCB0YXNrIGxpc3QuXG4tXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCB0KSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrKGcsIHQpIHtcbiBcdFx0aWYgKHQgPT0gY3VycmVudClcbiBcdFx0XHRjb250aW51ZTsgIC8vIERvbid0IGRlYWRsb2NrIG9uIG91cnNlbHZlcyFcbiBcdFx0Ly8gT3JkZXIgbGF0ZXIgcmN1X3JlYWRfbG9jaygpIG9uIG90aGVyIHRhc2tzIGFmdGVyIFFTLlxuIFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ0LVx1MDAzZXJjdV90cml2aWFsX3ByZWVtcHRfbmVzdGluZykpXG4gXHRcdFx0Y29udGludWU7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCk7XG4gI2VuZGlmIC8vICNpZiBJU19FTkFCTEVEKENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi43ZjlkYmQ0YzdkNjJmIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTIwMTUsOCArMjAxNSw3IEBAIHN0YXRpYyB2b2lkIHVjbGFtcF9zeW5jX3V0aWxfbWluX3J0X2RlZmF1bHQodm9pZClcbiBcdHNtcF9tYl9fYWZ0ZXJfc3BpbmxvY2soKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcClcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgcClcbiBcdFx0dWNsYW1wX3VwZGF0ZV91dGlsX21pbl9ydF9kZWZhdWx0KHApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5pbmRleCA3MjIzNmRiNjc5ODNiLi5jZGFlMTY1Yjk4ZjdhIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jXG5AQCAtMTAyOSwxNCArMTAyOSwxMiBAQCBzdGF0aWMgdm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9jcHUpXG4gI2VuZGlmXG4gXHRcdCAgIFwiXFxuXCIpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgcCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCBwKSB7XG4gXHRcdGlmICh0YXNrX2NwdShwKSAhPSBycV9jcHUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHByaW50X3Rhc2sobSwgcnEsIHApO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mZ3JhcGguYyBiL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuaW5kZXggNDBkMzczZDY1ZjliOS4uZjc5N2NlMTE5MjIzMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9mZ3JhcGguY1xuKysrIGIva2VybmVsL3RyYWNlL2ZncmFwaC5jXG5AQCAtMTA1NywxMSArMTA1NywxMCBAQCBzdGF0aWMgaW50IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHVuc2lnbmVkIGxvbmcgKipyZXRfc3RhY2tfbGlzdClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWQoZywgdCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc190aHJlYWRfcmN1bG9jayhnLCB0KSB7XG4gXHRcdGlmIChzdGFydCA9PSBlbmQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodC1cdTAwM2VyZXRfc3RhY2sgPT0gTlVMTCkge1xuQEAgLTEwNzQsOSArMTA3Myw2IEBAIHN0YXRpYyBpbnQgYWxsb2NfcmV0c3RhY2tfdGFza2xpc3QodW5zaWduZWQgbG9uZyAqKnJldF9zdGFja19saXN0KVxuIFx0XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gcmV0X3N0YWNrX2xpc3Rbc3RhcnQrK107XG4gXHRcdH1cbiBcdH1cbi1cbi11bmxvY2s6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBmcmVlOlxuIFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSsrKVxuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoZmdyYXBoX3N0YWNrX2NhY2hlcCwgcmV0X3N0YWNrX2xpc3RbaV0pO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuYyBiL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuaW5kZXggNWJlYTQ3MzE0MjU0OS4uZWNmZTEzMzYwOTVlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC91bndpbmQvZGVmZXJyZWQuY1xuKysrIGIva2VybmVsL3Vud2luZC9kZWZlcnJlZC5jXG5AQCAtMzE5LDkgKzMxOSw4IEBAIHZvaWQgdW53aW5kX2RlZmVycmVkX2NhbmNlbChzdHJ1Y3QgdW53aW5kX3dvcmsgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnVud2luZF9zcmN1KTtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbiBcdC8qIENsZWFyIHRoaXMgYml0IGZyb20gYWxsIHRocmVhZHMgKi9cbi1cdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkKGcsIHQpIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2soZywgdCkge1xuIFx0XHRhdG9taWNfbG9uZ19hbmRub3QoQklUKGJpdCksXG4gXHRcdFx0XHQgICBcdTAwMjZ0LVx1MDAzZXVud2luZF9pbmZvLnVud2luZF9tYXNrKTtcbiBcdFx0aWYgKHQtXHUwMDNldW53aW5kX2luZm8uY2FjaGUpXG5kaWZmIC0tZ2l0IGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG5pbmRleCA4Yzk4YjIwYmZjNDE0Li40ZTdmZTg1NDU0YWI4IDEwMDY0NFxuLS0tIGEvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jXG4rKysgYi9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmNcbkBAIC0yNiw4ICsyNiw3IEBAIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAodW5saWtlbHkocCA9PSB0YXNrLVx1MDAzZWdyb3VwX2xlYWRlcikpXG5AQCAtNDgsNyArNDcsNSBAQCBib29sIGN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKHZvaWQpXG4gXHR9XG4gXHRyZXQgPSB0cnVlO1xuIGZvdW5kOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li44MzBmMzMxY2I2ZjViIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtMzI4MSw4ICszMjgxLDcgQEAgdm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c3RydWN0IGFub25fdm1hICphdiA9IHJtYXBfaXRlbS1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiBcdFx0YW5vbl92bWFfbG9ja19yZWFkKGF2KTtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzIFx1MDAyNiBQQUdFX01BU0s7XG4gXHRcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCA9IHJtYXBfaXRlbS1cdTAwM2VsaW5lYXJfcGFnZV9pbmRleDtcbkBAIC0zMjk5LDcgKzMyOTgsNiBAQCB2b2lkIGNvbGxlY3RfcHJvY3Nfa3NtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0YW5vbl92bWFfdW5sb2NrX3JlYWQoYXYpO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uN2Q5M2RlYjFmN2IzZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC01NTUsOCArNTU1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19hbm9uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJldHVybjtcbiBcbiBcdHBnb2ZmID0gcGFnZV9wZ29mZihmb2xpbywgcGFnZSk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjO1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrX2Vhcmx5X2tpbGwodHNrLCBmb3JjZV9lYXJseSk7XG5AQCAtNTcyLDcgKzU3MSw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfYW5vbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGFub25fdm1hX3VubG9ja19yZWFkKGF2KTtcbiB9XG4gXG5AQCAtNTg5LDkgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cGdvZmZfdCBwZ29mZjtcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRwZ29mZiA9IHBhZ2VfcGdvZmYoZm9saW8sIHBhZ2UpO1xuLVx0Zm9yX2VhY2hfcHJvY2Vzcyh0c2spIHtcbitcdGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9jayh0c2spIHtcbiBcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFza19lYXJseV9raWxsKHRzaywgZm9yY2VfZWFybHkpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXG5AQCAtNjExLDcgKzYwOCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZmlsZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGFkZF90b19raWxsX2Fub25fZmlsZSh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIGFkZHIpO1xuIFx0XHR9XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiB9XG4gXG5AQCAtNjM1LDggKzYzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiBcbiBcdGlfbW1hcF9sb2NrX3JlYWQobWFwcGluZyk7XG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF9wcm9jZXNzKHRzaykge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHRzaykge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7XG4gXG4gXHRcdC8qXG5AQCAtNjUzLDcgKzY0OCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRhZGRfdG9fa2lsbF9mc2RheCh0LCBwYWdlLCB2bWEsIHRvX2tpbGwsIHBnb2ZmKTtcbiBcdFx0fVxuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRlNfREFYICovXG5AQCAtMjI4OCw4ICsyMjgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19wZm4oc3RydWN0IHBmbl9hZGRyZXNzX3NwYWNlICpwZm5fc3BhY2UsXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBmbl9zcGFjZS1cdTAwM2VtYXBwaW5nO1xuIFxuIFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7XG4rXHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2sodHNrKSB7XG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzaztcbiBcbiBcdFx0dCA9IHRhc2tfZWFybHlfa2lsbCh0c2ssIHRydWUpO1xuQEAgLTIzMDMsNyArMjI5Niw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuIFx0XHRcdFx0YWRkX3RvX2tpbGxfcGdvZmYodCwgdm1hLCB0b19raWxsLCBwZ29mZik7XG4gXHRcdH1cbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWQ0OGJkODYyYzI3Yi4uOWUzZDAyMzkzMDY0ZiAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbisrKyBiL21tL29vbV9raWxsLmNcbkBAIC05NCw4ICs5NCw3IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHRjb25zdCBub2RlbWFza190ICptYXNrID0gb2MtXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3JfZWFjaF90aHJlYWQoc3RhcnQsIHRzaykge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soc3RhcnQsIHRzaykge1xuIFx0XHRpZiAobWFzaykge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhpcyBpcyBhIG1lbXBvbGljeSBjb25zdHJhaW5lZCBvb20sIHRzaydzXG5AQCAtMTE0LDcgKzExMyw2IEBAIHN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICpzdGFydCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzYxLDExICszNTksOSBAQCBzdGF0aWMgdm9pZCBzZWxlY3RfYmFkX3Byb2Nlc3Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcdGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0Zm9yX2VhY2hfcHJvY2VzcyhwKVxuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socClcbiBcdFx0XHRpZiAob29tX2V2YWx1YXRlX3Rhc2socCwgb2MpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC00MjMsMTQgKzQxOSwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcDtcbiBcdFx0aW50IGkgPSAwO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0XHRmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2socCkge1xuIFx0XHRcdC8qIEF2b2lkIHBvdGVudGlhbCBzb2Z0bG9ja3VwIHdhcm5pbmcgKi9cbiBcdFx0XHRpZiAoKCsraSBcdTAwMjYgMTAyMykgPT0gMClcbiBcdFx0XHRcdHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTtcbiBcdFx0XHRkdW1wX3Rhc2socCwgb2MpO1xuIFx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbkBAIC04ODcsOCArODgxLDcgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdCAqIGFyZSBkeWluZyBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSB0aGF0IGEpIG5vYm9keSBwaW5zIGl0cyBtbSBhbmRcbiBcdCAqIGIpIHRoZSB0YXNrIGlzIGFsc28gcmVhcGFibGUgYnkgdGhlIG9vbSByZWFwZXIuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cCh0YXNrLCBwKSlcbkBAIC04OTcsNyArODkwLDYgQEAgc3RhdGljIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdFx0aWYgKCFyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTk1Myw4ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHQgKiBUaGF0IHRocmVhZCB3aWxsIG5vdyBnZXQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBzaW5jZSBpdCBoYXMgYVxuIFx0ICogcGVuZGluZyBmYXRhbCBzaWduYWwuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGZvcl9lYWNoX3Byb2Nlc3MocCkge1xuK1x0Zm9yX2VhY2hfcHJvY2Vzc19yY3Vsb2NrKHApIHtcbiBcdFx0aWYgKCFwcm9jZXNzX3NoYXJlc19tbShwLCBtbSkpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzYW1lX3RocmVhZF9ncm91cChwLCB2aWN0aW0pKVxuQEAgLTk3NSw3ICs5NjYsNiBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGRvX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgcCwgUElEVFlQRV9UR0lEKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGNhbl9vb21fcmVhcClcbiBcdFx0cXVldWVfb29tX3JlYXBlcih2aWN0aW0pO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xhbmRsb2NrL3RzeW5jLmMgYi9zZWN1cml0eS9sYW5kbG9jay90c3luYy5jXG5pbmRleCBjZmE3M2EyYTY3Y2FkLi5lYzFmYWIwYmVhYzlmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuKysrIGIvc2VjdXJpdHkvbGFuZGxvY2svdHN5bmMuY1xuQEAgLTM1MSw5ICszNTEsNyBAQCBzdGF0aWMgc2l6ZV90IGNvdW50X2FkZGl0aW9uYWxfdGhyZWFkcyhjb25zdCBzdHJ1Y3QgdHN5bmNfd29ya3MgKndvcmtzKVxuIFxuIFx0Y2FsbGVyID0gY3VycmVudDtcbiBcbi1cdGd1YXJkKHJjdSkoKTtcbi1cbi1cdGZvcl9lYWNoX3RocmVhZChjYWxsZXIsIHRocmVhZCkge1xuK1x0Zm9yX2VhY2hfdGhyZWFkX3JjdWxvY2soY2FsbGVyLCB0aHJlYWQpIHtcbiBcdFx0LyogU2tpcCBjdXJyZW50LCBzaW5jZSBpdCBpcyBpbml0aWF0aW5nIHRoZSBzeW5jLiAqL1xuIFx0XHRpZiAodGhyZWFkID09IGNhbGxlcilcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0zOTIsOSArMzkwLDcgQEAgc3RhdGljIGJvb2wgc2NoZWR1bGVfdGFza193b3JrKHN0cnVjdCB0c3luY193b3JrcyAqd29ya3MsXG4gXG4gXHRjYWxsZXIgPSBjdXJyZW50O1xuIFxuLVx0Z3VhcmQocmN1KSgpO1xuLVxuLVx0Zm9yX2VhY2hfdGhyZWFkKGNhbGxlciwgdGhyZWFkKSB7XG4rXHRmb3JfZWFjaF90aHJlYWRfcmN1bG9jayhjYWxsZXIsIHRocmVhZCkge1xuIFx0XHQvKiBTa2lwIGN1cnJlbnQsIHNpbmNlIGl0IGlzIGluaXRpYXRpbmcgdGhlIHN5bmMuICovXG4gXHRcdGlmICh0aHJlYWQgPT0gY2FsbGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MDA6MjIuNzc4NjY5ODUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTAwNzkyOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkNVIExvY2tpbmcgUmVmYWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIHNvbWUgaGVscGVyIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGA6IGBmb3JfZWFjaF9wcm9jZXNzX3JjdWxvY2tgLCBgZm9yX2VhY2hfdGhyZWFkX3JjdWxvY2tgLCBhbmQgYGZvcl9lYWNoX3Byb2Nlc3NfdGhyZWFkX3JjdWxvY2tgLiBUaGV5J3JlIGxldmVyYWdpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCwgd2hpY2ggaXMgYSBwcmV0dHkgc3RhbmRhcmQgUkFJSSBhcHByb2FjaCBmb3IgbWFuYWdpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIC8gYHJjdV9yZWFkX3VubG9jaygpYCBwYWlyIHdpdGhpbiB0aGUgbG9vcHMuIFNtYXJ0OyBjbGVhbiBhbmQgaGVscHMgYXZvaWQgdGhvc2UgbmFzdHkgUkNVIGxvY2svdW5sb2NrIG1pc21hdGNoZXMuXG5cblRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBlbmNhcHN1bGF0ZXMgdGhlIFJDVSByZWFkIGxvY2tpbmcgYW5kIHVubG9ja2luZyBhcm91bmQgdGhlIHByb2Nlc3MvdGhyZWFkIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBnb29kIG1vdmUgdG8gbWluaW1pemUgcG90ZW50aWFsIGVycm9ycy5cblxuTm93LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIHRoZSBjb252ZXJzaW9uIG9mIGEgYnVuY2ggb2YgZmlsZXM6IGBmcy9wcm9jL2Jhc2UuY2AsIGBmcy9yZXNjdHJsL3JkdGdyb3VwLmNgLCBldGMuLCBhIGdvb2Qgc3ByZWFkIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIHN1Z2dlc3RzIGEgY29uY2VydGVkIGVmZm9ydCB0byBzdGFuZGFyZGl6ZSBhbmQgc2ltcGxpZnkgUkNVIHVzYWdlIGFjcm9zcyB0aGUgY29kZWJhc2UuXG5cbk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3Mgc2VlLi4uIGlzIHRoZXJlIGFueXRoaW5nIGhlcmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCByZWFkcz8gTm9wZSwgbm90aGluZyB0aGF0IGxvb2tzIGxpa2UgaXQ6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZ2V0dGluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgTm8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gIE5vIG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCBpdCdzIGxvb2tpbmcgcHJldHR5IGNsZWFuIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLlxuXG5JJ20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZpbGUgY2hhbmdlcyB0byBiZSBleHRyYSBjZXJ0YWluLiBJbiBga2VybmVsL2h1bmdfdGFzay5jYCwgdGhlIGB1bmxvY2s6YCBsYWJlbCBpcyBub3cgYG91dDpgLCBhbmQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgaGFzIGEganVtcCB0byBgZnJlZTpgIGxhYmVsIGRpcmVjdGx5LCBiZWNhdXNlIHRoZSBgc2NvcGVkX2d1YXJkYCBoYW5kbGVzIHRoZSBSQ1UgdW5sb2NraW5nLiBPa2F5LCBqdXN0IHRpZHlpbmcgdXAgdGhvc2UgZXhwbGljaXQgbG9jay91bmxvY2sgY2FsbHMuIFRoaXMgaXMganVzdCBhIGNsZWFudXAsIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Mb29raW5nIGNsb3NlciBhdCB0aGUgbWFjcm9zIHRoZW1zZWx2ZXMsIHllcywgaXQncyBqdXN0IGEgcmVmYWN0b3JpbmcuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvL2Zyb20gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIGV4aXN0aW5nIGxvY2tpbmcgYmVoYXZpb3IsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG5vdCBiZWluZyBhbHRlcmVkLiBBbnkgbG9ja2luZyBidWdzLCBsaWtlIFJDVSBuZXN0aW5nIG9yIGxpZmV0aW1lIGlzc3Vlcywgc2hvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIGFuZCBQUk9WRV9MT0NLSU5HLiBNZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTi5cblxuVGhlIHF1ZXN0aW9uIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UuIEhvd2V2ZXIsIEkgYW0gbm90IHNlZWluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSdyZSBnb29kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTmAgYW5kIGBLTVNBTlJlYXNvbmluZ2AuIEFuZCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBkZXRhaWwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uXG5cbk9rYXksIGFsbCBzZXQuIExldCdzIGdldCB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbCBnb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMSwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzowMDo0NS44Nzk0NjU0MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2NvcGVkIFJDVSBsb2NraW5nIG1hY3JvcyAoYGZvcl9lYWNoX3Byb2Nlc3NfcmN1bG9ja2AsIGBmb3JfZWFjaF90aHJlYWRfcmN1bG9ja2AsIGBmb3JfZWFjaF9wcm9jZXNzX3RocmVhZF9yY3Vsb2NrYCkgdXNpbmcgYHNjb3BlZF9ndWFyZChyY3UpYCB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZW4gaXRlcmF0aW5nIG92ZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzLCBhbmQgcmVwbGFjZXMgbWFudWFsIGByY3VfcmVhZF9sb2NrKClgL2ByY3VfcmVhZF91bmxvY2soKWAgcGFpcnMgYWNyb3NzIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMuXFxuXFxuVGhpcyBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgUkNVIGxvY2sgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvL2Zyb20gdXNlciBzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgY3JlYXRlIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIGxpZmV0aW1lIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBSQ1UgbG9ja2luZyBjaGFuZ2VzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiAoZS5nLiB1c2UtYWZ0ZXItZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[1] Phase: Succeeded StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 13:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 13:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2] Phase: Succeeded StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 13:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 13:00:57 +0000 UTC FinishedAt: 2026-09-07 13:01:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-convert-artifact-9301716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 13:01:07 +0000 UTC FinishedAt: 2026-09-07 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 13:01:07 +0000 UTC FinishedAt: 2026-09-07 13:18:38 +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:*609b2125-aa79-47e4-9f41-31ac15029627,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-workflow979x7/series-workflow979x7-convert-artifact-9301716/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": "fcd82489-58ef-4955-8cfa-d48b5b47c371", "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-workflow979x7/series-workflow979x7-build-action-2161519186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 13:01:07 +0000 UTC FinishedAt: 2026-09-07 13:18:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*609b2125-aa79-47e4-9f41-31ac15029627,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-workflow979x7/series-workflow979x7-convert-artifact-9301716/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": "fcd82489-58ef-4955-8cfa-d48b5b47c371", "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-workflow979x7/series-workflow979x7-build-action-2161519186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 13:18:38 +0000 UTC FinishedAt: 2026-09-07 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 13:18:38 +0000 UTC FinishedAt: 2026-09-07 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 13:18:38 +0000 UTC FinishedAt: 2026-09-07 13:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 13:18:38 +0000 UTC FinishedAt: 2026-09-07 13:18:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-convert-artifact-3120876179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 13:18:48 +0000 UTC FinishedAt: 2026-09-07 13:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 13:18:48 +0000 UTC FinishedAt: 2026-09-07 13:20:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fcd82489-58ef-4955-8cfa-d48b5b47c371,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-workflow979x7/series-workflow979x7-build-action-2161519186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 13:20:52 +0000 UTC FinishedAt: 2026-09-07 13:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 13:20:52 +0000 UTC FinishedAt: 2026-09-07 13:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 13:20:52 +0000 UTC FinishedAt: 2026-09-07 13:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 13:20:52 +0000 UTC FinishedAt: 2026-09-07 13:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*609b2125-aa79-47e4-9f41-31ac15029627,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-workflow979x7/series-workflow979x7-convert-artifact-3120876179/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": "6f652143-632a-4b0b-a6c2-2e67cea3a47c", "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-workflow979x7/series-workflow979x7-build-action-2481168583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 13:20:52 +0000 UTC FinishedAt: 2026-09-07 13:38:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*609b2125-aa79-47e4-9f41-31ac15029627,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-workflow979x7/series-workflow979x7-convert-artifact-3120876179/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": "6f652143-632a-4b0b-a6c2-2e67cea3a47c", "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-workflow979x7/series-workflow979x7-build-action-2481168583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 13:38:21 +0000 UTC FinishedAt: 2026-09-07 13:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 13:38:21 +0000 UTC FinishedAt: 2026-09-07 13:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 13:38:21 +0000 UTC FinishedAt: 2026-09-07 13:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 13:38:21 +0000 UTC FinishedAt: 2026-09-07 13:40:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f652143-632a-4b0b-a6c2-2e67cea3a47c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-build-action-2481168583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fcd82489-58ef-4955-8cfa-d48b5b47c371,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f652143-632a-4b0b-a6c2-2e67cea3a47c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-build-action-2161519186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-build-action-2481168583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 13:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 13:40:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-convert-artifact-3130407692/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 13:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 13:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 13:40:17 +0000 UTC FinishedAt: 2026-09-07 13:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 13:40:27 +0000 UTC FinishedAt: 2026-09-07 16:42:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow979x7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__set_oom_adj","count_additional_threads","schedule_task_work","current_is_single_threaded","select_bad_process","collect_procs_ksm","collect_procs_anon","alloc_retstack_tasklist","rdtgroup_tasks_assigned"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","KSM","MEMORY_FAILURE","SECURITY_LANDLOCK","FUNCTION_GRAPH_TRACER","RESCTRL_FS"],"series_id":"8167d448-23c8-491b-9423-4a29ef730226","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 13:40:27 +0000 UTC FinishedAt: 2026-09-07 16:41:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fcd82489-58ef-4955-8cfa-d48b5b47c371,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f652143-632a-4b0b-a6c2-2e67cea3a47c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-build-action-2161519186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-build-action-2481168583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow979x7/series-workflow979x7-convert-artifact-3130407692/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}