Name: series-workflow8v7gr Phase: Succeeded StartedAt: 2026-09-08 17:13:02 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[0] Phase: Succeeded StartedAt: 2026-09-08 17:13:02 +0000 UTC FinishedAt: 2026-09-08 17:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 17:13:02 +0000 UTC FinishedAt: 2026-09-08 17:15:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "a106878c-9eef-48ad-b6ea-c007cecbba83" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bpf_copy_from_user_mm", "bpf_copy_from_user_mm_str", "bpf_copy_from_user_task", "bpf_copy_from_user_task_str", "copy_remote_mm_str", "copy_remote_vm_str", "__copy_remote_mm_str" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVx1MDAzZW1tIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSByZWFjaGFibGUgQlBGIGFuZCBNTSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA3NDVmNmViNTI3OWU2Li40ZGRkNDAzZmQ5MWM3IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDU2LDkgJiM0MzsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcbiYjNDM7XHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcdH1cbiBcdGlmIChicHJtLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHB1dF91c2VyX25zKGJwcm0tXHUwMDNldXNlcl9ucyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI1LDEwICYjNDM7MzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4tI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0jZW5kaWZcbiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTY3OSw5ICYjNDM7Njc5LDQ0IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7XG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4mIzQzO1x0aWYgKHJldCA9PSBzaXplKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuJiM0MztcdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4mIzQzO1x0XHRtZW1zZXQoZHN0ICYjNDM7IHJldCwgMCwgc2l6ZSAtIHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQgJiM0MzsgMTtcbiYjNDM7fVxuJiM0MztcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpXG4ge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xuQEAgLTY5MSwxMyAmIzQzOzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuJiM0MztcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuJiM0MztcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTtcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgJiM0MzszNjk2LDY4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICYjNDM7IDE7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4mIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwgbW0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcbiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXG4mIzQzOyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbiYjNDM7ICogaXMgemVyby5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4mIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxuJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcbiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdFx0ICAgbW0sIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiB0YXNrJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSw2ICYjNDM7Mzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuQEAgLTM2ODksMTcgJiM0MzszNzkwLDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiBcdFx0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0KihjaGFyICopZHN0ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcbiYjNDM7XHRyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHQgIG1tLCBmbGFncyk7XG4mIzQzO1x0bW1wdXQobW0pO1xuIFxuLVx0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICYjNDM7NTAyOCw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0Mzt9O1xuJiM0MztcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuJiM0MztcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBzdHJ1Y3QgaHN0YXRlO1xuIFxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzO1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCAmIzQzOzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHZvaWQgKm9sZF9idWYgPSBidWY7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03NDA3LDQzICYjNDM7NzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmNcbkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyAmIzQzOzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZClcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5Oztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmNcbkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzQzOy8qKlxuJiM0MzsgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS5cbiYjNDM7ICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbiYjNDM7ICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlclxuJiM0MzsgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbiYjNDM7ICogLUVGQVVMVC5cbiYjNDM7ICovXG4mIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkobGVuID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4mIzQzOyAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbiYjNDM7ICogLUVGQVVMVC5cbiYjNDM7ICovXG4mIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkobGVuID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbiYjNDM7XHRpZiAoIW1tKSB7XG4mIzQzO1x0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdG1tcHV0KG1tKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzQzO1xuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxuIHtcbiBcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBhcmcwW10gPSBcJiMzNDtmaXJzdFwmIzM0OztcbiYjNDM7XHRjaGFyIGFyZzFbXSA9IFwmIzM0O3NlY29uZC1hcmd1bWVudFwmIzM0OztcbiYjNDM7XHRjaGFyIGVudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO1x0Y2hhciBlbnYxW10gPSBcJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuJiM0MztcdHBpZF90IGNoaWxkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGlsZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCYjMzQ7Zm9ya1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGlsZCkge1xuJiM0MztcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4mIzQzO1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbiYjNDM7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0XHRleGVjdmUoXCYjMzQ7L2Jpbi90cnVlXCYjMzQ7LCBhcmd2LCBlbnZwKTtcbiYjNDM7XHRcdF9leGl0KGVycm5vKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwmIzM0O2NoaWxkX2V4aXRlZFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwmIzM0O2V4ZWNfZXJybm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcJiMzNDticHJtX2FyZ2NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwmIzM0O2Jwcm1fZW52Y1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcJiMzNDtkYXRhX2xlbl9tYXRjaFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcJiMzNDtpbnZhbGlkX2ZsYWdzX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcJiMzNDtjb3B5X3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcJiMzNDtzdHJfYXJnMF9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCYjMzQ7c3RyX2FyZzFfcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwmIzM0O3N0cl9lbnYwX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcJiMzNDtzdHJfZW52MV9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcJiMzNDtkYXRhX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwmIzM0O3N0cl9hcmdzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwmIzM0O3N0cl9lbnZzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCYjMzQ7Zmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcJiMzNDtcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7U09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwmIzM0O2ZpcnN0XCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcJiMzNDtzZWNvbmQtYXJndW1lbnRcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwmIzM0O09USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGJwcm1fYXJnYztcbiYjNDM7aW50IGJwcm1fZW52YztcbiYjNDM7aW50IGRhdGFfbGVuX21hdGNoO1xuJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4mIzQzO2ludCBjb3B5X3JldDtcbiYjNDM7aW50IHN0cl9hcmcwX3JldDtcbiYjNDM7aW50IHN0cl9hcmcxX3JldDtcbiYjNDM7aW50IHN0cl9lbnYwX3JldDtcbiYjNDM7aW50IHN0cl9lbnYxX3JldDtcbiYjNDM7aW50IGRhdGFfbWF0Y2g7XG4mIzQzO2ludCBzdHJfYXJnc19tYXRjaDtcbiYjNDM7aW50IHN0cl9lbnZzX21hdGNoO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGNoYXIgYXJnMFszMl0gPSB7fTtcbiYjNDM7XHRjaGFyIGFyZzFbMzJdID0ge307XG4mIzQzO1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuJiM0MztcdGNoYXIgZW52MVszMl0gPSB7fTtcbiYjNDM7XHR1NjQgb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghQ09ORklHX01NVSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuJiM0MztcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4mIzQzO1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4mIzQzO1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbiYjNDM7XG4mIzQzO1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbiYjNDM7XHRcdFx0XHRcdCBtbSwgMCk7XG4mIzQzO1x0aWYgKGNvcHlfcmV0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRhdGFfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbiYjNDM7XHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICovXG4mIzQzO1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4mIzQzO1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgJiM0Mzsgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuJiM0MztcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi9cbiYjNDM7XHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi9cbiYjNDM7XHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3RyX2FyZ3NfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4mIzQzO1x0c3RyX2VudnNfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC0xMTMsNiAmIzQzOzExMyw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4gXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4gXHRzdHJ1Y3QgaW5uZXJfbWFwICppbm5lcl9tYXA7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRjaGFyIGFyZ3NbNjRdO1xuIFx0X191MzIga2V5ID0gMDtcbiBcdF9fdTY0ICp2YWx1ZTtcbkBAIC0xMjEsNyAmIzQzOzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0YnBybV9jb3VudCYjNDM7JiM0Mzs7XG4gXG4gXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNldm1hLVx1MDAzZXZtX21tLVx1MDAzZWFyZ19zdGFydCk7XG4tXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNlbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbiYjNDM7XHRtbSA9IGJwcm0tXHUwMDNlbW07XG4mIzQzO1x0aWYgKG1tKVxuJiM0MztcdFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS1cdTAwM2Vhcmdfc3RhcnQpO1xuIFxuIFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZrZXkpO1xuIFx0aWYgKHZhbHVlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVx1MDAzZW1tIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSByZWFjaGFibGUgQlBGIGFuZCBNTSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAogc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7Ci0JaWYgKGJwcm0tJmd0O21tKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CiYjNDM7CWlmIChtbSkgewogCQlhY2N0X2FyZ19zaXplKGJwcm0sIDApOwotCQltbXB1dChicHJtLSZndDttbSk7CiYjNDM7CQlicHJtLSZndDttbSA9IE5VTEw7CiYjNDM7CQltbXB1dChtbSk7CiAJfQogCWlmIChicHJtLSZndDt1c2VyX25zKQogCQlwdXRfdXNlcl9ucyhicHJtLSZndDt1c2VyX25zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzI1LDEwICYjNDM7MzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAotZXh0ZXJuIGludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7Ci0jZW5kaWYKJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAogbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtNjc5LDkgJiM0Mzs2NzksNDQgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHsKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgX19icGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLAomIzQzOwkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwomIzQzOwlpZiAocmV0ID09IHNpemUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CiYjNDM7CS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KJiM0MzsJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJCW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIHNpemUgLSByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ICYjNDM7IDE7CiYjNDM7fQomIzQzOwogQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSwKIAkgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAogCS8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqLwpAQCAtNjkxLDEzICYjNDM7NzI2LDE2IEBAIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJaWYgKHVubGlrZWx5KCFzaXplKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwotCWlmIChyZXQgPT0gc2l6ZSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewomIzQzOwkJbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQogCi0JbWVtc2V0KGRzdCwgMCwgc2l6ZSk7Ci0JLyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqLwotCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogLUVGQVVMVDsKJiM0MzsJcmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHsKQEAgLTM2NTgsNiAmIzQzOzM2OTYsNjggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIKIAlyZXR1cm4gcmV0ICYjNDM7IDE7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvCiYjNDM7ICoKJiM0MzsgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uCiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWQKJiM0MzsgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5CiYjNDM7ICogZmFpbHMgb3IgaXMgcGFydGlhbC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghZHN0X19zeikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLCBtbSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlCiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMCiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPUwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGgKJiM0MzsgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6CiYjNDM7ICogaXMgemVyby4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZgomIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLgomIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcywKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkJICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQkgICBtbSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzayYjMzk7cyBhZGRyZXNzIHNwYWNlCiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlCkBAIC0zNjgxLDYgJiM0MzszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKIAkJCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfkJQRl9GX1BBRF9aRVJPUykpCkBAIC0zNjg5LDE3ICYjNDM7Mzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiAJaWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gY29weV9yZW1vdGVfdm1fc3RyKHRzaywgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApOwotCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQogCQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJKihjaGFyICopZHN0ID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpOwomIzQzOwlyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQkgIG1tLCBmbGFncyk7CiYjNDM7CW1tcHV0KG1tKTsKIAotCXJldHVybiByZXQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG8KQEAgLTQ5MjQsNiAmIzQzOzUwMjgsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7CiAJc3RydWN0IGlub2RlICpkX2lub2RlOwogfTsKIAomIzQzO0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7fTsKJiM0MzsKIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiB9OwpAQCAtNjA1OCw2ICYjNDM7NjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiB7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7CiYjNDM7CUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7CiAKIAlyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoJmFtcDtlbnYtJmd0O2xvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAzOGIxMTY1MjEyYzk0Li41NTdiMjkzODEzNTU3IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI1LDYgJiM0MzsyNSw5IEBACiBzdHJ1Y3QgZm9saW9fYmF0Y2g7CiBzdHJ1Y3QgaHN0YXRlOwogCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7CiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKIAlpbnQgZXJyID0gMDsKQEAgLTc0MDcsNDMgJiM0Mzs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gZXJyOwogCXJldHVybiBidWYgLSBvbGRfYnVmOwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jCkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyX2VuZDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NAotLS0gYS9tbS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jCkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KJiM0MzsKIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQogewogCWNoYXIgKmFkZHIxLCAqYWRkcjI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSw3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzOwljaGFyIGFyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7CWNoYXIgZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7CWNoYXIgZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CXN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJc2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLSZndDtwYWdlW10gcmF0aGVyIHRoYW4KJiM0MzsJICogYmVpbmcgbWFwcGVkIGluIGJwcm0tJmd0O21tLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtrY29uZmlnLSZndDtDT05GSUdfTU1VKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hpbGQpIHsKJiM0MzsJCWNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9OwomIzQzOwkJY2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJCWV4ZWN2ZSgmIzM0Oy9iaW4vdHJ1ZSYjMzQ7LCBhcmd2LCBlbnZwKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCksIGNoaWxkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCAmIzM0O2NoaWxkX2V4aXRlZCYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgJiMzNDtleGVjX2Vycm5vJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2FyZ2MsIDIsICYjMzQ7YnBybV9hcmdjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2VudmMsIDIsICYjMzQ7YnBybV9lbnZjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX2xlbl9tYXRjaCwgMSwgJiMzNDtkYXRhX2xlbl9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsICYjMzQ7aW52YWxpZF9mbGFnc19yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NvcHlfcmV0LCAwLCAmIzM0O2NvcHlfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgJiMzNDtzdHJfYXJnMF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCAmIzM0O3N0cl9hcmcxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksICYjMzQ7c3RyX2VudjBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgJiMzNDtzdHJfZW52MV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbWF0Y2gsIDEsICYjMzQ7ZGF0YV9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZ3NfbWF0Y2gsIDEsICYjMzQ7c3RyX2FyZ3NfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnZzX21hdGNoLCAxLCAmIzM0O3N0cl9lbnZzX21hdGNoJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSwxMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9ICYjMzQ7Zmlyc3RcMHNlY29uZC1hcmd1bWVudFwwJiMzNDsKJiM0MzsJCQkJICAgICYjMzQ7U09NRV9FTlY9YVwwT1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBicHJtX2FyZ2M7CiYjNDM7aW50IGJwcm1fZW52YzsKJiM0MztpbnQgZGF0YV9sZW5fbWF0Y2g7CiYjNDM7aW50IGludmFsaWRfZmxhZ3NfcmV0OwomIzQzO2ludCBjb3B5X3JldDsKJiM0MztpbnQgc3RyX2FyZzBfcmV0OwomIzQzO2ludCBzdHJfYXJnMV9yZXQ7CiYjNDM7aW50IHN0cl9lbnYwX3JldDsKJiM0MztpbnQgc3RyX2VudjFfcmV0OwomIzQzO2ludCBkYXRhX21hdGNoOwomIzQzO2ludCBzdHJfYXJnc19tYXRjaDsKJiM0MztpbnQgc3RyX2VudnNfbWF0Y2g7CiYjNDM7CiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJY2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWNoYXIgYXJnMFszMl0gPSB7fTsKJiM0MzsJY2hhciBhcmcxWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjBbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MVszMl0gPSB7fTsKJiM0MzsJdTY0IG9mZnNldCA9IDA7CiYjNDM7CXU2NCBkYXRhX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFDT05GSUdfTU1VKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGJwcm0tJmd0O21tOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwcm1fYXJnYyA9IGJwcm0tJmd0O2FyZ2M7CiYjNDM7CWJwcm1fZW52YyA9IGJwcm0tJmd0O2VudmM7CiYjNDM7CiYjNDM7CS8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tJmd0O3AgKi8KJiM0MzsJZGF0YV9sZW4gPSBicHJtLSZndDtleGVjIC0gYnBybS0mZ3Q7cDsKJiM0MzsJZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7CiYjNDM7CiYjNDM7CWludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsCiYjNDM7CQkJCQkJICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwgbW0sIH4wVUxMKTsKJiM0MzsKJiM0MzsJY29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsCiYjNDM7CQkJCQkgbW0sIDApOwomIzQzOwlpZiAoY29weV9yZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGF0YV9tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpOwomIzQzOwomIzQzOwkvKiBhcmcwIGlzIGF0IGJwcm0tJmd0O3AgKi8KJiM0MzsJc3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzBfcmV0OwomIzQzOwomIzQzOwkvKiBhcmcxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICovCiYjNDM7CXN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcxX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MCBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi8KJiM0MzsJc3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2VudjBfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi8KJiM0MzsJc3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN0cl9hcmdzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTsKJiM0MzsJc3RyX2VudnNfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YV9tYXRjaCAmYW1wOyZhbXA7IHN0cl9hcmdzX21hdGNoICZhbXA7JmFtcDsgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC0xMTMsNiAmIzQzOzExMyw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKIAlzdHJ1Y3QgaW5uZXJfbWFwICppbm5lcl9tYXA7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWNoYXIgYXJnc1s2NF07CiAJX191MzIga2V5ID0gMDsKIAlfX3U2NCAqdmFsdWU7CkBAIC0xMjEsNyAmIzQzOzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJYnBybV9jb3VudCYjNDM7JiM0Mzs7CiAKIAlicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tJmd0O3ZtYS0mZ3Q7dm1fbW0tJmd0O2FyZ19zdGFydCk7Ci0JYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLSZndDttbS0mZ3Q7YXJnX3N0YXJ0KTsKJiM0MzsJbW0gPSBicHJtLSZndDttbTsKJiM0MzsJaWYgKG1tKQomIzQzOwkJYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS0mZ3Q7YXJnX3N0YXJ0KTsKIAogCXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FycmF5LCAmYW1wO2tleSk7CiAJaWYgKHZhbHVlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHNvbWUgY3JpdGljYWwgYXJlYXMgb2YgdGhlIGtlcm5lbCDigJMgQlBGLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBleGVjdXRpb24gc3Vic3lzdGVtIChWRlMpLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYga2Z1bmNzLCBtZW1vcnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmcmVlX2Jwcm1gIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2Agd2l0aCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24sIHRoZSBhZGRpdGlvbiBvZiBuZXcgYW5kIG1vZGlmaWVkIEJQRiBrZnVuY3MgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBhbmQgdXBkYXRlcyB0byBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYC4gVGhlc2UgQlBGIGludGVyYWN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZpbmcgdXNlci1zcGFjZSBtZW1vcnkgY29waWVzLCBhcmUgb2Z0ZW4gZ29sZG1pbmVzIGZvciBmdXp6aW5nIGR1ZSB0byB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmZvcm1hdGlvbiBsZWFrcyBpZiB0aGUga2VybmVsIHNpZGUgZG9lc24mIzM5O3QgY29ycmVjdGx5IGhhbmRsZSBpbnZhbGlkIHBvaW50ZXJzIG9yIGJvdW5kYXJ5IGNoZWNrcy4gSSBhbHNvIHNlZSB0aGF0IHRoZSB2ZXJpZmllciBpcyB1cGRhdGVkLCB3aGljaCBjb3VsZCBhbHNvIGJlIGludGVyZXN0aW5nLgoKVGhlIGRpZmZzIHJlbGF0ZWQgdG8gdGhlIGBtbWAgc3Vic3lzdGVtLCB3aXRoIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCwgYW5kIHRoZSBpbnRlcm5hbCByZW5hbWluZywgYXJlIGFub3RoZXIga2V5IGFyZWEuIEFueSB0aW1lIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY29weWluZyBzdHJpbmdzLCBJIGdldCBpbnRlcmVzdGVkLiBUaGUgaW50ZXJhY3Rpb24gb2YgYWxsIHRoZXNlIGNvbXBvbmVudHMgbWFrZXMgdGhpcyBwYXRjaCBldmVuIG1vcmUgZW50aWNpbmcuCgpHaXZlbiB0aGF0IFN5emthbGxlciBhbHJlYWR5IHJlZ3VsYXJseSBmdXp6ZXMgQlBGLCB0aGUgdmVyaWZpZXIsIGFuZCB0aGUgYGV4ZWN2ZWAgc3lzdGVtIGNhbGwsIHRoaXMgcGF0Y2ggc2xvdHMgcmlnaHQgaW50byBleGlzdGluZyBmdXp6aW5nIHN0cmF0ZWdpZXMuIERlZmluaXRlbHkgcmVhY2hhYmxlLiAqKldvcnRoRnV6emluZyA9IFRydWUqKi4KCk5vdywgaXQmIzM5O3MgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXh0cmFjdCB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBoaXR0aW5nIHRoZSByaWdodCBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gdXNlIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGNhcmVmdWxseSBnbyB0aHJvdWdoIHRoZSBLY29uZmlncyBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGZvdW5kYXRpb25hbCBwaWVjZXMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTMwLVxua2VybmVsL2JwZi9LY29uZmlnOjMxOmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9NjI9Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6NjQ6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNjUtXHRoZWxwXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTc3PWNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTc5LVx0ZGVmYXVsdCB5XG5rZXJuZWwvYnBmL0tjb25maWc6ODA6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctODEtXHRoZWxwXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMTAwLVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfS0VZUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga2V5cy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM2PWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM4LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDY9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDktIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYzLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY1LVxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcwLWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo3MTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcyLWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0Njg9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxua2VybmVsL2JwZi9jb3JlLmM6MjQ3MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwMzY9dm9pZCBfX2JwZl9mcmVlX3VzZWRfYnRmcyhzdHJ1Y3QgYnRmX21vZF9wYWlyICp1c2VkX2J0ZnMsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzAzOS1cdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz1zdGF0aWMgdm9pZCBicGZfcHJvZ19mcmVlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVx0YXV4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfcHJvZ19hdXgsIHdvcmspO1xua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVx0YnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihhdXgtXHUwMDNla2Z1bmNfYnRmX3RhYik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM4OT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzkwLXtcbmtlcm5lbC9icGYvY29yZS5jOjMzOTE6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzM5Mi1cdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0Mjk9X193ZWFrIHU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQzMy1cbmtlcm5lbC9icGYvY29yZS5jOjM0MzQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQzNS1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0NjA9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTCh4ZHBfYnVsa190eCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDYxLVxua2VybmVsL2JwZi9jb3JlLmM6MzQ2MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDYzLVxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXHQjIFRoZSBkZXBlbmRlbmN5IG9uICFDT01QSUxFX1RFU1QgcHJldmVudHMgaXQgZnJvbSBiZWluZyBlbmFibGVkXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUxND1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIxLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjMtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwNi1cdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBLZnVuYyBhbmQgSGVscGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBhbG9uZyB3aXRoIHRoZSBicm9hZGVyIGtmdW5jcyB3aXRoaW4gQlBGLCBhcmUgY29uZmlndXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCDigJMgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGNlbnRyYWwgaHViLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEga2V5IHBsYXllciBoZXJlLCBhcyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgpOZXh0LCBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBhIGhhcmQgZGVwZW5kZW5jeSBmb3IgdGhlc2Uga2Z1bmNzIG9yIEJURiBJRCByZWxhdGVkIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdXJ0aGVyLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IHdpdGggYSBnb29kIG9sJiMzOTsgYGdyZXBgIHNlc3Npb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYEJURl9JRF9GTEFHU2AsIG9yIGV2ZW4gc3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgYGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJgIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBrZnVuY3MgYW5kIEJURi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY29weV9mcm9tX3VzZXJfc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNjQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX2l0ZXJfYml0c19kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9iaXRzICppdClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNjU4LS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY1OTogKiBicGZfY29weV9mcm9tX3VzZXJfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdW5zYWZlIHVzZXIgYWRkcmVzc1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY2MC0gKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY3Mi0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjM2NzM6X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDMwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDQ1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQ2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0Ny1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCVEYva2Z1bmMgUmVnaXN0cmF0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEJURiBhbmQga2Z1bmNzIGFyZSBhY3R1YWxseSByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIHdoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEkgc2hvdWxkIGFsc28gdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiB0aGUga2VybmVsIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlc2UgZmVhdHVyZXMsIGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIG9wdGlvbnMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBhcmUgcGl2b3RhbCBmb3IgYWR2YW5jZWQgZUJQRiBjYXBhYmlsaXRpZXMsIGJ1dCB0aGUgbnVhbmNlcyBvZiB0aGVpciBzZXQtdXAgYXJlIHNvbWV0aW1lcyBlYXNpbHkgZm9yZ290dGVuLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcsIGFuZCBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gb2YgbXkgZmFjdHMuIFRpbWUgdG8gdHJhY2UgdGhlIHJlZ2lzdHJhdGlvbiBjYWxscyBhbmQgZXhhbWluZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGVudHJpZXMgYW5kIGFzc29jaWF0ZWQgY29kZSBwYXRocy4gSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXTigJlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCByZXF1aXJlcyBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncywgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVEZfS0ZVTkNTX1NUQVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MTExOD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEyMDpCVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTIxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIgfCBLRl9TUElOTE9DS19TQUZFKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jPTQ3NT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc2LVxua2VybmVsL2JwZi9jcHVtYXNrLmM6NDc3OkJURl9LRlVOQ1NfU1RBUlQoY3B1bWFza19rZnVuY19idGZfaWRzKVxua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc4LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3B1bWFza19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM1Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0zNTMtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM1NDpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2luaXRfa2Z1bmNfYnRmX2lkcylcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzU1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgY3J5cHRfaW5pdF9rZnVuY19zZXQgPSB7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zNjQtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM2NTpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM2Ni1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19kZWNyeXB0LCBLRl9SQ1UpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg4OD12b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTA4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwOTpCVEZfS0ZVTkNTX1NUQVJUKGdlbmVyaWNfYnRmX2lkcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTAtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4NT1CVEZfSUQoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlX2R0b3IpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk4Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5ODg6QlRGX0tGVU5DU19TVEFSVChjb21tb25fYnRmX2lkcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5ODktQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jYXN0X3RvX2tlcm5fY3R4LCBLRl9GQVNUQ0FMTClcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjE5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIwLVxua2VybmVsL2JwZi9tYXBfaXRlci5jOjIyMTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tYXBfaXRlcl9rZnVuY19pZHMpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWFwX3N1bV9lbGVtX2NvdW50KVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc0NT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ2LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzQ3OkJURl9LRlVOQ1NfU1RBUlQocnFzcGlubG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NDgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgdGhyb3VnaCBteSBtaW5kOgoKKipDaGVja2luZyBgY29tbW9uX2J0Zl9pZHNgIFJlZ2lzdHJhdGlvbiBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgKioKCk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgY29tbW9uX2J0Zl9pZHNgIHJlZ2lzdHJhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZSwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyDigJMgbGlrZWx5IGhvdyB0aGVzZSBjb21tb24gQlRGIElEcyBhcmUgZGVmaW5lZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgaGVscGVycy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgdGFibGUgb3IgbWFjcm8gaW52b2x2ZWQuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHByZXBhcmVkIHRvIHRyYWNlIHRocm91Z2ggYW55IHJlbGV2YW50IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgaG93IHRoZXNlIElEcyBhcmUgbGlua2VkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgZ2V0IGV4cG9zZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgZXhhY3QgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSwgYW5kIGFueSByZWxldmFudCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYnV0IGFzIHdpdGggYWxsIHRoaW5ncyBCUEYsIGJlc3QgdG8gYXNzdW1lIG5vdGhpbmcgdW50aWwgSSBzZWUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwMjU6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3ByZWVtcHRfZGlzYWJsZSlcbjUwMjY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3ByZWVtcHRfZW5hYmxlKVxuNTAyNzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG41MDI4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG41MDI5Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuNTAzMDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG41MDMxOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxuNTAzMjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXG41MDMzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxuNTAzNDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXG41MDM1Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcbjUwMzY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjUwMzc6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kgfCBLRl9TTEVFUEFCTEUpXG41MDM4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sb2NhbF9pcnFfc2F2ZSlcbjUwMzk6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxuNTA0MDpcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xuNTA0MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cilcbjUwNDI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX2R5bnB0cilcbjUwNDM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHJfZHlucHRyKVxuNTA0NDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX2R5bnB0cilcbjUwNDU6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0NjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0NzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19keW5wdHIsIEtGX1NMRUVQQUJMRSlcbjUwNDg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0OTpcdCNlbmRpZlxuNTA1MDpcdCNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbjUwNTE6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG41MDUyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjUwNTM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSB8IEtGX1NMRUVQQUJMRSlcbjUwNTQ6XHQjZW5kaWZcbjUwNTU6XHRCVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbjUwNTY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNtcCk7XG41MDU3Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcbjUwNTg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlY21wKTtcbjUwNTk6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNocik7XG41MDYwOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHJudWwpO1xuNTA2MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNocik7XG41MDYyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJyY2hyKTtcbjUwNjM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmxlbik7XG41MDY0Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgYEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMYCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYHN0cnVjdCBsaW51eF9iaW5wcm1gIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBJIGtub3cgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGJ1dCBsZXQmIzM5O3MgYmUgcHJlY2lzZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDYwMDAgYW5kIDYwNzAuIFRoYXQgc2hvdWxkIGJlIHRoZSBjb3JlIGFyZWEgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbG9naWMgYWRkaW5nIHRoYXQgdHJ1c3RlZCBvciBudWxsIGNoZWNrIGZvciB0aGUgc3RydWN0dXJlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDAwOlx0XHRzdHJ1Y3Qgc2NoZWRfZXh0X29wcyAqb3BzO1xuNjAwMTpcdH07XG42MDAyOlx0XG42MDAzOlx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkge1xuNjAwNDpcdFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xuNjAwNTpcdH07XG42MDA2Olx0XG42MDA3Olx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuNjAwODpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG42MDA5Olx0fTtcbjYwMTA6XHRcbjYwMTE6XHRCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG42MDEyOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG42MDEzOlx0fTtcbjYwMTQ6XHRcbjYwMTU6XHRCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpIHtcbjYwMTY6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKnZtX21tO1xuNjAxNzpcdFx0c3RydWN0IGZpbGUgKnZtX2ZpbGU7XG42MDE4Olx0fTtcbjYwMTk6XHRcbjYwMjA6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3JjdShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNjAyMTpcdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG42MDIyOlx0XHRcdFx0Y29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwMjM6XHR7XG42MDI0Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCB0YXNrX3N0cnVjdCkpO1xuNjAyNTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY2dyb3VwKSk7XG42MDI2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCBjc3Nfc2V0KSk7XG42MDI3Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlKSk7XG42MDI4Olx0XG42MDI5Olx0XHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsIFwmIzM0O19fc2FmZV9yY3VcJiMzNDspO1xuNjAzMDpcdH1cbjYwMzE6XHRcbjYwMzI6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3JjdV9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG42MDMzOlx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuNjAzNDpcdFx0XHRcdFx0Y29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwMzU6XHR7XG42MDM2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkpO1xuNjAzNzpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBza19idWZmKSk7XG42MDM4Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IHJlcXVlc3Rfc29jaykpO1xuNjAzOTpcdFxuNjA0MDpcdFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLCBcJiMzNDtfX3NhZmVfcmN1X29yX251bGxcJiMzNDspO1xuNjA0MTpcdH1cbjYwNDI6XHRcbjYwNDM6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjYwNDQ6XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbjYwNDU6XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwNDY6XHR7XG42MDQ3Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSkpO1xuNjA0ODpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IGJwZl9pdGVyX190YXNrKSk7XG42MDQ5Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG42MDUwOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgZmlsZSkpO1xuNjA1MTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9pbml0X3Rhc2tfYXJncykpO1xuNjA1MjpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzKSk7XG42MDUzOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncykpO1xuNjA1NDpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9zdWJfZGV0YWNoX2FyZ3MpKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXCYjMzQ7X19zYWZlX3RydXN0ZWRcJiMzNDspO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNjA2MDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG42MDYxOlx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwNjI6XHR7XG42MDYzOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbjYwNjQ6XHRcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuNjA2NTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG42MDY2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuNjA2NzpcdFxuNjA2ODpcdFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuNjA2OTpcdFx0XHRcdFx0XHQgIFwmIzM0O19fc2FmZV90cnVzdGVkX29yX251bGxcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBMU00gSG9va3MgYW5kIE1lbW9yeSBTYWZldHkgaW4gYGxpbnV4X2JpbnBybWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxpbnV4X2JpbnBybWAgc3RydWN0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiB2ZXJpZmllci4gSSBzZWUgdGhhdCB0aGUgYG1tYCBmaWVsZCBpcyBub3cgbWFya2VkIGFzIHRydXN0ZWQgb3IgbnVsbCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gIFRoZW4gSSBub3RpY2VkIHRoZSBjaGFuZ2UgaW4gYGZzL2V4ZWMuY2Agd2l0aCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24uICBJdCBub3cgc2V0cyBgYnBybS0mZ3Q7bW0gPSBOVUxMYCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgd2l0aCBgbW1wdXQobW0pYC4gQWhhISAgVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGNoYW5nZSB3YXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBgYnBybS0mZ3Q7bW1gIGlzIG5vdyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gQlBGIExTTSBob29rcyBvbiB0aGUgYGJwcm1gIHN0cnVjdC4KCkVzc2VudGlhbGx5LCBieSBzZXR0aW5nIGBicHJtLSZndDttbSA9IE5VTExgIGJlZm9yZSBmcmVlaW5nIHRoZSBzdHJ1Y3R1cmUsIHdlJiMzOTtyZSBtaXRpZ2F0aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcywgb3IgZGFuZ2xpbmcgcG9pbnRlciBhY2Nlc3NlcyBpZiBhIEJQRiBob29rIHRyaWVzIHRvIGFjY2VzcyBgYnBybS0mZ3Q7bW1gICphZnRlciogaXQmIzM5O3MgYmVlbiBmcmVlZCBvciB3aGlsZSBpdCYjMzk7cyBiZWluZyB0b3JuIGRvd24uICBTbWFydCEgVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgZXNzZW50aWFsIHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBhY2Nlc3NlZCB2aWEgQlBGLgoKTm93LCBJIHdhbnQgdG8gZGl2ZSBhIGJpdCBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGhvb2tzIGNvdWxkIGJlIGRvaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBCUEYgaGVscGVycywgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC4KCkFsc28sIEkmIzM5O2xsIHJldmlldyBgbW0vdXRpbC5jYCBhbmQgYG1tL21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGludGVyZXN0aW5nIGNvZGUgbGlrZTogYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYGZzL2V4ZWMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCYjMzk7cyBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuICBCZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgYGxpbnV4X2JpbnBybWAgc3RydWN0IGFuZCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBleHRlcm5hbCBCUEYgaG9vaywgb3Igbm90LiBUaGUgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoxLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYAoyLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAKMy4gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYAo0LiBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYAo1LiBgY29weV9yZW1vdGVfbW1fc3RyYAo2LiBgY29weV9yZW1vdGVfdm1fc3RyYAo3LiBgX19jb3B5X3JlbW90ZV9tbV9zdHJgCjguIGBmcmVlX2Jwcm1gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyZWVfYnBybSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9MTM5ND1FWFBPUlRfU1lNQk9MKGZpbmFsaXplX2V4ZWMpO1xuLS1cbmZzL2V4ZWMuYy0xMzk4LSAqIHNldHVwX25ld19leGVjKCkgY29tbWl0cyB0aGUgbmV3IGNyZWRzIGFuZCBkcm9wcyB0aGUgbG9jay5cbmZzL2V4ZWMuYzoxMzk5OiAqIE9yLCBpZiBleGVjIGZhaWxzIGJlZm9yZSwgZnJlZV9icHJtKCkgc2hvdWxkIHJlbGVhc2UgLVx1MDAzZWNyZWRcbmZzL2V4ZWMuYy0xNDAwLSAqIGFuZCB1bmxvY2suXG4tLVxuZnMvZXhlYy5jPTE0NTI9dm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE0NTYtXG5mcy9leGVjLmM6MTQ1NzpzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy0xNDU4LXtcbi0tXG5mcy9leGVjLmM9MTQ5Mz1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbnBybSAqYWxsb2NfYnBybShpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIGludCBmbGFncylcbi0tXG5mcy9leGVjLmMtMTU1OS1vdXRfZnJlZTpcbmZzL2V4ZWMuYzoxNTYwOlx0ZnJlZV9icHJtKGJwcm0pO1xuZnMvZXhlYy5jLTE1NjEtXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xuLS1cbmZzL2V4ZWMuYy0xNTYzLVxuZnMvZXhlYy5jOjE1NjQ6REVGSU5FX0NMQVNTKGJwcm0sIHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgaWYgKCFJU19FUlIoX1QpKSBmcmVlX2Jwcm0oX1QpLFxuZnMvZXhlYy5jLTE1NjUtXHRhbGxvY19icHJtKGZkLCBuYW1lLCBmbGFncyksIGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRi1SZWxhdGVkIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmcmVlX2Jwcm1gLiBSaWdodCwgaXQmIzM5O3MgYSBgc3RhdGljIHZvaWRgIGZ1bmN0aW9uIOKAkyBgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pYC4gSSByZWNhbGwgYGFsbG9jX2Jwcm1gIGNhbGxzIGl0LCBhbmQgdGhlIG1hY3JvIGBERUZJTkVfQ0xBU1MoYnBybSwgLi4uKWAgYWxzbyB1dGlsaXplcyBpdC4gSW1wb3J0YW50IHRvIHJlbWVtYmVyIHRob3NlIGNvbm5lY3Rpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEJQRiBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlIG5lZWQgYEJQRl9TWVNDQUxMYCBmb3IgdGhlIEJQRiBoZWxwZXJzIGFuZCBrZnVuY3MsIHdoaWNoIGFyZSBmb3VuZCBpbiBgaGVscGVycy5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL3V0aWwuY2AsIGFuZCB0aGUgdmVyaWZpZXIgY29kZS4gVGhlbiwgdGhlcmUmIzM5O3MgYEJQRl9MU01gIOKAkyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIEJQRiBMU00gcHJvZ3JhbXMgdGhhdCByZXF1aXJlIGFjY2VzcyB0byBgYnBybS0mZ3Q7bW1gLgoKTm93LCBvbnRvIHZlcmlmeWluZyBzb21ldGhpbmcgYWJvdXQgYEJURl9JRF9GTEFHU2AuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGF0IHdvcmtzIGFuZCwgY3J1Y2lhbGx5LCBpZiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyAqdHJ1bHkqIGEgaGFyZCByZXF1aXJlbWVudCBmb3Iga2Z1bmNzLiBJIGtub3cgdGhhdCBrZnVuYyByZXNvbHV0aW9uIHdpdGhpbiBrZXJuZWwgQlBGIHJlbGllcyBvbiBCVEYgbWV0YWRhdGEgZ2VuZXJhdGVkIGZyb20gYENPTkZJR19ERUJVR19JTkZPX0JURmAsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuIEkmIzM5O2xsIHNlYXJjaCBga2VybmVsL2JwZi9gIGZvciB0aGUgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc3ltYm9sIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9idGYuYz02NDE2PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjQyMS1cbmtlcm5lbC9icGYvYnRmLmM6NjQyMjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKVxua2VybmVsL2JwZi9idGYuYy02NDIzLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY1MDI9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYy02NTA4LVxua2VybmVsL2JwZi9idGYuYzo2NTA5OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy02NTEwLVxua2VybmVsL2JwZi9idGYuYz02NTExPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYwNi1cbmtlcm5lbC9icGYvYnRmLmM6NjYwNzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtNjYwOC1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MjQ9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04NTI3LVxua2VybmVsL2JwZi9idGYuYzo4NTI4OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy04NTI5LXN0cnVjdCBidGZfbW9kdWxlIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NjY9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcbmtlcm5lbC9icGYvYnRmLmM6ODY2NzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtODY2OC1cbmtlcm5lbC9icGYvYnRmLmM9ODY2OT1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODY3MS1cdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NzMtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2OTk9c3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODcwMC17XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MDE6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MDItXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTItXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTM6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTQtXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODcyOT1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzAte1xua2VybmVsL2JwZi9idGYuYzo4NzMxOlx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NzMyLVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzQtXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MzU6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODczNi1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODc3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODc4LXtcbmtlcm5lbC9icGYvYnRmLmM6ODg3OTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg4MC1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODg5My1cbmtlcm5lbC9icGYvYnRmLmM6ODg5NDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg5NS1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk1NDI9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTU2OS1cbmtlcm5lbC9icGYvYnRmLmM6OTU3MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTU3MS1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjg0NT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODYxLVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjg2MjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg2My1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjQyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1Ni1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjU3Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1OC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkwMTA9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI2LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwMjc6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTE4PXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5MjItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5MjM6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5MjQtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjAyCgkJCQkJCQlvdXRwdXQ6IDI1OQoJCQkJCQkJdGhvdWdodHM6IDU3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgZXNzZW50aWFsIGhlcmUsIHNwZWNpZmljYWxseSBiZWNhdXNlIGtmdW5jcyByZWx5IG9uIGl0OyBubyBCVEYsIG5vIGtmdW5jIGNhbGxzLiBBbmQgb2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhlc2UgY2hhbmdlcyBpbiBwYXJ0aWN1bGFyOiBuZXcga2Z1bmNzIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgaW4gdGhlIHNhbWUgZmlsZS4gQWxzbywgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIHdlcmUgbW9kaWZpZWQgaW4gYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgcmVzcGVjdGl2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHkgbWFraW5nIHRob3NlIGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoYXQgdHJpZ2dlcnMgbXkgZnV6emluZyBpbnN0aW5jdHMuIFRoZSBCUEYgdmVyaWZpZXIgaXMgZ29pbmcgdG8gdHJlYXQgYGJwcm0tJmd0O21tYCBmaWVsZCBhcyB0cnVzdGVkLCB3aGljaCBsb29rcyBsaWtlIGEgcG9pbnRlciBkZXJlZmVyZW5jZS4gU2V0dGluZyBpdCB0byBOVUxMIGluIGBmcmVlX2Jwcm0oKWAgaXMgYSBnb29kIG1pdGlnYXRpb24sIGJ1dCBzdGlsbCwgdGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IHRoZXNlIGNoYW5nZXMgaGF2ZSBvbiB0aGUgcmVhY2hhYmxlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIEFQSXMuCgpTbywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBhbmQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC4gVGhleSYjMzk7cmUgYWxsIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2gsIGFuZCBJIHRoaW5rIHRoZXkgd2lsbCBhbGwgYmUgcmVhY2hhYmxlLiBUaGlzIHNlZW1zIGxpa2UgYSBjb21wbGV0ZSwgZm9jdXNlZCBhbmFseXNpcy4gVGltZSB0byByZWNvcmQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbSYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW1fc3RyJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl90YXNrJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV9tbV9zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfdm1fc3RyJiMzNDssCiAgICAmIzM0O19fY29weV9yZW1vdGVfbW1fc3RyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzbGVlcGFibGUgQlBGIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX21tLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKSwgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgYW5kIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciksIGFkZHMgY29weV9yZW1vdGVfbW1fc3RyIC8gX19jb3B5X3JlbW90ZV9tbV9zdHIgZm9yIHJlYWRpbmcgc3RyaW5ncyBmcm9tIHJlbW90ZSBtbV9zdHJ1Y3QgaW5zdGFuY2VzLCBhbmQgYWxsb3dzIHRydXN0ZWQgYWNjZXNzIHRvIGJwcm0tXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NGM2OWE3NTQ2MTAwMjdlNjU0ODQ0MTdjYTRhZTU0ZGNkNGY3NDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjE0OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NTYsOSAmIzQzOzE0NTYsMTIgQEAgdm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAKIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewotCWlmIChicHJtLSZndDttbSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tJmd0O21tOwomIzQzOwomIzQzOwlpZiAobW0pIHsKIAkJYWNjdF9hcmdfc2l6ZShicHJtLCAwKTsKLQkJbW1wdXQoYnBybS0mZ3Q7bW0pOwomIzQzOwkJYnBybS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwkJbW1wdXQobW0pOwogCX0KIAlpZiAoYnBybS0mZ3Q7dXNlcl9ucykKIAkJcHV0X3VzZXJfbnMoYnBybS0mZ3Q7dXNlcl9ucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uNmYxMGNlMzE1ZWFhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMzMyNSwxMCAmIzQzOzMzMjUsMTAgQEAgZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAogZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwotI2VuZGlmCiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTY3OSw5ICYjNDM7Njc5LDQ0IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7CiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0ciwKJiM0MzsJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKJiM0MzsJaWYgKHJldCA9PSBzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovCiYjNDM7CXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0ciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBzaXplKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBzaXplIC0gcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzO30KJiM0MzsKIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKIAkvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi8KQEAgLTY5MSwxMyAmIzQzOzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLAogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKLQlpZiAocmV0ID09IHNpemUpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KIAotCW1lbXNldChkc3QsIDAsIHNpemUpOwotCS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KLQlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7CXJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7CkBAIC0zNjU4LDYgJiM0MzszNjk2LDY4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyCiAJcmV0dXJuIHJldCAmIzQzOyAxOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlCiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tCiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvbgomIzQzOyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkCiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weQomIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRzdF9fc3opKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwgbW0pOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTAomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1MKJiM0MzsgKgomIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoCiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zegomIzQzOyAqIGlzIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2YKJiM0MzsgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS4KJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsCiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICAgbW0sIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZQogICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZQpAQCAtMzY4MSw2ICYjNDM7Mzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKIAkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiAJCQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKQogewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQpAQCAtMzY4OSwxNyAmIzQzOzM3OTAsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKLQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKIAkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZWxzZQomIzQzOwkJCSooY2hhciAqKWRzdCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCi0JCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKJiM0MzsJcmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBtbSwgZmxhZ3MpOwomIzQzOwltbXB1dChtbSk7CiAKLQlyZXR1cm4gcmV0ICYjNDM7IDE7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvCkBAIC00OTI0LDYgJiM0Mzs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDllNzk3NTBlMjQ4MDguLjc5MWIzZDI1Y2FhNTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTYwMDQsNiAmIzQzOzYwMDQsMTAgQEAgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkgewogCXN0cnVjdCBpbm9kZSAqZF9pbm9kZTsKIH07CiAKJiM0MztCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzO307CiYjNDM7CiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7CiAJc3RydWN0IHNvY2sgKnNrOwogfTsKQEAgLTYwNTgsNiAmIzQzOzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogewogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpOwomIzQzOwlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpOwogCiAJcmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKCZhbXA7ZW52LSZndDtsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNSw2ICYjNDM7MjUsOSBAQAogc3RydWN0IGZvbGlvX2JhdGNoOwogc3RydWN0IGhzdGF0ZTsKIAomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwomIzQzOwogc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNzMzMSw4ICYjNDM7NzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTsKICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS4KICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC4KICAqLwotc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQogewogCXZvaWQgKm9sZF9idWYgPSBidWY7CiAJaW50IGVyciA9IDA7CkBAIC03NDA3LDQzICYjNDM7NzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIH0KLQotLyoqCi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCi0gKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKLSAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQotICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCi0gKgotICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pOwotICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZAotICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULgotICovCi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JaW50IHJldDsKLQotCWlmICh1bmxpa2VseShsZW4gPT0gMCkpCi0JCXJldHVybiAwOwotCi0JbW0gPSBnZXRfdGFza19tbSh0c2spOwotCWlmICghbW0pIHsKLQkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7Ci0KLQltbXB1dChtbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTc0Niw4ICYjNDM7MTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTsKICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS4KICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC4KICAqLwotc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbikKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcl9lbmQ7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0xNzgxLDQzICYjNDM7MTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAlyZXR1cm4gcmV0OwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKQotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7Ci0KLQltbXB1dChtbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuYwpAQCAtMTA2MSw2ICYjNDM7MTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MzsvKioKJiM0MzsgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCiYjNDM7ICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgomIzQzOyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLAomIzQzOyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZwomIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuCiYjNDM7ICogLUVGQVVMVC4KJiM0MzsgKi8KJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCiYjNDM7ICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLAomIzQzOyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZwomIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuCiYjNDM7ICogLUVGQVVMVC4KJiM0MzsgKi8KJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShsZW4gPT0gMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbW0gPSBnZXRfdGFza19tbSh0c2spOwomIzQzOwlpZiAoIW1tKSB7CiYjNDM7CQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7CiYjNDM7CW1tcHV0KG1tKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiYjNDM7CiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMikKIHsKIAljaGFyICphZGRyMSwgKmFkZHIyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmIyMzI1YjE5MzU3NjEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y29weV9mcm9tX3VzZXJfYnBybS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGFyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MzsJY2hhciBhcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzOwljaGFyIGVudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzOwljaGFyIGVudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwlzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDsKJiM0MzsJcGlkX3QgY2hpbGQ7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS0mZ3Q7cGFnZVtdIHJhdGhlciB0aGFuCiYjNDM7CSAqIGJlaW5nIG1hcHBlZCBpbiBicHJtLSZndDttbS4KJiM0MzsJICovCiYjNDM7CWlmICghc2tlbC0mZ3Q7a2NvbmZpZy0mZ3Q7Q09ORklHX01NVSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwljaGlsZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2hpbGQsIDAsICYjMzQ7Zm9yayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIWNoaWxkKSB7CiYjNDM7CQljaGFyICpjb25zdCBhcmd2W10gPSB7IGFyZzAsIGFyZzEsIE5VTEwgfTsKJiM0MzsJCWNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9OwomIzQzOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CQlleGVjdmUoJiMzNDsvYmluL3RydWUmIzM0OywgYXJndiwgZW52cCk7CiYjNDM7CQlfZXhpdChlcnJubyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgJmFtcDtzdGF0dXMsIDApLCBjaGlsZCwgJiMzNDt3YWl0cGlkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgJiMzNDtjaGlsZF9leGl0ZWQmIzM0OykpCiYjNDM7CQlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sICYjMzQ7ZXhlY19lcnJubyYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9hcmdjLCAyLCAmIzM0O2Jwcm1fYXJnYyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9lbnZjLCAyLCAmIzM0O2Jwcm1fZW52YyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGF0YV9sZW5fbWF0Y2gsIDEsICYjMzQ7ZGF0YV9sZW5fbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCAmIzM0O2ludmFsaWRfZmxhZ3NfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3JldCwgMCwgJiMzNDtjb3B5X3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksICYjMzQ7c3RyX2FyZzBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgJiMzNDtzdHJfYXJnMV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCAmIzM0O3N0cl9lbnYwX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksICYjMzQ7c3RyX2VudjFfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX21hdGNoLCAxLCAmIzM0O2RhdGFfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmdzX21hdGNoLCAxLCAmIzM0O3N0cl9hcmdzX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52c19tYXRjaCwgMSwgJiMzNDtzdHJfZW52c19tYXRjaCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNvcHlfZnJvbV91c2VyX2Jwcm1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKQEAgLTAsMCAmIzQzOzEsMTIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSAmIzM0O2ZpcnN0XDBzZWNvbmQtYXJndW1lbnRcMCYjMzQ7CiYjNDM7CQkJCSAgICAmIzM0O1NPTUVfRU5WPWFcME9USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSAmIzM0O2ZpcnN0JiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gJiMzNDtzZWNvbmQtYXJndW1lbnQmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYwW10gPSAmIzM0O1NPTUVfRU5WPWEmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSAmIzM0O09USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MzsKJiM0MztpbnQgbW9uaXRvcmVkX3BpZDsKJiM0MztpbnQgYnBybV9hcmdjOwomIzQzO2ludCBicHJtX2VudmM7CiYjNDM7aW50IGRhdGFfbGVuX21hdGNoOwomIzQzO2ludCBpbnZhbGlkX2ZsYWdzX3JldDsKJiM0MztpbnQgY29weV9yZXQ7CiYjNDM7aW50IHN0cl9hcmcwX3JldDsKJiM0MztpbnQgc3RyX2FyZzFfcmV0OwomIzQzO2ludCBzdHJfZW52MF9yZXQ7CiYjNDM7aW50IHN0cl9lbnYxX3JldDsKJiM0MztpbnQgZGF0YV9tYXRjaDsKJiM0MztpbnQgc3RyX2FyZ3NfbWF0Y2g7CiYjNDM7aW50IHN0cl9lbnZzX21hdGNoOwomIzQzOwomIzQzO2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhazsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvYnBybV9jaGVja19zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwl1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CWNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwljaGFyIGFyZzBbMzJdID0ge307CiYjNDM7CWNoYXIgYXJnMVszMl0gPSB7fTsKJiM0MzsJY2hhciBlbnYwWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjFbMzJdID0ge307CiYjNDM7CXU2NCBvZmZzZXQgPSAwOwomIzQzOwl1NjQgZGF0YV9sZW47CiYjNDM7CiYjNDM7CWlmICghQ09ORklHX01NVSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbW0gPSBicHJtLSZndDttbTsKJiM0MzsJaWYgKCFtbSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicHJtX2FyZ2MgPSBicHJtLSZndDthcmdjOwomIzQzOwlicHJtX2VudmMgPSBicHJtLSZndDtlbnZjOwomIzQzOwomIzQzOwkvKiB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIGFyZ3MgYW5kIGVudnMgc3RhcnRpbmcgZnJvbSBicHJtLSZndDtwICovCiYjNDM7CWRhdGFfbGVuID0gYnBybS0mZ3Q7ZXhlYyAtIGJwcm0tJmd0O3A7CiYjNDM7CWRhdGFfbGVuX21hdGNoID0gZGF0YV9sZW4gPT0gc2l6ZW9mKGV4cGVjdGVkX2RhdGEpOwomIzQzOwomIzQzOwlpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLAomIzQzOwkJCQkJCSAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsIG1tLCB+MFVMTCk7CiYjNDM7CiYjNDM7CWNvcHlfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLSZndDtwLAomIzQzOwkJCQkJIG1tLCAwKTsKJiM0MzsJaWYgKGNvcHlfcmV0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRhdGFfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTsKJiM0MzsKJiM0MzsJLyogYXJnMCBpcyBhdCBicHJtLSZndDtwICovCiYjNDM7CXN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDsKJiM0MzsKJiM0MzsJLyogYXJnMSBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAqLwomIzQzOwlzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7CiYjNDM7CiYjNDM7CS8qIGVudjAgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgJiM0Mzsgc2l6ZW9mKGFyZzEpICovCiYjNDM7CXN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2VudjBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MSBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgJiM0Mzsgc2l6ZW9mKGVudjApICovCiYjNDM7CXN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzdHJfYXJnc19tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpICZhbXA7JmFtcDsKJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7CiYjNDM7CXN0cl9lbnZzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRhdGFfbWF0Y2ggJmFtcDsmYW1wOyBzdHJfYXJnc19tYXRjaCAmYW1wOyZhbXA7IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKaW5kZXggN2RlMTczZGFmMjdiNi4uNzQ0MWQ2NmMwODBjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwpAQCAtMTEzLDYgJiM0MzsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiAJc3RydWN0IGlubmVyX21hcCAqaW5uZXJfbWFwOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAljaGFyIGFyZ3NbNjRdOwogCV9fdTMyIGtleSA9IDA7CiAJX191NjQgKnZhbHVlOwpAQCAtMTIxLDcgJiM0MzsxMjIsOSBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJCWJwcm1fY291bnQmIzQzOyYjNDM7OwogCiAJYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLSZndDt2bWEtJmd0O3ZtX21tLSZndDthcmdfc3RhcnQpOwotCWJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopYnBybS0mZ3Q7bW0tJmd0O2FyZ19zdGFydCk7CiYjNDM7CW1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CWlmIChtbSkKJiM0MzsJCWJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tJmd0O2FyZ19zdGFydCk7CiAKIAl2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDthcnJheSwgJmFtcDtrZXkpOwogCWlmICh2YWx1ZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHNlcmllcyBpcyBjZW50ZXJlZCBhcm91bmQgZW5oYW5jaW5nIEJQRiYjMzk7cyBhYmlsaXR5IHRvIHNhZmVseSBhbmQgY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgb3BlcmF0aW9ucyBmcm9tIHVzZXIgc3BhY2Ugd2l0aGluIGEgZGlmZmVyZW50IE1NIGNvbnRleHQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgc3RydWN0IGxpbnV4X2JpbnBybWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuCgpGaXJzdCwgSSBzZWUgYSBjcnVjaWFsIGNsZWFudXAgaW4gYGZzL2V4ZWMuY2Agd2l0aGluIGBmcmVlX2Jwcm1gLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBtbXB1dChtbSlgIGNhbGwgYWZ0ZXIgbnVsbGlmeWluZyBgYnBybS0mZ3Q7bW1gIGlzIGdvb2Q7IGl0IGVuc3VyZXMgcHJvcGVyIE1NIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcHJldmVudHMgcG90ZW50aWFsIGxlYWtzIGlmIHRoZSBgYnBybWAgb3V0bGl2ZXMgaXRzIGBtbV9zdHJ1Y3RgLiBUaGUgYGFjY3RfYXJnX3NpemVgIGNhbGwgaXMgYWxzbyB3b3J0aCBub3Rpbmc7IHByb2JhYmx5IHJlbGF0ZXMgdG8gYWNjb3VudGluZyBmb3IgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgYXJndW1lbnRzIGZvciBleGVjLgoKVGhlIGluY2x1c2lvbiBvZiBkZWNsYXJhdGlvbnMgZm9yIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfdm1fc3RyYCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBpcyBhIHJlZCBmbGFnIGluIGEgZ29vZCB3YXk7IGl0IGlzIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBtZW1vcnkgY29weSBvcGVyYXRpb25zIGZyb20gcmVtb3RlIG1lbW9yeSBjb250ZXh0cy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGVpciBkZWZpbml0aW9ucyBpbiBhIGJpdC4KClRoZSBtZWF0IG9mIHRoaXMgc2VyaWVzIGxpZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UmIzM5O3JlIGdldHRpbmcgbmV3IEJQRiBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgYWRkaXRpb24gb2YgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGFsb25nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcga2Z1bmNzLCBjbGVhcmx5IGluZGljYXRlcyBhIG1vdmUgdG93YXJkcyBtb3JlIHJvYnVzdCBhbmQgY29udHJvbGxlZCBtZW1vcnkgYWNjZXNzIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSB1c2Ugb2YgYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCB0aGUgY2FyZWZ1bCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIGFuZCBlcnJvcnMsIHdpdGggYG1lbXNldGAgY2FsbHMgdG8gemVybyBvdXQgdW5pbml0aWFsaXplZCBwb3J0aW9ucywgaXMgZXhhY3RseSB3aGF0IEkgd291bGQgZXhwZWN0IHRvIHNlZSBmb3IgbWVtb3J5IHNhZmV0eS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGJlaW5nIGludGVncmF0ZWQgZXZlcnl3aGVyZS4gSSBsaWtlIHRoYXQgd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgdG8gdXNlIHRoZSBuZXcgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgc2ltaWxhciBwYXR0ZXJuIGZvciBzdHJpbmdzLiBUaGUgaGFuZGxpbmcgb2YgdGhlIGBCUEZfRl9QQURfWkVST1NgIGZsYWcgaXMgYWxzbyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgaW5mb3JtYXRpb24gbGVha3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYWxsb3dpbmcgYWNjZXNzIHRvIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgaW4gYHN0cnVjdCBsaW51eF9iaW5wcm1gIGxvb2tzIGxpa2UgYSBuZWNlc3NhcnkgY2hhbmdlIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGluZGljYXRlcyB0aGF0IHRoZSB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCB0aGUgYWNjZXNzIG5lZWRlZCBieSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZSwgYW5kIHRoYXQmIzM5O3MgZ29vZC4KClRoZSByZWZhY3RvcmluZyBpbiB0aGUgYG1tL2AgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgY29weV9yZW1vdGVfdm1fc3RyYCB0byBzaGFyZSBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBpcyBncmVhdC4gQ29kZSByZXVzZSBpcyBrZXksIGFuZCBpdCBzdWdnZXN0cyBhIHdlbGwtdGhvdWdodC1vdXQgZGVzaWduLiBUaGUgYWRkaXRpb24gb2YgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gb3BlcmF0ZSBvbiBhIGJyb2FkZXIgY29udGV4dCBvZiBtZW1vcnkuCgpGaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHNlbGZ0ZXN0cyBpcyBleGNlbGxlbnQuIEl0IGRlbW9uc3RyYXRlcyBhIGNvbW1pdG1lbnQgdG8gdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aG9zZSBpbiBkZXRhaWwgdG8gY29uZmlybSB0aGV5IGNvdmVyIHRoZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzY2VuYXJpb3MuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIGhhdmUgc29tZSBjb25jZXJucy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIChhbmQgcmVsYXRlZCBmdW5jdGlvbnMpIGluIGBtbS9tZW1vcnkuY2AsIGBtbS9ub21tdS5jYCwgYW5kIGVsc2V3aGVyZSB0byBzZWUgZXhhY3RseSBob3cgaXQgd3JpdGVzIHRvIHRoZSBidWZmZXIgYW5kIGhvdyBpdCBoYW5kbGVzIHN0cmluZyB0ZXJtaW5hdGlvbiBhbmQgbGVuZ3RoLiBJIG11c3QgdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBjb21pbmcgZnJvbSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgc3VpdGFibGUgY29uc3RyYWludHMgYW5kIGNoZWNrcyBvbiB0aGUgc2l6ZSBhbmQgc291cmNlIG9mIHRoZSBtZW1vcnkgY29weSBvcGVyYXRpb25zIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYnVsbGV0cHJvb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MjY9c3RydWN0IGhzdGF0ZTtcbm1tL2ludGVybmFsLmgtMjctXG5tbS9pbnRlcm5hbC5oOjI4OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaW50ZXJuYWwuaC0yOS1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbi0tXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTczMzUtXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi0tXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuLS1cbm1tL25vbW11LmMtMTc0OC0gKi9cbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTc1MC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS91dGlsLmMtMTA4NS1cbm1tL3V0aWwuYzoxMDg2Olx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMDg3LX1cbi0tXG5tbS91dGlsLmM9MTEwMj1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTExMTYtXG5tbS91dGlsLmM6MTExNzpcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL21lbW9yeS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc28gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbXBsZXhpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gcmVtb3RlIG1lbW9yeSBjb3BpZXMsIGFuZCBzdHJpbmcgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgbmFtZSBpdHNlbGYsIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGhpbnRzIGF0IG1vdmluZyBhIHN0cmluZyBiZXR3ZWVuIGFkZHJlc3Mgc3BhY2VzLCBsaWtlbHkgd2hlbiBkZWFsaW5nIHdpdGggcHJvY2Vzc2VzIG9yIHBlcmhhcHMgZXZlbiB1c2Vyc3BhY2UgaW50ZXJhY3Rpb25zIGZyb20ga2VybmVsIHNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IGhvdyBpdCBoYW5kbGVzIHZpcnR1YWwgYWRkcmVzc2VzLCBwYWdlIGZhdWx0cyAoaWYgYW55KSwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpdCBlbXBsb3lzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHQvKlxuNzMzMTpcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbjczMzI6XHQgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG43MzMzOlx0ICovXG43MzM0Olx0aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzM1Olx0XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMzY6XHR7XG43MzM3Olx0XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuNzMzODpcdFx0aW50IGVyciA9IDA7XG43MzM5Olx0XG43MzQwOlx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuNzM0MTpcdFxuNzM0MjpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcbjczNDM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MzQ0Olx0XG43MzQ1Olx0XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuNzM0NjpcdFxuNzM0NzpcdFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuNzM0ODpcdFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xuNzM0OTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuNzM1MDpcdFx0XHRnb3RvIG91dDtcbjczNTE6XHRcdH1cbjczNTI6XHRcbjczNTM6XHRcdHdoaWxlIChsZW4pIHtcbjczNTQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQsIHJldHZhbDtcbjczNTU6XHRcdFx0dm9pZCAqbWFkZHI7XG43MzU2Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG43MzU3Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuNzM1ODpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MzU5Olx0XG43MzYwOlx0XHRcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXHUwMDI2dm1hKTtcbjczNjE6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzM2MjpcdFx0XHRcdC8qXG43MzYzOlx0XHRcdFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xuNzM2NDpcdFx0XHRcdCAqIHRvIGhhbmRsZSB0aGUgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGNhc2UgYW5kXG43MzY1Olx0XHRcdFx0ICogc3RhY2sgZXhwYW5zaW9uLlxuNzM2NjpcdFx0XHRcdCAqL1xuNzM2NzpcdFx0XHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG43MzY4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjczNjk6XHRcdFx0XHRnb3RvIG91dDtcbjczNzA6XHRcdFx0fVxuNzM3MTpcdFxuNzM3MjpcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG43MzczOlx0XHRcdGJ5dGVzID0gbGVuO1xuNzM3NDpcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSk7XG43Mzc1Olx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxuNzM3NjpcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFIC0gb2Zmc2V0O1xuNzM3NzpcdFxuNzM3ODpcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43Mzc5Olx0XHRcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGJ5dGVzKTtcbjczODA6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2U9IDApIHtcbjczODE6XHRcdFx0XHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cbjczODI6XHRcdFx0XHRidWYgJiM0Mzs9IHJldHZhbDtcbjczODM6XHRcdFx0XHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcbjczODQ6XHRcdFx0XHRicmVhaztcbjczODU6XHRcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0XHRidWYgJiM0Mzs9IGJ5dGVzIC0gMTtcbjczODg6XHRcdFx0LypcbjczODk6XHRcdFx0ICogQmVjYXVzZSBzdHJzY3B5IGFsd2F5cyBOVUwgdGVybWluYXRlcyB3ZSBuZWVkIHRvXG43MzkwOlx0XHRcdCAqIGNvcHkgdGhlIGxhc3QgYnl0ZSBpbiB0aGUgcGFnZSBpZiB3ZSBhcmUgZ29pbmcgdG9cbjczOTE6XHRcdFx0ICogbG9hZCBtb3JlIHBhZ2VzXG43MzkyOlx0XHRcdCAqL1xuNzM5MzpcdFx0XHRpZiAoYnl0ZXMgIT0gbGVuKSB7XG43Mzk0Olx0XHRcdFx0YWRkciAmIzQzOz0gYnl0ZXMgLSAxO1xuNzM5NTpcdFx0XHRcdGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCBhZGRyLCBidWYsIG1hZGRyICYjNDM7IChQQUdFX1NJWkUgLSAxKSwgMSk7XG43Mzk2Olx0XHRcdFx0YnVmICYjNDM7PSAxO1xuNzM5NzpcdFx0XHRcdGFkZHIgJiM0Mzs9IDE7XG43Mzk4Olx0XHRcdH1cbjczOTk6XHRcdFx0bGVuIC09IGJ5dGVzO1xuNzQwMDpcdFxuNzQwMTpcdFx0XHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcbjc0MDI6XHRcdH1cbjc0MDM6XHRcbjc0MDQ6XHRvdXQ6XG43NDA1Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjc0MDY6XHRcdGlmIChlcnIpXG43NDA3Olx0XHRcdHJldHVybiBlcnI7XG43NDA4Olx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1Zjtcbjc0MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQzCgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDE1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEtNU0FOIE5lY2Vzc2l0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBwYXRjaCBjaGFuZ2VzIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIEtNU0FOLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBgZnJlZV9icHJtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBgbW1fc3RydWN0YC4gSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhhdCBgYnBybS0mZ3Q7bW1gIGlzIG51bGxlZCBvdXQgYWZ0ZXIgYWNjb3VudGluZyBhbmQgYmVmb3JlIHRoZSBgbW1wdXRgIGNhbGwuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZXNwZWNpYWxseSB3aXRoIEJQRiBhY2Nlc3NpbmcgdGhpcyBkYXRhLgoKTmV4dCwgdGhlIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbWAsIGFuZCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgbmV4dCB1cCBvbiB0aGUgbGlzdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVpciBoYW5kbGluZyBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgZHN0YCkgd2hlbiBhIGNvcHkgZmFpbHMuIFRoZSBleHBsaWNpdCBgbWVtc2V0KGRzdCwgMCwgc2l6ZSlgIG9yIGBtZW1zZXRgIHBhZGRpbmcgaW4gdmFyaW91cyBmYWlsdXJlIHBhdGhzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiBUaGlzIGVuc3VyZXMgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4gYGNvcHlfcmVtb3RlX21tX3N0cmAmIzM5O3MgZ3VhcmFudGVlZCBudWxsIHRlcm1pbmF0aW9uIChvciBjbGVhcmluZykgaW4gYWRkaXRpb24gdG8gcGFkZGluZyB3aXRoIHplcm9zIGlmIHJlcXVlc3RlZCAod2l0aCBgQlBGX0ZfUEFEX1pFUk9TYCkgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGNhcmVmdWwgZGVzaWduLgoKVGhlIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgIGZ1bmN0aW9ucyBhcmUgc2ltaWxhci4gIFRoZXkgYWxzbyB6ZXJvIHRoZSBgZHN0YCBidWZmZXIgb24gZXJyb3IgKG9yIHBhZCBpdCwgaW4gdGhlIHN0cmluZyB2ZXJzaW9uKS4gVGhpcyBjb25zaXN0ZW5jeSBpcyByZWFzc3VyaW5nLiBJIGFsc28gbm90ZSB0aGF0IHRoZSB1c2Ugb2YgZmxhZ3MgaXMgbGltaXRlZCB0byBgQlBGX0ZfUEFEX1pFUk9TYC4KCkZpbmFsbHksIHRoZSB2ZXJpZmllciBjaGFuZ2UgLSB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBsaW51eF9iaW5wcm1gIHRvIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgZm9yIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgLSBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5LiBJdCBoZWxwcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIGNvbnRyb2xsZWQuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IGFsbCB0aGUgZG90cyBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgS01TQU4uIFRoZSBCUEYgcHJvZ3JhbXMmIzM5OyBwcm92aWRlZCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB2YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyIC0gc28gdGhlIHNpemUgYW5kIHZhbGlkaXR5IGFyZSB2ZXJpZmllZCAtIHRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgcmVtb3RlIG1tIHVzaW5nIGV4aXN0aW5nIHN0YW5kYXJkIGZ1bmN0aW9ucyBzdWNoIGFzIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGNvcHlfcmVtb3RlX21tX3N0cmAgd2hpY2ggYXJlIHRob3JvdWdobHkgdGVzdGVkLiBBbmQgdGhlIGVycm9yIHBhdGhzLCBvciBwYWRkaW5nIHBhdGhzIGFsbCBpbnZvbHZlIGV4cGxpY2l0bHkgemVyb2luZyB0aGUgZGF0YS4gYGZyZWVfYnBybWAgaGFzIGFuIGV4cGxpY2l0IGFzc2lnbm1lbnQuIFNvLCB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MsIGJhc2VkIG9uIHRoZXNlIGNoYW5nZXMuIFRoZSBleGlzdGluZyBwcm90ZWN0aW9ucyBvZiBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNvdmVyIGFueSBpc3N1ZXMgaGVyZSBzdWNoIGFzIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQgb2YgYm91bmRzIGFjY2Vzc2VzLCBvciByZWZjb3VudCBidWdzLgoKRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCBLTVNBTiBpcyBmb3IgY2FzZXMgd2hlcmUgd2UgaW50cm9kdWNlLCBvciBleHBvc2UsIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzLiBUaGUgY29kZSBhbHJlYWR5IGhhcyBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3IgcGFkZGluZy4gVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIG1lbW9yeSBpcyBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb24gYW55IGVycm9yLCBzbyBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgcHJlcGFyZSBteSByZXNwb25zZSBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVx1MDAzZW1tID0gTlVMTGAgaW4gYGZyZWVfYnBybSgpYC5cblxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTQ6NTUuMjEyNTY4ODc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODk2MTY4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza1wiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV9tbV9zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX3ZtX3N0clwiLFxuICAgIFwiX19jb3B5X3JlbW90ZV9tbV9zdHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEJQRiBrZnVuY3MgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApIGFuZCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyAoYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmApIGFsb25nIHdpdGggYGNvcHlfcmVtb3RlX3ZtX3N0cmAvYGNvcHlfcmVtb3RlX21tX3N0cmAgaGVscGVycyB0byByZWFkIHVzZXIgbWVtb3J5IGZyb20gYW4gYG1tX3N0cnVjdGAuIEl0IGFsc28gc2V0cyBgYnBybS1cXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxcblxcbkFsbCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB3cml0dGVuIGVpdGhlciBkaXJlY3RseSB2aWEgYGFjY2Vzc19yZW1vdGVfdm1gL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIG9yIGV4cGxpY2l0bHkgY2xlYXJlZCB3aXRoIGBtZW1zZXRgIG9uIGVycm9yIGFuZCBwYWRkaW5nIGNvbmRpdGlvbnMuIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHBhc3NlZCBhY3Jvc3MgdHJ1c3QgYm91bmRhcmllcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE0OjU1LjIxMjU3NTM0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDg5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjE0OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiB7XFxuLVxcdGlmIChicHJtLVxcdTAwM2VtbSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXG4rXFx0aWYgKG1tKSB7XFxuIFxcdFxcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XFxuLVxcdFxcdG1tcHV0KGJwcm0tXFx1MDAzZW1tKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRcXHRtbXB1dChtbSk7XFxuIFxcdH1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXVzZXJfbnMpXFxuIFxcdFxcdHB1dF91c2VyX25zKGJwcm0tXFx1MDAzZXVzZXJfbnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zMzI1LDEwICszMzI1LDEwIEBAIGV4dGVybiBpbnQgYWNjZXNzX3Byb2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuLSNlbmRpZlxcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbiBcXG4gbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNjc5LDkgKzY3OSw0NCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0cixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xcbitcXHRpZiAocmV0ID09IHNpemUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XFxuK1xcdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRtZW1zZXQoZHN0ICsgcmV0LCAwLCBzaXplIC0gcmV0KTtcXG4rXFxuK1xcdHJldHVybiByZXQgKyAxO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbiBcXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xcbkBAIC02OTEsMTMgKzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbiBcXHRpZiAodW5saWtlbHkoIXNpemUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRzaywgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XFxuLVxcdGlmIChyZXQgPT0gc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG4rXFx0aWYgKCFtbSkge1xcbitcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4gXFxuLVxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbi1cXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcXG4rXFx0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pO1xcbitcXHRtbXB1dChtbSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7XFxuQEAgLTM2NTgsNiArMzY5Niw2OCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlclxcbiBcXHRyZXR1cm4gcmV0ICsgMTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcXG4rICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cXG4rICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVyb1xcbisgKlxcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXFxuKyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkXFxuKyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weVxcbisgKiBmYWlscyBvciBpcyBwYXJ0aWFsLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sIG1tKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXFxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZVxcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXFxuKyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMXFxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXFxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXFxuKyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPU1xcbisgKlxcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxcbisgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6XFxuKyAqIGlzIHplcm8uXFxuKyAqXFxuKyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZlxcbisgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS5cXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsXFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbW0sIGZsYWdzKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXFxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcXG5AQCAtMzY4MSw2ICszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXFxuIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcXG5AQCAtMzY4OSwxNyArMzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuIFxcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRpZiAoIW1tKSB7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4gXFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0KihjaGFyICopZHN0ID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4tXFx0XFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XFxuK1xcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICBtbSwgZmxhZ3MpO1xcbitcXHRtbXB1dChtbSk7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ICsgMTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG9cXG5AQCAtNDkyNCw2ICs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDllNzk3NTBlMjQ4MDguLjc5MWIzZDI1Y2FhNTQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTYwMDQsNiArNjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcXG4gfTtcXG4gXFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK307XFxuK1xcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gfTtcXG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4ge1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcXG4gXFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XFxuK1xcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xcbiBcXG4gXFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0yNSw2ICsyNSw5IEBAXFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcXG4gc3RydWN0IGhzdGF0ZTtcXG4gXFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG4rXFxuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cXG4gICovXFxuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4ge1xcbiBcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtNzQwNyw0MyArNzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuIH1cXG4tXFxuLS8qKlxcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cXG4tICogQHRzazpcXHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG4tICogQGFkZHI6XFx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cXG4tICogQGJ1ZjpcXHRkZXN0aW5hdGlvbiBidWZmZXJcXG4tICogQGxlbjpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbi0gKiBAZ3VwX2ZsYWdzOlxcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXFxuLSAqXFxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG4tICpcXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cXG4tICovXFxuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbi1cXHRpZiAoIW1tKSB7XFxuLVxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuLVxcbi1cXHRtbXB1dChtbSk7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXFxuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcXG4tLS0gYS9tbS9ub21tdS5jXFxuKysrIGIvbW0vbm9tbXUuY1xcbkBAIC0xNzQ2LDggKzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XFxuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXFxuICAqL1xcbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbilcXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuQEAgLTE3ODEsNDMgKzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuLVxcbi0vKipcXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXFxuLSAqIEB0c2s6XFx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuLSAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuLSAqIEBidWY6XFx0ZGVzdGluYXRpb24gYnVmZmVyXFxuLSAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4tICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKVxcbi0gKlxcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXFxuLSAqXFxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcXG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXFxuLSAqL1xcbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkobGVuID09IDApKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG4tXFx0aWYgKCFtbSkge1xcbi1cXHRcXHQqKGNoYXIgKilidWYgPSAnXFxcXDAnO1xcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcXG4tXFxuLVxcdG1tcHV0KG1tKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XFxuLS0tIGEvbW0vdXRpbC5jXFxuKysrIGIvbW0vdXRpbC5jXFxuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4rLyoqXFxuKyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLlxcbisgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlXFxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyXFxuKyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxcbisgKiAtRUZBVUxULlxcbisgKi9cXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxcbisgKiBAdHNrOlxcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxcbisgKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOlxcdGRlc3RpbmF0aW9uIGJ1ZmZlclxcbisgKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuKyAqIEBndXBfZmxhZ3M6XFx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4rICpcXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cXG4rICogLUVGQVVMVC5cXG4rICovXFxuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRpZiAoIW1tKSB7XFxuK1xcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuK1xcbitcXHRtbXB1dChtbSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4rXFxuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxcbiB7XFxuIFxcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcXG5AQCAtMCwwICsxLDcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY29weV9mcm9tX3VzZXJfYnBybS5za2VsLmhcXFwiXFxuK1xcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxcbit7XFxuK1xcdGNoYXIgYXJnMFtdID0gXFxcImZpcnN0XFxcIjtcXG4rXFx0Y2hhciBhcmcxW10gPSBcXFwic2Vjb25kLWFyZ3VtZW50XFxcIjtcXG4rXFx0Y2hhciBlbnYwW10gPSBcXFwiU09NRV9FTlY9YVxcXCI7XFxuK1xcdGNoYXIgZW52MVtdID0gXFxcIk9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitcXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcXG4rXFx0cGlkX3QgY2hpbGQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVxcdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cXG4rXFx0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXFx1MDAzZW1tLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2VrY29uZmlnLVxcdTAwM2VDT05GSUdfTU1VKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGNoaWxkID0gZm9yaygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXFxcImZvcmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIWNoaWxkKSB7XFxuK1xcdFxcdGNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9O1xcbitcXHRcXHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xcbitcXHRcXHRleGVjdmUoXFxcIi9iaW4vdHJ1ZVxcXCIsIGFyZ3YsIGVudnApO1xcbitcXHRcXHRfZXhpdChlcnJubyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFxcdTAwMjZzdGF0dXMsIDApLCBjaGlsZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFxcXCJjaGlsZF9leGl0ZWRcXFwiKSlcXG4rXFx0XFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCBcXFwiZXhlY19lcnJub1xcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9hcmdjLCAyLCBcXFwiYnBybV9hcmdjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWJwcm1fZW52YywgMiwgXFxcImJwcm1fZW52Y1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkYXRhX2xlbl9tYXRjaCwgMSwgXFxcImRhdGFfbGVuX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcXFwiaW52YWxpZF9mbGFnc19yZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY29weV9yZXQsIDAsIFxcXCJjb3B5X3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgXFxcInN0cl9hcmcwX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXFxcInN0cl9hcmcxX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXFxcInN0cl9lbnYwX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgXFxcInN0cl9lbnYxX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkYXRhX21hdGNoLCAxLCBcXFwiZGF0YV9tYXRjaFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXFxcInN0cl9hcmdzX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnZzX21hdGNoLCAxLCBcXFwic3RyX2VudnNfbWF0Y2hcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXFxuQEAgLTAsMCArMSwxMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSBcXFwiZmlyc3RcXFxcMHNlY29uZC1hcmd1bWVudFxcXFwwXFxcIlxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlNPTUVfRU5WPWFcXFxcME9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSBcXFwiZmlyc3RcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcXFwic2Vjb25kLWFyZ3VtZW50XFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gXFxcIlNPTUVfRU5WPWFcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSBcXFwiT1RIRVJfRU5WPXNvbWV0aGluZ1xcXCI7XFxuK1xcbitpbnQgbW9uaXRvcmVkX3BpZDtcXG4raW50IGJwcm1fYXJnYztcXG4raW50IGJwcm1fZW52YztcXG4raW50IGRhdGFfbGVuX21hdGNoO1xcbitpbnQgaW52YWxpZF9mbGFnc19yZXQ7XFxuK2ludCBjb3B5X3JldDtcXG4raW50IHN0cl9hcmcwX3JldDtcXG4raW50IHN0cl9hcmcxX3JldDtcXG4raW50IHN0cl9lbnYwX3JldDtcXG4raW50IHN0cl9lbnYxX3JldDtcXG4raW50IGRhdGFfbWF0Y2g7XFxuK2ludCBzdHJfYXJnc19tYXRjaDtcXG4raW50IHN0cl9lbnZzX21hdGNoO1xcbitcXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xcbitcXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcXG4rXFxuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XFxuK1xcbitTRUMoXFxcImxzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFx0Y2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdGNoYXIgYXJnMFszMl0gPSB7fTtcXG4rXFx0Y2hhciBhcmcxWzMyXSA9IHt9O1xcbitcXHRjaGFyIGVudjBbMzJdID0ge307XFxuK1xcdGNoYXIgZW52MVszMl0gPSB7fTtcXG4rXFx0dTY0IG9mZnNldCA9IDA7XFxuK1xcdHU2NCBkYXRhX2xlbjtcXG4rXFxuK1xcdGlmICghQ09ORklHX01NVSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bW0gPSBicHJtLVxcdTAwM2VtbTtcXG4rXFx0aWYgKCFtbSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicHJtX2FyZ2MgPSBicHJtLVxcdTAwM2VhcmdjO1xcbitcXHRicHJtX2VudmMgPSBicHJtLVxcdTAwM2VlbnZjO1xcbitcXG4rXFx0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cXHUwMDNlcCAqL1xcbitcXHRkYXRhX2xlbiA9IGJwcm0tXFx1MDAzZWV4ZWMgLSBicHJtLVxcdTAwM2VwO1xcbitcXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcXG4rXFxuK1xcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXFx1MDAzZXAsIG1tLCB+MFVMTCk7XFxuK1xcbitcXHRjb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cXHUwMDNlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IG1tLCAwKTtcXG4rXFx0aWYgKGNvcHlfcmV0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRhdGFfbWF0Y2ggPVxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpO1xcbitcXG4rXFx0LyogYXJnMCBpcyBhdCBicHJtLVxcdTAwM2VwICovXFxuK1xcdHN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xcbitcXG4rXFx0LyogYXJnMSBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICovXFxuK1xcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2FyZzFfcmV0O1xcbitcXG4rXFx0LyogZW52MCBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICovXFxuK1xcdHN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2VudjBfcmV0O1xcbitcXG4rXFx0LyogZW52MSBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXFxuK1xcdHN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3RyX2FyZ3NfbWF0Y2ggPVxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XFxuK1xcdHN0cl9lbnZzX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpO1xcbitcXG4rXFx0cmV0dXJuIGRhdGFfbWF0Y2ggXFx1MDAyNlxcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXFx1MDAyNlxcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjc0NDFkNjZjMDgwYzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuQEAgLTExMyw2ICsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIHtcXG4gXFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuIFxcdHN0cnVjdCBpbm5lcl9tYXAgKmlubmVyX21hcDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdGNoYXIgYXJnc1s2NF07XFxuIFxcdF9fdTMyIGtleSA9IDA7XFxuIFxcdF9fdTY0ICp2YWx1ZTtcXG5AQCAtMTIxLDcgKzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0XFx0YnBybV9jb3VudCsrO1xcbiBcXG4gXFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tLVxcdTAwM2Vhcmdfc3RhcnQpO1xcbi1cXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXFx1MDAzZW1tLVxcdTAwM2Vhcmdfc3RhcnQpO1xcbitcXHRtbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdGJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tXFx1MDAzZWFyZ19zdGFydCk7XFxuIFxcbiBcXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmFycmF5LCBcXHUwMDI2a2V5KTtcXG4gXFx0aWYgKHZhbHVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNDo1NS44NDM0NzQyNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTczMTA5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVxcdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTRjNjlhNzU0NjEwMDI3ZTY1NDg0NDE3Y2E0YWU1NGRjZDRmNzQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzoxNDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXHUwMDNlbW07XG4rXG4rXHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4rXHRcdGJwcm0tXHUwMDNlbW0gPSBOVUxMO1xuK1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNmYxMGNlMzE1ZWFhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzMyNSwxMCArMzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4tI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0jZW5kaWZcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4gbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNjc5LDkgKzY3OSw0NCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4rXHRpZiAocmV0ID09IHNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbit9XG4rXG4rc3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbitcdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgc2l6ZSAtIHJldCk7XG4rXG4rXHRyZXR1cm4gcmV0ICsgMTtcbit9XG4rXG4gQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSxcbiBcdCAgIGNvbnN0IHZvaWQgX191c2VyICosIHVzZXJfcHRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdHNrLCB1NjQsIGZsYWdzKVxuIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xuQEAgLTY5MSwxMyArNzI2LDE2IEBAIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHRpZiAodW5saWtlbHkoIXNpemUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRzaywgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4tXHRpZiAocmV0ID09IHNpemUpXG4tXHRcdHJldHVybiAwO1xuK1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuK1x0aWYgKCFtbSkge1xuK1x0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK1x0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pO1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiArMzY5Niw2OCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlclxuIFx0cmV0dXJuIHJldCArIDE7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuKyAqIEBkc3RfX3N6OiAgICAgICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuKyAqIEBmbGFnczogICAgICAgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm9cbisgKlxuKyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbisgKiBpcyB6ZXJvZWQgaWYgYW4gYXR0ZW1wdGVkIGNvcHkgY2Fubm90IGJlIGNvbXBsZXRlZCBpbiBmdWxsLiBVbnN1cHBvcnRlZFxuKyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZmxhZ3MgaXMgbm9uLXplcm8sIG9yIC1FRkFVTFQgaWYgdGhlIGNvcHlcbisgKiBmYWlscyBvciBpcyBwYXJ0aWFsLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sIG1tKTtcbit9XG4rXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4rICpcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbisgKiBpcyB6ZXJvLlxuKyAqXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4rICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHRcdCAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICAgbW0sIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzaydzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSw2ICszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuIFx0XHRcdFx0XHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbkBAIC0zNjg5LDE3ICszNzkwLDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4gXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGVsc2VcbitcdFx0XHQqKGNoYXIgKilkc3QgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4rXHRyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgbW0sIGZsYWdzKTtcbitcdG1tcHV0KG1tKTtcbiBcbi1cdHJldHVybiByZXQgKyAxO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG9cbkBAIC00OTI0LDYgKzUwMjgsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9rbWVtX2NhY2hlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA5ZTc5NzUwZTI0ODA4Li43OTFiM2QyNWNhYTU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02MDA0LDYgKzYwMDQsMTAgQEAgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkge1xuIFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xuIH07XG4gXG4rQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rfTtcbitcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgKzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIHtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XG4rXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XG4gXG4gXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjU1N2IyOTM4MTM1NTcgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjUsNiArMjUsOSBAQFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBzdHJ1Y3QgaHN0YXRlO1xuIFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuK1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTc0MDcsNDMgKzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4pXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rLyoqXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4rICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbit9XG4rXG4rLyoqXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4rICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4rXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXG4ge1xuIFx0Y2hhciAqYWRkcjEsICphZGRyMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsNzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuK3tcbitcdGNoYXIgYXJnMFtdID0gXCJmaXJzdFwiO1xuK1x0Y2hhciBhcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK1x0Y2hhciBlbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitcdGNoYXIgZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcbitcdHBpZF90IGNoaWxkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxuK1x0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXHUwMDNlbW0uXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2VrY29uZmlnLVx1MDAzZUNPTkZJR19NTVUpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hpbGQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghY2hpbGQpIHtcbitcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4rXHRcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRcdGV4ZWN2ZShcIi9iaW4vdHJ1ZVwiLCBhcmd2LCBlbnZwKTtcbitcdFx0X2V4aXQoZXJybm8pO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSwgY2hpbGQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwiY2hpbGRfZXhpdGVkXCIpKVxuK1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwiZXhlY19lcnJub1wiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2FyZ2MsIDIsIFwiYnBybV9hcmdjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fZW52YywgMiwgXCJicHJtX2VudmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9sZW5fbWF0Y2gsIDEsIFwiZGF0YV9sZW5fbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFwiaW52YWxpZF9mbGFnc19yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV9yZXQsIDAsIFwiY29weV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksIFwic3RyX2FyZzBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcInN0cl9hcmcxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXCJzdHJfZW52MF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksIFwic3RyX2VudjFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbWF0Y2gsIDEsIFwiZGF0YV9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXCJzdHJfYXJnc19tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52c19tYXRjaCwgMSwgXCJzdHJfZW52c19tYXRjaFwiKTtcbitcbitvdXQ6XG4rXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsMTIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSBcImZpcnN0XFwwc2Vjb25kLWFyZ3VtZW50XFwwXCJcbitcdFx0XHRcdCAgICBcIlNPTUVfRU5WPWFcXDBPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gXCJmaXJzdFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzFbXSA9IFwic2Vjb25kLWFyZ3VtZW50XCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gXCJTT01FX0VOVj1hXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXG4raW50IG1vbml0b3JlZF9waWQ7XG4raW50IGJwcm1fYXJnYztcbitpbnQgYnBybV9lbnZjO1xuK2ludCBkYXRhX2xlbl9tYXRjaDtcbitpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4raW50IGNvcHlfcmV0O1xuK2ludCBzdHJfYXJnMF9yZXQ7XG4raW50IHN0cl9hcmcxX3JldDtcbitpbnQgc3RyX2VudjBfcmV0O1xuK2ludCBzdHJfZW52MV9yZXQ7XG4raW50IGRhdGFfbWF0Y2g7XG4raW50IHN0cl9hcmdzX21hdGNoO1xuK2ludCBzdHJfZW52c19tYXRjaDtcbitcbitleHRlcm4gYm9vbCBDT05GSUdfTU1VIF9fa2NvbmZpZyBfX3dlYWs7XG4rXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitTRUMoXCJsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCIpXG4raW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1x0Y2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0Y2hhciBhcmcwWzMyXSA9IHt9O1xuK1x0Y2hhciBhcmcxWzMyXSA9IHt9O1xuK1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuK1x0Y2hhciBlbnYxWzMyXSA9IHt9O1xuK1x0dTY0IG9mZnNldCA9IDA7XG4rXHR1NjQgZGF0YV9sZW47XG4rXG4rXHRpZiAoIUNPTkZJR19NTVUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gYnBybS1cdTAwM2VtbTtcbitcdGlmICghbW0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuK1x0YnBybV9lbnZjID0gYnBybS1cdTAwM2VlbnZjO1xuK1xuK1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4rXHRkYXRhX2xlbiA9IGJwcm0tXHUwMDNlZXhlYyAtIGJwcm0tXHUwMDNlcDtcbitcdGRhdGFfbGVuX21hdGNoID0gZGF0YV9sZW4gPT0gc2l6ZW9mKGV4cGVjdGVkX2RhdGEpO1xuK1xuK1x0aW52YWxpZF9mbGFnc19yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSxcbitcdFx0XHRcdFx0XHQgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVx1MDAzZXAsIG1tLCB+MFVMTCk7XG4rXG4rXHRjb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLFxuK1x0XHRcdFx0XHQgbW0sIDApO1xuK1x0aWYgKGNvcHlfcmV0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRhdGFfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpO1xuK1xuK1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbitcdHN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMF9yZXQ7XG4rXG4rXHQvKiBhcmcxIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSAqL1xuK1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9hcmcxX3JldDtcbitcbitcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICovXG4rXHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2VudjBfcmV0O1xuK1xuK1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKyBzaXplb2YoYXJnMSkgKyBzaXplb2YoZW52MCkgKi9cbitcdHN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN0cl9hcmdzX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTtcbitcdHN0cl9lbnZzX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTtcbitcbitcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjc0NDFkNjZjMDgwYzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuQEAgLTExMyw2ICsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4ge1xuIFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuIFx0c3RydWN0IGlubmVyX21hcCAqaW5uZXJfbWFwO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRjaGFyIGFyZ3NbNjRdO1xuIFx0X191MzIga2V5ID0gMDtcbiBcdF9fdTY0ICp2YWx1ZTtcbkBAIC0xMjEsNyArMTIyLDkgQEAgaW50IEJQRl9QUk9HKHRlc3Rfdm9pZF9ob29rLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRicHJtX2NvdW50Kys7XG4gXG4gXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNldm1hLVx1MDAzZXZtX21tLVx1MDAzZWFyZ19zdGFydCk7XG4tXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNlbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbitcdG1tID0gYnBybS1cdTAwM2VtbTtcbitcdGlmIChtbSlcbitcdFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS1cdTAwM2Vhcmdfc3RhcnQpO1xuIFxuIFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZrZXkpO1xuIFx0aWYgKHZhbHVlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTQ6NTUuODQzNDk1NDE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5MTM0MTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgdG91Y2hlcyBzb21lIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBrZXJuZWwg4oCTIEJQRiwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB0aGUgZXhlY3V0aW9uIHN1YnN5c3RlbSAoVkZTKS4gV2UncmUgdGFsa2luZyBhYm91dCBCUEYga2Z1bmNzLCBtZW1vcnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmcmVlX2Jwcm1gIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBgZnMvZXhlYy5jYCB3aXRoIHRoZSBgZnJlZV9icHJtYCBmdW5jdGlvbiwgdGhlIGFkZGl0aW9uIG9mIG5ldyBhbmQgbW9kaWZpZWQgQlBGIGtmdW5jcyBsaWtlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGFuZCB1cGRhdGVzIHRvIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLiBUaGVzZSBCUEYgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IHRob3NlIGludm9sdmluZyB1c2VyLXNwYWNlIG1lbW9yeSBjb3BpZXMsIGFyZSBvZnRlbiBnb2xkbWluZXMgZm9yIGZ1enppbmcgZHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGlmIHRoZSBrZXJuZWwgc2lkZSBkb2Vzbid0IGNvcnJlY3RseSBoYW5kbGUgaW52YWxpZCBwb2ludGVycyBvciBib3VuZGFyeSBjaGVja3MuIEkgYWxzbyBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgdXBkYXRlZCwgd2hpY2ggY291bGQgYWxzbyBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGRpZmZzIHJlbGF0ZWQgdG8gdGhlIGBtbWAgc3Vic3lzdGVtLCB3aXRoIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCwgYW5kIHRoZSBpbnRlcm5hbCByZW5hbWluZywgYXJlIGFub3RoZXIga2V5IGFyZWEuIEFueSB0aW1lIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY29weWluZyBzdHJpbmdzLCBJIGdldCBpbnRlcmVzdGVkLiBUaGUgaW50ZXJhY3Rpb24gb2YgYWxsIHRoZXNlIGNvbXBvbmVudHMgbWFrZXMgdGhpcyBwYXRjaCBldmVuIG1vcmUgZW50aWNpbmcuXG5cbkdpdmVuIHRoYXQgU3l6a2FsbGVyIGFscmVhZHkgcmVndWxhcmx5IGZ1enplcyBCUEYsIHRoZSB2ZXJpZmllciwgYW5kIHRoZSBgZXhlY3ZlYCBzeXN0ZW0gY2FsbCwgdGhpcyBwYXRjaCBzbG90cyByaWdodCBpbnRvIGV4aXN0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gRGVmaW5pdGVseSByZWFjaGFibGUuICoqV29ydGhGdXp6aW5nID0gVHJ1ZSoqLlxuXG5Ob3csIGl0J3MgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXh0cmFjdCB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGhpdHRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aHMuIEkgbmVlZCB0byB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gY2FyZWZ1bGx5IGdvIHRocm91Z2ggdGhlIEtjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZm91bmRhdGlvbmFsIHBpZWNlcyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjAwLjgzNDg0MDExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTM2MTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz02Mj1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTY1LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz03Nz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTc5LVxcdGRlZmF1bHQgeVxcbmtlcm5lbC9icGYvS2NvbmZpZzo4MDpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTgxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05Nj1jb25maWcgQlBGX0xTTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTk4LVxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTEwMC1cXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19LRVlTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrZXlzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM2PWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOC1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDY9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ5LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02My1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjUtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcwLWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS03Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDY4PUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxcbmtlcm5lbC9icGYvY29yZS5jOjI0NzI6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI0NzMtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDM2PXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMzcte1xcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMwMzktXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwNTc9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDYzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMzODk9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzOTAte1xcbmtlcm5lbC9icGYvY29yZS5jOjMzOTE6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMzOTItXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDI5PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMy1cXG5rZXJuZWwvYnBmL2NvcmUuYzozNDM0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDM1LV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDYwPUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0NjEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQ2MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ2My1cXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXFx0IyBUaGUgZGVwZW5kZW5jeSBvbiAhQ09NUElMRV9URVNUIHByZXZlbnRzIGl0IGZyb20gYmVpbmcgZW5hYmxlZFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUxND1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUyMjogICAgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3Njk9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwNi1cXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4MDc6XFx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowMS4yMzYyMDc2ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODI4NzA2ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBLZnVuYyBhbmQgSGVscGVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBpdHMgc3RyaW5nIHZhcmlhbnQsIGFsb25nIHdpdGggdGhlIGJyb2FkZXIga2Z1bmNzIHdpdGhpbiBCUEYsIGFyZSBjb25maWd1cmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIOKAkyB0aGF0J3MgdGhlIGxpa2VseSBjZW50cmFsIGh1Yi4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSBwbGF5ZXIgaGVyZSwgYXMgaXQncyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cbk5leHQsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGEgaGFyZCBkZXBlbmRlbmN5IGZvciB0aGVzZSBrZnVuY3Mgb3IgQlRGIElEIHJlbGF0ZWQgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gTXkgcGxhbiBpcyB0byBzdGFydCB3aXRoIGEgZ29vZCBvbCcgYGdyZXBgIHNlc3Npb24uIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBgQlRGX0lEX0ZMQUdTYCwgb3IgZXZlbiBzcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX3N0cmAgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGtmdW5jcyBhbmQgQlRGLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowNC4wNjQ5MTc0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NzQxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NvcHlfZnJvbV91c2VyX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTM2NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX2JpdHMgKml0KVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY1OC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNjU5OiAqIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiB1bnNhZmUgdXNlciBhZGRyZXNzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY2MC0gKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNjcyLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2NzM6X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM2NzQte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTA0NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwNDY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0Ny1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjA0LjExNzg5NjQ5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjE3NjQzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlRGL2tmdW5jIFJlZ2lzdHJhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgQlRGIGFuZCBrZnVuY3MgYXJlIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgd2hhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJIHNob3VsZCBhbHNvIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLCBhbmQgdGhlIGltcGFjdCBvZiB0aG9zZSBvcHRpb25zLiBJIGtub3cgdGhlc2UgZmVhdHVyZXMgYXJlIHBpdm90YWwgZm9yIGFkdmFuY2VkIGVCUEYgY2FwYWJpbGl0aWVzLCBidXQgdGhlIG51YW5jZXMgb2YgdGhlaXIgc2V0LXVwIGFyZSBzb21ldGltZXMgZWFzaWx5IGZvcmdvdHRlbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgYmUgY29tcGxldGVseSBjZXJ0YWluIG9mIG15IGZhY3RzLiBUaW1lIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gY2FsbHMgYW5kIGV4YW1pbmUgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGFuZCBhc3NvY2lhdGVkIGNvZGUgcGF0aHMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIEdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDYuNDc5NjY0MDExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTA1Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJURl9LRlVOQ1NfU1RBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MTExOD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTE5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTIwOkJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTIxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIgfCBLRl9TUElOTE9DS19TQUZFKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXNrLmM9NDc1PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc2LVxcbmtlcm5lbC9icGYvY3B1bWFzay5jOjQ3NzpCVEZfS0ZVTkNTX1NUQVJUKGNwdW1hc2tfa2Z1bmNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy00NzgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcHVtYXNrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zNTI9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM1My1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM1NDpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2luaXRfa2Z1bmNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM1NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19jdHhfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgY3J5cHRfaW5pdF9rZnVuY19zZXQgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM2NC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM2NTpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zNjYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fZGVjcnlwdCwgS0ZfUkNVKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg4OD12b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDgtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwOTpCVEZfS0ZVTkNTX1NUQVJUKGdlbmVyaWNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTEwLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4NT1CVEZfSUQoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlX2R0b3IpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5ODg6QlRGX0tGVU5DU19TVEFSVChjb21tb25fYnRmX2lkcylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg5LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2FzdF90b19rZXJuX2N0eCwgS0ZfRkFTVENBTEwpXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjE5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTIyMC1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MjIxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX21hcF9pdGVyX2tmdW5jX2lkcylcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWFwX3N1bV9lbGVtX2NvdW50KVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NzQ1PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ2LVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0NzpCVEZfS0ZVTkNTX1NUQVJUKHJxc3BpbmxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMIHwgS0ZfU1BJTkxPQ0tfU0FGRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDYuNTMxNzc1MDYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NTEyMTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCB0aHJvdWdoIG15IG1pbmQ6XG5cbioqQ2hlY2tpbmcgYGNvbW1vbl9idGZfaWRzYCBSZWdpc3RyYXRpb24gaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgY29tbW9uX2J0Zl9pZHNgIHJlZ2lzdHJhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mg4oCTIGxpa2VseSBob3cgdGhlc2UgY29tbW9uIEJURiBJRHMgYXJlIGRlZmluZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGhlbHBlcnMuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgc29ydCBvZiB0YWJsZSBvciBtYWNybyBpbnZvbHZlZC4gSSBzaG91bGQgcHJvYmFibHkgYmUgcHJlcGFyZWQgdG8gdHJhY2UgdGhyb3VnaCBhbnkgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBob3cgdGhlc2UgSURzIGFyZSBsaW5rZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBlQlBGIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSBnZXQgZXhwb3NlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGV4YWN0IHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20sIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhpcyBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYnV0IGFzIHdpdGggYWxsIHRoaW5ncyBCUEYsIGJlc3QgdG8gYXNzdW1lIG5vdGhpbmcgdW50aWwgSSBzZWUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDkuMTI2ODk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDI1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJlZW1wdF9kaXNhYmxlKVxcbjUwMjY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wcmVlbXB0X2VuYWJsZSlcXG41MDI3OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXFxuNTAyODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG41MDI5OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG41MDMwOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXFxuNTAzMTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXFxuNTAzMjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwMzM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwMzQ6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcXG41MDM1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuNTAzNjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcXG41MDM3OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSB8IEtGX1NMRUVQQUJMRSlcXG41MDM4OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3NhdmUpXFxuNTAzOTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbjUwNDA6XFx0I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXFxuNTA0MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXFxuNTA0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX2R5bnB0cilcXG41MDQzOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9keW5wdHIpXFxuNTA0NDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9keW5wdHIpXFxuNTA0NTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwNDY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuNTA0NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuNTA0ODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwNDk6XFx0I2VuZGlmXFxuNTA1MDpcXHQjaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXFxuNTA1MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuNTA1MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbjUwNTM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kgfCBLRl9TTEVFUEFCTEUpXFxuNTA1NDpcXHQjZW5kaWZcXG41MDU1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbjUwNTY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbjUwNTc6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG41MDU4OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNhc2VjbXApO1xcbjUwNTk6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHIpO1xcbjUwNjA6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHJudWwpO1xcbjUwNjE6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuY2hyKTtcXG41MDYyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycmNocik7XFxuNTA2MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmxlbik7XFxuNTA2NDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowOS4xMjc0MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5NTA5Nzk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBoYW5kbGluZyBvZiBgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTExgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc3RydWN0IGxpbnV4X2JpbnBybWAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEkga25vdyBpdCdzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBidXQgbGV0J3MgYmUgcHJlY2lzZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgemVybyBpbiBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gNjAwMCBhbmQgNjA3MC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgYXJlYSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGFkZGluZyB0aGF0IHRydXN0ZWQgb3IgbnVsbCBjaGVjayBmb3IgdGhlIHN0cnVjdHVyZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBpbiB0aGF0IHNlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTEuNjIyNTE0MDYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMDA6XFx0XFx0c3RydWN0IHNjaGVkX2V4dF9vcHMgKm9wcztcXG42MDAxOlxcdH07XFxuNjAwMjpcXHRcXG42MDAzOlxcdEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcXG42MDA0OlxcdFxcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcXG42MDA1OlxcdH07XFxuNjAwNjpcXHRcXG42MDA3OlxcdEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcXG42MDA4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjYwMDk6XFx0fTtcXG42MDEwOlxcdFxcbjYwMTE6XFx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xcbjYwMTI6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjYwMTM6XFx0fTtcXG42MDE0OlxcdFxcbjYwMTU6XFx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSB7XFxuNjAxNjpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICp2bV9tbTtcXG42MDE3OlxcdFxcdHN0cnVjdCBmaWxlICp2bV9maWxlO1xcbjYwMTg6XFx0fTtcXG42MDE5OlxcdFxcbjYwMjA6XFx0c3RhdGljIGJvb2wgdHlwZV9pc19yY3Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG42MDIxOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuNjAyMjpcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmaWVsZF9uYW1lLCB1MzIgYnRmX2lkKVxcbjYwMjM6XFx0e1xcbjYwMjQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgdGFza19zdHJ1Y3QpKTtcXG42MDI1OlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9SQ1Uoc3RydWN0IGNncm91cCkpO1xcbjYwMjY6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY3NzX3NldCkpO1xcbjYwMjc6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSkpO1xcbjYwMjg6XFx0XFxuNjAyOTpcXHRcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXFxcIl9fc2FmZV9yY3VcXFwiKTtcXG42MDMwOlxcdH1cXG42MDMxOlxcdFxcbjYwMzI6XFx0c3RhdGljIGJvb2wgdHlwZV9pc19yY3Vfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjYwMzM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG42MDM0OlxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIHUzMiBidGZfaWQpXFxuNjAzNTpcXHR7XFxuNjAzNjpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkpO1xcbjYwMzc6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBza19idWZmKSk7XFxuNjAzODpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IHJlcXVlc3Rfc29jaykpO1xcbjYwMzk6XFx0XFxuNjA0MDpcXHRcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXFxcIl9fc2FmZV9yY3Vfb3JfbnVsbFxcXCIpO1xcbjYwNDE6XFx0fVxcbjYwNDI6XFx0XFxuNjA0MzpcXHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG42MDQ0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbjYwNDU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIHUzMiBidGZfaWQpXFxuNjA0NjpcXHR7XFxuNjA0NzpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSkpO1xcbjYwNDg6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IGJwZl9pdGVyX190YXNrKSk7XFxuNjA0OTpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XFxuNjA1MDpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgZmlsZSkpO1xcbjYwNTE6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9pbml0X3Rhc2tfYXJncykpO1xcbjYwNTI6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzKSk7XFxuNjA1MzpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncykpO1xcbjYwNTQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9zdWJfZGV0YWNoX2FyZ3MpKTtcXG42MDU1OlxcdFxcbjYwNTY6XFx0XFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsIFxcXCJfX3NhZmVfdHJ1c3RlZFxcXCIpO1xcbjYwNTc6XFx0fVxcbjYwNTg6XFx0XFxuNjA1OTpcXHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjYwNjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuNjA2MTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcXG42MDYyOlxcdHtcXG42MDYzOlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xcbjYwNjQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XFxuNjA2NTpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTtcXG42MDY2OlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XFxuNjA2NzpcXHRcXG42MDY4OlxcdFxcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxcbjYwNjk6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiX19zYWZlX3RydXN0ZWRfb3JfbnVsbFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToxMS42MjM2MTQwMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYxMTIyNzMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBMU00gSG9va3MgYW5kIE1lbW9yeSBTYWZldHkgaW4gYGxpbnV4X2JpbnBybWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsaW51eF9iaW5wcm1gIHN0cnVjdCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBCUEYgdmVyaWZpZXIuIEkgc2VlIHRoYXQgdGhlIGBtbWAgZmllbGQgaXMgbm93IG1hcmtlZCBhcyB0cnVzdGVkIG9yIG51bGwsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuICBUaGVuIEkgbm90aWNlZCB0aGUgY2hhbmdlIGluIGBmcy9leGVjLmNgIHdpdGggdGhlIGBmcmVlX2Jwcm1gIGZ1bmN0aW9uLiAgSXQgbm93IHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgd2l0aCBgbW1wdXQobW0pYC4gQWhhISAgVGhhdCdzIHRoZSBrZXkuIFRoaXMgY2hhbmdlIHdhcyBpbXBsZW1lbnRlZCBiZWNhdXNlIGBicHJtLVx1MDAzZW1tYCBpcyBub3cgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIEJQRiBMU00gaG9va3Mgb24gdGhlIGBicHJtYCBzdHJ1Y3QuXG5cbkVzc2VudGlhbGx5LCBieSBzZXR0aW5nIGBicHJtLVx1MDAzZW1tID0gTlVMTGAgYmVmb3JlIGZyZWVpbmcgdGhlIHN0cnVjdHVyZSwgd2UncmUgbWl0aWdhdGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIG9yIGRhbmdsaW5nIHBvaW50ZXIgYWNjZXNzZXMgaWYgYSBCUEYgaG9vayB0cmllcyB0byBhY2Nlc3MgYGJwcm0tXHUwMDNlbW1gICphZnRlciogaXQncyBiZWVuIGZyZWVkIG9yIHdoaWxlIGl0J3MgYmVpbmcgdG9ybiBkb3duLiAgU21hcnQhIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGVzc2VudGlhbCB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzZWQgdmlhIEJQRi5cblxuTm93LCBJIHdhbnQgdG8gZGl2ZSBhIGJpdCBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGhvb2tzIGNvdWxkIGJlIGRvaW5nLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEJQRiBoZWxwZXJzLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC5cblxuQWxzbywgSSdsbCByZXZpZXcgYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbnRlcmVzdGluZyBjb2RlIGxpa2U6IGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCBhbmQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYGZzL2V4ZWMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCdzIGBzdGF0aWNgIG9yIGBzdGF0aWMgaW5saW5lYC4gIEJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGBsaW51eF9iaW5wcm1gIHN0cnVjdCBhbmQgaXRzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgZmlsZSwgZm9yIGV4YW1wbGUsIGZyb20gYW4gZXh0ZXJuYWwgQlBGIGhvb2ssIG9yIG5vdC4gVGhlIGZvY3VzIHN5bWJvbHMgbmVlZCB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbjEuIGBicGZfY29weV9mcm9tX3VzZXJfbW1gXG4yLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmBcbjMuIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2BcbjQuIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgXG41LiBgY29weV9yZW1vdGVfbW1fc3RyYFxuNi4gYGNvcHlfcmVtb3RlX3ZtX3N0cmBcbjcuIGBfX2NvcHlfcmVtb3RlX21tX3N0cmBcbjguIGBmcmVlX2Jwcm1gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTcuMjM0ODQ0MjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc1NTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcmVlX2Jwcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMzk0PUVYUE9SVF9TWU1CT0woZmluYWxpemVfZXhlYyk7XFxuLS1cXG5mcy9leGVjLmMtMTM5OC0gKiBzZXR1cF9uZXdfZXhlYygpIGNvbW1pdHMgdGhlIG5ldyBjcmVkcyBhbmQgZHJvcHMgdGhlIGxvY2suXFxuZnMvZXhlYy5jOjEzOTk6ICogT3IsIGlmIGV4ZWMgZmFpbHMgYmVmb3JlLCBmcmVlX2Jwcm0oKSBzaG91bGQgcmVsZWFzZSAtXFx1MDAzZWNyZWRcXG5mcy9leGVjLmMtMTQwMC0gKiBhbmQgdW5sb2NrLlxcbi0tXFxuZnMvZXhlYy5jPTE0NTI9dm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTQ1Ni1cXG5mcy9leGVjLmM6MTQ1NzpzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9leGVjLmMtMTQ1OC17XFxuLS1cXG5mcy9leGVjLmM9MTQ5Mz1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbnBybSAqYWxsb2NfYnBybShpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIGludCBmbGFncylcXG4tLVxcbmZzL2V4ZWMuYy0xNTU5LW91dF9mcmVlOlxcbmZzL2V4ZWMuYzoxNTYwOlxcdGZyZWVfYnBybShicHJtKTtcXG5mcy9leGVjLmMtMTU2MS1cXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xcbi0tXFxuZnMvZXhlYy5jLTE1NjMtXFxuZnMvZXhlYy5jOjE1NjQ6REVGSU5FX0NMQVNTKGJwcm0sIHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgaWYgKCFJU19FUlIoX1QpKSBmcmVlX2Jwcm0oX1QpLFxcbmZzL2V4ZWMuYy0xNTY1LVxcdGFsbG9jX2Jwcm0oZmQsIG5hbWUsIGZsYWdzKSwgaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTcuMjg2NjA1NTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQ4ODk1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGLVJlbGF0ZWQgVGhvdWdodHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmcmVlX2Jwcm1gLiBSaWdodCwgaXQncyBhIGBzdGF0aWMgdm9pZGAgZnVuY3Rpb24g4oCTIGBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgLiBJIHJlY2FsbCBgYWxsb2NfYnBybWAgY2FsbHMgaXQsIGFuZCB0aGUgbWFjcm8gYERFRklORV9DTEFTUyhicHJtLCAuLi4pYCBhbHNvIHV0aWxpemVzIGl0LiBJbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhvc2UgY29ubmVjdGlvbnMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBCUEYgY29uZmlndXJhdGlvbnMuIEkga25vdyB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIHRoZSBCUEYgaGVscGVycyBhbmQga2Z1bmNzLCB3aGljaCBhcmUgZm91bmQgaW4gYGhlbHBlcnMuY2AsIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGluIGBtbS91dGlsLmNgLCBhbmQgdGhlIHZlcmlmaWVyIGNvZGUuIFRoZW4sIHRoZXJlJ3MgYEJQRl9MU01gIOKAkyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIEJQRiBMU00gcHJvZ3JhbXMgdGhhdCByZXF1aXJlIGFjY2VzcyB0byBgYnBybS1cdTAwM2VtbWAuXG5cbk5vdywgb250byB2ZXJpZnlpbmcgc29tZXRoaW5nIGFib3V0IGBCVEZfSURfRkxBR1NgLiBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhhdCB3b3JrcyBhbmQsIGNydWNpYWxseSwgaWYgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgKnRydWx5KiBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGtmdW5jcy4gSSBrbm93IHRoYXQga2Z1bmMgcmVzb2x1dGlvbiB3aXRoaW4ga2VybmVsIEJQRiByZWxpZXMgb24gQlRGIG1ldGFkYXRhIGdlbmVyYXRlZCBmcm9tIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuIEknbGwgc2VhcmNoIGBrZXJuZWwvYnBmL2AgZm9yIHRoZSBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBzeW1ib2wgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjIwLjc1MTQ5Nzc4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNjg1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdfSU5GT19CVEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjQxNj1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlX2Jhc2Uoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjQyMS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjY0MjI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpXFxua2VybmVsL2JwZi9idGYuYy02NDIzLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NTAyPV9fdTMyIGJ0Zl9yZWxvY2F0ZV9pZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIF9fdTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NTA4LVxcbmtlcm5lbC9icGYvYnRmLmM6NjUwOTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTY1MTAtXFxua2VybmVsL2JwZi9idGYuYz02NTExPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjA2LVxcbmtlcm5lbC9icGYvYnRmLmM6NjYwNzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MjQ9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg1MjctXFxua2VybmVsL2JwZi9idGYuYzo4NTI4OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODUyOS1zdHJ1Y3QgYnRmX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NjY9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2Njc6I2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTICovXFxua2VybmVsL2JwZi9idGYuYy04NjY4LVxcbmtlcm5lbC9icGYvYnRmLmM9ODY2OT1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NjcxLVxcdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XFxua2VybmVsL2JwZi9idGYuYzo4NjcyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODY3My1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY5OT1zdHJ1Y3QgYnRmICpidGZfZ2V0X21vZHVsZV9idGYoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxcbmtlcm5lbC9icGYvYnRmLmMtODcwMC17XFxua2VybmVsL2JwZi9idGYuYzo4NzAxOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODcwMi1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODcxMi1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTM6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NzE0LVxcdG11dGV4X2xvY2soXFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04NzI5PXN0YXRpYyBpbnQgY2hlY2tfYnRmX2tjb25maWdzKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3QgY2hhciAqZmVhdHVyZSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzAte1xcbmtlcm5lbC9icGYvYnRmLmM6ODczMTpcXHRpZiAoIW1vZHVsZSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzItXFx0XFx0cHJfZXJyKFxcXCJtaXNzaW5nIHZtbGludXggQlRGLCBjYW5ub3QgcmVnaXN0ZXIgJXNcXFxcblxcXCIsIGZlYXR1cmUpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzM0LVxcdH1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MzU6XFx0aWYgKG1vZHVsZSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzYtXFx0XFx0cHJfd2FybihcXFwibWlzc2luZyBtb2R1bGUgQlRGLCBjYW5ub3QgcmVnaXN0ZXIgJXNcXFxcblxcXCIsIGZlYXR1cmUpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04ODc3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxcbmtlcm5lbC9icGYvYnRmLmMtODg3OC17XFxua2VybmVsL2JwZi9idGYuYzo4ODc5OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODg4MC1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODg5My1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg4OTQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04ODk1LVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YnRmX21vZHVsZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk1NDI9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NTY5LVxcbmtlcm5lbC9icGYvYnRmLmM6OTU3MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTk1NzEtc3RhdGljIHZvaWQgX19wdXJnZV9jYW5kX2NhY2hlKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9jYW5kX2NhY2hlICoqY2FjaGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjg0NT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NjEtXFx0XFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODYyOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NjMtXFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjQyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU2LVxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcF9wdHIgYWNjZXNzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU4LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkwMTA9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjYtXFx0XFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAyNzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTE4PXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDkyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5MjM6XFx0aWYgKCFidGYgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTI0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJ0Zl92bWxpbnV4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToyMC44MDM4NzEyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkyMjYxODU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGVzc2VudGlhbCBoZXJlLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBrZnVuY3MgcmVseSBvbiBpdDsgbm8gQlRGLCBubyBrZnVuYyBjYWxscy4gQW5kIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuUmlnaHQsIEknbSBub3RpbmcgdGhlc2UgY2hhbmdlcyBpbiBwYXJ0aWN1bGFyOiBuZXcga2Z1bmNzIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgaW4gdGhlIHNhbWUgZmlsZS4gQWxzbywgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIHdlcmUgbW9kaWZpZWQgaW4gYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgcmVzcGVjdGl2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIG1vZGlmeWluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSwgYW5kIHNwZWNpZmljYWxseSBtYWtpbmcgdGhvc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gVGhhdCB0cmlnZ2VycyBteSBmdXp6aW5nIGluc3RpbmN0cy4gVGhlIEJQRiB2ZXJpZmllciBpcyBnb2luZyB0byB0cmVhdCBgYnBybS1cdTAwM2VtbWAgZmllbGQgYXMgdHJ1c3RlZCwgd2hpY2ggbG9va3MgbGlrZSBhIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNldHRpbmcgaXQgdG8gTlVMTCBpbiBgZnJlZV9icHJtKClgIGlzIGEgZ29vZCBtaXRpZ2F0aW9uLCBidXQgc3RpbGwsIHRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IHRoZXNlIGNoYW5nZXMgaGF2ZSBvbiB0aGUgcmVhY2hhYmxlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIEFQSXMuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHZlcmlmeSBhcmU6IGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgY29weV9yZW1vdGVfbW1fc3RyYCwgYGNvcHlfcmVtb3RlX3ZtX3N0cmAsIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLiBUaGV5J3JlIGFsbCBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLCBhbmQgSSB0aGluayB0aGV5IHdpbGwgYWxsIGJlIHJlYWNoYWJsZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUsIGZvY3VzZWQgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwMiwiT3V0cHV0VG9rZW5zIjoyNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MjcuNzI2NDkzNjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwODM1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVxcdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjI3LjgxNjU4ODUyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODU1ODgxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToyNy44MTcyMzcyMzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjY4NDkzNDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuK1xuK1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuK1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbitcdFx0bW1wdXQobW0pO1xuIFx0fVxuIFx0aWYgKGJwcm0tXHUwMDNldXNlcl9ucylcbiBcdFx0cHV0X3VzZXJfbnMoYnBybS1cdTAwM2V1c2VyX25zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLjZmMTBjZTMxNWVhYTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMjUsMTAgKzMzMjUsMTAgQEAgZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGV4dGVybiBpbnQgYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi1leHRlcm4gaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4tI2VuZGlmXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTY3OSw5ICs2NzksNDQgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4rc3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBzaXplLFxuK1x0XHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuK1x0aWYgKHJldCA9PSBzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuK1x0LyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqL1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIHNpemUgLSByZXQpO1xuK1xuK1x0cmV0dXJuIHJldCArIDE7XG4rfVxuK1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi9cbkBAIC02OTEsMTMgKzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuIFxuLVx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4tXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbitcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTtcbitcdG1tcHV0KG1tKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgKzM2OTYsNjggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXJcbiBcdHJldHVybiByZXQgKyAxO1xuIH1cbiBcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4rICpcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbisgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4rICogZmFpbHMgb3IgaXMgcGFydGlhbC5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseSghZHN0X19zeikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLCBtbSk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4rICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZ1xuKyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuKyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPU1xuKyAqXG4rICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGhcbisgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6XG4rICogaXMgemVyby5cbisgKlxuKyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZlxuKyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxuKyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4rICpcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0XHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgIG1tLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXG4gICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZVxuQEAgLTM2ODEsNiArMzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKVxuIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG5AQCAtMzY4OSwxNyArMzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRpZiAoIW1tKSB7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuIFx0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRlbHNlXG4rXHRcdFx0KihjaGFyICopZHN0ID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuK1x0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHQgIG1tLCBmbGFncyk7XG4rXHRtbXB1dChtbSk7XG4gXG4tXHRyZXR1cm4gcmV0ICsgMTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcbiBcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcbiB9O1xuIFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK307XG4rXG4gQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIH07XG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuK1x0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuIFxuIFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li41NTdiMjkzODEzNTU3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI1LDYgKzI1LDkgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbitcbiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC03MzMxLDggKzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHZvaWQgKm9sZF9idWYgPSBidWY7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03NDA3LDQzICs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXG5pbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuKysrIGIvbW0vbm9tbXUuY1xuQEAgLTE3NDYsOCArMTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTE3ODEsNDMgKzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKVxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4rKysgYi9tbS91dGlsLmNcbkBAIC0xMDYxLDYgKzEwNjEsNjggQEAgaW50IGdldF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuKy8qKlxuKyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLlxuKyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcbisgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rfVxuK1xuKy8qKlxuKyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuKyAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbisgKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuKyAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuKyAqXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4rICogLUVGQVVMVC5cbisgKi9cbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRpZiAoIW1tKSB7XG4rXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbitcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbitcbitcdG1tcHV0KG1tKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuK1xuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxuIHtcbiBcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDcyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaFwiXG4rXG4rdm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZClcbit7XG4rXHRjaGFyIGFyZzBbXSA9IFwiZmlyc3RcIjtcbitcdGNoYXIgYXJnMVtdID0gXCJzZWNvbmQtYXJndW1lbnRcIjtcbitcdGNoYXIgZW52MFtdID0gXCJTT01FX0VOVj1hXCI7XG4rXHRjaGFyIGVudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1x0c3RydWN0IGNvcHlfZnJvbV91c2VyX2Jwcm0gKnNrZWw7XG4rXHRwaWRfdCBjaGlsZDtcbitcdGludCBzdGF0dXM7XG4rXG4rXHRza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbitcdCAqIGJlaW5nIG1hcHBlZCBpbiBicHJtLVx1MDAzZW1tLlxuK1x0ICovXG4rXHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6IHRlc3QgcmVxdWlyZXMgQ09ORklHX01NVVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksIFwiYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGNoaWxkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2hpbGQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIWNoaWxkKSB7XG4rXHRcdGNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9O1xuK1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbitcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0XHRleGVjdmUoXCIvYmluL3RydWVcIiwgYXJndiwgZW52cCk7XG4rXHRcdF9leGl0KGVycm5vKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcImNoaWxkX2V4aXRlZFwiKSlcbitcdFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCBcImV4ZWNfZXJybm9cIik7XG4rXG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcImJwcm1fYXJnY1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwiYnBybV9lbnZjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcImRhdGFfbGVuX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcImludmFsaWRfZmxhZ3NfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcImNvcHlfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcInN0cl9hcmcwX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCJzdHJfYXJnMV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwic3RyX2VudjBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcInN0cl9lbnYxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcImRhdGFfbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwic3RyX2FyZ3NfbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwic3RyX2VudnNfbWF0Y2hcIik7XG4rXG4rb3V0OlxuK1x0Y29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDEyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCJmaXJzdFxcMHNlY29uZC1hcmd1bWVudFxcMFwiXG4rXHRcdFx0XHQgICAgXCJTT01FX0VOVj1hXFwwT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwiZmlyc3RcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1xuK2ludCBtb25pdG9yZWRfcGlkO1xuK2ludCBicHJtX2FyZ2M7XG4raW50IGJwcm1fZW52YztcbitpbnQgZGF0YV9sZW5fbWF0Y2g7XG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xuK2ludCBjb3B5X3JldDtcbitpbnQgc3RyX2FyZzBfcmV0O1xuK2ludCBzdHJfYXJnMV9yZXQ7XG4raW50IHN0cl9lbnYwX3JldDtcbitpbnQgc3RyX2VudjFfcmV0O1xuK2ludCBkYXRhX21hdGNoO1xuK2ludCBzdHJfYXJnc19tYXRjaDtcbitpbnQgc3RyX2VudnNfbWF0Y2g7XG4rXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rU0VDKFwibHNtLnMvYnBybV9jaGVja19zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGNoYXIgYXJnMFszMl0gPSB7fTtcbitcdGNoYXIgYXJnMVszMl0gPSB7fTtcbitcdGNoYXIgZW52MFszMl0gPSB7fTtcbitcdGNoYXIgZW52MVszMl0gPSB7fTtcbitcdHU2NCBvZmZzZXQgPSAwO1xuK1x0dTY0IGRhdGFfbGVuO1xuK1xuK1x0aWYgKCFDT05GSUdfTU1VKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwcm1fYXJnYyA9IGJwcm0tXHUwMDNlYXJnYztcbitcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbitcbitcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXHUwMDNlcCAqL1xuK1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4rXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcbitcbitcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLCBtbSwgfjBVTEwpO1xuK1xuK1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbitcdFx0XHRcdFx0IG1tLCAwKTtcbitcdGlmIChjb3B5X3JldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkYXRhX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbitcbitcdC8qIGFyZzAgaXMgYXQgYnBybS1cdTAwM2VwICovXG4rXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xuK1xuK1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKi9cbitcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMV9yZXQ7XG4rXG4rXHQvKiBlbnYwIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xuK1x0c3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcbitcbitcdC8qIGVudjEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXG4rXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdHJfYXJnc19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4rXHRzdHJfZW52c19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4rXG4rXHRyZXR1cm4gZGF0YV9tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC0xMTMsNiArMTEzLDcgQEAgaW50IEJQRl9QUk9HKHRlc3Rfdm9pZF9ob29rLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbiBcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiBcdHN0cnVjdCBpbm5lcl9tYXAgKmlubmVyX21hcDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0Y2hhciBhcmdzWzY0XTtcbiBcdF9fdTMyIGtleSA9IDA7XG4gXHRfX3U2NCAqdmFsdWU7XG5AQCAtMTIxLDcgKzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0YnBybV9jb3VudCsrO1xuIFxuIFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVx1MDAzZXZtYS1cdTAwM2V2bV9tbS1cdTAwM2Vhcmdfc3RhcnQpO1xuLVx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVx1MDAzZW1tLVx1MDAzZWFyZ19zdGFydCk7XG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAobW0pXG4rXHRcdGJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbiBcbiBcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZhcnJheSwgXHUwMDI2a2V5KTtcbiBcdGlmICh2YWx1ZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjI3LjgxNzIzODIwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzgzMzM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBzZXJpZXMgaXMgY2VudGVyZWQgYXJvdW5kIGVuaGFuY2luZyBCUEYncyBhYmlsaXR5IHRvIHNhZmVseSBhbmQgY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgb3BlcmF0aW9ucyBmcm9tIHVzZXIgc3BhY2Ugd2l0aGluIGEgZGlmZmVyZW50IE1NIGNvbnRleHQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgc3RydWN0IGxpbnV4X2JpbnBybWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSBhIGNydWNpYWwgY2xlYW51cCBpbiBgZnMvZXhlYy5jYCB3aXRoaW4gYGZyZWVfYnBybWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYG1tcHV0KG1tKWAgY2FsbCBhZnRlciBudWxsaWZ5aW5nIGBicHJtLVx1MDAzZW1tYCBpcyBnb29kOyBpdCBlbnN1cmVzIHByb3BlciBNTSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBsZWFrcyBpZiB0aGUgYGJwcm1gIG91dGxpdmVzIGl0cyBgbW1fc3RydWN0YC4gVGhlIGBhY2N0X2FyZ19zaXplYCBjYWxsIGlzIGFsc28gd29ydGggbm90aW5nOyBwcm9iYWJseSByZWxhdGVzIHRvIGFjY291bnRpbmcgZm9yIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIGFyZ3VtZW50cyBmb3IgZXhlYy5cblxuVGhlIGluY2x1c2lvbiBvZiBkZWNsYXJhdGlvbnMgZm9yIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfdm1fc3RyYCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBpcyBhIHJlZCBmbGFnIGluIGEgZ29vZCB3YXk7IGl0IGlzIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIFRoZXkncmUgZGVmaW5pdGVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgZnJvbSByZW1vdGUgbWVtb3J5IGNvbnRleHRzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgaW4gYSBiaXQuXG5cblRoZSBtZWF0IG9mIHRoaXMgc2VyaWVzIGxpZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UncmUgZ2V0dGluZyBuZXcgQlBGIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCwgYWxvbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBrZnVuY3MsIGNsZWFybHkgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIG1vcmUgcm9idXN0IGFuZCBjb250cm9sbGVkIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhlIHVzZSBvZiBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIHRoZSBjYXJlZnVsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgYW5kIGVycm9ycywgd2l0aCBgbWVtc2V0YCBjYWxscyB0byB6ZXJvIG91dCB1bmluaXRpYWxpemVkIHBvcnRpb25zLCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYmVpbmcgaW50ZWdyYXRlZCBldmVyeXdoZXJlLiBJIGxpa2UgdGhhdCB3ZSdyZSByZWZhY3RvcmluZyBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIHNpbWlsYXIgcGF0dGVybiBmb3Igc3RyaW5ncy4gVGhlIGhhbmRsaW5nIG9mIHRoZSBgQlBGX0ZfUEFEX1pFUk9TYCBmbGFnIGlzIGFsc28gY3JpdGljYWwgZm9yIGF2b2lkaW5nIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYWxsb3dpbmcgYWNjZXNzIHRvIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgaW4gYHN0cnVjdCBsaW51eF9iaW5wcm1gIGxvb2tzIGxpa2UgYSBuZWNlc3NhcnkgY2hhbmdlIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGluZGljYXRlcyB0aGF0IHRoZSB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCB0aGUgYWNjZXNzIG5lZWRlZCBieSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZSwgYW5kIHRoYXQncyBnb29kLlxuXG5UaGUgcmVmYWN0b3JpbmcgaW4gdGhlIGBtbS9gIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGNvcHlfcmVtb3RlX3ZtX3N0cmAgdG8gc2hhcmUgYF9fY29weV9yZW1vdGVfbW1fc3RyYCwgaXMgZ3JlYXQuIENvZGUgcmV1c2UgaXMga2V5LCBhbmQgaXQgc3VnZ2VzdHMgYSB3ZWxsLXRob3VnaHQtb3V0IGRlc2lnbi4gVGhlIGFkZGl0aW9uIG9mIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgbWVhbnMgaXQgY2FuIG9wZXJhdGUgb24gYSBicm9hZGVyIGNvbnRleHQgb2YgbWVtb3J5LlxuXG5GaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHNlbGZ0ZXN0cyBpcyBleGNlbGxlbnQuIEl0IGRlbW9uc3RyYXRlcyBhIGNvbW1pdG1lbnQgdG8gdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRob3NlIGluIGRldGFpbCB0byBjb25maXJtIHRoZXkgY292ZXIgdGhlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHNjZW5hcmlvcy5cblxuTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcywgSSBoYXZlIHNvbWUgY29uY2VybnMuIEkgaGF2ZSB0byB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fY29weV9yZW1vdGVfbW1fc3RyYCAoYW5kIHJlbGF0ZWQgZnVuY3Rpb25zKSBpbiBgbW0vbWVtb3J5LmNgLCBgbW0vbm9tbXUuY2AsIGFuZCBlbHNld2hlcmUgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHdyaXRlcyB0byB0aGUgYnVmZmVyIGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgdGVybWluYXRpb24gYW5kIGxlbmd0aC4gSSBtdXN0IHZlcmlmeSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBjb21pbmcgZnJvbSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgc3VpdGFibGUgY29uc3RyYWludHMgYW5kIGNoZWNrcyBvbiB0aGUgc2l6ZSBhbmQgc291cmNlIG9mIHRoZSBtZW1vcnkgY29weSBvcGVyYXRpb25zIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYnVsbGV0cHJvb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MzQuMjAwNTc3NjQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0yNj1zdHJ1Y3QgaHN0YXRlO1xcbm1tL2ludGVybmFsLmgtMjctXFxubW0vaW50ZXJuYWwuaDoyODppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9pbnRlcm5hbC5oLTI5LVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbi0tXFxubW0vbWVtb3J5LmM9NzMyNz1FWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XFxuLS1cXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xcbm1tL21lbW9yeS5jOjczMzQ6aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzMzNS1cXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbi0tXFxubW0vbm9tbXUuYz0xNzQyPUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4tLVxcbm1tL25vbW11LmMtMTc0OC0gKi9cXG5tbS9ub21tdS5jOjE3NDk6aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0xNzUwLVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS91dGlsLmM9MTA4MD1pbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS91dGlsLmMtMTA4NS1cXG5tbS91dGlsLmM6MTA4NjpcXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL3V0aWwuYy0xMDg3LX1cXG4tLVxcbm1tL3V0aWwuYz0xMTAyPWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3V0aWwuYy0xMTE2LVxcbm1tL3V0aWwuYzoxMTE3OlxcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG5tbS91dGlsLmMtMTExOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MzQuMjU1NDc3ODE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTgxNDM5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL21lbW9yeS5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9tZW1vcnkuY2AsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc28gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgY29tcGxleGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byByZW1vdGUgbWVtb3J5IGNvcGllcywgYW5kIHN0cmluZyBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBuYW1lIGl0c2VsZiwgYF9fY29weV9yZW1vdGVfbW1fc3RyYCwgaGludHMgYXQgbW92aW5nIGEgc3RyaW5nIGJldHdlZW4gYWRkcmVzcyBzcGFjZXMsIGxpa2VseSB3aGVuIGRlYWxpbmcgd2l0aCBwcm9jZXNzZXMgb3IgcGVyaGFwcyBldmVuIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgZnJvbSBrZXJuZWwgc3BhY2UuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3NlcywgcGFnZSBmYXVsdHMgKGlmIGFueSksIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaXQgZW1wbG95cy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTozNi40NTM2MjUzNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMzA6XFx0LypcXG43MzMxOlxcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjczMzI6XFx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbjczMzM6XFx0ICovXFxuNzMzNDpcXHRpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MzM1OlxcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMzNjpcXHR7XFxuNzMzNzpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjczMzg6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMzOTpcXHRcXG43MzQwOlxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuNzM0MTpcXHRcXG43MzQyOlxcdFxcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXFxuNzM0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzQ0OlxcdFxcbjczNDU6XFx0XFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcXG43MzQ2OlxcdFxcbjczNDc6XFx0XFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xcbjczNDg6XFx0XFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xcbjczNDk6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG43MzUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjczNTE6XFx0XFx0fVxcbjczNTI6XFx0XFxuNzM1MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzM1NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldCwgcmV0dmFsO1xcbjczNTU6XFx0XFx0XFx0dm9pZCAqbWFkZHI7XFxuNzM1NjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjczNTc6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzM1ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzM1OTpcXHRcXG43MzYwOlxcdFxcdFxcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXFx1MDAyNnZtYSk7XFxuNzM2MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzM2MjpcXHRcXHRcXHRcXHQvKlxcbjczNjM6XFx0XFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbjczNjQ6XFx0XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG43MzY1OlxcdFxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG43MzY2OlxcdFxcdFxcdFxcdCAqL1xcbjczNjc6XFx0XFx0XFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG43MzY4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuNzM2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG43MzcwOlxcdFxcdFxcdH1cXG43MzcxOlxcdFxcbjczNzI6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjczNzM6XFx0XFx0XFx0Ynl0ZXMgPSBsZW47XFxuNzM3NDpcXHRcXHRcXHRvZmZzZXQgPSBhZGRyIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjczNzU6XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxcbjczNzY6XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XFxuNzM3NzpcXHRcXG43Mzc4OlxcdFxcdFxcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcXG43Mzc5OlxcdFxcdFxcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjczODA6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNlPSAwKSB7XFxuNzM4MTpcXHRcXHRcXHRcXHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cXG43MzgyOlxcdFxcdFxcdFxcdGJ1ZiArPSByZXR2YWw7XFxuNzM4MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43Mzg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjczODU6XFx0XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHRcXHRidWYgKz0gYnl0ZXMgLSAxO1xcbjczODg6XFx0XFx0XFx0LypcXG43Mzg5OlxcdFxcdFxcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xcbjczOTA6XFx0XFx0XFx0ICogY29weSB0aGUgbGFzdCBieXRlIGluIHRoZSBwYWdlIGlmIHdlIGFyZSBnb2luZyB0b1xcbjczOTE6XFx0XFx0XFx0ICogbG9hZCBtb3JlIHBhZ2VzXFxuNzM5MjpcXHRcXHRcXHQgKi9cXG43MzkzOlxcdFxcdFxcdGlmIChieXRlcyAhPSBsZW4pIHtcXG43Mzk0OlxcdFxcdFxcdFxcdGFkZHIgKz0gYnl0ZXMgLSAxO1xcbjczOTU6XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsIGJ1ZiwgbWFkZHIgKyAoUEFHRV9TSVpFIC0gMSksIDEpO1xcbjczOTY6XFx0XFx0XFx0XFx0YnVmICs9IDE7XFxuNzM5NzpcXHRcXHRcXHRcXHRhZGRyICs9IDE7XFxuNzM5ODpcXHRcXHRcXHR9XFxuNzM5OTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzQwMDpcXHRcXG43NDAxOlxcdFxcdFxcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xcbjc0MDI6XFx0XFx0fVxcbjc0MDM6XFx0XFxuNzQwNDpcXHRvdXQ6XFxuNzQwNTpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG43NDA2OlxcdFxcdGlmIChlcnIpXFxuNzQwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc0MDg6XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzQwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjM2LjQ1NDA2OTM3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDQ4MDgwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIHBhdGNoIGNoYW5nZXMgYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYG1tX3N0cnVjdGAuIEl0J3MgZ29vZCB0byBzZWUgdGhhdCBgYnBybS1cdTAwM2VtbWAgaXMgbnVsbGVkIG91dCBhZnRlciBhY2NvdW50aW5nIGFuZCBiZWZvcmUgdGhlIGBtbXB1dGAgY2FsbC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBhdm9pZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdpdGggQlBGIGFjY2Vzc2luZyB0aGlzIGRhdGEuXG5cbk5leHQsIHRoZSBCUEYgaGVscGVyIGZ1bmN0aW9ucywgbGlrZSBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgYXJlIG5leHQgdXAgb24gdGhlIGxpc3QuIEknbSBmb2N1c2luZyBvbiB0aGVpciBoYW5kbGluZyBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgZHN0YCkgd2hlbiBhIGNvcHkgZmFpbHMuIFRoZSBleHBsaWNpdCBgbWVtc2V0KGRzdCwgMCwgc2l6ZSlgIG9yIGBtZW1zZXRgIHBhZGRpbmcgaW4gdmFyaW91cyBmYWlsdXJlIHBhdGhzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiBUaGlzIGVuc3VyZXMgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4gYGNvcHlfcmVtb3RlX21tX3N0cmAncyBndWFyYW50ZWVkIG51bGwgdGVybWluYXRpb24gKG9yIGNsZWFyaW5nKSBpbiBhZGRpdGlvbiB0byBwYWRkaW5nIHdpdGggemVyb3MgaWYgcmVxdWVzdGVkICh3aXRoIGBCUEZfRl9QQURfWkVST1NgKSBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgY2FyZWZ1bCBkZXNpZ24uXG5cblRoZSBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCBmdW5jdGlvbnMgYXJlIHNpbWlsYXIuICBUaGV5IGFsc28gemVybyB0aGUgYGRzdGAgYnVmZmVyIG9uIGVycm9yIChvciBwYWQgaXQsIGluIHRoZSBzdHJpbmcgdmVyc2lvbikuIFRoaXMgY29uc2lzdGVuY3kgaXMgcmVhc3N1cmluZy4gSSBhbHNvIG5vdGUgdGhhdCB0aGUgdXNlIG9mIGZsYWdzIGlzIGxpbWl0ZWQgdG8gYEJQRl9GX1BBRF9aRVJPU2AuXG5cbkZpbmFsbHksIHRoZSB2ZXJpZmllciBjaGFuZ2UgLSB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBsaW51eF9iaW5wcm1gIHRvIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgZm9yIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgLSBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5LiBJdCBoZWxwcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIGNvbnRyb2xsZWQuXG5cbk5vdywgbGV0J3MgY29ubmVjdCBhbGwgdGhlIGRvdHMgYW5kIHNlZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOLiBUaGUgQlBGIHByb2dyYW1zJyBwcm92aWRlZCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB2YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyIC0gc28gdGhlIHNpemUgYW5kIHZhbGlkaXR5IGFyZSB2ZXJpZmllZCAtIHRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgcmVtb3RlIG1tIHVzaW5nIGV4aXN0aW5nIHN0YW5kYXJkIGZ1bmN0aW9ucyBzdWNoIGFzIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGNvcHlfcmVtb3RlX21tX3N0cmAgd2hpY2ggYXJlIHRob3JvdWdobHkgdGVzdGVkLiBBbmQgdGhlIGVycm9yIHBhdGhzLCBvciBwYWRkaW5nIHBhdGhzIGFsbCBpbnZvbHZlIGV4cGxpY2l0bHkgemVyb2luZyB0aGUgZGF0YS4gYGZyZWVfYnBybWAgaGFzIGFuIGV4cGxpY2l0IGFzc2lnbm1lbnQuIFNvLCB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MsIGJhc2VkIG9uIHRoZXNlIGNoYW5nZXMuIFRoZSBleGlzdGluZyBwcm90ZWN0aW9ucyBvZiBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNvdmVyIGFueSBpc3N1ZXMgaGVyZSBzdWNoIGFzIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQgb2YgYm91bmRzIGFjY2Vzc2VzLCBvciByZWZjb3VudCBidWdzLlxuXG5Gb2xsb3dpbmcgdGhlIGd1aWRlbGluZXMsIEtNU0FOIGlzIGZvciBjYXNlcyB3aGVyZSB3ZSBpbnRyb2R1Y2UsIG9yIGV4cG9zZSwgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIFRoZSBjb2RlIGFscmVhZHkgaGFzIGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBwYWRkaW5nLiBUaGVyZWZvcmUsIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIG1lbW9yeSBpcyBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb24gYW55IGVycm9yLCBzbyBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgcHJlcGFyZSBteSByZXNwb25zZSBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDMsIk91dHB1dFRva2VucyI6MjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjQ0LjUwMjE1MjI1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 17:13:02 +0000 UTC FinishedAt: 2026-09-08 17:15:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "a106878c-9eef-48ad-b6ea-c007cecbba83" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bpf_copy_from_user_mm", "bpf_copy_from_user_mm_str", "bpf_copy_from_user_task", "bpf_copy_from_user_task_str", "copy_remote_mm_str", "copy_remote_vm_str", "__copy_remote_mm_str" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVx1MDAzZW1tIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSByZWFjaGFibGUgQlBGIGFuZCBNTSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA3NDVmNmViNTI3OWU2Li40ZGRkNDAzZmQ5MWM3IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDU2LDkgJiM0MzsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcbiYjNDM7XHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4mIzQzO1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcdH1cbiBcdGlmIChicHJtLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHB1dF91c2VyX25zKGJwcm0tXHUwMDNldXNlcl9ucyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI1LDEwICYjNDM7MzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4tI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0jZW5kaWZcbiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTY3OSw5ICYjNDM7Njc5LDQ0IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7XG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4mIzQzO1x0aWYgKHJldCA9PSBzaXplKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuJiM0MztcdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4mIzQzO1x0XHRtZW1zZXQoZHN0ICYjNDM7IHJldCwgMCwgc2l6ZSAtIHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQgJiM0MzsgMTtcbiYjNDM7fVxuJiM0MztcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpXG4ge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xuQEAgLTY5MSwxMyAmIzQzOzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuJiM0MztcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuJiM0MztcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTtcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgJiM0MzszNjk2LDY4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICYjNDM7IDE7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4mIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwgbW0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcbiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXG4mIzQzOyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbiYjNDM7ICogaXMgemVyby5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4mIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxuJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcbiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdFx0ICAgbW0sIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiB0YXNrJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSw2ICYjNDM7Mzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuQEAgLTM2ODksMTcgJiM0MzszNzkwLDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiBcdFx0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0KihjaGFyICopZHN0ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcbiYjNDM7XHRyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHQgIG1tLCBmbGFncyk7XG4mIzQzO1x0bW1wdXQobW0pO1xuIFxuLVx0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICYjNDM7NTAyOCw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0Mzt9O1xuJiM0MztcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuJiM0MztcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBzdHJ1Y3QgaHN0YXRlO1xuIFxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzO1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCAmIzQzOzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHZvaWQgKm9sZF9idWYgPSBidWY7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03NDA3LDQzICYjNDM7NzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmNcbkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyAmIzQzOzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZClcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5Oztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmNcbkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzQzOy8qKlxuJiM0MzsgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS5cbiYjNDM7ICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbiYjNDM7ICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlclxuJiM0MzsgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbiYjNDM7ICogLUVGQVVMVC5cbiYjNDM7ICovXG4mIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkobGVuID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4mIzQzOyAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbiYjNDM7ICogLUVGQVVMVC5cbiYjNDM7ICovXG4mIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkobGVuID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbiYjNDM7XHRpZiAoIW1tKSB7XG4mIzQzO1x0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdG1tcHV0KG1tKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzQzO1xuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxuIHtcbiBcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBhcmcwW10gPSBcJiMzNDtmaXJzdFwmIzM0OztcbiYjNDM7XHRjaGFyIGFyZzFbXSA9IFwmIzM0O3NlY29uZC1hcmd1bWVudFwmIzM0OztcbiYjNDM7XHRjaGFyIGVudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO1x0Y2hhciBlbnYxW10gPSBcJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuJiM0MztcdHBpZF90IGNoaWxkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGlsZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCYjMzQ7Zm9ya1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGlsZCkge1xuJiM0MztcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4mIzQzO1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbiYjNDM7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0XHRleGVjdmUoXCYjMzQ7L2Jpbi90cnVlXCYjMzQ7LCBhcmd2LCBlbnZwKTtcbiYjNDM7XHRcdF9leGl0KGVycm5vKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwmIzM0O2NoaWxkX2V4aXRlZFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwmIzM0O2V4ZWNfZXJybm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcJiMzNDticHJtX2FyZ2NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwmIzM0O2Jwcm1fZW52Y1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcJiMzNDtkYXRhX2xlbl9tYXRjaFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcJiMzNDtpbnZhbGlkX2ZsYWdzX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcJiMzNDtjb3B5X3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcJiMzNDtzdHJfYXJnMF9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCYjMzQ7c3RyX2FyZzFfcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwmIzM0O3N0cl9lbnYwX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcJiMzNDtzdHJfZW52MV9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcJiMzNDtkYXRhX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwmIzM0O3N0cl9hcmdzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwmIzM0O3N0cl9lbnZzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCYjMzQ7Zmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcJiMzNDtcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7U09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwmIzM0O2ZpcnN0XCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcJiMzNDtzZWNvbmQtYXJndW1lbnRcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwmIzM0O09USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGJwcm1fYXJnYztcbiYjNDM7aW50IGJwcm1fZW52YztcbiYjNDM7aW50IGRhdGFfbGVuX21hdGNoO1xuJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4mIzQzO2ludCBjb3B5X3JldDtcbiYjNDM7aW50IHN0cl9hcmcwX3JldDtcbiYjNDM7aW50IHN0cl9hcmcxX3JldDtcbiYjNDM7aW50IHN0cl9lbnYwX3JldDtcbiYjNDM7aW50IHN0cl9lbnYxX3JldDtcbiYjNDM7aW50IGRhdGFfbWF0Y2g7XG4mIzQzO2ludCBzdHJfYXJnc19tYXRjaDtcbiYjNDM7aW50IHN0cl9lbnZzX21hdGNoO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGNoYXIgYXJnMFszMl0gPSB7fTtcbiYjNDM7XHRjaGFyIGFyZzFbMzJdID0ge307XG4mIzQzO1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuJiM0MztcdGNoYXIgZW52MVszMl0gPSB7fTtcbiYjNDM7XHR1NjQgb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghQ09ORklHX01NVSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuJiM0MztcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4mIzQzO1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4mIzQzO1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbiYjNDM7XG4mIzQzO1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbiYjNDM7XHRcdFx0XHRcdCBtbSwgMCk7XG4mIzQzO1x0aWYgKGNvcHlfcmV0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRhdGFfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbiYjNDM7XHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICovXG4mIzQzO1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4mIzQzO1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgJiM0Mzsgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuJiM0MztcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi9cbiYjNDM7XHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi9cbiYjNDM7XHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3RyX2FyZ3NfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4mIzQzO1x0c3RyX2VudnNfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC0xMTMsNiAmIzQzOzExMyw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4gXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4gXHRzdHJ1Y3QgaW5uZXJfbWFwICppbm5lcl9tYXA7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRjaGFyIGFyZ3NbNjRdO1xuIFx0X191MzIga2V5ID0gMDtcbiBcdF9fdTY0ICp2YWx1ZTtcbkBAIC0xMjEsNyAmIzQzOzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0YnBybV9jb3VudCYjNDM7JiM0Mzs7XG4gXG4gXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNldm1hLVx1MDAzZXZtX21tLVx1MDAzZWFyZ19zdGFydCk7XG4tXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNlbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbiYjNDM7XHRtbSA9IGJwcm0tXHUwMDNlbW07XG4mIzQzO1x0aWYgKG1tKVxuJiM0MztcdFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS1cdTAwM2Vhcmdfc3RhcnQpO1xuIFxuIFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZrZXkpO1xuIFx0aWYgKHZhbHVlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVx1MDAzZW1tIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSByZWFjaGFibGUgQlBGIGFuZCBNTSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAogc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7Ci0JaWYgKGJwcm0tJmd0O21tKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CiYjNDM7CWlmIChtbSkgewogCQlhY2N0X2FyZ19zaXplKGJwcm0sIDApOwotCQltbXB1dChicHJtLSZndDttbSk7CiYjNDM7CQlicHJtLSZndDttbSA9IE5VTEw7CiYjNDM7CQltbXB1dChtbSk7CiAJfQogCWlmIChicHJtLSZndDt1c2VyX25zKQogCQlwdXRfdXNlcl9ucyhicHJtLSZndDt1c2VyX25zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzI1LDEwICYjNDM7MzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAotZXh0ZXJuIGludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7Ci0jZW5kaWYKJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAogbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtNjc5LDkgJiM0Mzs2NzksNDQgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHsKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgX19icGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLAomIzQzOwkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwomIzQzOwlpZiAocmV0ID09IHNpemUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CiYjNDM7CS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KJiM0MzsJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJCW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIHNpemUgLSByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ICYjNDM7IDE7CiYjNDM7fQomIzQzOwogQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSwKIAkgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAogCS8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqLwpAQCAtNjkxLDEzICYjNDM7NzI2LDE2IEBAIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJaWYgKHVubGlrZWx5KCFzaXplKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwotCWlmIChyZXQgPT0gc2l6ZSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewomIzQzOwkJbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQogCi0JbWVtc2V0KGRzdCwgMCwgc2l6ZSk7Ci0JLyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqLwotCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogLUVGQVVMVDsKJiM0MzsJcmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHsKQEAgLTM2NTgsNiAmIzQzOzM2OTYsNjggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIKIAlyZXR1cm4gcmV0ICYjNDM7IDE7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvCiYjNDM7ICoKJiM0MzsgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uCiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWQKJiM0MzsgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5CiYjNDM7ICogZmFpbHMgb3IgaXMgcGFydGlhbC4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghZHN0X19zeikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLCBtbSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlCiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMCiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPUwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGgKJiM0MzsgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6CiYjNDM7ICogaXMgemVyby4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZgomIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLgomIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcywKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkJICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQkgICBtbSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzayYjMzk7cyBhZGRyZXNzIHNwYWNlCiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlCkBAIC0zNjgxLDYgJiM0MzszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKIAkJCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfkJQRl9GX1BBRF9aRVJPUykpCkBAIC0zNjg5LDE3ICYjNDM7Mzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiAJaWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gY29weV9yZW1vdGVfdm1fc3RyKHRzaywgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApOwotCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQogCQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJKihjaGFyICopZHN0ID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpOwomIzQzOwlyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQkgIG1tLCBmbGFncyk7CiYjNDM7CW1tcHV0KG1tKTsKIAotCXJldHVybiByZXQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG8KQEAgLTQ5MjQsNiAmIzQzOzUwMjgsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7CiAJc3RydWN0IGlub2RlICpkX2lub2RlOwogfTsKIAomIzQzO0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7fTsKJiM0MzsKIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiB9OwpAQCAtNjA1OCw2ICYjNDM7NjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiB7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7CiYjNDM7CUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7CiAKIAlyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoJmFtcDtlbnYtJmd0O2xvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAzOGIxMTY1MjEyYzk0Li41NTdiMjkzODEzNTU3IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI1LDYgJiM0MzsyNSw5IEBACiBzdHJ1Y3QgZm9saW9fYmF0Y2g7CiBzdHJ1Y3QgaHN0YXRlOwogCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7CiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKIAlpbnQgZXJyID0gMDsKQEAgLTc0MDcsNDMgJiM0Mzs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gZXJyOwogCXJldHVybiBidWYgLSBvbGRfYnVmOwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jCkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyX2VuZDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NAotLS0gYS9tbS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jCkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KJiM0MzsKIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQogewogCWNoYXIgKmFkZHIxLCAqYWRkcjI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSw3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzOwljaGFyIGFyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7CWNoYXIgZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7CWNoYXIgZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CXN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJc2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLSZndDtwYWdlW10gcmF0aGVyIHRoYW4KJiM0MzsJICogYmVpbmcgbWFwcGVkIGluIGJwcm0tJmd0O21tLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtrY29uZmlnLSZndDtDT05GSUdfTU1VKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hpbGQpIHsKJiM0MzsJCWNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9OwomIzQzOwkJY2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJCWV4ZWN2ZSgmIzM0Oy9iaW4vdHJ1ZSYjMzQ7LCBhcmd2LCBlbnZwKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCksIGNoaWxkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCAmIzM0O2NoaWxkX2V4aXRlZCYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgJiMzNDtleGVjX2Vycm5vJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2FyZ2MsIDIsICYjMzQ7YnBybV9hcmdjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2VudmMsIDIsICYjMzQ7YnBybV9lbnZjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX2xlbl9tYXRjaCwgMSwgJiMzNDtkYXRhX2xlbl9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsICYjMzQ7aW52YWxpZF9mbGFnc19yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NvcHlfcmV0LCAwLCAmIzM0O2NvcHlfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgJiMzNDtzdHJfYXJnMF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCAmIzM0O3N0cl9hcmcxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksICYjMzQ7c3RyX2VudjBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgJiMzNDtzdHJfZW52MV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbWF0Y2gsIDEsICYjMzQ7ZGF0YV9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZ3NfbWF0Y2gsIDEsICYjMzQ7c3RyX2FyZ3NfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnZzX21hdGNoLCAxLCAmIzM0O3N0cl9lbnZzX21hdGNoJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSwxMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9ICYjMzQ7Zmlyc3RcMHNlY29uZC1hcmd1bWVudFwwJiMzNDsKJiM0MzsJCQkJICAgICYjMzQ7U09NRV9FTlY9YVwwT1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBicHJtX2FyZ2M7CiYjNDM7aW50IGJwcm1fZW52YzsKJiM0MztpbnQgZGF0YV9sZW5fbWF0Y2g7CiYjNDM7aW50IGludmFsaWRfZmxhZ3NfcmV0OwomIzQzO2ludCBjb3B5X3JldDsKJiM0MztpbnQgc3RyX2FyZzBfcmV0OwomIzQzO2ludCBzdHJfYXJnMV9yZXQ7CiYjNDM7aW50IHN0cl9lbnYwX3JldDsKJiM0MztpbnQgc3RyX2VudjFfcmV0OwomIzQzO2ludCBkYXRhX21hdGNoOwomIzQzO2ludCBzdHJfYXJnc19tYXRjaDsKJiM0MztpbnQgc3RyX2VudnNfbWF0Y2g7CiYjNDM7CiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJY2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWNoYXIgYXJnMFszMl0gPSB7fTsKJiM0MzsJY2hhciBhcmcxWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjBbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MVszMl0gPSB7fTsKJiM0MzsJdTY0IG9mZnNldCA9IDA7CiYjNDM7CXU2NCBkYXRhX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFDT05GSUdfTU1VKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGJwcm0tJmd0O21tOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwcm1fYXJnYyA9IGJwcm0tJmd0O2FyZ2M7CiYjNDM7CWJwcm1fZW52YyA9IGJwcm0tJmd0O2VudmM7CiYjNDM7CiYjNDM7CS8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tJmd0O3AgKi8KJiM0MzsJZGF0YV9sZW4gPSBicHJtLSZndDtleGVjIC0gYnBybS0mZ3Q7cDsKJiM0MzsJZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7CiYjNDM7CiYjNDM7CWludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsCiYjNDM7CQkJCQkJICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwgbW0sIH4wVUxMKTsKJiM0MzsKJiM0MzsJY29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsCiYjNDM7CQkJCQkgbW0sIDApOwomIzQzOwlpZiAoY29weV9yZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGF0YV9tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpOwomIzQzOwomIzQzOwkvKiBhcmcwIGlzIGF0IGJwcm0tJmd0O3AgKi8KJiM0MzsJc3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzBfcmV0OwomIzQzOwomIzQzOwkvKiBhcmcxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICovCiYjNDM7CXN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcxX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MCBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi8KJiM0MzsJc3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2VudjBfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi8KJiM0MzsJc3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN0cl9hcmdzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTsKJiM0MzsJc3RyX2VudnNfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YV9tYXRjaCAmYW1wOyZhbXA7IHN0cl9hcmdzX21hdGNoICZhbXA7JmFtcDsgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC0xMTMsNiAmIzQzOzExMyw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKIAlzdHJ1Y3QgaW5uZXJfbWFwICppbm5lcl9tYXA7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWNoYXIgYXJnc1s2NF07CiAJX191MzIga2V5ID0gMDsKIAlfX3U2NCAqdmFsdWU7CkBAIC0xMjEsNyAmIzQzOzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJYnBybV9jb3VudCYjNDM7JiM0Mzs7CiAKIAlicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tJmd0O3ZtYS0mZ3Q7dm1fbW0tJmd0O2FyZ19zdGFydCk7Ci0JYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLSZndDttbS0mZ3Q7YXJnX3N0YXJ0KTsKJiM0MzsJbW0gPSBicHJtLSZndDttbTsKJiM0MzsJaWYgKG1tKQomIzQzOwkJYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS0mZ3Q7YXJnX3N0YXJ0KTsKIAogCXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FycmF5LCAmYW1wO2tleSk7CiAJaWYgKHZhbHVlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHNvbWUgY3JpdGljYWwgYXJlYXMgb2YgdGhlIGtlcm5lbCDigJMgQlBGLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoZSBleGVjdXRpb24gc3Vic3lzdGVtIChWRlMpLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYga2Z1bmNzLCBtZW1vcnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmcmVlX2Jwcm1gIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2Agd2l0aCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24sIHRoZSBhZGRpdGlvbiBvZiBuZXcgYW5kIG1vZGlmaWVkIEJQRiBrZnVuY3MgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBhbmQgdXBkYXRlcyB0byBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYC4gVGhlc2UgQlBGIGludGVyYWN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZpbmcgdXNlci1zcGFjZSBtZW1vcnkgY29waWVzLCBhcmUgb2Z0ZW4gZ29sZG1pbmVzIGZvciBmdXp6aW5nIGR1ZSB0byB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmZvcm1hdGlvbiBsZWFrcyBpZiB0aGUga2VybmVsIHNpZGUgZG9lc24mIzM5O3QgY29ycmVjdGx5IGhhbmRsZSBpbnZhbGlkIHBvaW50ZXJzIG9yIGJvdW5kYXJ5IGNoZWNrcy4gSSBhbHNvIHNlZSB0aGF0IHRoZSB2ZXJpZmllciBpcyB1cGRhdGVkLCB3aGljaCBjb3VsZCBhbHNvIGJlIGludGVyZXN0aW5nLgoKVGhlIGRpZmZzIHJlbGF0ZWQgdG8gdGhlIGBtbWAgc3Vic3lzdGVtLCB3aXRoIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCwgYW5kIHRoZSBpbnRlcm5hbCByZW5hbWluZywgYXJlIGFub3RoZXIga2V5IGFyZWEuIEFueSB0aW1lIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY29weWluZyBzdHJpbmdzLCBJIGdldCBpbnRlcmVzdGVkLiBUaGUgaW50ZXJhY3Rpb24gb2YgYWxsIHRoZXNlIGNvbXBvbmVudHMgbWFrZXMgdGhpcyBwYXRjaCBldmVuIG1vcmUgZW50aWNpbmcuCgpHaXZlbiB0aGF0IFN5emthbGxlciBhbHJlYWR5IHJlZ3VsYXJseSBmdXp6ZXMgQlBGLCB0aGUgdmVyaWZpZXIsIGFuZCB0aGUgYGV4ZWN2ZWAgc3lzdGVtIGNhbGwsIHRoaXMgcGF0Y2ggc2xvdHMgcmlnaHQgaW50byBleGlzdGluZyBmdXp6aW5nIHN0cmF0ZWdpZXMuIERlZmluaXRlbHkgcmVhY2hhYmxlLiAqKldvcnRoRnV6emluZyA9IFRydWUqKi4KCk5vdywgaXQmIzM5O3MgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXh0cmFjdCB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBoaXR0aW5nIHRoZSByaWdodCBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gdXNlIGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIGNhcmVmdWxseSBnbyB0aHJvdWdoIHRoZSBLY29uZmlncyBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGZvdW5kYXRpb25hbCBwaWVjZXMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTMwLVxua2VybmVsL2JwZi9LY29uZmlnOjMxOmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9NjI9Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6NjQ6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNjUtXHRoZWxwXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTc3PWNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTc5LVx0ZGVmYXVsdCB5XG5rZXJuZWwvYnBmL0tjb25maWc6ODA6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctODEtXHRoZWxwXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMTAwLVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfS0VZUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga2V5cy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM2PWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM4LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDY9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDktIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYzLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY1LVxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcwLWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo3MTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcyLWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0Njg9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxua2VybmVsL2JwZi9jb3JlLmM6MjQ3MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwMzY9dm9pZCBfX2JwZl9mcmVlX3VzZWRfYnRmcyhzdHJ1Y3QgYnRmX21vZF9wYWlyICp1c2VkX2J0ZnMsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzAzOS1cdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz1zdGF0aWMgdm9pZCBicGZfcHJvZ19mcmVlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVx0YXV4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfcHJvZ19hdXgsIHdvcmspO1xua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVx0YnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihhdXgtXHUwMDNla2Z1bmNfYnRmX3RhYik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM4OT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzkwLXtcbmtlcm5lbC9icGYvY29yZS5jOjMzOTE6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzM5Mi1cdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0Mjk9X193ZWFrIHU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQzMy1cbmtlcm5lbC9icGYvY29yZS5jOjM0MzQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQzNS1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0NjA9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTCh4ZHBfYnVsa190eCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDYxLVxua2VybmVsL2JwZi9jb3JlLmM6MzQ2MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDYzLVxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXHQjIFRoZSBkZXBlbmRlbmN5IG9uICFDT01QSUxFX1RFU1QgcHJldmVudHMgaXQgZnJvbSBiZWluZyBlbmFibGVkXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUxND1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIxLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjMtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwNi1cdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBLZnVuYyBhbmQgSGVscGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBhbG9uZyB3aXRoIHRoZSBicm9hZGVyIGtmdW5jcyB3aXRoaW4gQlBGLCBhcmUgY29uZmlndXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCDigJMgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGNlbnRyYWwgaHViLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEga2V5IHBsYXllciBoZXJlLCBhcyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgpOZXh0LCBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBhIGhhcmQgZGVwZW5kZW5jeSBmb3IgdGhlc2Uga2Z1bmNzIG9yIEJURiBJRCByZWxhdGVkIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdXJ0aGVyLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IHdpdGggYSBnb29kIG9sJiMzOTsgYGdyZXBgIHNlc3Npb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYEJURl9JRF9GTEFHU2AsIG9yIGV2ZW4gc3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgYGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJgIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBrZnVuY3MgYW5kIEJURi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY29weV9mcm9tX3VzZXJfc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNjQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX2l0ZXJfYml0c19kZXN0cm95KHN0cnVjdCBicGZfaXRlcl9iaXRzICppdClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNjU4LS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY1OTogKiBicGZfY29weV9mcm9tX3VzZXJfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdW5zYWZlIHVzZXIgYWRkcmVzc1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY2MC0gKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY3Mi0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjM2NzM6X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDMwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDQ1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQ2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0Ny1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCVEYva2Z1bmMgUmVnaXN0cmF0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEJURiBhbmQga2Z1bmNzIGFyZSBhY3R1YWxseSByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIHdoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEkgc2hvdWxkIGFsc28gdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiB0aGUga2VybmVsIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlc2UgZmVhdHVyZXMsIGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIG9wdGlvbnMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBhcmUgcGl2b3RhbCBmb3IgYWR2YW5jZWQgZUJQRiBjYXBhYmlsaXRpZXMsIGJ1dCB0aGUgbnVhbmNlcyBvZiB0aGVpciBzZXQtdXAgYXJlIHNvbWV0aW1lcyBlYXNpbHkgZm9yZ290dGVuLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcsIGFuZCBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gb2YgbXkgZmFjdHMuIFRpbWUgdG8gdHJhY2UgdGhlIHJlZ2lzdHJhdGlvbiBjYWxscyBhbmQgZXhhbWluZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGVudHJpZXMgYW5kIGFzc29jaWF0ZWQgY29kZSBwYXRocy4gSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXTigJlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCByZXF1aXJlcyBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncywgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVEZfS0ZVTkNTX1NUQVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MTExOD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEyMDpCVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTIxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIgfCBLRl9TUElOTE9DS19TQUZFKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jPTQ3NT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc2LVxua2VybmVsL2JwZi9jcHVtYXNrLmM6NDc3OkJURl9LRlVOQ1NfU1RBUlQoY3B1bWFza19rZnVuY19idGZfaWRzKVxua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc4LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3B1bWFza19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM1Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0zNTMtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM1NDpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2luaXRfa2Z1bmNfYnRmX2lkcylcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzU1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgY3J5cHRfaW5pdF9rZnVuY19zZXQgPSB7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zNjQtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM2NTpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM2Ni1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19kZWNyeXB0LCBLRl9SQ1UpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg4OD12b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTA4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwOTpCVEZfS0ZVTkNTX1NUQVJUKGdlbmVyaWNfYnRmX2lkcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTAtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4NT1CVEZfSUQoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlX2R0b3IpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk4Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5ODg6QlRGX0tGVU5DU19TVEFSVChjb21tb25fYnRmX2lkcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5ODktQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jYXN0X3RvX2tlcm5fY3R4LCBLRl9GQVNUQ0FMTClcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjE5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIwLVxua2VybmVsL2JwZi9tYXBfaXRlci5jOjIyMTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tYXBfaXRlcl9rZnVuY19pZHMpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWFwX3N1bV9lbGVtX2NvdW50KVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc0NT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ2LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzQ3OkJURl9LRlVOQ1NfU1RBUlQocnFzcGlubG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NDgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgdGhyb3VnaCBteSBtaW5kOgoKKipDaGVja2luZyBgY29tbW9uX2J0Zl9pZHNgIFJlZ2lzdHJhdGlvbiBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgKioKCk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgY29tbW9uX2J0Zl9pZHNgIHJlZ2lzdHJhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGVyZSwgb3IgYXQgbGVhc3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyDigJMgbGlrZWx5IGhvdyB0aGVzZSBjb21tb24gQlRGIElEcyBhcmUgZGVmaW5lZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgaGVscGVycy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgdGFibGUgb3IgbWFjcm8gaW52b2x2ZWQuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHByZXBhcmVkIHRvIHRyYWNlIHRocm91Z2ggYW55IHJlbGV2YW50IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgaG93IHRoZXNlIElEcyBhcmUgbGlua2VkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgZ2V0IGV4cG9zZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgZXhhY3QgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSwgYW5kIGFueSByZWxldmFudCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYnV0IGFzIHdpdGggYWxsIHRoaW5ncyBCUEYsIGJlc3QgdG8gYXNzdW1lIG5vdGhpbmcgdW50aWwgSSBzZWUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwMjU6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3ByZWVtcHRfZGlzYWJsZSlcbjUwMjY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3ByZWVtcHRfZW5hYmxlKVxuNTAyNzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG41MDI4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG41MDI5Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuNTAzMDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG41MDMxOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxuNTAzMjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXG41MDMzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxuNTAzNDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXG41MDM1Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcbjUwMzY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjUwMzc6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kgfCBLRl9TTEVFUEFCTEUpXG41MDM4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sb2NhbF9pcnFfc2F2ZSlcbjUwMzk6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxuNTA0MDpcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xuNTA0MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cilcbjUwNDI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX2R5bnB0cilcbjUwNDM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHJfZHlucHRyKVxuNTA0NDpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX2R5bnB0cilcbjUwNDU6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0NjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0NzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19keW5wdHIsIEtGX1NMRUVQQUJMRSlcbjUwNDg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxuNTA0OTpcdCNlbmRpZlxuNTA1MDpcdCNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbjUwNTE6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG41MDUyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjUwNTM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSB8IEtGX1NMRUVQQUJMRSlcbjUwNTQ6XHQjZW5kaWZcbjUwNTU6XHRCVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbjUwNTY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNtcCk7XG41MDU3Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcbjUwNTg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlY21wKTtcbjUwNTk6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNocik7XG41MDYwOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHJudWwpO1xuNTA2MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNocik7XG41MDYyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJyY2hyKTtcbjUwNjM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmxlbik7XG41MDY0Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgYEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMYCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYHN0cnVjdCBsaW51eF9iaW5wcm1gIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBJIGtub3cgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGJ1dCBsZXQmIzM5O3MgYmUgcHJlY2lzZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDYwMDAgYW5kIDYwNzAuIFRoYXQgc2hvdWxkIGJlIHRoZSBjb3JlIGFyZWEgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbG9naWMgYWRkaW5nIHRoYXQgdHJ1c3RlZCBvciBudWxsIGNoZWNrIGZvciB0aGUgc3RydWN0dXJlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIHRoYXQgc2VjdGlvbi4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDAwOlx0XHRzdHJ1Y3Qgc2NoZWRfZXh0X29wcyAqb3BzO1xuNjAwMTpcdH07XG42MDAyOlx0XG42MDAzOlx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkge1xuNjAwNDpcdFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xuNjAwNTpcdH07XG42MDA2Olx0XG42MDA3Olx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuNjAwODpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG42MDA5Olx0fTtcbjYwMTA6XHRcbjYwMTE6XHRCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG42MDEyOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG42MDEzOlx0fTtcbjYwMTQ6XHRcbjYwMTU6XHRCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpIHtcbjYwMTY6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKnZtX21tO1xuNjAxNzpcdFx0c3RydWN0IGZpbGUgKnZtX2ZpbGU7XG42MDE4Olx0fTtcbjYwMTk6XHRcbjYwMjA6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3JjdShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNjAyMTpcdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG42MDIyOlx0XHRcdFx0Y29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwMjM6XHR7XG42MDI0Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCB0YXNrX3N0cnVjdCkpO1xuNjAyNTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY2dyb3VwKSk7XG42MDI2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCBjc3Nfc2V0KSk7XG42MDI3Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlKSk7XG42MDI4Olx0XG42MDI5Olx0XHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsIFwmIzM0O19fc2FmZV9yY3VcJiMzNDspO1xuNjAzMDpcdH1cbjYwMzE6XHRcbjYwMzI6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3JjdV9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG42MDMzOlx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuNjAzNDpcdFx0XHRcdFx0Y29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwMzU6XHR7XG42MDM2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkpO1xuNjAzNzpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBza19idWZmKSk7XG42MDM4Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IHJlcXVlc3Rfc29jaykpO1xuNjAzOTpcdFxuNjA0MDpcdFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLCBcJiMzNDtfX3NhZmVfcmN1X29yX251bGxcJiMzNDspO1xuNjA0MTpcdH1cbjYwNDI6XHRcbjYwNDM6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjYwNDQ6XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbjYwNDU6XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwNDY6XHR7XG42MDQ3Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSkpO1xuNjA0ODpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IGJwZl9pdGVyX190YXNrKSk7XG42MDQ5Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG42MDUwOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgZmlsZSkpO1xuNjA1MTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9pbml0X3Rhc2tfYXJncykpO1xuNjA1MjpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzKSk7XG42MDUzOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncykpO1xuNjA1NDpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9zdWJfZGV0YWNoX2FyZ3MpKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXCYjMzQ7X19zYWZlX3RydXN0ZWRcJiMzNDspO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuNjA2MDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG42MDYxOlx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcbjYwNjI6XHR7XG42MDYzOlx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbjYwNjQ6XHRcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuNjA2NTpcdFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG42MDY2Olx0XHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuNjA2NzpcdFxuNjA2ODpcdFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuNjA2OTpcdFx0XHRcdFx0XHQgIFwmIzM0O19fc2FmZV90cnVzdGVkX29yX251bGxcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBMU00gSG9va3MgYW5kIE1lbW9yeSBTYWZldHkgaW4gYGxpbnV4X2JpbnBybWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxpbnV4X2JpbnBybWAgc3RydWN0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiB2ZXJpZmllci4gSSBzZWUgdGhhdCB0aGUgYG1tYCBmaWVsZCBpcyBub3cgbWFya2VkIGFzIHRydXN0ZWQgb3IgbnVsbCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gIFRoZW4gSSBub3RpY2VkIHRoZSBjaGFuZ2UgaW4gYGZzL2V4ZWMuY2Agd2l0aCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24uICBJdCBub3cgc2V0cyBgYnBybS0mZ3Q7bW0gPSBOVUxMYCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgd2l0aCBgbW1wdXQobW0pYC4gQWhhISAgVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGNoYW5nZSB3YXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBgYnBybS0mZ3Q7bW1gIGlzIG5vdyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gQlBGIExTTSBob29rcyBvbiB0aGUgYGJwcm1gIHN0cnVjdC4KCkVzc2VudGlhbGx5LCBieSBzZXR0aW5nIGBicHJtLSZndDttbSA9IE5VTExgIGJlZm9yZSBmcmVlaW5nIHRoZSBzdHJ1Y3R1cmUsIHdlJiMzOTtyZSBtaXRpZ2F0aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcywgb3IgZGFuZ2xpbmcgcG9pbnRlciBhY2Nlc3NlcyBpZiBhIEJQRiBob29rIHRyaWVzIHRvIGFjY2VzcyBgYnBybS0mZ3Q7bW1gICphZnRlciogaXQmIzM5O3MgYmVlbiBmcmVlZCBvciB3aGlsZSBpdCYjMzk7cyBiZWluZyB0b3JuIGRvd24uICBTbWFydCEgVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgZXNzZW50aWFsIHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBhY2Nlc3NlZCB2aWEgQlBGLgoKTm93LCBJIHdhbnQgdG8gZGl2ZSBhIGJpdCBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGhvb2tzIGNvdWxkIGJlIGRvaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBCUEYgaGVscGVycywgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC4KCkFsc28sIEkmIzM5O2xsIHJldmlldyBgbW0vdXRpbC5jYCBhbmQgYG1tL21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGludGVyZXN0aW5nIGNvZGUgbGlrZTogYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYGZzL2V4ZWMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCYjMzk7cyBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuICBCZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgYGxpbnV4X2JpbnBybWAgc3RydWN0IGFuZCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBleHRlcm5hbCBCUEYgaG9vaywgb3Igbm90LiBUaGUgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoxLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYAoyLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAKMy4gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYAo0LiBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYAo1LiBgY29weV9yZW1vdGVfbW1fc3RyYAo2LiBgY29weV9yZW1vdGVfdm1fc3RyYAo3LiBgX19jb3B5X3JlbW90ZV9tbV9zdHJgCjguIGBmcmVlX2Jwcm1gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyZWVfYnBybSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9MTM5ND1FWFBPUlRfU1lNQk9MKGZpbmFsaXplX2V4ZWMpO1xuLS1cbmZzL2V4ZWMuYy0xMzk4LSAqIHNldHVwX25ld19leGVjKCkgY29tbWl0cyB0aGUgbmV3IGNyZWRzIGFuZCBkcm9wcyB0aGUgbG9jay5cbmZzL2V4ZWMuYzoxMzk5OiAqIE9yLCBpZiBleGVjIGZhaWxzIGJlZm9yZSwgZnJlZV9icHJtKCkgc2hvdWxkIHJlbGVhc2UgLVx1MDAzZWNyZWRcbmZzL2V4ZWMuYy0xNDAwLSAqIGFuZCB1bmxvY2suXG4tLVxuZnMvZXhlYy5jPTE0NTI9dm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE0NTYtXG5mcy9leGVjLmM6MTQ1NzpzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy0xNDU4LXtcbi0tXG5mcy9leGVjLmM9MTQ5Mz1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbnBybSAqYWxsb2NfYnBybShpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIGludCBmbGFncylcbi0tXG5mcy9leGVjLmMtMTU1OS1vdXRfZnJlZTpcbmZzL2V4ZWMuYzoxNTYwOlx0ZnJlZV9icHJtKGJwcm0pO1xuZnMvZXhlYy5jLTE1NjEtXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xuLS1cbmZzL2V4ZWMuYy0xNTYzLVxuZnMvZXhlYy5jOjE1NjQ6REVGSU5FX0NMQVNTKGJwcm0sIHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgaWYgKCFJU19FUlIoX1QpKSBmcmVlX2Jwcm0oX1QpLFxuZnMvZXhlYy5jLTE1NjUtXHRhbGxvY19icHJtKGZkLCBuYW1lLCBmbGFncyksIGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCBpbnQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRi1SZWxhdGVkIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmcmVlX2Jwcm1gLiBSaWdodCwgaXQmIzM5O3MgYSBgc3RhdGljIHZvaWRgIGZ1bmN0aW9uIOKAkyBgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pYC4gSSByZWNhbGwgYGFsbG9jX2Jwcm1gIGNhbGxzIGl0LCBhbmQgdGhlIG1hY3JvIGBERUZJTkVfQ0xBU1MoYnBybSwgLi4uKWAgYWxzbyB1dGlsaXplcyBpdC4gSW1wb3J0YW50IHRvIHJlbWVtYmVyIHRob3NlIGNvbm5lY3Rpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEJQRiBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlIG5lZWQgYEJQRl9TWVNDQUxMYCBmb3IgdGhlIEJQRiBoZWxwZXJzIGFuZCBrZnVuY3MsIHdoaWNoIGFyZSBmb3VuZCBpbiBgaGVscGVycy5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL3V0aWwuY2AsIGFuZCB0aGUgdmVyaWZpZXIgY29kZS4gVGhlbiwgdGhlcmUmIzM5O3MgYEJQRl9MU01gIOKAkyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIEJQRiBMU00gcHJvZ3JhbXMgdGhhdCByZXF1aXJlIGFjY2VzcyB0byBgYnBybS0mZ3Q7bW1gLgoKTm93LCBvbnRvIHZlcmlmeWluZyBzb21ldGhpbmcgYWJvdXQgYEJURl9JRF9GTEFHU2AuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGF0IHdvcmtzIGFuZCwgY3J1Y2lhbGx5LCBpZiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyAqdHJ1bHkqIGEgaGFyZCByZXF1aXJlbWVudCBmb3Iga2Z1bmNzLiBJIGtub3cgdGhhdCBrZnVuYyByZXNvbHV0aW9uIHdpdGhpbiBrZXJuZWwgQlBGIHJlbGllcyBvbiBCVEYgbWV0YWRhdGEgZ2VuZXJhdGVkIGZyb20gYENPTkZJR19ERUJVR19JTkZPX0JURmAsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuIEkmIzM5O2xsIHNlYXJjaCBga2VybmVsL2JwZi9gIGZvciB0aGUgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc3ltYm9sIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9idGYuYz02NDE2PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjQyMS1cbmtlcm5lbC9icGYvYnRmLmM6NjQyMjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKVxua2VybmVsL2JwZi9idGYuYy02NDIzLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY1MDI9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYy02NTA4LVxua2VybmVsL2JwZi9idGYuYzo2NTA5OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy02NTEwLVxua2VybmVsL2JwZi9idGYuYz02NTExPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYwNi1cbmtlcm5lbC9icGYvYnRmLmM6NjYwNzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtNjYwOC1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MjQ9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04NTI3LVxua2VybmVsL2JwZi9idGYuYzo4NTI4OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy04NTI5LXN0cnVjdCBidGZfbW9kdWxlIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NjY9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcbmtlcm5lbC9icGYvYnRmLmM6ODY2NzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtODY2OC1cbmtlcm5lbC9icGYvYnRmLmM9ODY2OT1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODY3MS1cdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NzMtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2OTk9c3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODcwMC17XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MDE6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MDItXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTItXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTM6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTQtXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODcyOT1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzAte1xua2VybmVsL2JwZi9idGYuYzo4NzMxOlx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NzMyLVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzQtXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MzU6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODczNi1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODc3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODc4LXtcbmtlcm5lbC9icGYvYnRmLmM6ODg3OTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg4MC1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODg5My1cbmtlcm5lbC9icGYvYnRmLmM6ODg5NDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg5NS1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk1NDI9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTU2OS1cbmtlcm5lbC9icGYvYnRmLmM6OTU3MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTU3MS1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjg0NT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODYxLVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjg2MjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg2My1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjQyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1Ni1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjU3Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1OC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkwMTA9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI2LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwMjc6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTE4PXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5MjItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5MjM6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5MjQtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjAyCgkJCQkJCQlvdXRwdXQ6IDI1OQoJCQkJCQkJdGhvdWdodHM6IDU3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgZXNzZW50aWFsIGhlcmUsIHNwZWNpZmljYWxseSBiZWNhdXNlIGtmdW5jcyByZWx5IG9uIGl0OyBubyBCVEYsIG5vIGtmdW5jIGNhbGxzLiBBbmQgb2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhlc2UgY2hhbmdlcyBpbiBwYXJ0aWN1bGFyOiBuZXcga2Z1bmNzIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgaW4gdGhlIHNhbWUgZmlsZS4gQWxzbywgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIHdlcmUgbW9kaWZpZWQgaW4gYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgcmVzcGVjdGl2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHkgbWFraW5nIHRob3NlIGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoYXQgdHJpZ2dlcnMgbXkgZnV6emluZyBpbnN0aW5jdHMuIFRoZSBCUEYgdmVyaWZpZXIgaXMgZ29pbmcgdG8gdHJlYXQgYGJwcm0tJmd0O21tYCBmaWVsZCBhcyB0cnVzdGVkLCB3aGljaCBsb29rcyBsaWtlIGEgcG9pbnRlciBkZXJlZmVyZW5jZS4gU2V0dGluZyBpdCB0byBOVUxMIGluIGBmcmVlX2Jwcm0oKWAgaXMgYSBnb29kIG1pdGlnYXRpb24sIGJ1dCBzdGlsbCwgdGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IHRoZXNlIGNoYW5nZXMgaGF2ZSBvbiB0aGUgcmVhY2hhYmxlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIEFQSXMuCgpTbywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBhbmQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC4gVGhleSYjMzk7cmUgYWxsIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2gsIGFuZCBJIHRoaW5rIHRoZXkgd2lsbCBhbGwgYmUgcmVhY2hhYmxlLiBUaGlzIHNlZW1zIGxpa2UgYSBjb21wbGV0ZSwgZm9jdXNlZCBhbmFseXNpcy4gVGltZSB0byByZWNvcmQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbSYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW1fc3RyJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl90YXNrJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV9tbV9zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfdm1fc3RyJiMzNDssCiAgICAmIzM0O19fY29weV9yZW1vdGVfbW1fc3RyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzbGVlcGFibGUgQlBGIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX21tLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKSwgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgYW5kIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciksIGFkZHMgY29weV9yZW1vdGVfbW1fc3RyIC8gX19jb3B5X3JlbW90ZV9tbV9zdHIgZm9yIHJlYWRpbmcgc3RyaW5ncyBmcm9tIHJlbW90ZSBtbV9zdHJ1Y3QgaW5zdGFuY2VzLCBhbmQgYWxsb3dzIHRydXN0ZWQgYWNjZXNzIHRvIGJwcm0tXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NGM2OWE3NTQ2MTAwMjdlNjU0ODQ0MTdjYTRhZTU0ZGNkNGY3NDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjE0OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NTYsOSAmIzQzOzE0NTYsMTIgQEAgdm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAKIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewotCWlmIChicHJtLSZndDttbSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tJmd0O21tOwomIzQzOwomIzQzOwlpZiAobW0pIHsKIAkJYWNjdF9hcmdfc2l6ZShicHJtLCAwKTsKLQkJbW1wdXQoYnBybS0mZ3Q7bW0pOwomIzQzOwkJYnBybS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwkJbW1wdXQobW0pOwogCX0KIAlpZiAoYnBybS0mZ3Q7dXNlcl9ucykKIAkJcHV0X3VzZXJfbnMoYnBybS0mZ3Q7dXNlcl9ucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uNmYxMGNlMzE1ZWFhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMzMyNSwxMCAmIzQzOzMzMjUsMTAgQEAgZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAogZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwotI2VuZGlmCiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTY3OSw5ICYjNDM7Njc5LDQ0IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7CiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKJiM0MztzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsCiYjNDM7CQkJCSAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0ciwKJiM0MzsJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKJiM0MzsJaWYgKHJldCA9PSBzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovCiYjNDM7CXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0ciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBzaXplKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBzaXplIC0gcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzO30KJiM0MzsKIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKIAkvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi8KQEAgLTY5MSwxMyAmIzQzOzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLAogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKLQlpZiAocmV0ID09IHNpemUpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCW1lbXNldChkc3QsIDAsIHNpemUpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KIAotCW1lbXNldChkc3QsIDAsIHNpemUpOwotCS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KLQlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7CXJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7CkBAIC0zNjU4LDYgJiM0MzszNjk2LDY4IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyCiAJcmV0dXJuIHJldCAmIzQzOyAxOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlCiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tCiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvbgomIzQzOyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkCiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weQomIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRzdF9fc3opKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwgbW0pOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTAomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1MKJiM0MzsgKgomIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoCiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zegomIzQzOyAqIGlzIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2YKJiM0MzsgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS4KJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsCiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICAgbW0sIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZQogICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZQpAQCAtMzY4MSw2ICYjNDM7Mzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKIAkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiAJCQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKQogewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQpAQCAtMzY4OSwxNyAmIzQzOzM3OTAsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKLQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKIAkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZWxzZQomIzQzOwkJCSooY2hhciAqKWRzdCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCi0JCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKJiM0MzsJcmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBtbSwgZmxhZ3MpOwomIzQzOwltbXB1dChtbSk7CiAKLQlyZXR1cm4gcmV0ICYjNDM7IDE7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvCkBAIC00OTI0LDYgJiM0Mzs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDllNzk3NTBlMjQ4MDguLjc5MWIzZDI1Y2FhNTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTYwMDQsNiAmIzQzOzYwMDQsMTAgQEAgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkgewogCXN0cnVjdCBpbm9kZSAqZF9pbm9kZTsKIH07CiAKJiM0MztCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzO307CiYjNDM7CiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7CiAJc3RydWN0IHNvY2sgKnNrOwogfTsKQEAgLTYwNTgsNiAmIzQzOzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogewogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpOwomIzQzOwlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpOwogCiAJcmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKCZhbXA7ZW52LSZndDtsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNSw2ICYjNDM7MjUsOSBAQAogc3RydWN0IGZvbGlvX2JhdGNoOwogc3RydWN0IGhzdGF0ZTsKIAomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwomIzQzOwogc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNzMzMSw4ICYjNDM7NzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTsKICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS4KICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC4KICAqLwotc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQogewogCXZvaWQgKm9sZF9idWYgPSBidWY7CiAJaW50IGVyciA9IDA7CkBAIC03NDA3LDQzICYjNDM7NzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIH0KLQotLyoqCi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCi0gKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKLSAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQotICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCi0gKgotICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pOwotICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZAotICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULgotICovCi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JaW50IHJldDsKLQotCWlmICh1bmxpa2VseShsZW4gPT0gMCkpCi0JCXJldHVybiAwOwotCi0JbW0gPSBnZXRfdGFza19tbSh0c2spOwotCWlmICghbW0pIHsKLQkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7Ci0KLQltbXB1dChtbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTc0Niw4ICYjNDM7MTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTsKICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS4KICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC4KICAqLwotc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbikKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcl9lbmQ7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0xNzgxLDQzICYjNDM7MTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAlyZXR1cm4gcmV0OwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKQotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7Ci0KLQltbXB1dChtbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuYwpAQCAtMTA2MSw2ICYjNDM7MTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MzsvKioKJiM0MzsgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCiYjNDM7ICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgomIzQzOyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLAomIzQzOyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZwomIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuCiYjNDM7ICogLUVGQVVMVC4KJiM0MzsgKi8KJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCiYjNDM7ICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLAomIzQzOyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZwomIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuCiYjNDM7ICogLUVGQVVMVC4KJiM0MzsgKi8KJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShsZW4gPT0gMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbW0gPSBnZXRfdGFza19tbSh0c2spOwomIzQzOwlpZiAoIW1tKSB7CiYjNDM7CQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7CiYjNDM7CW1tcHV0KG1tKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiYjNDM7CiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMikKIHsKIAljaGFyICphZGRyMSwgKmFkZHIyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmIyMzI1YjE5MzU3NjEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y29weV9mcm9tX3VzZXJfYnBybS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGFyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MzsJY2hhciBhcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzOwljaGFyIGVudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzOwljaGFyIGVudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwlzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDsKJiM0MzsJcGlkX3QgY2hpbGQ7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS0mZ3Q7cGFnZVtdIHJhdGhlciB0aGFuCiYjNDM7CSAqIGJlaW5nIG1hcHBlZCBpbiBicHJtLSZndDttbS4KJiM0MzsJICovCiYjNDM7CWlmICghc2tlbC0mZ3Q7a2NvbmZpZy0mZ3Q7Q09ORklHX01NVSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwljaGlsZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2hpbGQsIDAsICYjMzQ7Zm9yayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIWNoaWxkKSB7CiYjNDM7CQljaGFyICpjb25zdCBhcmd2W10gPSB7IGFyZzAsIGFyZzEsIE5VTEwgfTsKJiM0MzsJCWNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9OwomIzQzOwomIzQzOwkJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CQlleGVjdmUoJiMzNDsvYmluL3RydWUmIzM0OywgYXJndiwgZW52cCk7CiYjNDM7CQlfZXhpdChlcnJubyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgJmFtcDtzdGF0dXMsIDApLCBjaGlsZCwgJiMzNDt3YWl0cGlkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgJiMzNDtjaGlsZF9leGl0ZWQmIzM0OykpCiYjNDM7CQlBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sICYjMzQ7ZXhlY19lcnJubyYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9hcmdjLCAyLCAmIzM0O2Jwcm1fYXJnYyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9lbnZjLCAyLCAmIzM0O2Jwcm1fZW52YyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGF0YV9sZW5fbWF0Y2gsIDEsICYjMzQ7ZGF0YV9sZW5fbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCAmIzM0O2ludmFsaWRfZmxhZ3NfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3JldCwgMCwgJiMzNDtjb3B5X3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksICYjMzQ7c3RyX2FyZzBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgJiMzNDtzdHJfYXJnMV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCAmIzM0O3N0cl9lbnYwX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksICYjMzQ7c3RyX2VudjFfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX21hdGNoLCAxLCAmIzM0O2RhdGFfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmdzX21hdGNoLCAxLCAmIzM0O3N0cl9hcmdzX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52c19tYXRjaCwgMSwgJiMzNDtzdHJfZW52c19tYXRjaCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNvcHlfZnJvbV91c2VyX2Jwcm1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKQEAgLTAsMCAmIzQzOzEsMTIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSAmIzM0O2ZpcnN0XDBzZWNvbmQtYXJndW1lbnRcMCYjMzQ7CiYjNDM7CQkJCSAgICAmIzM0O1NPTUVfRU5WPWFcME9USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSAmIzM0O2ZpcnN0JiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gJiMzNDtzZWNvbmQtYXJndW1lbnQmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYwW10gPSAmIzM0O1NPTUVfRU5WPWEmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSAmIzM0O09USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MzsKJiM0MztpbnQgbW9uaXRvcmVkX3BpZDsKJiM0MztpbnQgYnBybV9hcmdjOwomIzQzO2ludCBicHJtX2VudmM7CiYjNDM7aW50IGRhdGFfbGVuX21hdGNoOwomIzQzO2ludCBpbnZhbGlkX2ZsYWdzX3JldDsKJiM0MztpbnQgY29weV9yZXQ7CiYjNDM7aW50IHN0cl9hcmcwX3JldDsKJiM0MztpbnQgc3RyX2FyZzFfcmV0OwomIzQzO2ludCBzdHJfZW52MF9yZXQ7CiYjNDM7aW50IHN0cl9lbnYxX3JldDsKJiM0MztpbnQgZGF0YV9tYXRjaDsKJiM0MztpbnQgc3RyX2FyZ3NfbWF0Y2g7CiYjNDM7aW50IHN0cl9lbnZzX21hdGNoOwomIzQzOwomIzQzO2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhazsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtLnMvYnBybV9jaGVja19zZWN1cml0eSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwl1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CWNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwljaGFyIGFyZzBbMzJdID0ge307CiYjNDM7CWNoYXIgYXJnMVszMl0gPSB7fTsKJiM0MzsJY2hhciBlbnYwWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjFbMzJdID0ge307CiYjNDM7CXU2NCBvZmZzZXQgPSAwOwomIzQzOwl1NjQgZGF0YV9sZW47CiYjNDM7CiYjNDM7CWlmICghQ09ORklHX01NVSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocGlkICE9IG1vbml0b3JlZF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbW0gPSBicHJtLSZndDttbTsKJiM0MzsJaWYgKCFtbSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicHJtX2FyZ2MgPSBicHJtLSZndDthcmdjOwomIzQzOwlicHJtX2VudmMgPSBicHJtLSZndDtlbnZjOwomIzQzOwomIzQzOwkvKiB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIGFyZ3MgYW5kIGVudnMgc3RhcnRpbmcgZnJvbSBicHJtLSZndDtwICovCiYjNDM7CWRhdGFfbGVuID0gYnBybS0mZ3Q7ZXhlYyAtIGJwcm0tJmd0O3A7CiYjNDM7CWRhdGFfbGVuX21hdGNoID0gZGF0YV9sZW4gPT0gc2l6ZW9mKGV4cGVjdGVkX2RhdGEpOwomIzQzOwomIzQzOwlpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLAomIzQzOwkJCQkJCSAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsIG1tLCB+MFVMTCk7CiYjNDM7CiYjNDM7CWNvcHlfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLSZndDtwLAomIzQzOwkJCQkJIG1tLCAwKTsKJiM0MzsJaWYgKGNvcHlfcmV0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRhdGFfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTsKJiM0MzsKJiM0MzsJLyogYXJnMCBpcyBhdCBicHJtLSZndDtwICovCiYjNDM7CXN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDsKJiM0MzsKJiM0MzsJLyogYXJnMSBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAqLwomIzQzOwlzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7CiYjNDM7CiYjNDM7CS8qIGVudjAgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgJiM0Mzsgc2l6ZW9mKGFyZzEpICovCiYjNDM7CXN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2VudjBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MSBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgJiM0Mzsgc2l6ZW9mKGVudjApICovCiYjNDM7CXN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzdHJfYXJnc19tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpICZhbXA7JmFtcDsKJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7CiYjNDM7CXN0cl9lbnZzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRhdGFfbWF0Y2ggJmFtcDsmYW1wOyBzdHJfYXJnc19tYXRjaCAmYW1wOyZhbXA7IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKaW5kZXggN2RlMTczZGFmMjdiNi4uNzQ0MWQ2NmMwODBjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwpAQCAtMTEzLDYgJiM0MzsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiAJc3RydWN0IGlubmVyX21hcCAqaW5uZXJfbWFwOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAljaGFyIGFyZ3NbNjRdOwogCV9fdTMyIGtleSA9IDA7CiAJX191NjQgKnZhbHVlOwpAQCAtMTIxLDcgJiM0MzsxMjIsOSBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJCWJwcm1fY291bnQmIzQzOyYjNDM7OwogCiAJYnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLSZndDt2bWEtJmd0O3ZtX21tLSZndDthcmdfc3RhcnQpOwotCWJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopYnBybS0mZ3Q7bW0tJmd0O2FyZ19zdGFydCk7CiYjNDM7CW1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CWlmIChtbSkKJiM0MzsJCWJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tJmd0O2FyZ19zdGFydCk7CiAKIAl2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDthcnJheSwgJmFtcDtrZXkpOwogCWlmICh2YWx1ZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHNlcmllcyBpcyBjZW50ZXJlZCBhcm91bmQgZW5oYW5jaW5nIEJQRiYjMzk7cyBhYmlsaXR5IHRvIHNhZmVseSBhbmQgY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgb3BlcmF0aW9ucyBmcm9tIHVzZXIgc3BhY2Ugd2l0aGluIGEgZGlmZmVyZW50IE1NIGNvbnRleHQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgc3RydWN0IGxpbnV4X2JpbnBybWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuCgpGaXJzdCwgSSBzZWUgYSBjcnVjaWFsIGNsZWFudXAgaW4gYGZzL2V4ZWMuY2Agd2l0aGluIGBmcmVlX2Jwcm1gLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBtbXB1dChtbSlgIGNhbGwgYWZ0ZXIgbnVsbGlmeWluZyBgYnBybS0mZ3Q7bW1gIGlzIGdvb2Q7IGl0IGVuc3VyZXMgcHJvcGVyIE1NIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcHJldmVudHMgcG90ZW50aWFsIGxlYWtzIGlmIHRoZSBgYnBybWAgb3V0bGl2ZXMgaXRzIGBtbV9zdHJ1Y3RgLiBUaGUgYGFjY3RfYXJnX3NpemVgIGNhbGwgaXMgYWxzbyB3b3J0aCBub3Rpbmc7IHByb2JhYmx5IHJlbGF0ZXMgdG8gYWNjb3VudGluZyBmb3IgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgYXJndW1lbnRzIGZvciBleGVjLgoKVGhlIGluY2x1c2lvbiBvZiBkZWNsYXJhdGlvbnMgZm9yIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfdm1fc3RyYCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBpcyBhIHJlZCBmbGFnIGluIGEgZ29vZCB3YXk7IGl0IGlzIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBtZW1vcnkgY29weSBvcGVyYXRpb25zIGZyb20gcmVtb3RlIG1lbW9yeSBjb250ZXh0cy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGVpciBkZWZpbml0aW9ucyBpbiBhIGJpdC4KClRoZSBtZWF0IG9mIHRoaXMgc2VyaWVzIGxpZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UmIzM5O3JlIGdldHRpbmcgbmV3IEJQRiBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgYWRkaXRpb24gb2YgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGFsb25nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcga2Z1bmNzLCBjbGVhcmx5IGluZGljYXRlcyBhIG1vdmUgdG93YXJkcyBtb3JlIHJvYnVzdCBhbmQgY29udHJvbGxlZCBtZW1vcnkgYWNjZXNzIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSB1c2Ugb2YgYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCB0aGUgY2FyZWZ1bCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIGFuZCBlcnJvcnMsIHdpdGggYG1lbXNldGAgY2FsbHMgdG8gemVybyBvdXQgdW5pbml0aWFsaXplZCBwb3J0aW9ucywgaXMgZXhhY3RseSB3aGF0IEkgd291bGQgZXhwZWN0IHRvIHNlZSBmb3IgbWVtb3J5IHNhZmV0eS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGJlaW5nIGludGVncmF0ZWQgZXZlcnl3aGVyZS4gSSBsaWtlIHRoYXQgd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgdG8gdXNlIHRoZSBuZXcgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgc2ltaWxhciBwYXR0ZXJuIGZvciBzdHJpbmdzLiBUaGUgaGFuZGxpbmcgb2YgdGhlIGBCUEZfRl9QQURfWkVST1NgIGZsYWcgaXMgYWxzbyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgaW5mb3JtYXRpb24gbGVha3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYWxsb3dpbmcgYWNjZXNzIHRvIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgaW4gYHN0cnVjdCBsaW51eF9iaW5wcm1gIGxvb2tzIGxpa2UgYSBuZWNlc3NhcnkgY2hhbmdlIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGluZGljYXRlcyB0aGF0IHRoZSB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCB0aGUgYWNjZXNzIG5lZWRlZCBieSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZSwgYW5kIHRoYXQmIzM5O3MgZ29vZC4KClRoZSByZWZhY3RvcmluZyBpbiB0aGUgYG1tL2AgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgY29weV9yZW1vdGVfdm1fc3RyYCB0byBzaGFyZSBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBpcyBncmVhdC4gQ29kZSByZXVzZSBpcyBrZXksIGFuZCBpdCBzdWdnZXN0cyBhIHdlbGwtdGhvdWdodC1vdXQgZGVzaWduLiBUaGUgYWRkaXRpb24gb2YgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gb3BlcmF0ZSBvbiBhIGJyb2FkZXIgY29udGV4dCBvZiBtZW1vcnkuCgpGaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHNlbGZ0ZXN0cyBpcyBleGNlbGxlbnQuIEl0IGRlbW9uc3RyYXRlcyBhIGNvbW1pdG1lbnQgdG8gdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aG9zZSBpbiBkZXRhaWwgdG8gY29uZmlybSB0aGV5IGNvdmVyIHRoZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzY2VuYXJpb3MuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIGhhdmUgc29tZSBjb25jZXJucy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIChhbmQgcmVsYXRlZCBmdW5jdGlvbnMpIGluIGBtbS9tZW1vcnkuY2AsIGBtbS9ub21tdS5jYCwgYW5kIGVsc2V3aGVyZSB0byBzZWUgZXhhY3RseSBob3cgaXQgd3JpdGVzIHRvIHRoZSBidWZmZXIgYW5kIGhvdyBpdCBoYW5kbGVzIHN0cmluZyB0ZXJtaW5hdGlvbiBhbmQgbGVuZ3RoLiBJIG11c3QgdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBjb21pbmcgZnJvbSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgc3VpdGFibGUgY29uc3RyYWludHMgYW5kIGNoZWNrcyBvbiB0aGUgc2l6ZSBhbmQgc291cmNlIG9mIHRoZSBtZW1vcnkgY29weSBvcGVyYXRpb25zIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYnVsbGV0cHJvb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MjY9c3RydWN0IGhzdGF0ZTtcbm1tL2ludGVybmFsLmgtMjctXG5tbS9pbnRlcm5hbC5oOjI4OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaW50ZXJuYWwuaC0yOS1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbi0tXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTczMzUtXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi0tXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuLS1cbm1tL25vbW11LmMtMTc0OC0gKi9cbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTc1MC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS91dGlsLmMtMTA4NS1cbm1tL3V0aWwuYzoxMDg2Olx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMDg3LX1cbi0tXG5tbS91dGlsLmM9MTEwMj1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTExMTYtXG5tbS91dGlsLmM6MTExNzpcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL21lbW9yeS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc28gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbXBsZXhpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gcmVtb3RlIG1lbW9yeSBjb3BpZXMsIGFuZCBzdHJpbmcgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgbmFtZSBpdHNlbGYsIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGhpbnRzIGF0IG1vdmluZyBhIHN0cmluZyBiZXR3ZWVuIGFkZHJlc3Mgc3BhY2VzLCBsaWtlbHkgd2hlbiBkZWFsaW5nIHdpdGggcHJvY2Vzc2VzIG9yIHBlcmhhcHMgZXZlbiB1c2Vyc3BhY2UgaW50ZXJhY3Rpb25zIGZyb20ga2VybmVsIHNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IGhvdyBpdCBoYW5kbGVzIHZpcnR1YWwgYWRkcmVzc2VzLCBwYWdlIGZhdWx0cyAoaWYgYW55KSwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpdCBlbXBsb3lzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczMzA6XHQvKlxuNzMzMTpcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbjczMzI6XHQgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG43MzMzOlx0ICovXG43MzM0Olx0aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MzM1Olx0XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbjczMzY6XHR7XG43MzM3Olx0XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuNzMzODpcdFx0aW50IGVyciA9IDA7XG43MzM5Olx0XG43MzQwOlx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuNzM0MTpcdFxuNzM0MjpcdFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcbjczNDM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MzQ0Olx0XG43MzQ1Olx0XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuNzM0NjpcdFxuNzM0NzpcdFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuNzM0ODpcdFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xuNzM0OTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuNzM1MDpcdFx0XHRnb3RvIG91dDtcbjczNTE6XHRcdH1cbjczNTI6XHRcbjczNTM6XHRcdHdoaWxlIChsZW4pIHtcbjczNTQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQsIHJldHZhbDtcbjczNTU6XHRcdFx0dm9pZCAqbWFkZHI7XG43MzU2Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG43MzU3Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuNzM1ODpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MzU5Olx0XG43MzYwOlx0XHRcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXHUwMDI2dm1hKTtcbjczNjE6XHRcdFx0aWYgKElTX0VSUihwYWdlKSkge1xuNzM2MjpcdFx0XHRcdC8qXG43MzYzOlx0XHRcdFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xuNzM2NDpcdFx0XHRcdCAqIHRvIGhhbmRsZSB0aGUgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGNhc2UgYW5kXG43MzY1Olx0XHRcdFx0ICogc3RhY2sgZXhwYW5zaW9uLlxuNzM2NjpcdFx0XHRcdCAqL1xuNzM2NzpcdFx0XHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG43MzY4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjczNjk6XHRcdFx0XHRnb3RvIG91dDtcbjczNzA6XHRcdFx0fVxuNzM3MTpcdFxuNzM3MjpcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG43MzczOlx0XHRcdGJ5dGVzID0gbGVuO1xuNzM3NDpcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSk7XG43Mzc1Olx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxuNzM3NjpcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFIC0gb2Zmc2V0O1xuNzM3NzpcdFxuNzM3ODpcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43Mzc5Olx0XHRcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciAmIzQzOyBvZmZzZXQsIGJ5dGVzKTtcbjczODA6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2U9IDApIHtcbjczODE6XHRcdFx0XHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cbjczODI6XHRcdFx0XHRidWYgJiM0Mzs9IHJldHZhbDtcbjczODM6XHRcdFx0XHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcbjczODQ6XHRcdFx0XHRicmVhaztcbjczODU6XHRcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0XHRidWYgJiM0Mzs9IGJ5dGVzIC0gMTtcbjczODg6XHRcdFx0LypcbjczODk6XHRcdFx0ICogQmVjYXVzZSBzdHJzY3B5IGFsd2F5cyBOVUwgdGVybWluYXRlcyB3ZSBuZWVkIHRvXG43MzkwOlx0XHRcdCAqIGNvcHkgdGhlIGxhc3QgYnl0ZSBpbiB0aGUgcGFnZSBpZiB3ZSBhcmUgZ29pbmcgdG9cbjczOTE6XHRcdFx0ICogbG9hZCBtb3JlIHBhZ2VzXG43MzkyOlx0XHRcdCAqL1xuNzM5MzpcdFx0XHRpZiAoYnl0ZXMgIT0gbGVuKSB7XG43Mzk0Olx0XHRcdFx0YWRkciAmIzQzOz0gYnl0ZXMgLSAxO1xuNzM5NTpcdFx0XHRcdGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCBhZGRyLCBidWYsIG1hZGRyICYjNDM7IChQQUdFX1NJWkUgLSAxKSwgMSk7XG43Mzk2Olx0XHRcdFx0YnVmICYjNDM7PSAxO1xuNzM5NzpcdFx0XHRcdGFkZHIgJiM0Mzs9IDE7XG43Mzk4Olx0XHRcdH1cbjczOTk6XHRcdFx0bGVuIC09IGJ5dGVzO1xuNzQwMDpcdFxuNzQwMTpcdFx0XHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcbjc0MDI6XHRcdH1cbjc0MDM6XHRcbjc0MDQ6XHRvdXQ6XG43NDA1Olx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbjc0MDY6XHRcdGlmIChlcnIpXG43NDA3Olx0XHRcdHJldHVybiBlcnI7XG43NDA4Olx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1Zjtcbjc0MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQzCgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDE1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEtNU0FOIE5lY2Vzc2l0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBwYXRjaCBjaGFuZ2VzIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIEtNU0FOLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBgZnJlZV9icHJtYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBgbW1fc3RydWN0YC4gSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhhdCBgYnBybS0mZ3Q7bW1gIGlzIG51bGxlZCBvdXQgYWZ0ZXIgYWNjb3VudGluZyBhbmQgYmVmb3JlIHRoZSBgbW1wdXRgIGNhbGwuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZXNwZWNpYWxseSB3aXRoIEJQRiBhY2Nlc3NpbmcgdGhpcyBkYXRhLgoKTmV4dCwgdGhlIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbWAsIGFuZCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgbmV4dCB1cCBvbiB0aGUgbGlzdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVpciBoYW5kbGluZyBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgZHN0YCkgd2hlbiBhIGNvcHkgZmFpbHMuIFRoZSBleHBsaWNpdCBgbWVtc2V0KGRzdCwgMCwgc2l6ZSlgIG9yIGBtZW1zZXRgIHBhZGRpbmcgaW4gdmFyaW91cyBmYWlsdXJlIHBhdGhzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiBUaGlzIGVuc3VyZXMgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4gYGNvcHlfcmVtb3RlX21tX3N0cmAmIzM5O3MgZ3VhcmFudGVlZCBudWxsIHRlcm1pbmF0aW9uIChvciBjbGVhcmluZykgaW4gYWRkaXRpb24gdG8gcGFkZGluZyB3aXRoIHplcm9zIGlmIHJlcXVlc3RlZCAod2l0aCBgQlBGX0ZfUEFEX1pFUk9TYCkgaXMgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIGNhcmVmdWwgZGVzaWduLgoKVGhlIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgIGZ1bmN0aW9ucyBhcmUgc2ltaWxhci4gIFRoZXkgYWxzbyB6ZXJvIHRoZSBgZHN0YCBidWZmZXIgb24gZXJyb3IgKG9yIHBhZCBpdCwgaW4gdGhlIHN0cmluZyB2ZXJzaW9uKS4gVGhpcyBjb25zaXN0ZW5jeSBpcyByZWFzc3VyaW5nLiBJIGFsc28gbm90ZSB0aGF0IHRoZSB1c2Ugb2YgZmxhZ3MgaXMgbGltaXRlZCB0byBgQlBGX0ZfUEFEX1pFUk9TYC4KCkZpbmFsbHksIHRoZSB2ZXJpZmllciBjaGFuZ2UgLSB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBsaW51eF9iaW5wcm1gIHRvIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgZm9yIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgLSBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5LiBJdCBoZWxwcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIGNvbnRyb2xsZWQuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IGFsbCB0aGUgZG90cyBhbmQgc2VlIGlmIHRoaXMgcmVxdWlyZXMgS01TQU4uIFRoZSBCUEYgcHJvZ3JhbXMmIzM5OyBwcm92aWRlZCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB2YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyIC0gc28gdGhlIHNpemUgYW5kIHZhbGlkaXR5IGFyZSB2ZXJpZmllZCAtIHRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgcmVtb3RlIG1tIHVzaW5nIGV4aXN0aW5nIHN0YW5kYXJkIGZ1bmN0aW9ucyBzdWNoIGFzIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGNvcHlfcmVtb3RlX21tX3N0cmAgd2hpY2ggYXJlIHRob3JvdWdobHkgdGVzdGVkLiBBbmQgdGhlIGVycm9yIHBhdGhzLCBvciBwYWRkaW5nIHBhdGhzIGFsbCBpbnZvbHZlIGV4cGxpY2l0bHkgemVyb2luZyB0aGUgZGF0YS4gYGZyZWVfYnBybWAgaGFzIGFuIGV4cGxpY2l0IGFzc2lnbm1lbnQuIFNvLCB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MsIGJhc2VkIG9uIHRoZXNlIGNoYW5nZXMuIFRoZSBleGlzdGluZyBwcm90ZWN0aW9ucyBvZiBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNvdmVyIGFueSBpc3N1ZXMgaGVyZSBzdWNoIGFzIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQgb2YgYm91bmRzIGFjY2Vzc2VzLCBvciByZWZjb3VudCBidWdzLgoKRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCBLTVNBTiBpcyBmb3IgY2FzZXMgd2hlcmUgd2UgaW50cm9kdWNlLCBvciBleHBvc2UsIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzLiBUaGUgY29kZSBhbHJlYWR5IGhhcyBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3IgcGFkZGluZy4gVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIG1lbW9yeSBpcyBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb24gYW55IGVycm9yLCBzbyBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgcHJlcGFyZSBteSByZXNwb25zZSBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVx1MDAzZW1tID0gTlVMTGAgaW4gYGZyZWVfYnBybSgpYC5cblxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBCUEYga2Z1bmNzIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSBhbmQgcmVmYWN0b3JzIGV4aXN0aW5nIGhlbHBlcnMgKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhbG9uZyB3aXRoIGBjb3B5X3JlbW90ZV92bV9zdHJgL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIGhlbHBlcnMgdG8gcmVhZCB1c2VyIG1lbW9yeSBmcm9tIGFuIGBtbV9zdHJ1Y3RgLiBJdCBhbHNvIHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxuXG5BbGwgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgdmlhIGBhY2Nlc3NfcmVtb3RlX3ZtYC9gY29weV9yZW1vdGVfbW1fc3RyYCBvciBleHBsaWNpdGx5IGNsZWFyZWQgd2l0aCBgbWVtc2V0YCBvbiBlcnJvciBhbmQgcGFkZGluZyBjb25kaXRpb25zLiBObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBwYXNzZWQgYWNyb3NzIHRydXN0IGJvdW5kYXJpZXMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgcmVmY291bnRpbmcgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTQ6NTUuMjEyNTY4ODc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODk2MTY4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza1wiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV9tbV9zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX3ZtX3N0clwiLFxuICAgIFwiX19jb3B5X3JlbW90ZV9tbV9zdHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEJQRiBrZnVuY3MgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApIGFuZCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyAoYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmApIGFsb25nIHdpdGggYGNvcHlfcmVtb3RlX3ZtX3N0cmAvYGNvcHlfcmVtb3RlX21tX3N0cmAgaGVscGVycyB0byByZWFkIHVzZXIgbWVtb3J5IGZyb20gYW4gYG1tX3N0cnVjdGAuIEl0IGFsc28gc2V0cyBgYnBybS1cXHUwMDNlbW0gPSBOVUxMYCBpbiBgZnJlZV9icHJtKClgLlxcblxcbkFsbCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB3cml0dGVuIGVpdGhlciBkaXJlY3RseSB2aWEgYGFjY2Vzc19yZW1vdGVfdm1gL2Bjb3B5X3JlbW90ZV9tbV9zdHJgIG9yIGV4cGxpY2l0bHkgY2xlYXJlZCB3aXRoIGBtZW1zZXRgIG9uIGVycm9yIGFuZCBwYWRkaW5nIGNvbmRpdGlvbnMuIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHBhc3NlZCBhY3Jvc3MgdHJ1c3QgYm91bmRhcmllcyB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE0OjU1LjIxMjU3NTM0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDg5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjE0OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiB7XFxuLVxcdGlmIChicHJtLVxcdTAwM2VtbSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXG4rXFx0aWYgKG1tKSB7XFxuIFxcdFxcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XFxuLVxcdFxcdG1tcHV0KGJwcm0tXFx1MDAzZW1tKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRcXHRtbXB1dChtbSk7XFxuIFxcdH1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXVzZXJfbnMpXFxuIFxcdFxcdHB1dF91c2VyX25zKGJwcm0tXFx1MDAzZXVzZXJfbnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42ZjEwY2UzMTVlYWE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zMzI1LDEwICszMzI1LDEwIEBAIGV4dGVybiBpbnQgYWNjZXNzX3Byb2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuLSNlbmRpZlxcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbiBcXG4gbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNjc5LDkgKzY3OSw0NCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICp1c2VyX3B0cixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xcbitcXHRpZiAocmV0ID09IHNpemUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XFxuK1xcdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRtZW1zZXQoZHN0ICsgcmV0LCAwLCBzaXplIC0gcmV0KTtcXG4rXFxuK1xcdHJldHVybiByZXQgKyAxO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbiBcXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xcbkBAIC02OTEsMTMgKzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbiBcXHRpZiAodW5saWtlbHkoIXNpemUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRzaywgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XFxuLVxcdGlmIChyZXQgPT0gc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG4rXFx0aWYgKCFtbSkge1xcbitcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4gXFxuLVxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbi1cXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcXG4rXFx0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pO1xcbitcXHRtbXB1dChtbSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7XFxuQEAgLTM2NTgsNiArMzY5Niw2OCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlclxcbiBcXHRyZXR1cm4gcmV0ICsgMTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcXG4rICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cXG4rICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVyb1xcbisgKlxcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXFxuKyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkXFxuKyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weVxcbisgKiBmYWlscyBvciBpcyBwYXJ0aWFsLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sIG1tKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXFxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZVxcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXFxuKyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMXFxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXFxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXFxuKyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPU1xcbisgKlxcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxcbisgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6XFxuKyAqIGlzIHplcm8uXFxuKyAqXFxuKyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZlxcbisgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS5cXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsXFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbW0sIGZsYWdzKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXFxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcXG5AQCAtMzY4MSw2ICszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXFxuIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcXG5AQCAtMzY4OSwxNyArMzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuIFxcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRpZiAoIW1tKSB7XFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4gXFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0KihjaGFyICopZHN0ID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4tXFx0XFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XFxuK1xcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICBtbSwgZmxhZ3MpO1xcbitcXHRtbXB1dChtbSk7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ICsgMTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG9cXG5AQCAtNDkyNCw2ICs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDllNzk3NTBlMjQ4MDguLjc5MWIzZDI1Y2FhNTQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTYwMDQsNiArNjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcXG4gfTtcXG4gXFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK307XFxuK1xcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gfTtcXG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4ge1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcXG4gXFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XFxuK1xcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xcbiBcXG4gXFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uNTU3YjI5MzgxMzU1NyAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0yNSw2ICsyNSw5IEBAXFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcXG4gc3RydWN0IGhzdGF0ZTtcXG4gXFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG4rXFxuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cXG4gICovXFxuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4ge1xcbiBcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtNzQwNyw0MyArNzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuIH1cXG4tXFxuLS8qKlxcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cXG4tICogQHRzazpcXHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG4tICogQGFkZHI6XFx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cXG4tICogQGJ1ZjpcXHRkZXN0aW5hdGlvbiBidWZmZXJcXG4tICogQGxlbjpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbi0gKiBAZ3VwX2ZsYWdzOlxcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXFxuLSAqXFxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG4tICpcXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cXG4tICovXFxuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbi1cXHRpZiAoIW1tKSB7XFxuLVxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuLVxcbi1cXHRtbXB1dChtbSk7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXFxuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcXG4tLS0gYS9tbS9ub21tdS5jXFxuKysrIGIvbW0vbm9tbXUuY1xcbkBAIC0xNzQ2LDggKzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XFxuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXFxuICAqL1xcbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbilcXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuQEAgLTE3ODEsNDMgKzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuLVxcbi0vKipcXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXFxuLSAqIEB0c2s6XFx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuLSAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuLSAqIEBidWY6XFx0ZGVzdGluYXRpb24gYnVmZmVyXFxuLSAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4tICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKVxcbi0gKlxcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXFxuLSAqXFxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcXG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXFxuLSAqL1xcbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkobGVuID09IDApKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcXG4tXFx0aWYgKCFtbSkge1xcbi1cXHRcXHQqKGNoYXIgKilidWYgPSAnXFxcXDAnO1xcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcXG4tXFxuLVxcdG1tcHV0KG1tKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XFxuLS0tIGEvbW0vdXRpbC5jXFxuKysrIGIvbW0vdXRpbC5jXFxuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4rLyoqXFxuKyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLlxcbisgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlXFxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyXFxuKyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxcbisgKiAtRUZBVUxULlxcbisgKi9cXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxcbisgKiBAdHNrOlxcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxcbisgKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOlxcdGRlc3RpbmF0aW9uIGJ1ZmZlclxcbisgKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuKyAqIEBndXBfZmxhZ3M6XFx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4rICpcXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cXG4rICogLUVGQVVMVC5cXG4rICovXFxuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRpZiAoIW1tKSB7XFxuK1xcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuK1xcbitcXHRtbXB1dChtbSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4rXFxuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxcbiB7XFxuIFxcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcXG5AQCAtMCwwICsxLDcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY29weV9mcm9tX3VzZXJfYnBybS5za2VsLmhcXFwiXFxuK1xcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxcbit7XFxuK1xcdGNoYXIgYXJnMFtdID0gXFxcImZpcnN0XFxcIjtcXG4rXFx0Y2hhciBhcmcxW10gPSBcXFwic2Vjb25kLWFyZ3VtZW50XFxcIjtcXG4rXFx0Y2hhciBlbnYwW10gPSBcXFwiU09NRV9FTlY9YVxcXCI7XFxuK1xcdGNoYXIgZW52MVtdID0gXFxcIk9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitcXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcXG4rXFx0cGlkX3QgY2hpbGQ7XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHRza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVxcdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cXG4rXFx0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXFx1MDAzZW1tLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2VrY29uZmlnLVxcdTAwM2VDT05GSUdfTU1VKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGNoaWxkID0gZm9yaygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXFxcImZvcmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIWNoaWxkKSB7XFxuK1xcdFxcdGNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9O1xcbitcXHRcXHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xcbitcXHRcXHRleGVjdmUoXFxcIi9iaW4vdHJ1ZVxcXCIsIGFyZ3YsIGVudnApO1xcbitcXHRcXHRfZXhpdChlcnJubyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFxcdTAwMjZzdGF0dXMsIDApLCBjaGlsZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFxcXCJjaGlsZF9leGl0ZWRcXFwiKSlcXG4rXFx0XFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCBcXFwiZXhlY19lcnJub1xcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9hcmdjLCAyLCBcXFwiYnBybV9hcmdjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWJwcm1fZW52YywgMiwgXFxcImJwcm1fZW52Y1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkYXRhX2xlbl9tYXRjaCwgMSwgXFxcImRhdGFfbGVuX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcXFwiaW52YWxpZF9mbGFnc19yZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY29weV9yZXQsIDAsIFxcXCJjb3B5X3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgXFxcInN0cl9hcmcwX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXFxcInN0cl9hcmcxX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXFxcInN0cl9lbnYwX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgXFxcInN0cl9lbnYxX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VkYXRhX21hdGNoLCAxLCBcXFwiZGF0YV9tYXRjaFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXFxcInN0cl9hcmdzX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnZzX21hdGNoLCAxLCBcXFwic3RyX2VudnNfbWF0Y2hcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXFxuQEAgLTAsMCArMSwxMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSBcXFwiZmlyc3RcXFxcMHNlY29uZC1hcmd1bWVudFxcXFwwXFxcIlxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlNPTUVfRU5WPWFcXFxcME9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSBcXFwiZmlyc3RcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcXFwic2Vjb25kLWFyZ3VtZW50XFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gXFxcIlNPTUVfRU5WPWFcXFwiO1xcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSBcXFwiT1RIRVJfRU5WPXNvbWV0aGluZ1xcXCI7XFxuK1xcbitpbnQgbW9uaXRvcmVkX3BpZDtcXG4raW50IGJwcm1fYXJnYztcXG4raW50IGJwcm1fZW52YztcXG4raW50IGRhdGFfbGVuX21hdGNoO1xcbitpbnQgaW52YWxpZF9mbGFnc19yZXQ7XFxuK2ludCBjb3B5X3JldDtcXG4raW50IHN0cl9hcmcwX3JldDtcXG4raW50IHN0cl9hcmcxX3JldDtcXG4raW50IHN0cl9lbnYwX3JldDtcXG4raW50IHN0cl9lbnYxX3JldDtcXG4raW50IGRhdGFfbWF0Y2g7XFxuK2ludCBzdHJfYXJnc19tYXRjaDtcXG4raW50IHN0cl9lbnZzX21hdGNoO1xcbitcXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xcbitcXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcXG4rXFxuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XFxuK1xcbitTRUMoXFxcImxzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHlcXFwiKVxcbitpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFx0Y2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdGNoYXIgYXJnMFszMl0gPSB7fTtcXG4rXFx0Y2hhciBhcmcxWzMyXSA9IHt9O1xcbitcXHRjaGFyIGVudjBbMzJdID0ge307XFxuK1xcdGNoYXIgZW52MVszMl0gPSB7fTtcXG4rXFx0dTY0IG9mZnNldCA9IDA7XFxuK1xcdHU2NCBkYXRhX2xlbjtcXG4rXFxuK1xcdGlmICghQ09ORklHX01NVSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bW0gPSBicHJtLVxcdTAwM2VtbTtcXG4rXFx0aWYgKCFtbSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicHJtX2FyZ2MgPSBicHJtLVxcdTAwM2VhcmdjO1xcbitcXHRicHJtX2VudmMgPSBicHJtLVxcdTAwM2VlbnZjO1xcbitcXG4rXFx0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cXHUwMDNlcCAqL1xcbitcXHRkYXRhX2xlbiA9IGJwcm0tXFx1MDAzZWV4ZWMgLSBicHJtLVxcdTAwM2VwO1xcbitcXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcXG4rXFxuK1xcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXFx1MDAzZXAsIG1tLCB+MFVMTCk7XFxuK1xcbitcXHRjb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cXHUwMDNlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IG1tLCAwKTtcXG4rXFx0aWYgKGNvcHlfcmV0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRhdGFfbWF0Y2ggPVxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpO1xcbitcXG4rXFx0LyogYXJnMCBpcyBhdCBicHJtLVxcdTAwM2VwICovXFxuK1xcdHN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xcbitcXG4rXFx0LyogYXJnMSBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICovXFxuK1xcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2FyZzFfcmV0O1xcbitcXG4rXFx0LyogZW52MCBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICovXFxuK1xcdHN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRvZmZzZXQgKz0gc3RyX2VudjBfcmV0O1xcbitcXG4rXFx0LyogZW52MSBpcyBhdCBicHJtLVxcdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXFxuK1xcdHN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgKHZvaWQgKikoYnBybS1cXHUwMDNlcCArIG9mZnNldCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcXG4rXFx0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3RyX2FyZ3NfbWF0Y2ggPVxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XFxuK1xcdHN0cl9lbnZzX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpO1xcbitcXG4rXFx0cmV0dXJuIGRhdGFfbWF0Y2ggXFx1MDAyNlxcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXFx1MDAyNlxcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjc0NDFkNjZjMDgwYzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuQEAgLTExMyw2ICsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIHtcXG4gXFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuIFxcdHN0cnVjdCBpbm5lcl9tYXAgKmlubmVyX21hcDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdGNoYXIgYXJnc1s2NF07XFxuIFxcdF9fdTMyIGtleSA9IDA7XFxuIFxcdF9fdTY0ICp2YWx1ZTtcXG5AQCAtMTIxLDcgKzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0XFx0YnBybV9jb3VudCsrO1xcbiBcXG4gXFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tLVxcdTAwM2Vhcmdfc3RhcnQpO1xcbi1cXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXFx1MDAzZW1tLVxcdTAwM2Vhcmdfc3RhcnQpO1xcbitcXHRtbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdGJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tXFx1MDAzZWFyZ19zdGFydCk7XFxuIFxcbiBcXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmFycmF5LCBcXHUwMDI2a2V5KTtcXG4gXFx0aWYgKHZhbHVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNDo1NS44NDM0NzQyNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTczMTA5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVxcdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTRjNjlhNzU0NjEwMDI3ZTY1NDg0NDE3Y2E0YWU1NGRjZDRmNzQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzoxNDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXHUwMDNlbW07XG4rXG4rXHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4rXHRcdGJwcm0tXHUwMDNlbW0gPSBOVUxMO1xuK1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNmYxMGNlMzE1ZWFhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzMyNSwxMCArMzMyNSwxMCBAQCBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4tI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLWV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0jZW5kaWZcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4gbG9uZyBnZXRfdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li4zMzM4YmViZGQ4NmU3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNjc5LDkgKzY3OSw0NCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbitzdGF0aWMgaW50IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4rXHRpZiAocmV0ID09IHNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbit9XG4rXG4rc3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdXNlcl9wdHIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbitcdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgc2l6ZSAtIHJldCk7XG4rXG4rXHRyZXR1cm4gcmV0ICsgMTtcbit9XG4rXG4gQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSxcbiBcdCAgIGNvbnN0IHZvaWQgX191c2VyICosIHVzZXJfcHRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdHNrLCB1NjQsIGZsYWdzKVxuIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqL1xuQEAgLTY5MSwxMyArNzI2LDE2IEBAIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHRpZiAodW5saWtlbHkoIXNpemUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRzaywgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4tXHRpZiAocmV0ID09IHNpemUpXG4tXHRcdHJldHVybiAwO1xuK1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuK1x0aWYgKCFtbSkge1xuK1x0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK1x0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0pO1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiArMzY5Niw2OCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlclxuIFx0cmV0dXJuIHJldCArIDE7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuKyAqIEBkc3RfX3N6OiAgICAgICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuKyAqIEBmbGFnczogICAgICAgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm9cbisgKlxuKyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbisgKiBpcyB6ZXJvZWQgaWYgYW4gYXR0ZW1wdGVkIGNvcHkgY2Fubm90IGJlIGNvbXBsZXRlZCBpbiBmdWxsLiBVbnN1cHBvcnRlZFxuKyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZmxhZ3MgaXMgbm9uLXplcm8sIG9yIC1FRkFVTFQgaWYgdGhlIGNvcHlcbisgKiBmYWlscyBvciBpcyBwYXJ0aWFsLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gX19icGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sIG1tKTtcbit9XG4rXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4rICpcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbisgKiBpcyB6ZXJvLlxuKyAqXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4rICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHRcdCAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICAgbW0sIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzaydzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSw2ICszNzgxLDcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuIFx0XHRcdFx0XHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbkBAIC0zNjg5LDE3ICszNzkwLDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4gXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGVsc2VcbitcdFx0XHQqKGNoYXIgKilkc3QgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4rXHRyZXQgPSBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgbW0sIGZsYWdzKTtcbitcdG1tcHV0KG1tKTtcbiBcbi1cdHJldHVybiByZXQgKyAxO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG9cbkBAIC00OTI0LDYgKzUwMjgsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9rbWVtX2NhY2hlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA5ZTc5NzUwZTI0ODA4Li43OTFiM2QyNWNhYTU0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02MDA0LDYgKzYwMDQsMTAgQEAgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkge1xuIFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xuIH07XG4gXG4rQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rfTtcbitcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgKzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIHtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XG4rXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XG4gXG4gXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjU1N2IyOTM4MTM1NTcgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjUsNiArMjUsOSBAQFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBzdHJ1Y3QgaHN0YXRlO1xuIFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuK1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTc0MDcsNDMgKzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4pXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rLyoqXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4rICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbit9XG4rXG4rLyoqXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4rICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4rXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXG4ge1xuIFx0Y2hhciAqYWRkcjEsICphZGRyMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsNzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuK3tcbitcdGNoYXIgYXJnMFtdID0gXCJmaXJzdFwiO1xuK1x0Y2hhciBhcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK1x0Y2hhciBlbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitcdGNoYXIgZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcbitcdHBpZF90IGNoaWxkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxuK1x0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXHUwMDNlbW0uXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2VrY29uZmlnLVx1MDAzZUNPTkZJR19NTVUpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hpbGQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghY2hpbGQpIHtcbitcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4rXHRcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRcdGV4ZWN2ZShcIi9iaW4vdHJ1ZVwiLCBhcmd2LCBlbnZwKTtcbitcdFx0X2V4aXQoZXJybm8pO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSwgY2hpbGQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwiY2hpbGRfZXhpdGVkXCIpKVxuK1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwiZXhlY19lcnJub1wiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2FyZ2MsIDIsIFwiYnBybV9hcmdjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fZW52YywgMiwgXCJicHJtX2VudmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9sZW5fbWF0Y2gsIDEsIFwiZGF0YV9sZW5fbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFwiaW52YWxpZF9mbGFnc19yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV9yZXQsIDAsIFwiY29weV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksIFwic3RyX2FyZzBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcInN0cl9hcmcxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXCJzdHJfZW52MF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksIFwic3RyX2VudjFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbWF0Y2gsIDEsIFwiZGF0YV9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXCJzdHJfYXJnc19tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52c19tYXRjaCwgMSwgXCJzdHJfZW52c19tYXRjaFwiKTtcbitcbitvdXQ6XG4rXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsMTIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9kYXRhW10gPSBcImZpcnN0XFwwc2Vjb25kLWFyZ3VtZW50XFwwXCJcbitcdFx0XHRcdCAgICBcIlNPTUVfRU5WPWFcXDBPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gXCJmaXJzdFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzFbXSA9IFwic2Vjb25kLWFyZ3VtZW50XCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gXCJTT01FX0VOVj1hXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXG4raW50IG1vbml0b3JlZF9waWQ7XG4raW50IGJwcm1fYXJnYztcbitpbnQgYnBybV9lbnZjO1xuK2ludCBkYXRhX2xlbl9tYXRjaDtcbitpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4raW50IGNvcHlfcmV0O1xuK2ludCBzdHJfYXJnMF9yZXQ7XG4raW50IHN0cl9hcmcxX3JldDtcbitpbnQgc3RyX2VudjBfcmV0O1xuK2ludCBzdHJfZW52MV9yZXQ7XG4raW50IGRhdGFfbWF0Y2g7XG4raW50IHN0cl9hcmdzX21hdGNoO1xuK2ludCBzdHJfZW52c19tYXRjaDtcbitcbitleHRlcm4gYm9vbCBDT05GSUdfTU1VIF9fa2NvbmZpZyBfX3dlYWs7XG4rXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitTRUMoXCJsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCIpXG4raW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1x0Y2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0Y2hhciBhcmcwWzMyXSA9IHt9O1xuK1x0Y2hhciBhcmcxWzMyXSA9IHt9O1xuK1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuK1x0Y2hhciBlbnYxWzMyXSA9IHt9O1xuK1x0dTY0IG9mZnNldCA9IDA7XG4rXHR1NjQgZGF0YV9sZW47XG4rXG4rXHRpZiAoIUNPTkZJR19NTVUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gYnBybS1cdTAwM2VtbTtcbitcdGlmICghbW0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuK1x0YnBybV9lbnZjID0gYnBybS1cdTAwM2VlbnZjO1xuK1xuK1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4rXHRkYXRhX2xlbiA9IGJwcm0tXHUwMDNlZXhlYyAtIGJwcm0tXHUwMDNlcDtcbitcdGRhdGFfbGVuX21hdGNoID0gZGF0YV9sZW4gPT0gc2l6ZW9mKGV4cGVjdGVkX2RhdGEpO1xuK1xuK1x0aW52YWxpZF9mbGFnc19yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSxcbitcdFx0XHRcdFx0XHQgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVx1MDAzZXAsIG1tLCB+MFVMTCk7XG4rXG4rXHRjb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLFxuK1x0XHRcdFx0XHQgbW0sIDApO1xuK1x0aWYgKGNvcHlfcmV0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRhdGFfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpO1xuK1xuK1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbitcdHN0cl9hcmcwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMCwgc2l6ZW9mKGFyZzApLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMF9yZXQ7XG4rXG4rXHQvKiBhcmcxIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSAqL1xuK1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9hcmcxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9hcmcxX3JldDtcbitcbitcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICovXG4rXHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2VudjBfcmV0O1xuK1xuK1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKyBzaXplb2YoYXJnMSkgKyBzaXplb2YoZW52MCkgKi9cbitcdHN0cl9lbnYxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MSwgc2l6ZW9mKGVudjEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN0cl9hcmdzX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTtcbitcdHN0cl9lbnZzX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTtcbitcbitcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjc0NDFkNjZjMDgwYzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuQEAgLTExMyw2ICsxMTMsNyBAQCBpbnQgQlBGX1BST0codGVzdF92b2lkX2hvb2ssIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4ge1xuIFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuIFx0c3RydWN0IGlubmVyX21hcCAqaW5uZXJfbWFwO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRjaGFyIGFyZ3NbNjRdO1xuIFx0X191MzIga2V5ID0gMDtcbiBcdF9fdTY0ICp2YWx1ZTtcbkBAIC0xMjEsNyArMTIyLDkgQEAgaW50IEJQRl9QUk9HKHRlc3Rfdm9pZF9ob29rLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRicHJtX2NvdW50Kys7XG4gXG4gXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNldm1hLVx1MDAzZXZtX21tLVx1MDAzZWFyZ19zdGFydCk7XG4tXHRicGZfY29weV9mcm9tX3VzZXIoYXJncywgc2l6ZW9mKGFyZ3MpLCAodm9pZCAqKWJwcm0tXHUwMDNlbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbitcdG1tID0gYnBybS1cdTAwM2VtbTtcbitcdGlmIChtbSlcbitcdFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKiltbS1cdTAwM2Vhcmdfc3RhcnQpO1xuIFxuIFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZrZXkpO1xuIFx0aWYgKHZhbHVlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTQ6NTUuODQzNDk1NDE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5MTM0MTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgdG91Y2hlcyBzb21lIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBrZXJuZWwg4oCTIEJQRiwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB0aGUgZXhlY3V0aW9uIHN1YnN5c3RlbSAoVkZTKS4gV2UncmUgdGFsa2luZyBhYm91dCBCUEYga2Z1bmNzLCBtZW1vcnkgY29weWluZyBmcm9tIHVzZXIgc3BhY2UsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBmcmVlX2Jwcm1gIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBgZnMvZXhlYy5jYCB3aXRoIHRoZSBgZnJlZV9icHJtYCBmdW5jdGlvbiwgdGhlIGFkZGl0aW9uIG9mIG5ldyBhbmQgbW9kaWZpZWQgQlBGIGtmdW5jcyBsaWtlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGFuZCB1cGRhdGVzIHRvIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLiBUaGVzZSBCUEYgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IHRob3NlIGludm9sdmluZyB1c2VyLXNwYWNlIG1lbW9yeSBjb3BpZXMsIGFyZSBvZnRlbiBnb2xkbWluZXMgZm9yIGZ1enppbmcgZHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzIGlmIHRoZSBrZXJuZWwgc2lkZSBkb2Vzbid0IGNvcnJlY3RseSBoYW5kbGUgaW52YWxpZCBwb2ludGVycyBvciBib3VuZGFyeSBjaGVja3MuIEkgYWxzbyBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgdXBkYXRlZCwgd2hpY2ggY291bGQgYWxzbyBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGRpZmZzIHJlbGF0ZWQgdG8gdGhlIGBtbWAgc3Vic3lzdGVtLCB3aXRoIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCwgYW5kIHRoZSBpbnRlcm5hbCByZW5hbWluZywgYXJlIGFub3RoZXIga2V5IGFyZWEuIEFueSB0aW1lIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY29weWluZyBzdHJpbmdzLCBJIGdldCBpbnRlcmVzdGVkLiBUaGUgaW50ZXJhY3Rpb24gb2YgYWxsIHRoZXNlIGNvbXBvbmVudHMgbWFrZXMgdGhpcyBwYXRjaCBldmVuIG1vcmUgZW50aWNpbmcuXG5cbkdpdmVuIHRoYXQgU3l6a2FsbGVyIGFscmVhZHkgcmVndWxhcmx5IGZ1enplcyBCUEYsIHRoZSB2ZXJpZmllciwgYW5kIHRoZSBgZXhlY3ZlYCBzeXN0ZW0gY2FsbCwgdGhpcyBwYXRjaCBzbG90cyByaWdodCBpbnRvIGV4aXN0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gRGVmaW5pdGVseSByZWFjaGFibGUuICoqV29ydGhGdXp6aW5nID0gVHJ1ZSoqLlxuXG5Ob3csIGl0J3MgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXh0cmFjdCB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSB3aWxsIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGhpdHRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aHMuIEkgbmVlZCB0byB1c2UgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gY2FyZWZ1bGx5IGdvIHRocm91Z2ggdGhlIEtjb25maWdzIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZm91bmRhdGlvbmFsIHBpZWNlcyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjAwLjgzNDg0MDExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTM2MTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz02Mj1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTY1LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz03Nz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTc5LVxcdGRlZmF1bHQgeVxcbmtlcm5lbC9icGYvS2NvbmZpZzo4MDpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTgxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05Nj1jb25maWcgQlBGX0xTTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTk4LVxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTEwMC1cXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTUtb2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19LRVlTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrZXlzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM2PWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOC1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDY9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ5LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02My1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjUtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTcwLWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS03Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDY4PUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxcbmtlcm5lbC9icGYvY29yZS5jOjI0NzI6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI0NzMtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDM2PXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMzcte1xcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMwMzktXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwNTc9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDYzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMzODk9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzOTAte1xcbmtlcm5lbC9icGYvY29yZS5jOjMzOTE6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMzOTItXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDI5PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMy1cXG5rZXJuZWwvYnBmL2NvcmUuYzozNDM0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDM1LV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDYwPUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0NjEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQ2MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ2My1cXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXFx0IyBUaGUgZGVwZW5kZW5jeSBvbiAhQ09NUElMRV9URVNUIHByZXZlbnRzIGl0IGZyb20gYmVpbmcgZW5hYmxlZFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUxND1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUyMjogICAgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3Njk9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwNi1cXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4MDc6XFx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowMS4yMzYyMDc2ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODI4NzA2ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBLZnVuYyBhbmQgSGVscGVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBpdHMgc3RyaW5nIHZhcmlhbnQsIGFsb25nIHdpdGggdGhlIGJyb2FkZXIga2Z1bmNzIHdpdGhpbiBCUEYsIGFyZSBjb25maWd1cmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIOKAkyB0aGF0J3MgdGhlIGxpa2VseSBjZW50cmFsIGh1Yi4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGtleSBwbGF5ZXIgaGVyZSwgYXMgaXQncyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cbk5leHQsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGEgaGFyZCBkZXBlbmRlbmN5IGZvciB0aGVzZSBrZnVuY3Mgb3IgQlRGIElEIHJlbGF0ZWQgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gTXkgcGxhbiBpcyB0byBzdGFydCB3aXRoIGEgZ29vZCBvbCcgYGdyZXBgIHNlc3Npb24uIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBgQlRGX0lEX0ZMQUdTYCwgb3IgZXZlbiBzcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX3N0cmAgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGtmdW5jcyBhbmQgQlRGLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowNC4wNjQ5MTc0NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NzQxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NvcHlfZnJvbV91c2VyX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTM2NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX2JpdHMgKml0KVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY1OC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNjU5OiAqIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiB1bnNhZmUgdXNlciBhZGRyZXNzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzY2MC0gKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNjcyLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2NzM6X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwgdTY0IGZsYWdzKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM2NzQte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTA0NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwNDY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0Ny1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjA0LjExNzg5NjQ5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjE3NjQzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlRGL2tmdW5jIFJlZ2lzdHJhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgQlRGIGFuZCBrZnVuY3MgYXJlIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgd2hhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJIHNob3VsZCBhbHNvIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLCBhbmQgdGhlIGltcGFjdCBvZiB0aG9zZSBvcHRpb25zLiBJIGtub3cgdGhlc2UgZmVhdHVyZXMgYXJlIHBpdm90YWwgZm9yIGFkdmFuY2VkIGVCUEYgY2FwYWJpbGl0aWVzLCBidXQgdGhlIG51YW5jZXMgb2YgdGhlaXIgc2V0LXVwIGFyZSBzb21ldGltZXMgZWFzaWx5IGZvcmdvdHRlbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgYmUgY29tcGxldGVseSBjZXJ0YWluIG9mIG15IGZhY3RzLiBUaW1lIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gY2FsbHMgYW5kIGV4YW1pbmUgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGFuZCBhc3NvY2lhdGVkIGNvZGUgcGF0aHMuIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIEdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDYuNDc5NjY0MDExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTA1Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJURl9LRlVOQ1NfU1RBUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MTExOD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTE5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTIwOkJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTIxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIgfCBLRl9TUElOTE9DS19TQUZFKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXNrLmM9NDc1PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmMtNDc2LVxcbmtlcm5lbC9icGYvY3B1bWFzay5jOjQ3NzpCVEZfS0ZVTkNTX1NUQVJUKGNwdW1hc2tfa2Z1bmNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy00NzgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcHVtYXNrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zNTI9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM1My1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM1NDpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2luaXRfa2Z1bmNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM1NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19jdHhfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgY3J5cHRfaW5pdF9rZnVuY19zZXQgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM2NC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM2NTpCVEZfS0ZVTkNTX1NUQVJUKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zNjYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fZGVjcnlwdCwgS0ZfUkNVKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg4OD12b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDgtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwOTpCVEZfS0ZVTkNTX1NUQVJUKGdlbmVyaWNfYnRmX2lkcylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTEwLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4NT1CVEZfSUQoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlX2R0b3IpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5ODg6QlRGX0tGVU5DU19TVEFSVChjb21tb25fYnRmX2lkcylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg5LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2FzdF90b19rZXJuX2N0eCwgS0ZfRkFTVENBTEwpXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjE5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTIyMC1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MjIxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX21hcF9pdGVyX2tmdW5jX2lkcylcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjIyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWFwX3N1bV9lbGVtX2NvdW50KVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NzQ1PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ2LVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0NzpCVEZfS0ZVTkNTX1NUQVJUKHJxc3BpbmxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMIHwgS0ZfU1BJTkxPQ0tfU0FGRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDYuNTMxNzc1MDYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NTEyMTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCB0aHJvdWdoIG15IG1pbmQ6XG5cbioqQ2hlY2tpbmcgYGNvbW1vbl9idGZfaWRzYCBSZWdpc3RyYXRpb24gaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgY29tbW9uX2J0Zl9pZHNgIHJlZ2lzdHJhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mg4oCTIGxpa2VseSBob3cgdGhlc2UgY29tbW9uIEJURiBJRHMgYXJlIGRlZmluZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGhlbHBlcnMuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgc29ydCBvZiB0YWJsZSBvciBtYWNybyBpbnZvbHZlZC4gSSBzaG91bGQgcHJvYmFibHkgYmUgcHJlcGFyZWQgdG8gdHJhY2UgdGhyb3VnaCBhbnkgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBob3cgdGhlc2UgSURzIGFyZSBsaW5rZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBlQlBGIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSBnZXQgZXhwb3NlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGV4YWN0IHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20sIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhpcyBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYnV0IGFzIHdpdGggYWxsIHRoaW5ncyBCUEYsIGJlc3QgdG8gYXNzdW1lIG5vdGhpbmcgdW50aWwgSSBzZWUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MDkuMTI2ODk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDI1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJlZW1wdF9kaXNhYmxlKVxcbjUwMjY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wcmVlbXB0X2VuYWJsZSlcXG41MDI3OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXFxuNTAyODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG41MDI5OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG41MDMwOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXFxuNTAzMTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXFxuNTAzMjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwMzM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwMzQ6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcXG41MDM1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuNTAzNjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcXG41MDM3OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSB8IEtGX1NMRUVQQUJMRSlcXG41MDM4OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3NhdmUpXFxuNTAzOTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbjUwNDA6XFx0I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXFxuNTA0MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXFxuNTA0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX2R5bnB0cilcXG41MDQzOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9keW5wdHIpXFxuNTA0NDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9keW5wdHIpXFxuNTA0NTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwNDY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuNTA0NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyLCBLRl9TTEVFUEFCTEUpXFxuNTA0ODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbjUwNDk6XFx0I2VuZGlmXFxuNTA1MDpcXHQjaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXFxuNTA1MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuNTA1MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbjUwNTM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kgfCBLRl9TTEVFUEFCTEUpXFxuNTA1NDpcXHQjZW5kaWZcXG41MDU1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbjUwNTY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbjUwNTc6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG41MDU4OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNhc2VjbXApO1xcbjUwNTk6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHIpO1xcbjUwNjA6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjaHJudWwpO1xcbjUwNjE6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuY2hyKTtcXG41MDYyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycmNocik7XFxuNTA2MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmxlbik7XFxuNTA2NDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTowOS4xMjc0MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5NTA5Nzk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBoYW5kbGluZyBvZiBgQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTExgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgc3RydWN0IGxpbnV4X2JpbnBybWAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEkga25vdyBpdCdzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBidXQgbGV0J3MgYmUgcHJlY2lzZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgemVybyBpbiBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gNjAwMCBhbmQgNjA3MC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgYXJlYSB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGFkZGluZyB0aGF0IHRydXN0ZWQgb3IgbnVsbCBjaGVjayBmb3IgdGhlIHN0cnVjdHVyZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBpbiB0aGF0IHNlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTEuNjIyNTE0MDYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMDA6XFx0XFx0c3RydWN0IHNjaGVkX2V4dF9vcHMgKm9wcztcXG42MDAxOlxcdH07XFxuNjAwMjpcXHRcXG42MDAzOlxcdEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcXG42MDA0OlxcdFxcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcXG42MDA1OlxcdH07XFxuNjAwNjpcXHRcXG42MDA3OlxcdEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcXG42MDA4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjYwMDk6XFx0fTtcXG42MDEwOlxcdFxcbjYwMTE6XFx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xcbjYwMTI6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjYwMTM6XFx0fTtcXG42MDE0OlxcdFxcbjYwMTU6XFx0QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSB7XFxuNjAxNjpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICp2bV9tbTtcXG42MDE3OlxcdFxcdHN0cnVjdCBmaWxlICp2bV9maWxlO1xcbjYwMTg6XFx0fTtcXG42MDE5OlxcdFxcbjYwMjA6XFx0c3RhdGljIGJvb2wgdHlwZV9pc19yY3Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG42MDIxOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuNjAyMjpcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmaWVsZF9uYW1lLCB1MzIgYnRmX2lkKVxcbjYwMjM6XFx0e1xcbjYwMjQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgdGFza19zdHJ1Y3QpKTtcXG42MDI1OlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9SQ1Uoc3RydWN0IGNncm91cCkpO1xcbjYwMjY6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY3NzX3NldCkpO1xcbjYwMjc6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSkpO1xcbjYwMjg6XFx0XFxuNjAyOTpcXHRcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXFxcIl9fc2FmZV9yY3VcXFwiKTtcXG42MDMwOlxcdH1cXG42MDMxOlxcdFxcbjYwMzI6XFx0c3RhdGljIGJvb2wgdHlwZV9pc19yY3Vfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjYwMzM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG42MDM0OlxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIHUzMiBidGZfaWQpXFxuNjAzNTpcXHR7XFxuNjAzNjpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkpO1xcbjYwMzc6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBza19idWZmKSk7XFxuNjAzODpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IHJlcXVlc3Rfc29jaykpO1xcbjYwMzk6XFx0XFxuNjA0MDpcXHRcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwgXFxcIl9fc2FmZV9yY3Vfb3JfbnVsbFxcXCIpO1xcbjYwNDE6XFx0fVxcbjYwNDI6XFx0XFxuNjA0MzpcXHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG42MDQ0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbjYwNDU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIHUzMiBidGZfaWQpXFxuNjA0NjpcXHR7XFxuNjA0NzpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSkpO1xcbjYwNDg6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IGJwZl9pdGVyX190YXNrKSk7XFxuNjA0OTpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XFxuNjA1MDpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3QgZmlsZSkpO1xcbjYwNTE6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9pbml0X3Rhc2tfYXJncykpO1xcbjYwNTI6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzKSk7XFxuNjA1MzpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncykpO1xcbjYwNTQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURUQoc3RydWN0IHNjeF9zdWJfZGV0YWNoX2FyZ3MpKTtcXG42MDU1OlxcdFxcbjYwNTY6XFx0XFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsIFxcXCJfX3NhZmVfdHJ1c3RlZFxcXCIpO1xcbjYwNTc6XFx0fVxcbjYwNTg6XFx0XFxuNjA1OTpcXHRzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjYwNjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuNjA2MTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgdTMyIGJ0Zl9pZClcXG42MDYyOlxcdHtcXG42MDYzOlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xcbjYwNjQ6XFx0XFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7XFxuNjA2NTpcXHRcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pKTtcXG42MDY2OlxcdFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XFxuNjA2NzpcXHRcXG42MDY4OlxcdFxcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxcbjYwNjk6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiX19zYWZlX3RydXN0ZWRfb3JfbnVsbFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToxMS42MjM2MTQwMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYxMTIyNzMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBMU00gSG9va3MgYW5kIE1lbW9yeSBTYWZldHkgaW4gYGxpbnV4X2JpbnBybWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsaW51eF9iaW5wcm1gIHN0cnVjdCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBCUEYgdmVyaWZpZXIuIEkgc2VlIHRoYXQgdGhlIGBtbWAgZmllbGQgaXMgbm93IG1hcmtlZCBhcyB0cnVzdGVkIG9yIG51bGwsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuICBUaGVuIEkgbm90aWNlZCB0aGUgY2hhbmdlIGluIGBmcy9leGVjLmNgIHdpdGggdGhlIGBmcmVlX2Jwcm1gIGZ1bmN0aW9uLiAgSXQgbm93IHNldHMgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgd2l0aCBgbW1wdXQobW0pYC4gQWhhISAgVGhhdCdzIHRoZSBrZXkuIFRoaXMgY2hhbmdlIHdhcyBpbXBsZW1lbnRlZCBiZWNhdXNlIGBicHJtLVx1MDAzZW1tYCBpcyBub3cgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIEJQRiBMU00gaG9va3Mgb24gdGhlIGBicHJtYCBzdHJ1Y3QuXG5cbkVzc2VudGlhbGx5LCBieSBzZXR0aW5nIGBicHJtLVx1MDAzZW1tID0gTlVMTGAgYmVmb3JlIGZyZWVpbmcgdGhlIHN0cnVjdHVyZSwgd2UncmUgbWl0aWdhdGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIG9yIGRhbmdsaW5nIHBvaW50ZXIgYWNjZXNzZXMgaWYgYSBCUEYgaG9vayB0cmllcyB0byBhY2Nlc3MgYGJwcm0tXHUwMDNlbW1gICphZnRlciogaXQncyBiZWVuIGZyZWVkIG9yIHdoaWxlIGl0J3MgYmVpbmcgdG9ybiBkb3duLiAgU21hcnQhIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGVzc2VudGlhbCB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjZXNzZWQgdmlhIEJQRi5cblxuTm93LCBJIHdhbnQgdG8gZGl2ZSBhIGJpdCBkZWVwZXIgaW50byB3aGF0IHRoZXNlIGhvb2tzIGNvdWxkIGJlIGRvaW5nLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEJQRiBoZWxwZXJzLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6IGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC5cblxuQWxzbywgSSdsbCByZXZpZXcgYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbnRlcmVzdGluZyBjb2RlIGxpa2U6IGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBgY29weV9yZW1vdGVfdm1fc3RyYCBhbmQgYF9fY29weV9yZW1vdGVfbW1fc3RyYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYGZzL2V4ZWMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCdzIGBzdGF0aWNgIG9yIGBzdGF0aWMgaW5saW5lYC4gIEJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGBsaW51eF9iaW5wcm1gIHN0cnVjdCBhbmQgaXRzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgZmlsZSwgZm9yIGV4YW1wbGUsIGZyb20gYW4gZXh0ZXJuYWwgQlBGIGhvb2ssIG9yIG5vdC4gVGhlIGZvY3VzIHN5bWJvbHMgbmVlZCB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbjEuIGBicGZfY29weV9mcm9tX3VzZXJfbW1gXG4yLiBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmBcbjMuIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2BcbjQuIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgXG41LiBgY29weV9yZW1vdGVfbW1fc3RyYFxuNi4gYGNvcHlfcmVtb3RlX3ZtX3N0cmBcbjcuIGBfX2NvcHlfcmVtb3RlX21tX3N0cmBcbjguIGBmcmVlX2Jwcm1gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTcuMjM0ODQ0MjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc1NTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcmVlX2Jwcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMzk0PUVYUE9SVF9TWU1CT0woZmluYWxpemVfZXhlYyk7XFxuLS1cXG5mcy9leGVjLmMtMTM5OC0gKiBzZXR1cF9uZXdfZXhlYygpIGNvbW1pdHMgdGhlIG5ldyBjcmVkcyBhbmQgZHJvcHMgdGhlIGxvY2suXFxuZnMvZXhlYy5jOjEzOTk6ICogT3IsIGlmIGV4ZWMgZmFpbHMgYmVmb3JlLCBmcmVlX2Jwcm0oKSBzaG91bGQgcmVsZWFzZSAtXFx1MDAzZWNyZWRcXG5mcy9leGVjLmMtMTQwMC0gKiBhbmQgdW5sb2NrLlxcbi0tXFxuZnMvZXhlYy5jPTE0NTI9dm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTQ1Ni1cXG5mcy9leGVjLmM6MTQ1NzpzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9leGVjLmMtMTQ1OC17XFxuLS1cXG5mcy9leGVjLmM9MTQ5Mz1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbnBybSAqYWxsb2NfYnBybShpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIGludCBmbGFncylcXG4tLVxcbmZzL2V4ZWMuYy0xNTU5LW91dF9mcmVlOlxcbmZzL2V4ZWMuYzoxNTYwOlxcdGZyZWVfYnBybShicHJtKTtcXG5mcy9leGVjLmMtMTU2MS1cXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xcbi0tXFxuZnMvZXhlYy5jLTE1NjMtXFxuZnMvZXhlYy5jOjE1NjQ6REVGSU5FX0NMQVNTKGJwcm0sIHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgaWYgKCFJU19FUlIoX1QpKSBmcmVlX2Jwcm0oX1QpLFxcbmZzL2V4ZWMuYy0xNTY1LVxcdGFsbG9jX2Jwcm0oZmQsIG5hbWUsIGZsYWdzKSwgaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MTcuMjg2NjA1NTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQ4ODk1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGLVJlbGF0ZWQgVGhvdWdodHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmcmVlX2Jwcm1gLiBSaWdodCwgaXQncyBhIGBzdGF0aWMgdm9pZGAgZnVuY3Rpb24g4oCTIGBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgLiBJIHJlY2FsbCBgYWxsb2NfYnBybWAgY2FsbHMgaXQsIGFuZCB0aGUgbWFjcm8gYERFRklORV9DTEFTUyhicHJtLCAuLi4pYCBhbHNvIHV0aWxpemVzIGl0LiBJbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhvc2UgY29ubmVjdGlvbnMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBCUEYgY29uZmlndXJhdGlvbnMuIEkga25vdyB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIHRoZSBCUEYgaGVscGVycyBhbmQga2Z1bmNzLCB3aGljaCBhcmUgZm91bmQgaW4gYGhlbHBlcnMuY2AsIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGluIGBtbS91dGlsLmNgLCBhbmQgdGhlIHZlcmlmaWVyIGNvZGUuIFRoZW4sIHRoZXJlJ3MgYEJQRl9MU01gIOKAkyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIEJQRiBMU00gcHJvZ3JhbXMgdGhhdCByZXF1aXJlIGFjY2VzcyB0byBgYnBybS1cdTAwM2VtbWAuXG5cbk5vdywgb250byB2ZXJpZnlpbmcgc29tZXRoaW5nIGFib3V0IGBCVEZfSURfRkxBR1NgLiBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhhdCB3b3JrcyBhbmQsIGNydWNpYWxseSwgaWYgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgKnRydWx5KiBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGtmdW5jcy4gSSBrbm93IHRoYXQga2Z1bmMgcmVzb2x1dGlvbiB3aXRoaW4ga2VybmVsIEJQRiByZWxpZXMgb24gQlRGIG1ldGFkYXRhIGdlbmVyYXRlZCBmcm9tIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuIEknbGwgc2VhcmNoIGBrZXJuZWwvYnBmL2AgZm9yIHRoZSBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBzeW1ib2wgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjIwLjc1MTQ5Nzc4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNjg1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVCVUdfSU5GT19CVEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjQxNj1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlX2Jhc2Uoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjQyMS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjY0MjI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpXFxua2VybmVsL2JwZi9idGYuYy02NDIzLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NTAyPV9fdTMyIGJ0Zl9yZWxvY2F0ZV9pZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIF9fdTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NTA4LVxcbmtlcm5lbC9icGYvYnRmLmM6NjUwOTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTY1MTAtXFxua2VybmVsL2JwZi9idGYuYz02NTExPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjA2LVxcbmtlcm5lbC9icGYvYnRmLmM6NjYwNzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MjQ9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg1MjctXFxua2VybmVsL2JwZi9idGYuYzo4NTI4OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODUyOS1zdHJ1Y3QgYnRmX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NjY9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2Njc6I2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTICovXFxua2VybmVsL2JwZi9idGYuYy04NjY4LVxcbmtlcm5lbC9icGYvYnRmLmM9ODY2OT1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NjcxLVxcdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XFxua2VybmVsL2JwZi9idGYuYzo4NjcyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODY3My1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY5OT1zdHJ1Y3QgYnRmICpidGZfZ2V0X21vZHVsZV9idGYoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxcbmtlcm5lbC9icGYvYnRmLmMtODcwMC17XFxua2VybmVsL2JwZi9idGYuYzo4NzAxOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODcwMi1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODcxMi1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTM6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NzE0LVxcdG11dGV4X2xvY2soXFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04NzI5PXN0YXRpYyBpbnQgY2hlY2tfYnRmX2tjb25maWdzKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3QgY2hhciAqZmVhdHVyZSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzAte1xcbmtlcm5lbC9icGYvYnRmLmM6ODczMTpcXHRpZiAoIW1vZHVsZSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzItXFx0XFx0cHJfZXJyKFxcXCJtaXNzaW5nIHZtbGludXggQlRGLCBjYW5ub3QgcmVnaXN0ZXIgJXNcXFxcblxcXCIsIGZlYXR1cmUpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzM0LVxcdH1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg3MzU6XFx0aWYgKG1vZHVsZSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MzYtXFx0XFx0cHJfd2FybihcXFwibWlzc2luZyBtb2R1bGUgQlRGLCBjYW5ub3QgcmVnaXN0ZXIgJXNcXFxcblxcXCIsIGZlYXR1cmUpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04ODc3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxcbmtlcm5lbC9icGYvYnRmLmMtODg3OC17XFxua2VybmVsL2JwZi9idGYuYzo4ODc5OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODg4MC1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODg5My1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg4OTQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04ODk1LVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YnRmX21vZHVsZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk1NDI9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NTY5LVxcbmtlcm5lbC9icGYvYnRmLmM6OTU3MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTk1NzEtc3RhdGljIHZvaWQgX19wdXJnZV9jYW5kX2NhY2hlKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9jYW5kX2NhY2hlICoqY2FjaGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjg0NT1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NjEtXFx0XFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODYyOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NjMtXFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjQyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU2LVxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcF9wdHIgYWNjZXNzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU4LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkwMTA9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwMjYtXFx0XFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAyNzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDI4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTE4PXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDkyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5MjM6XFx0aWYgKCFidGYgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTI0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJ0Zl92bWxpbnV4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToyMC44MDM4NzEyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkyMjYxODU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGVzc2VudGlhbCBoZXJlLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBrZnVuY3MgcmVseSBvbiBpdDsgbm8gQlRGLCBubyBrZnVuYyBjYWxscy4gQW5kIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuUmlnaHQsIEknbSBub3RpbmcgdGhlc2UgY2hhbmdlcyBpbiBwYXJ0aWN1bGFyOiBuZXcga2Z1bmNzIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgaW4gdGhlIHNhbWUgZmlsZS4gQWxzbywgYGNvcHlfcmVtb3RlX21tX3N0cmAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIHdlcmUgbW9kaWZpZWQgaW4gYG1tL3V0aWwuY2AgYW5kIGBtbS9tZW1vcnkuY2AgcmVzcGVjdGl2ZWx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIG1vZGlmeWluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3B5aW5nIGZyb20gdXNlciBzcGFjZSwgYW5kIHNwZWNpZmljYWxseSBtYWtpbmcgdGhvc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gVGhhdCB0cmlnZ2VycyBteSBmdXp6aW5nIGluc3RpbmN0cy4gVGhlIEJQRiB2ZXJpZmllciBpcyBnb2luZyB0byB0cmVhdCBgYnBybS1cdTAwM2VtbWAgZmllbGQgYXMgdHJ1c3RlZCwgd2hpY2ggbG9va3MgbGlrZSBhIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFNldHRpbmcgaXQgdG8gTlVMTCBpbiBgZnJlZV9icHJtKClgIGlzIGEgZ29vZCBtaXRpZ2F0aW9uLCBidXQgc3RpbGwsIHRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW1wYWN0IHRoZXNlIGNoYW5nZXMgaGF2ZSBvbiB0aGUgcmVhY2hhYmxlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIEFQSXMuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHZlcmlmeSBhcmU6IGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgLCBgY29weV9yZW1vdGVfbW1fc3RyYCwgYGNvcHlfcmVtb3RlX3ZtX3N0cmAsIGFuZCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLiBUaGV5J3JlIGFsbCBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLCBhbmQgSSB0aGluayB0aGV5IHdpbGwgYWxsIGJlIHJlYWNoYWJsZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUsIGZvY3VzZWQgYW5hbHlzaXMuIFRpbWUgdG8gcmVjb3JkIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwMiwiT3V0cHV0VG9rZW5zIjoyNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MjcuNzI2NDkzNjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwODM1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIGFuZCBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIpLCBhZGRzIGNvcHlfcmVtb3RlX21tX3N0ciAvIF9fY29weV9yZW1vdGVfbW1fc3RyIGZvciByZWFkaW5nIHN0cmluZ3MgZnJvbSByZW1vdGUgbW1fc3RydWN0IGluc3RhbmNlcywgYW5kIGFsbG93cyB0cnVzdGVkIGFjY2VzcyB0byBicHJtLVxcdTAwM2VtbSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgcmVhY2hhYmxlIEJQRiBhbmQgTU0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0sIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgZXhpc3RpbmcgaGVscGVycyBhbmQga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfdGFzaywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKSwgYWRkcyBjb3B5X3JlbW90ZV9tbV9zdHIgLyBfX2NvcHlfcmVtb3RlX21tX3N0ciBmb3IgcmVhZGluZyBzdHJpbmdzIGZyb20gcmVtb3RlIG1tX3N0cnVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvd3MgdHJ1c3RlZCBhY2Nlc3MgdG8gYnBybS1cXHUwMDNlbW0gaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHJlYWNoYWJsZSBCUEYgYW5kIE1NIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjI3LjgxNjU4ODUyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODU1ODgxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNToyNy44MTcyMzcyMzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjY4NDkzNDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTk0YzY5YTc1NDYxMDAyN2U2NTQ4NDQxN2NhNGFlNTRkY2Q0Zjc0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MTQ6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuK1xuK1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuK1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbitcdFx0bW1wdXQobW0pO1xuIFx0fVxuIFx0aWYgKGJwcm0tXHUwMDNldXNlcl9ucylcbiBcdFx0cHV0X3VzZXJfbnMoYnBybS1cdTAwM2V1c2VyX25zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLjZmMTBjZTMxNWVhYTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMjUsMTAgKzMzMjUsMTAgQEAgZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGV4dGVybiBpbnQgYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi1leHRlcm4gaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4tI2VuZGlmXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uMzMzOGJlYmRkODZlNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTY3OSw5ICs2NzksNDQgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4rc3RhdGljIGludCBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBzaXplLFxuK1x0XHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuK1x0aWYgKHJldCA9PSBzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuK1x0LyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqL1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXJfcHRyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdXNlcl9wdHIsIGRzdCwgc2l6ZSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIHNpemUpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIHNpemUgLSByZXQpO1xuK1xuK1x0cmV0dXJuIHJldCArIDE7XG4rfVxuK1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi9cbkBAIC02OTEsMTMgKzcyNiwxNiBAQCBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuIFxuLVx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4tXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbitcdHJldCA9IF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tKTtcbitcdG1tcHV0KG1tKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgKzM2OTYsNjggQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXJcbiBcdHJldHVybiByZXQgKyAxO1xuIH1cbiBcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4rICpcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbisgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4rICogZmFpbHMgb3IgaXMgcGFydGlhbC5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseSghZHN0X19zeikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLCBtbSk7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXG4rICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZ1xuKyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuKyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPU1xuKyAqXG4rICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGhcbisgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6XG4rICogaXMgemVyby5cbisgKlxuKyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZlxuKyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxuKyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4rICpcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcbisgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0XHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdCAgIG1tLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXG4gICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZVxuQEAgLTM2ODEsNiArMzc4MSw3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGZsYWdzKVxuIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG5AQCAtMzY4OSwxNyArMzc5MCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRpZiAoIW1tKSB7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuIFx0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRlbHNlXG4rXHRcdFx0KihjaGFyICopZHN0ID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuK1x0cmV0ID0gX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHQgIG1tLCBmbGFncyk7XG4rXHRtbXB1dChtbSk7XG4gXG4tXHRyZXR1cm4gcmV0ICsgMTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICs1MDI4LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNzkxYjNkMjVjYWE1NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcbiBcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcbiB9O1xuIFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK307XG4rXG4gQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIH07XG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuK1x0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuIFxuIFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li41NTdiMjkzODEzNTU3IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI1LDYgKzI1LDkgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbitcbiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC03MzMxLDggKzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHZvaWQgKm9sZF9idWYgPSBidWY7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03NDA3LDQzICs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXG5pbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuKysrIGIvbW0vbm9tbXUuY1xuQEAgLTE3NDYsOCArMTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTE3ODEsNDMgKzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuLVxuLS8qKlxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91ciAodW51c2VkKVxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXG4tXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4rKysgYi9tbS91dGlsLmNcbkBAIC0xMDYxLDYgKzEwNjEsNjggQEAgaW50IGdldF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuKy8qKlxuKyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLlxuKyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcbisgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rfVxuK1xuKy8qKlxuKyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxuKyAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcbisgKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuKyAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuKyAqXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4rICogLUVGQVVMVC5cbisgKi9cbitpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRpZiAoIW1tKSB7XG4rXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbitcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbitcbitcdG1tcHV0KG1tKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuK1xuIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKVxuIHtcbiBcdGNoYXIgKmFkZHIxLCAqYWRkcjI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDcyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaFwiXG4rXG4rdm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZClcbit7XG4rXHRjaGFyIGFyZzBbXSA9IFwiZmlyc3RcIjtcbitcdGNoYXIgYXJnMVtdID0gXCJzZWNvbmQtYXJndW1lbnRcIjtcbitcdGNoYXIgZW52MFtdID0gXCJTT01FX0VOVj1hXCI7XG4rXHRjaGFyIGVudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1x0c3RydWN0IGNvcHlfZnJvbV91c2VyX2Jwcm0gKnNrZWw7XG4rXHRwaWRfdCBjaGlsZDtcbitcdGludCBzdGF0dXM7XG4rXG4rXHRza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbitcdCAqIGJlaW5nIG1hcHBlZCBpbiBicHJtLVx1MDAzZW1tLlxuK1x0ICovXG4rXHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4rXHRcdHByaW50ZihcIiVzOlNLSVA6IHRlc3QgcmVxdWlyZXMgQ09ORklHX01NVVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksIFwiYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGNoaWxkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2hpbGQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIWNoaWxkKSB7XG4rXHRcdGNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9O1xuK1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbitcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuK1x0XHRleGVjdmUoXCIvYmluL3RydWVcIiwgYXJndiwgZW52cCk7XG4rXHRcdF9leGl0KGVycm5vKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCBcImNoaWxkX2V4aXRlZFwiKSlcbitcdFx0QVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCBcImV4ZWNfZXJybm9cIik7XG4rXG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcImJwcm1fYXJnY1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwiYnBybV9lbnZjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcImRhdGFfbGVuX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcImludmFsaWRfZmxhZ3NfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcImNvcHlfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcInN0cl9hcmcwX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCJzdHJfYXJnMV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwic3RyX2VudjBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcInN0cl9lbnYxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcImRhdGFfbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwic3RyX2FyZ3NfbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwic3RyX2VudnNfbWF0Y2hcIik7XG4rXG4rb3V0OlxuK1x0Y29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDEyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCJmaXJzdFxcMHNlY29uZC1hcmd1bWVudFxcMFwiXG4rXHRcdFx0XHQgICAgXCJTT01FX0VOVj1hXFwwT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwiZmlyc3RcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1xuK2ludCBtb25pdG9yZWRfcGlkO1xuK2ludCBicHJtX2FyZ2M7XG4raW50IGJwcm1fZW52YztcbitpbnQgZGF0YV9sZW5fbWF0Y2g7XG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xuK2ludCBjb3B5X3JldDtcbitpbnQgc3RyX2FyZzBfcmV0O1xuK2ludCBzdHJfYXJnMV9yZXQ7XG4raW50IHN0cl9lbnYwX3JldDtcbitpbnQgc3RyX2VudjFfcmV0O1xuK2ludCBkYXRhX21hdGNoO1xuK2ludCBzdHJfYXJnc19tYXRjaDtcbitpbnQgc3RyX2VudnNfbWF0Y2g7XG4rXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rU0VDKFwibHNtLnMvYnBybV9jaGVja19zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGNoYXIgYXJnMFszMl0gPSB7fTtcbitcdGNoYXIgYXJnMVszMl0gPSB7fTtcbitcdGNoYXIgZW52MFszMl0gPSB7fTtcbitcdGNoYXIgZW52MVszMl0gPSB7fTtcbitcdHU2NCBvZmZzZXQgPSAwO1xuK1x0dTY0IGRhdGFfbGVuO1xuK1xuK1x0aWYgKCFDT05GSUdfTU1VKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwcm1fYXJnYyA9IGJwcm0tXHUwMDNlYXJnYztcbitcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbitcbitcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXHUwMDNlcCAqL1xuK1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4rXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcbitcbitcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLCBtbSwgfjBVTEwpO1xuK1xuK1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbitcdFx0XHRcdFx0IG1tLCAwKTtcbitcdGlmIChjb3B5X3JldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkYXRhX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbitcbitcdC8qIGFyZzAgaXMgYXQgYnBybS1cdTAwM2VwICovXG4rXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xuK1xuK1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKi9cbitcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMV9yZXQ7XG4rXG4rXHQvKiBlbnYwIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xuK1x0c3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcbitcbitcdC8qIGVudjEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXG4rXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdHJfYXJnc19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4rXHRzdHJfZW52c19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4rXG4rXHRyZXR1cm4gZGF0YV9tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43NDQxZDY2YzA4MGM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC0xMTMsNiArMTEzLDcgQEAgaW50IEJQRl9QUk9HKHRlc3Rfdm9pZF9ob29rLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbiBcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiBcdHN0cnVjdCBpbm5lcl9tYXAgKmlubmVyX21hcDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0Y2hhciBhcmdzWzY0XTtcbiBcdF9fdTMyIGtleSA9IDA7XG4gXHRfX3U2NCAqdmFsdWU7XG5AQCAtMTIxLDcgKzEyMiw5IEBAIGludCBCUEZfUFJPRyh0ZXN0X3ZvaWRfaG9vaywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0YnBybV9jb3VudCsrO1xuIFxuIFx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVx1MDAzZXZtYS1cdTAwM2V2bV9tbS1cdTAwM2Vhcmdfc3RhcnQpO1xuLVx0YnBmX2NvcHlfZnJvbV91c2VyKGFyZ3MsIHNpemVvZihhcmdzKSwgKHZvaWQgKilicHJtLVx1MDAzZW1tLVx1MDAzZWFyZ19zdGFydCk7XG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAobW0pXG4rXHRcdGJwZl9jb3B5X2Zyb21fdXNlcihhcmdzLCBzaXplb2YoYXJncyksICh2b2lkICopbW0tXHUwMDNlYXJnX3N0YXJ0KTtcbiBcbiBcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZhcnJheSwgXHUwMDI2a2V5KTtcbiBcdGlmICh2YWx1ZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjI3LjgxNzIzODIwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzgzMzM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBzZXJpZXMgaXMgY2VudGVyZWQgYXJvdW5kIGVuaGFuY2luZyBCUEYncyBhYmlsaXR5IHRvIHNhZmVseSBhbmQgY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgb3BlcmF0aW9ucyBmcm9tIHVzZXIgc3BhY2Ugd2l0aGluIGEgZGlmZmVyZW50IE1NIGNvbnRleHQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgc3RydWN0IGxpbnV4X2JpbnBybWAgYW5kLCBieSBleHRlbnNpb24sIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSBhIGNydWNpYWwgY2xlYW51cCBpbiBgZnMvZXhlYy5jYCB3aXRoaW4gYGZyZWVfYnBybWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYG1tcHV0KG1tKWAgY2FsbCBhZnRlciBudWxsaWZ5aW5nIGBicHJtLVx1MDAzZW1tYCBpcyBnb29kOyBpdCBlbnN1cmVzIHByb3BlciBNTSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBsZWFrcyBpZiB0aGUgYGJwcm1gIG91dGxpdmVzIGl0cyBgbW1fc3RydWN0YC4gVGhlIGBhY2N0X2FyZ19zaXplYCBjYWxsIGlzIGFsc28gd29ydGggbm90aW5nOyBwcm9iYWJseSByZWxhdGVzIHRvIGFjY291bnRpbmcgZm9yIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIGFyZ3VtZW50cyBmb3IgZXhlYy5cblxuVGhlIGluY2x1c2lvbiBvZiBkZWNsYXJhdGlvbnMgZm9yIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfdm1fc3RyYCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBpcyBhIHJlZCBmbGFnIGluIGEgZ29vZCB3YXk7IGl0IGlzIHByb2JhYmx5IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIFRoZXkncmUgZGVmaW5pdGVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgZnJvbSByZW1vdGUgbWVtb3J5IGNvbnRleHRzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgZGVmaW5pdGlvbnMgaW4gYSBiaXQuXG5cblRoZSBtZWF0IG9mIHRoaXMgc2VyaWVzIGxpZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UncmUgZ2V0dGluZyBuZXcgQlBGIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgX19icGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCwgYWxvbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBrZnVuY3MsIGNsZWFybHkgaW5kaWNhdGVzIGEgbW92ZSB0b3dhcmRzIG1vcmUgcm9idXN0IGFuZCBjb250cm9sbGVkIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhlIHVzZSBvZiBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIHRoZSBjYXJlZnVsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgYW5kIGVycm9ycywgd2l0aCBgbWVtc2V0YCBjYWxscyB0byB6ZXJvIG91dCB1bmluaXRpYWxpemVkIHBvcnRpb25zLCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYmVpbmcgaW50ZWdyYXRlZCBldmVyeXdoZXJlLiBJIGxpa2UgdGhhdCB3ZSdyZSByZWZhY3RvcmluZyBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGBfX2JwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIHNpbWlsYXIgcGF0dGVybiBmb3Igc3RyaW5ncy4gVGhlIGhhbmRsaW5nIG9mIHRoZSBgQlBGX0ZfUEFEX1pFUk9TYCBmbGFnIGlzIGFsc28gY3JpdGljYWwgZm9yIGF2b2lkaW5nIGluZm9ybWF0aW9uIGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYWxsb3dpbmcgYWNjZXNzIHRvIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgaW4gYHN0cnVjdCBsaW51eF9iaW5wcm1gIGxvb2tzIGxpa2UgYSBuZWNlc3NhcnkgY2hhbmdlIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGluZGljYXRlcyB0aGF0IHRoZSB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCB0aGUgYWNjZXNzIG5lZWRlZCBieSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZSwgYW5kIHRoYXQncyBnb29kLlxuXG5UaGUgcmVmYWN0b3JpbmcgaW4gdGhlIGBtbS9gIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGNvcHlfcmVtb3RlX3ZtX3N0cmAgdG8gc2hhcmUgYF9fY29weV9yZW1vdGVfbW1fc3RyYCwgaXMgZ3JlYXQuIENvZGUgcmV1c2UgaXMga2V5LCBhbmQgaXQgc3VnZ2VzdHMgYSB3ZWxsLXRob3VnaHQtb3V0IGRlc2lnbi4gVGhlIGFkZGl0aW9uIG9mIGBjb3B5X3JlbW90ZV9tbV9zdHJgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgbWVhbnMgaXQgY2FuIG9wZXJhdGUgb24gYSBicm9hZGVyIGNvbnRleHQgb2YgbWVtb3J5LlxuXG5GaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHNlbGZ0ZXN0cyBpcyBleGNlbGxlbnQuIEl0IGRlbW9uc3RyYXRlcyBhIGNvbW1pdG1lbnQgdG8gdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRob3NlIGluIGRldGFpbCB0byBjb25maXJtIHRoZXkgY292ZXIgdGhlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHNjZW5hcmlvcy5cblxuTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcywgSSBoYXZlIHNvbWUgY29uY2VybnMuIEkgaGF2ZSB0byB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fY29weV9yZW1vdGVfbW1fc3RyYCAoYW5kIHJlbGF0ZWQgZnVuY3Rpb25zKSBpbiBgbW0vbWVtb3J5LmNgLCBgbW0vbm9tbXUuY2AsIGFuZCBlbHNld2hlcmUgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHdyaXRlcyB0byB0aGUgYnVmZmVyIGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgdGVybWluYXRpb24gYW5kIGxlbmd0aC4gSSBtdXN0IHZlcmlmeSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBjb21pbmcgZnJvbSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgdXNlciBzcGFjZS4gSSBtdXN0IGNoZWNrLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgc3VpdGFibGUgY29uc3RyYWludHMgYW5kIGNoZWNrcyBvbiB0aGUgc2l6ZSBhbmQgc291cmNlIG9mIHRoZSBtZW1vcnkgY29weSBvcGVyYXRpb25zIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYnVsbGV0cHJvb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MzQuMjAwNTc3NjQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg5NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0yNj1zdHJ1Y3QgaHN0YXRlO1xcbm1tL2ludGVybmFsLmgtMjctXFxubW0vaW50ZXJuYWwuaDoyODppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9pbnRlcm5hbC5oLTI5LVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbi0tXFxubW0vbWVtb3J5LmM9NzMyNz1FWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XFxuLS1cXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xcbm1tL21lbW9yeS5jOjczMzQ6aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzMzNS1cXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbi0tXFxubW0vbm9tbXUuYz0xNzQyPUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4tLVxcbm1tL25vbW11LmMtMTc0OC0gKi9cXG5tbS9ub21tdS5jOjE3NDk6aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0xNzUwLVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS91dGlsLmM9MTA4MD1pbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS91dGlsLmMtMTA4NS1cXG5tbS91dGlsLmM6MTA4NjpcXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL3V0aWwuYy0xMDg3LX1cXG4tLVxcbm1tL3V0aWwuYz0xMTAyPWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3V0aWwuYy0xMTE2LVxcbm1tL3V0aWwuYzoxMTE3OlxcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG5tbS91dGlsLmMtMTExOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MTU6MzQuMjU1NDc3ODE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTgxNDM5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaW4gYG1tL21lbW9yeS5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9tZW1vcnkuY2AsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc28gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgY29tcGxleGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byByZW1vdGUgbWVtb3J5IGNvcGllcywgYW5kIHN0cmluZyBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBuYW1lIGl0c2VsZiwgYF9fY29weV9yZW1vdGVfbW1fc3RyYCwgaGludHMgYXQgbW92aW5nIGEgc3RyaW5nIGJldHdlZW4gYWRkcmVzcyBzcGFjZXMsIGxpa2VseSB3aGVuIGRlYWxpbmcgd2l0aCBwcm9jZXNzZXMgb3IgcGVyaGFwcyBldmVuIHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgZnJvbSBrZXJuZWwgc3BhY2UuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCBob3cgaXQgaGFuZGxlcyB2aXJ0dWFsIGFkZHJlc3NlcywgcGFnZSBmYXVsdHMgKGlmIGFueSksIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaXQgZW1wbG95cy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzoxNTozNi40NTM2MjUzNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMzA6XFx0LypcXG43MzMxOlxcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjczMzI6XFx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbjczMzM6XFx0ICovXFxuNzMzNDpcXHRpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MzM1OlxcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMzNjpcXHR7XFxuNzMzNzpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjczMzg6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMzOTpcXHRcXG43MzQwOlxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuNzM0MTpcXHRcXG43MzQyOlxcdFxcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXFxuNzM0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzQ0OlxcdFxcbjczNDU6XFx0XFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcXG43MzQ2OlxcdFxcbjczNDc6XFx0XFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xcbjczNDg6XFx0XFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xcbjczNDk6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG43MzUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjczNTE6XFx0XFx0fVxcbjczNTI6XFx0XFxuNzM1MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzM1NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldCwgcmV0dmFsO1xcbjczNTU6XFx0XFx0XFx0dm9pZCAqbWFkZHI7XFxuNzM1NjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjczNTc6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzM1ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzM1OTpcXHRcXG43MzYwOlxcdFxcdFxcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXFx1MDAyNnZtYSk7XFxuNzM2MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzM2MjpcXHRcXHRcXHRcXHQvKlxcbjczNjM6XFx0XFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbjczNjQ6XFx0XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG43MzY1OlxcdFxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG43MzY2OlxcdFxcdFxcdFxcdCAqL1xcbjczNjc6XFx0XFx0XFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG43MzY4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuNzM2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG43MzcwOlxcdFxcdFxcdH1cXG43MzcxOlxcdFxcbjczNzI6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjczNzM6XFx0XFx0XFx0Ynl0ZXMgPSBsZW47XFxuNzM3NDpcXHRcXHRcXHRvZmZzZXQgPSBhZGRyIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjczNzU6XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxcbjczNzY6XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XFxuNzM3NzpcXHRcXG43Mzc4OlxcdFxcdFxcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcXG43Mzc5OlxcdFxcdFxcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjczODA6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNlPSAwKSB7XFxuNzM4MTpcXHRcXHRcXHRcXHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cXG43MzgyOlxcdFxcdFxcdFxcdGJ1ZiArPSByZXR2YWw7XFxuNzM4MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43Mzg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjczODU6XFx0XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHRcXHRidWYgKz0gYnl0ZXMgLSAxO1xcbjczODg6XFx0XFx0XFx0LypcXG43Mzg5OlxcdFxcdFxcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xcbjczOTA6XFx0XFx0XFx0ICogY29weSB0aGUgbGFzdCBieXRlIGluIHRoZSBwYWdlIGlmIHdlIGFyZSBnb2luZyB0b1xcbjczOTE6XFx0XFx0XFx0ICogbG9hZCBtb3JlIHBhZ2VzXFxuNzM5MjpcXHRcXHRcXHQgKi9cXG43MzkzOlxcdFxcdFxcdGlmIChieXRlcyAhPSBsZW4pIHtcXG43Mzk0OlxcdFxcdFxcdFxcdGFkZHIgKz0gYnl0ZXMgLSAxO1xcbjczOTU6XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsIGJ1ZiwgbWFkZHIgKyAoUEFHRV9TSVpFIC0gMSksIDEpO1xcbjczOTY6XFx0XFx0XFx0XFx0YnVmICs9IDE7XFxuNzM5NzpcXHRcXHRcXHRcXHRhZGRyICs9IDE7XFxuNzM5ODpcXHRcXHRcXHR9XFxuNzM5OTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzQwMDpcXHRcXG43NDAxOlxcdFxcdFxcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xcbjc0MDI6XFx0XFx0fVxcbjc0MDM6XFx0XFxuNzQwNDpcXHRvdXQ6XFxuNzQwNTpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG43NDA2OlxcdFxcdGlmIChlcnIpXFxuNzQwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc0MDg6XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzQwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjM2LjQ1NDA2OTM3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDQ4MDgwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIHBhdGNoIGNoYW5nZXMgYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGZyZWVfYnBybWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYG1tX3N0cnVjdGAuIEl0J3MgZ29vZCB0byBzZWUgdGhhdCBgYnBybS1cdTAwM2VtbWAgaXMgbnVsbGVkIG91dCBhZnRlciBhY2NvdW50aW5nIGFuZCBiZWZvcmUgdGhlIGBtbXB1dGAgY2FsbC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBhdm9pZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdpdGggQlBGIGFjY2Vzc2luZyB0aGlzIGRhdGEuXG5cbk5leHQsIHRoZSBCUEYgaGVscGVyIGZ1bmN0aW9ucywgbGlrZSBgX19icGZfY29weV9mcm9tX3VzZXJfbW1gLCBhbmQgYF9fYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgYXJlIG5leHQgdXAgb24gdGhlIGxpc3QuIEknbSBmb2N1c2luZyBvbiB0aGVpciBoYW5kbGluZyBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChgZHN0YCkgd2hlbiBhIGNvcHkgZmFpbHMuIFRoZSBleHBsaWNpdCBgbWVtc2V0KGRzdCwgMCwgc2l6ZSlgIG9yIGBtZW1zZXRgIHBhZGRpbmcgaW4gdmFyaW91cyBmYWlsdXJlIHBhdGhzIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiBUaGlzIGVuc3VyZXMgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4gYGNvcHlfcmVtb3RlX21tX3N0cmAncyBndWFyYW50ZWVkIG51bGwgdGVybWluYXRpb24gKG9yIGNsZWFyaW5nKSBpbiBhZGRpdGlvbiB0byBwYWRkaW5nIHdpdGggemVyb3MgaWYgcmVxdWVzdGVkICh3aXRoIGBCUEZfRl9QQURfWkVST1NgKSBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgY2FyZWZ1bCBkZXNpZ24uXG5cblRoZSBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCBmdW5jdGlvbnMgYXJlIHNpbWlsYXIuICBUaGV5IGFsc28gemVybyB0aGUgYGRzdGAgYnVmZmVyIG9uIGVycm9yIChvciBwYWQgaXQsIGluIHRoZSBzdHJpbmcgdmVyc2lvbikuIFRoaXMgY29uc2lzdGVuY3kgaXMgcmVhc3N1cmluZy4gSSBhbHNvIG5vdGUgdGhhdCB0aGUgdXNlIG9mIGZsYWdzIGlzIGxpbWl0ZWQgdG8gYEJQRl9GX1BBRF9aRVJPU2AuXG5cbkZpbmFsbHksIHRoZSB2ZXJpZmllciBjaGFuZ2UgLSB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBsaW51eF9iaW5wcm1gIHRvIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgZm9yIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgLSBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5LiBJdCBoZWxwcyB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIGNvbnRyb2xsZWQuXG5cbk5vdywgbGV0J3MgY29ubmVjdCBhbGwgdGhlIGRvdHMgYW5kIHNlZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOLiBUaGUgQlBGIHByb2dyYW1zJyBwcm92aWRlZCBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSB2YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyIC0gc28gdGhlIHNpemUgYW5kIHZhbGlkaXR5IGFyZSB2ZXJpZmllZCAtIHRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgcmVtb3RlIG1tIHVzaW5nIGV4aXN0aW5nIHN0YW5kYXJkIGZ1bmN0aW9ucyBzdWNoIGFzIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGNvcHlfcmVtb3RlX21tX3N0cmAgd2hpY2ggYXJlIHRob3JvdWdobHkgdGVzdGVkLiBBbmQgdGhlIGVycm9yIHBhdGhzLCBvciBwYWRkaW5nIHBhdGhzIGFsbCBpbnZvbHZlIGV4cGxpY2l0bHkgemVyb2luZyB0aGUgZGF0YS4gYGZyZWVfYnBybWAgaGFzIGFuIGV4cGxpY2l0IGFzc2lnbm1lbnQuIFNvLCB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm8tbGVha3MsIGJhc2VkIG9uIHRoZXNlIGNoYW5nZXMuIFRoZSBleGlzdGluZyBwcm90ZWN0aW9ucyBvZiBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIHdvdWxkIGNvdmVyIGFueSBpc3N1ZXMgaGVyZSBzdWNoIGFzIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvdXQgb2YgYm91bmRzIGFjY2Vzc2VzLCBvciByZWZjb3VudCBidWdzLlxuXG5Gb2xsb3dpbmcgdGhlIGd1aWRlbGluZXMsIEtNU0FOIGlzIGZvciBjYXNlcyB3aGVyZSB3ZSBpbnRyb2R1Y2UsIG9yIGV4cG9zZSwgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIFRoZSBjb2RlIGFscmVhZHkgaGFzIGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBwYWRkaW5nLiBUaGVyZWZvcmUsIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIG1lbW9yeSBpcyBlaXRoZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb24gYW55IGVycm9yLCBzbyBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgcHJlcGFyZSBteSByZXNwb25zZSBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDMsIk91dHB1dFRva2VucyI6MjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjE1OjQ0LjUwMjE1MjI1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQlBGIGtmdW5jcyAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCkgYW5kIHJlZmFjdG9ycyBleGlzdGluZyBoZWxwZXJzIChgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCkgYWxvbmcgd2l0aCBgY29weV9yZW1vdGVfdm1fc3RyYC9gY29weV9yZW1vdGVfbW1fc3RyYCBoZWxwZXJzIHRvIHJlYWQgdXNlciBtZW1vcnkgZnJvbSBhbiBgbW1fc3RydWN0YC4gSXQgYWxzbyBzZXRzIGBicHJtLVxcdTAwM2VtbSA9IE5VTExgIGluIGBmcmVlX2Jwcm0oKWAuXFxuXFxuQWxsIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IHZpYSBgYWNjZXNzX3JlbW90ZV92bWAvYGNvcHlfcmVtb3RlX21tX3N0cmAgb3IgZXhwbGljaXRseSBjbGVhcmVkIHdpdGggYG1lbXNldGAgb24gZXJyb3IgYW5kIHBhZGRpbmcgY29uZGl0aW9ucy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcGFzc2VkIGFjcm9zcyB0cnVzdCBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[1] Phase: Succeeded StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 17:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 17:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2] Phase: Succeeded StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 17:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 17:15:55 +0000 UTC FinishedAt: 2026-09-08 17:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow8v7gr/series-workflow8v7gr-convert-artifact-843528820/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 17:16:05 +0000 UTC FinishedAt: 2026-09-08 17:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 17:16:05 +0000 UTC FinishedAt: 2026-09-08 17:34:10 +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:*fdd22710-1393-4fa3-87f0-4e0f3c50e5a5,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-workflow8v7gr/series-workflow8v7gr-convert-artifact-843528820/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": "e48778bb-cbb3-4220-83f3-e458dfb69a98", "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-workflow8v7gr/series-workflow8v7gr-build-action-737222514/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:16:05 +0000 UTC FinishedAt: 2026-09-08 17:34:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fdd22710-1393-4fa3-87f0-4e0f3c50e5a5,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-workflow8v7gr/series-workflow8v7gr-convert-artifact-843528820/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": "e48778bb-cbb3-4220-83f3-e458dfb69a98", "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-workflow8v7gr/series-workflow8v7gr-build-action-737222514/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 17:34:10 +0000 UTC FinishedAt: 2026-09-08 17:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 17:34:10 +0000 UTC FinishedAt: 2026-09-08 17:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 17:34:10 +0000 UTC FinishedAt: 2026-09-08 17:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 17:34:10 +0000 UTC FinishedAt: 2026-09-08 17:34:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow8v7gr/series-workflow8v7gr-convert-artifact-3401030451/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 17:34:20 +0000 UTC FinishedAt: 2026-09-08 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 17:34:20 +0000 UTC FinishedAt: 2026-09-08 17:36:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e48778bb-cbb3-4220-83f3-e458dfb69a98,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-workflow8v7gr/series-workflow8v7gr-build-action-737222514/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-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 17:36:16 +0000 UTC FinishedAt: 2026-09-08 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 17:36:16 +0000 UTC FinishedAt: 2026-09-08 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 17:36:16 +0000 UTC FinishedAt: 2026-09-08 17:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 17:36:16 +0000 UTC FinishedAt: 2026-09-08 17:54:16 +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:*fdd22710-1393-4fa3-87f0-4e0f3c50e5a5,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-workflow8v7gr/series-workflow8v7gr-convert-artifact-3401030451/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": "741911da-4ee5-48bc-b131-647ff1a01f61", "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-workflow8v7gr/series-workflow8v7gr-build-action-2056823783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:36:16 +0000 UTC FinishedAt: 2026-09-08 17:54:06 +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:*fdd22710-1393-4fa3-87f0-4e0f3c50e5a5,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-workflow8v7gr/series-workflow8v7gr-convert-artifact-3401030451/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": "741911da-4ee5-48bc-b131-647ff1a01f61", "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-workflow8v7gr/series-workflow8v7gr-build-action-2056823783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 17:54:16 +0000 UTC FinishedAt: 2026-09-08 17:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 17:54:16 +0000 UTC FinishedAt: 2026-09-08 17:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 17:54:16 +0000 UTC FinishedAt: 2026-09-08 17:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 17:54:16 +0000 UTC FinishedAt: 2026-09-08 17:55:59 +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:*741911da-4ee5-48bc-b131-647ff1a01f61,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-workflow8v7gr/series-workflow8v7gr-build-action-2056823783/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-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +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-bpf-kasan-gce-corpus.db","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":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"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:*e48778bb-cbb3-4220-83f3-e458dfb69a98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*741911da-4ee5-48bc-b131-647ff1a01f61,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-workflow8v7gr/series-workflow8v7gr-build-action-737222514/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-workflow8v7gr/series-workflow8v7gr-build-action-2056823783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 17:56:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 17:56:13 +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-bpf-kasan-gce-corpus.db","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":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"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-workflow8v7gr/series-workflow8v7gr-convert-artifact-2814355244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 17:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 17:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 17:56:09 +0000 UTC FinishedAt: 2026-09-08 17:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 17:56:19 +0000 UTC FinishedAt: 2026-09-08 20:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8v7gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"a106878c-9eef-48ad-b6ea-c007cecbba83","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 17:56:19 +0000 UTC FinishedAt: 2026-09-08 20:58:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e48778bb-cbb3-4220-83f3-e458dfb69a98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*741911da-4ee5-48bc-b131-647ff1a01f61,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-workflow8v7gr/series-workflow8v7gr-build-action-737222514/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-workflow8v7gr/series-workflow8v7gr-build-action-2056823783/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-workflow8v7gr/series-workflow8v7gr-convert-artifact-2814355244/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,}