Name: series-workflowhfg4n Phase: Succeeded StartedAt: 2026-06-29 15:17:43 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[0] Phase: Succeeded StartedAt: 2026-06-29 15:17:43 +0000 UTC FinishedAt: 2026-06-29 15:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 15:17:43 +0000 UTC FinishedAt: 2026-06-29 15:32:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECCOMP", "SECCOMP_FILTER", "COMPAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECCOMP", "SECCOMP_FILTER", "COMPAT" ], "series_id": "a39c9165-716a-4c61-a21f-ce0bc84e5b6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_syscall_is_vdso_sigreturn", "user_enable_single_step", "user_disable_single_step" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ0NPTVAmIzM0OywKICAgICYjMzQ7U0VDQ09NUF9GSUxURVImIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuJiMzNDssCiAgICAmIzM0O3VzZXJfZW5hYmxlX3NpbmdsZV9zdGVwJiMzNDssCiAgICAmIzM0O3VzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMzY2OWY5NDJlYjUzZWRlMGY5MjE0ZGUzNmU4Y2Y0M2IwMTg5ODlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6Mjc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggMDY4Nzc2MGVhNDY2OTguLjI3ZDk4NDdiMTA4MjM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXG5AQCAtMzg3LDcgJiM0MzszODcsNyBAQCBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcih2b2lkKVxuIFx0ICogSWYgdGhpcyBmYWlscywgc2VjY29tcCBtYXkgYWxyZWFkeSBoYXZlIHNldCB1cCB0aGUgcmV0dXJuIHZhbHVlXG4gXHQgKiAoZS5nLiBTRUNDT01QX1JFVF9FUlJOTyAvIFRSQUNFKS5cbiBcdCAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkge1xuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGlmIChyZWdzLVx1MDAzZXIxOSA9PSAwIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxuIFx0XHRcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcbiBcdFx0c3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNcbkBAIC04NTUsNyAmIzQzOzg1NSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZTsgc3lzY2FsbCBtYXkgaGF2ZSBjaGFuZ2VkLiAqL1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gI2Vsc2VcbiBcdC8qIFhYWDogcmVtb3ZlIHRoaXMgb25jZSBPQUJJIGdldHMgZml4ZWQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWJkLi5hZWE2ODZkY2UzZDVhYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTI4LDkgJiM0MzsxMjgsOSBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXG4gXHRzZWxlY3QgR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTXG4gXHRzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQXG4mIzQzO1x0c2VsZWN0IEdFTkVSSUNfRU5UUllcbiBcdHNlbGVjdCBHRU5FUklDX0lETEVfUE9MTF9TRVRVUFxuIFx0c2VsZWN0IEdFTkVSSUNfSU9SRU1BUFxuLVx0c2VsZWN0IEdFTkVSSUNfSVJRX0VOVFJZXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfSVBJXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRFxuIFx0c2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbmluZGV4IGQyNzc5ZDYwNGM3YmUyLi5mNDNkNGRlYTkxNmE1YiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbkBAIC0xODUsNiAmIzQzOzE4NSw3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIHN0cnVjdCBsaW51eF9iaW5wcm07XG4gZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdFx0XHRcdCAgICAgICBpbnQgdXNlc19pbnRlcnApO1xuJiM0MztleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuIC8qIDFHQiBvZiBWQSAqL1xuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbkBAIC0zLDE0ICYjNDM7MywyMSBAQFxuICNpZm5kZWYgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxuICNkZWZpbmUgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RocmVhZF9pbmZvLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kYWlmZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbiBcbiYjNDM7ZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIge1xuJiM0MztcdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbiYjNDM7XHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIEFSQ0hfRVhJVF9UT19VU0VSX01PREVfV09SSyAoX1RJRl9NVEVfQVNZTkNfRkFVTFQgfCBfVElGX0ZPUkVJR05fRlBTVEFURSlcbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuQEAgLTU0LDQgJiM0Mzs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxuIFxuICNkZWZpbmUgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkXG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGludCAqcmVnbm8pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuJiM0MztcdCAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlblxuJiM0MztcdCAqIHNpZ25hbGxlZCBmcm9tIHN5c2NhbGwgZW50cnkgb3Igc3lzY2FsbCBleGl0IGJ5IGNsb2JiZXJpbmcgYSBnZW5lcmFsXG4mIzQzO1x0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuJiM0MztcdCAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4mIzQzO1x0ICogICBpZ25vcmVkL2Rpc2NhcmRlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4mIzQzO1x0ICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuJiM0MztcdCAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4mIzQzO1x0c2F2ZWRfcmVnID0gcmVncy1cdTAwM2VyZWdzWypyZWdub107XG4mIzQzO1x0cmVncy1cdTAwM2VyZWdzWypyZWdub10gPSBkaXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9yZWc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4mIzQzO1x0aW50IHJlZ25vLCByZXQ7XG4mIzQzO1xuJiM0MztcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FTlRFUiwgXHUwMDI2cmVnbm8pO1xuJiM0MztcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Zm9yZ2V0X3N5c2NhbGwocmVncyk7XG4mIzQzO1x0cmVncy1cdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIGludCBzdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4mIzQzO1x0aW50IHJlZ25vO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRVhJVCwgXHUwMDI2cmVnbm8pO1xuJiM0MztcdGlmICghc3RlcCkge1xuJiM0MztcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuJiM0MztcdFx0ICogdHJhY2VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHJlZ2lzdGVycyBtYXkgaGF2ZSByZXdvdW5kIHRoZVxuJiM0MztcdFx0ICogc3RhdGUgbWFjaGluZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdFxuJiM0MztcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYXVkaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG4gXG4gdHlwZWRlZiBsb25nICgqc3lzY2FsbF9mbl90KShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4gXG5AQCAtMTIwLDcgJiM0MzsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdHJldHVybiBBVURJVF9BUkNIX0FBUkNINjQ7XG4gfVxuIFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tXG4gI2VuZGlmXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDVkN2ZlM2UxNTNjODUwLi4zZjYyMWJhMGY5NjEzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNDYsNiAmIzQzOzQ2LDcgQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcbiBcdHU2NFx0XHRcdG1wYW1fcGFydGlkX3BtZztcbiAjZW5kaWZcbiBcdHUzMlx0XHRcdGNwdTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHN5c2NhbGxfd29yazsgICAvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXG4gfTtcbiBcbiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spXHRcXFxuQEAgLTY4LDExICYjNDM7NjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XG4gI2RlZmluZSBUSUZfVVBST0JFXHRcdDVcdC8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi9cbiAjZGVmaW5lIFRJRl9NVEVfQVNZTkNfRkFVTFRcdDZcdC8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovXG4gI2RlZmluZSBUSUZfTk9USUZZX1NJR05BTFx0N1x0Lyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFXHQ4XHQvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfQVVESVRcdDlcdC8qIHN5c2NhbGwgYXVkaXRpbmcgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlRcdDEwXHQvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqL1xuLSNkZWZpbmUgVElGX1NFQ0NPTVBcdFx0MTFcdC8qIHN5c2NhbGwgc2VjdXJlIGNvbXB1dGluZyAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXHRcdDEyXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cbiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HXHQxM1x0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xuICNkZWZpbmUgVElGX01FTURJRVx0XHQxOFx0LyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi9cbiAjZGVmaW5lIFRJRl9GUkVFWkVcdFx0MTlcbkBAIC05NCwyNCAmIzQzOzkwLDE0IEBAIHZvaWQgYXJjaF9zZXR1cF9uZXdfZXhlYyh2b2lkKTtcbiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVEX0xBWllcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTkVFRF9SRVNDSEVEX0xBWlkpXG4gI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUVcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTk9USUZZX1JFU1VNRSlcbiAjZGVmaW5lIF9USUZfRk9SRUlHTl9GUFNUQVRFXHQoMSBcdTAwM2NcdTAwM2MgVElGX0ZPUkVJR05fRlBTVEFURSlcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX1RSQUNFKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfQVVESVQpXG4tI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpXG4tI2RlZmluZSBfVElGX1NFQ0NPTVBcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TRUNDT01QKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX0VNVSlcbiAjZGVmaW5lIF9USUZfUEFUQ0hfUEVORElOR1x0KDEgXHUwMDNjXHUwMDNjIFRJRl9QQVRDSF9QRU5ESU5HKVxuICNkZWZpbmUgX1RJRl9VUFJPQkVcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9VUFJPQkUpXG4tI2RlZmluZSBfVElGX1NJTkdMRVNURVBcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TSU5HTEVTVEVQKVxuICNkZWZpbmUgX1RJRl8zMkJJVFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGXzMyQklUKVxuICNkZWZpbmUgX1RJRl9TVkVcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TVkUpXG4gI2RlZmluZSBfVElGX01URV9BU1lOQ19GQVVMVFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9NVEVfQVNZTkNfRkFVTFQpXG4gI2RlZmluZSBfVElGX05PVElGWV9TSUdOQUxcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTk9USUZZX1NJR05BTClcbiAjZGVmaW5lIF9USUZfVFNDX1NJR1NFR1ZcdCgxIFx1MDAzY1x1MDAzYyBUSUZfVFNDX1NJR1NFR1YpXG4gXG4tI2RlZmluZSBfVElGX1NZU0NBTExfV09SS1x0KF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFxcXG4tXHRcdFx0XHQgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQgfCBfVElGX1NFQ0NPTVAgfCBcXFxuLVx0XHRcdFx0IF9USUZfU1lTQ0FMTF9FTVUpXG4tXG4gI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDS1xuICNkZWZpbmUgSU5JVF9TQ1NcdFx0XHRcdFx0XHRcdFxcXG4gXHQuc2NzX2Jhc2VcdD0gaW5pdF9zaGFkb3dfY2FsbF9zdGFjayxcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG5pbmRleCAyOTMwNzY0MmY0YzkwNC4uYzUzNjgzODM5MTU1MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG5AQCAtMzg1LDExICYjNDM7Mzg1LDE5IEBAIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFxuIFx0aWYgKCF0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcodGksIFRJRl9TSU5HTEVTVEVQKSlcbiBcdFx0c2V0X3JlZ3Nfc3Bzcl9zcyh0YXNrX3B0X3JlZ3ModGFzaykpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB0aGF0IHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgdHJpZ2dlcnMgYSB0cmFwIG9uY2Ugc3RlcHBpbmdcbiYjNDM7XHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXG4mIzQzO1x0ICogYXMgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBkb2VzIG5vdCBuYXRpdmVseSBjaGVjayBmb3IgVElGX1NJTkdMRVNURVAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcbiBcbiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4ge1xuIFx0Y2xlYXJfdGlfdGhyZWFkX2ZsYWcodGFza190aHJlYWRfaW5mbyh0YXNrKSwgVElGX1NJTkdMRVNURVApO1xuJiM0MztcdGNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNGQwODU5OGUyODkxZDMuLjYxYTY2ODY4Mjk0NzE1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXG5AQCAtOCw3ICYjNDM7OCw2IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYXVkaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuQEAgLTE4LDcgJiM0MzsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY2NvbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuQEAgLTI4LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdfYnJlYWtwb2ludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnc2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9jb21wYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHVmZWF0dXJlLmhcdTAwM2VcbkBAIC0zOCwxMyAmIzQzOzM1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9pbnRlcl9hdXRoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS90cmFwcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N5c3RlbV9taXNjLmhcdTAwM2VcbiBcbi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbi0jaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc3lzY2FsbHMuaFx1MDAzZVxuLVxuIHN0cnVjdCBwdF9yZWdzX29mZnNldCB7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIFx0aW50IG9mZnNldDtcbkBAIC0yMzM5LDExNCAmIzQzOzIzMzIsNiBAQCBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbiBcdHJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7XG4gfVxuIFxuLWVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcbi1cdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbi1cdFBUUkFDRV9TWVNDQUxMX0VYSVQsXG4tfTtcbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgaW50ICpyZWdubylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuLVx0ICogZXhpdCBzdG9wcyBiZWNhdXNlIHdlIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdG9wIGhhcyBiZWVuXG4tXHQgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbFxuLVx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuLVx0ICogYW5kIHJlc3RvcmluZyBpdHMgb2xkIHZhbHVlIGFmdGVyIHRoZSBzdG9wLiBUaGlzIG1lYW5zIHRoYXQ6XG4tXHQgKlxuLVx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4tXHQgKiAgIGlnbm9yZWQvZGlzY2FyZGVkLlxuLVx0ICpcbi1cdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4tXHQgKiAgIHNvIHRoZSB0cmFjZXIgY2Fubm90IHNhdmUgaXQgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuXG4tXHQgKlxuLVx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuLVx0ICogICAodGhlIGxhdHRlciBkbyBub3Qgbm9iYmxlIGFueSByZWdpc3RlcnMpLlxuLVx0ICovXG4tXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4tXHRzYXZlZF9yZWcgPSByZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xuLVxuLVx0cmV0dXJuIHNhdmVkX3JlZztcbi19XG4tXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cdGludCByZWdubywgcmV0O1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcdTAwMjZyZWdubyk7XG4tXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRpZiAocmV0KVxuLVx0XHRmb3JnZXRfc3lzY2FsbChyZWdzKTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuLVx0aW50IHJlZ25vO1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFx1MDAyNnJlZ25vKTtcbi1cdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcbi1cdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4tXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuLVx0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4tXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4tXHRcdCAqL1xuLVx0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbi1cdH1cbi19XG4tXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHtcbi1cdFx0cmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRcdGlmIChyZXQgfHwgKGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfRU1VKSlcbi1cdFx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cdH1cbi1cbi1cdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuLVx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cbi1cdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuLVx0XHR0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy1cdTAwM2VzeXNjYWxsbm8pO1xuLVxuLVx0YXVkaXRfc3lzY2FsbF9lbnRyeShyZWdzLVx1MDAzZXN5c2NhbGxubywgcmVncy1cdTAwM2VvcmlnX3gwLCByZWdzLVx1MDAzZXJlZ3NbMV0sXG4tXHRcdFx0ICAgIHJlZ3MtXHUwMDNlcmVnc1syXSwgcmVncy1cdTAwM2VyZWdzWzNdKTtcbi1cbi1cdHJldHVybiByZWdzLVx1MDAzZXN5c2NhbGxubztcbi19XG4tXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXG4tXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxuLVx0XHR0cmFjZV9zeXNfZXhpdChyZWdzLCBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncykpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0cmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzKTtcbi1cbi1cdHJzZXFfc3lzY2FsbChyZWdzKTtcbi19XG4tXG4gLypcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cbiAgKiBXZSBwZXJtaXQgdXNlcnNwYWNlIHRvIHNldCBTU0JTIChBQXJjaDY0IGJpdCAxMiwgQUFyY2gzMiBiaXQgMjMpIHdoaWNoIGlzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY1xuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXG5AQCAtOCw4ICYjNDM7OCw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS1lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcmVlemVyLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcbmluZGV4IDM1OGRkZmJmMTQwMWFjLi5lMGE5OGZhYzNiODU2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cmFjZS5oXHUwMDNlXG5AQCAtNTQsMTUgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXG4gXHRzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncywgMCwgcmV0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGhhc19zeXNjYWxsX3dvcmsodW5zaWduZWQgbG9uZyBmbGFncylcbi17XG4tXHRyZXR1cm4gdW5saWtlbHkoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9XT1JLKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4tXHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHdvcms7XG4gXG4gXHRyZWdzLVx1MDAzZW9yaWdfeDAgPSByZWdzLVx1MDAzZXJlZ3NbMF07XG4gXHRyZWdzLVx1MDAzZXN5c2NhbGxubyA9IHNjbm87XG5AQCAtOTUsNyAmIzQzOzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkge1xuJiM0MztcdHdvcmsgPSBSRUFEX09OQ0UoY3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXN5c2NhbGxfd29yayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUikpIHtcbiBcdFx0LypcbiBcdFx0ICogVGhlIGRlLWZhY3RvIHN0YW5kYXJkIHdheSB0byBza2lwIGEgc3lzdGVtIGNhbGwgdXNpbmcgcHRyYWNlXG4gXHRcdCAqIGlzIHRvIHNldCB0aGUgc3lzdGVtIGNhbGwgdG8gLTEgKE5PX1NZU0NBTEwpIGFuZCBzZXQgeDAgdG8gYVxuQEAgLTExMywyNiAmIzQzOzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbiBcdFx0ICovXG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApO1xuLVx0XHRzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTtcbiYjNDM7XHRcdHNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspO1xuIFx0XHRpZiAoc2NubyA9PSBOT19TWVNDQUxMKVxuIFx0XHRcdGdvdG8gdHJhY2VfZXhpdDtcbiBcdH1cbiBcbiBcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcbi1cbi1cdC8qXG4tXHQgKiBUaGUgdHJhY2luZyBzdGF0dXMgbWF5IGhhdmUgY2hhbmdlZCB1bmRlciBvdXIgZmVldCwgc28gd2UgaGF2ZSB0b1xuLVx0ICogY2hlY2sgYWdhaW4uIEhvd2V2ZXIsIGlmIHdlIHdlcmUgdHJhY2luZyBlbnRyeSwgdGhlbiB3ZSBhbHdheXMgdHJhY2Vcbi1cdCAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuXG4tXHQgKi9cbi1cdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkge1xuLVx0XHRmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRcdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9USUZfU0lOR0xFU1RFUCkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuLVxuIHRyYWNlX2V4aXQ6XG4tXHRzeXNjYWxsX3RyYWNlX2V4aXQocmVncyk7XG4mIzQzO1x0c3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpO1xuIH1cbiBcbiB2b2lkIGRvX2VsMF9zdmMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXG5pbmRleCA1OTJkZDg2NjhkZTQ2My4uNWEwMzE0YTNjMjZlODIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xuQEAgLTM0MywzICYjNDM7MzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2lndHJhbXA7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVFxuJiM0MztcdGlmIChpc19jb21wYXRfdGFzaygpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHNpZ3BhZ2UgPSAodW5zaWduZWQgbG9uZyljdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuc2lncGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmVncy1cdTAwM2VwYyBcdTAwM2U9IHNpZ3BhZ2UgXHUwMDI2XHUwMDI2IHJlZ3MtXHUwMDNlcGMgXHUwMDNjIChzaWdwYWdlICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRzaWd0cmFtcCA9ICh1bnNpZ25lZCBsb25nKVZEU09fU1lNQk9MKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlY29udGV4dC52ZHNvLCBzaWd0cmFtcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdzLVx1MDAzZXBjID09IChzaWd0cmFtcCAmIzQzOyA4KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5AQCAtMzIzLDcgJiM0MzszMjMsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAocHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4mIzQzO1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuaW5kZXggZGY4ZWEyMjNjNzdiMWEuLjk0Njg4Njc5NGNlZGYwIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC04NSw5ICYjNDM7ODUsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuICNlbmRpZlx0LyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5AQCAtMjgxLDcgJiM0MzsyODEsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpXG4gXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpXG4gXHRcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSh0YXNrX3B0X3JlZ3MoY3VycmVudCkpO1xuIFxuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggM2Y0Yzk0Yzg4MTI0MTcuLjBkODA5Y2RhNzU0MjkyIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTEzMjgsNyAmIzQzOzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXG5pbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0XG4tLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0fVxuIFxuIFx0LyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgY2hlY2sgYWZ0ZXIgcHRyYWNlLiAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgzNGZjYzRmN2I1NDNiLi40YjNjNTJlZDZlOWQyYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMzksOSAmIzQzOzEzOSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDtcbiB9XG4tXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuICNlbmRpZlx0LyogX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5pbmRleCA4MDY3ZTY2NmE0Y2E2OC4uOTg3YzlhNzg4MDZmNzggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMTIsMTEgJiM0MzsxMTIsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bG9uZyBzeXNjYWxsKVxuIFx0cmVncy1cdTAwM2VhMCA9IGZuKHJlZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9mbHVzaF9pY2FjaGUodWludHB0cl90LCB1aW50cHRyX3QsIHVpbnRwdHJfdCk7XG4gXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9od3Byb2JlKHN0cnVjdCByaXNjdl9od3Byb2JlICosIHNpemVfdCwgc2l6ZV90LFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5pbmRleCA0MjcxZTQxNjlmNDViNi4uNWYzMTBjYWFkMWZjZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5AQCAtODksMTEgJiM0Mzs4OSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzEgLCBcJiMzNDswXCYjMzQ7IChyMilcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzIgLCBcJiMzNDtkXCYjMzQ7IChyMykgU1lTQ0FMTF9GTVRfMVxuZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcbmluZGV4IDA2Zjc2NWQ3MWEyOTUxLi44Njg3ZjE3Y2JlNWFkYyAxMDA2NDRcbi0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuY1xuQEAgLTQ2MCw3ICYjNDM7NDYwLDcgQEAgYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4mIzQzO1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcbkBAIC0yNyw3ICYjNDM7MjcsNyBAQCB2b2lkIGhhbmRsZV9zeXNjYWxsKHN0cnVjdCB1bWxfcHRfcmVncyAqcilcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBEbyB0aGUgc2VjY29tcCBjaGVjayBhZnRlciBwdHJhY2U7IGZhaWx1cmVzIHNob3VsZCBiZSBmYXN0LiAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRzeXNjYWxsID0gVVBUX1NZU0NBTExfTlIocik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbmluZGV4IGVhMzZkZTlmYTg2NDFkLi42YWVkMzk4N2I5Zjk2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIFx0cmVncy1cdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcbiBcdHJlZ3MtXHUwMDNlYXggPSAtRU5PU1lTO1xuIFx0dG1wID0gc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0aWYgKCghdG1wIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZW9yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy1cdTAwM2VpcCAhPSBhZGRyZXNzKSB7XG4mIzQzO1x0aWYgKCh0bXAgXHUwMDI2XHUwMDI2IHJlZ3MtXHUwMDNlb3JpZ19heCAhPSBzeXNjYWxsX25yKSB8fCByZWdzLVx1MDAzZWlwICE9IGFkZHJlc3MpIHtcbiBcdFx0d2Fybl9iYWRfdnN5c2NhbGwoS0VSTl9ERUJVRywgcmVncyxcbiBcdFx0XHRcdCAgXCYjMzQ7c2VjY29tcCB0cmllZCB0byBjaGFuZ2Ugc3lzY2FsbCBuciBvciBpcFwmIzM0Oyk7XG4gXHRcdGZvcmNlX2V4aXRfc2lnKFNJR1NZUyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXG5pbmRleCBiODBkNTRiMmVhMzRlNi4uZWY3OGZjZDMxOGZmY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTU1Myw4ICYjNDM7NTUzLDcgQEAgaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKHJlZ3MtXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8XG4tXHQgICAgc2VjdXJlX2NvbXB1dGluZygpID09IC0xKSB7XG4mIzQzO1x0aWYgKHJlZ3MtXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8ICFzZWN1cmVfY29tcHV0aW5nKCkpIHtcbiBcdFx0ZG9fc3lzY2FsbF90cmFjZV9sZWF2ZShyZWdzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaCBiL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbmluZGV4IDQxNmEzMzUyMjYxZmU4Li4zZjY2MzIwZTQ2ZDMzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbkBAIC0xMDAsOSAmIzQzOzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqL1xuIFx0aWYgKHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19TRUNDT01QKSB7XG4tXHRcdHJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0XHRpZiAocmV0ID09IC0xTClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCFfX3NlY3VyZV9jb21wdXRpbmcoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xTDtcbiBcdH1cbiBcbiBcdC8qIEVpdGhlciBvZiB0aGUgYWJvdmUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSBzeXNjYWxsIG51bWJlciAqL1xuQEAgLTExMyw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcbiBcbiBcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XG4gXG4tXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xuJiM0MztcdHJldHVybiBzeXNjYWxsO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaCBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oXG5pbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcbkBAIC0yMiwxNCAmIzQzOzIyLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjY29tcC5oXHUwMDNlXG4gXG4tZXh0ZXJuIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7XG4mIzQzO2V4dGVybiBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNlY3VyZV9jb21wdXRpbmcodm9pZClcbiB7XG4gXHRpZiAodW5saWtlbHkodGVzdF9zeXNjYWxsX3dvcmsoU0VDQ09NUCkpKVxuIFx0XHRyZXR1cm4gIF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4gZXh0ZXJuIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCk7XG5AQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWNjb21wX21vZGUoc3RydWN0IHNlY2NvbXAgKnMpXG4gc3RydWN0IHNlY2NvbXBfZGF0YTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCkgeyByZXR1cm47IH1cbiAjZW5kaWZcbi1zdGF0aWMgaW5saW5lIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGxvbmcgcHJjdGxfZ2V0X3NlY2NvbXAodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbmluZGV4IDM4NThhNmZmZGQ1Yzg0Li43M2Q2OWUwMjgwN2Q4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxuIFxuJiM0Mztib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4gaW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbiBcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciBfX3VzZXIgKnNlbGVjdG9yKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcbmluZGV4IGQ4OWRmZmNjMmQ2NDI5Li5hY2Y1NDU3NzRkMzcyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jXG5AQCAtMzIsNiAmIzQzOzMyLDExIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJfc2lnc3lzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0Zm9yY2Vfc2lnX2luZm8oXHUwMDI2aW5mbyk7XG4gfVxuIFxuJiM0Mztib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCAqc2QgPSBcdTAwMjZjdXJyZW50LVx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NlY2NvbXAuYyBiL2tlcm5lbC9zZWNjb21wLmNcbmluZGV4IDA2NjkwOTM5M2MzOGY1Li4xZmVjNmVmZWRhYjYyNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zZWNjb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zZWNjb21wLmNcbkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG4gXHRlbHNlXG4gXHRcdEJVRygpO1xuIH1cbi1pbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4mIzQzO2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4ge1xuIFx0aW50IHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbiBcbkBAIC0xMjU2LDcgJiM0MzsxMjU2LDcgQEAgc3RhdGljIGludCBzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKGludCB0aGlzX3N5c2NhbGwsXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4mIzQzO3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIHtcbiBcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XG4gXHRzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkO1xuQEAgLTEyOTQsNyAmIzQzOzEyOTQsNyBAQCBzdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIFx0Y2FzZSBTRUNDT01QX1JFVF9UUkFDRTpcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi9cbiBcdFx0aWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqL1xuIFx0XHRpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkge1xuQEAgLTEzMzAsMTkgJiM0MzsxMzMwLDE5IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRcdCAqIGEgc2tpcCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXBvcnRlZC5cbiBcdFx0ICovXG4gXHRcdGlmIChfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgdHJ1ZSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XG4gXHRcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFx1MDAyNnNkKSlcbiBcdFx0XHRnb3RvIHNraXA7XG4gXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0xPRzpcbiBcdFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIHRydWUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBTRUNDT01QX1JFVF9BTExPVzpcbiBcdFx0LypcbkBAIC0xMzUwLDcgJiM0MzsxMzUwLDcgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogdGhpcyBhY3Rpb24gc2luY2UgU0VDQ09NUF9SRVRfQUxMT1cgaXMgdGhlIHN0YXJ0aW5nXG4gXHRcdCAqIHN0YXRlIGluIHNlY2NvbXBfcnVuX2ZpbHRlcnMoKS5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfVEhSRUFEOlxuIFx0Y2FzZSBTRUNDT01QX1JFVF9LSUxMX1BST0NFU1M6XG5AQCAtMTM2Nyw0NiAmIzQzOzEzNjcsNDYgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19leGl0KFNJR1NZUyk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuIFx0fVxuIFxuIFx0dW5yZWFjaGFibGUoKTtcbiBcbiBza2lwOlxuIFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtXHUwMDNlbG9nIDogZmFsc2UpO1xuLVx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuJiM0MztzdGF0aWMgYm9vbCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiB7XG4gXHRCVUcoKTtcbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbiYjNDM7Ym9vbCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbiB7XG4gXHRpbnQgbW9kZSA9IGN1cnJlbnQtXHUwMDNlc2VjY29tcC5tb2RlO1xuIFx0aW50IHRoaXNfc3lzY2FsbDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlcHRyYWNlIFx1MDAyNiBQVF9TVVNQRU5EX1NFQ0NPTVApKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0dGhpc19zeXNjYWxsID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgY3VycmVudF9wdF9yZWdzKCkpO1xuIFxuIFx0c3dpdGNoIChtb2RlKSB7XG4gXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XG4gXHRcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0ZJTFRFUjpcbiBcdFx0cmV0dXJuIF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCBmYWxzZSk7XG4gXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0ZG9fZXhpdChTSUdLSUxMKTtcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0QlVHKCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDQ09NUCYjMzQ7LAogICAgJiMzNDtTRUNDT01QX0ZJTFRFUiYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4mIzM0OywKICAgICYjMzQ7dXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAmIzM0OywKICAgICYjMzQ7dXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIGFybTY0IHRvIHVzZSB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGZvciBzeXN0ZW0gY2FsbHMsIHJlcGxhY2luZyBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgd2l0aCBnZW5lcmljIGhvb2tzLiBJdCBhbHNvIG1vZGlmaWVzIHNlY3VyZV9jb21wdXRpbmcoKSB0cmVlLXdpZGUgdG8gcmV0dXJuIGEgYm9vbGVhbi4gVGhpcyBpcyBhIG1ham9yIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c2NhbGwgcGF0aCBvbiBhcm02NCBhbmQgc2VjY29tcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGFybTY0LXNwZWNpZmljIGdlbmVyaWMgZW50cnkgaG9va3MgKGUuZy4sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybikgYW5kIHB0cmFjZSBzaW5nbGUtc3RlcCB0b2dnbGluZyB3aGljaCB3YXMgbW9kaWZpZWQgdG8gaW50ZXJhY3Qgd2l0aCBnZW5lcmljIGVudHJ5LiBTRUNDT01QIGFuZCBDT01QQVQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIHNlY2NvbXAgbG9naWMgYW5kIGNvbXBhdCB2ZHNvIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDM2NjlmOTQyZWI1M2VkZTBmOTIxNGRlMzZlOGNmNDNiMDE4OTg5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDE1OjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYwppbmRleCAwNjg3NzYwZWE0NjY5OC4uMjdkOTg0N2IxMDgyMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpCiAJICogSWYgdGhpcyBmYWlscywgc2VjY29tcCBtYXkgYWxyZWFkeSBoYXZlIHNldCB1cCB0aGUgcmV0dXJuIHZhbHVlCiAJICogKGUuZy4gU0VDQ09NUF9SRVRfRVJSTk8gLyBUUkFDRSkuCiAJICovCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkgewomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkgewogCQlpZiAocmVncy0mZ3Q7cjE5ID09IDAgJmFtcDsmYW1wOyByZWdzLSZndDtyMCA9PSAodW5zaWduZWQgbG9uZyktMSkKIAkJCXN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTsKIAkJc3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IDc5NTFiMmMwNmZlYzYwLi41MjEwNzQ1NzI1Y2E3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtODU1LDcgJiM0Mzs4NTUsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCiAJLyogRG8gc2VjY29tcCBhZnRlciBwdHJhY2U7IHN5c2NhbGwgbWF5IGhhdmUgY2hhbmdlZC4gKi8KICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKICNlbHNlCiAJLyogWFhYOiByZW1vdmUgdGhpcyBvbmNlIE9BQkkgZ2V0cyBmaXhlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi5hZWE2ODZkY2UzZDVhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMTI4LDkgJiM0MzsxMjgsOSBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgR0VORVJJQ19DUFVfREVWSUNFUwogCXNlbGVjdCBHRU5FUklDX0NQVV9WVUxORVJBQklMSVRJRVMKIAlzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQCiYjNDM7CXNlbGVjdCBHRU5FUklDX0VOVFJZCiAJc2VsZWN0IEdFTkVSSUNfSURMRV9QT0xMX1NFVFVQCiAJc2VsZWN0IEdFTkVSSUNfSU9SRU1BUAotCXNlbGVjdCBHRU5FUklDX0lSUV9FTlRSWQogCXNlbGVjdCBHRU5FUklDX0lSUV9JUEkKIAlzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRAogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZDI3NzlkNjA0YzdiZTIuLmY0M2Q0ZGVhOTE2YTViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VsZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTE4NSw2ICYjNDM7MTg1LDcgQEAgZG8gewkJCQkJCQkJCVwKIHN0cnVjdCBsaW51eF9iaW5wcm07CiBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCSAgICAgICBpbnQgdXNlc19pbnRlcnApOwomIzQzO2V4dGVybiBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qIDFHQiBvZiBWQSAqLwogI2lmZGVmIENPTkZJR19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oCmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oCkBAIC0zLDE0ICYjNDM7MywyMSBAQAogI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9ICiAjZGVmaW5lIF9BU01fQVJNNjRfRU5UUllfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aHJlYWRfaW5mby5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9kYWlmZmxhZ3MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZnBzaW1kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL210ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zdGFja3RyYWNlLmgmZ3Q7CiAKJiM0MztlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7CiYjNDM7CVBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCwKJiM0MzsJUFRSQUNFX1NZU0NBTExfRVhJVCwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpCiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCkBAIC01NCw0ICYjNDM7NjEsNzMgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWQodm9pZCkKIAogI2RlZmluZSBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWQKIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiYjNDM7CQkJCQkJICAgICBlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciBkaXIsCiYjNDM7CQkJCQkJICAgICBpbnQgKnJlZ25vKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGhhdmUgc29tZSBBQkkgd2VpcmRuZXNzIGhlcmUgaW4gdGhlIHdheSB0aGF0IHdlIGhhbmRsZSBzeXNjYWxsCiYjNDM7CSAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlbgomIzQzOwkgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbAomIzQzOwkgKiBwdXJwb3NlIHJlZ2lzdGVyIChpcC9yMTIgZm9yIEFBcmNoMzIsIHg3IGZvciBBQXJjaDY0KSBpbiB0aGUgdHJhY2VlCiYjNDM7CSAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OgomIzQzOwkgKgomIzQzOwkgKiAtIEFueSB3cml0ZXMgYnkgdGhlIHRyYWNlciB0byB0aGlzIHJlZ2lzdGVyIGR1cmluZyB0aGUgc3RvcCBhcmUKJiM0MzsJICogICBpZ25vcmVkL2Rpc2NhcmRlZC4KJiM0MzsJICoKJiM0MzsJICogLSBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSByZWdpc3RlciBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyB0aGUgc3RvcCwKJiM0MzsJICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLgomIzQzOwkgKgomIzQzOwkgKiAtIFN5c2NhbGwgc3RvcHMgYmVoYXZlIGRpZmZlcmVudGx5IHRvIHNlY2NvbXAgYW5kIHBzZXVkby1zdGVwIHRyYXBzCiYjNDM7CSAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS4KJiM0MzsJICovCiYjNDM7CSpyZWdubyA9IChpc19jb21wYXRfdGFzaygpID8gMTIgOiA3KTsKJiM0MzsJc2F2ZWRfcmVnID0gcmVncy0mZ3Q7cmVnc1sqcmVnbm9dOwomIzQzOwlyZWdzLSZndDtyZWdzWypyZWdub10gPSBkaXI7CiYjNDM7CiYjNDM7CXJldHVybiBzYXZlZF9yZWc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CWludCByZWdubywgcmV0OwomIzQzOwomIzQzOwlzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsICZhbXA7cmVnbm8pOwomIzQzOwlyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmb3JnZXRfc3lzY2FsbChyZWdzKTsKJiM0MzsJcmVncy0mZ3Q7cmVnc1tyZWdub10gPSBzYXZlZF9yZWc7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKJiM0MzsJCQkJCQkJICAgIGludCBzdGVwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CWludCByZWdubzsKJiM0MzsKJiM0MzsJc2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsICZhbXA7cmVnbm8pOwomIzQzOwlpZiAoIXN0ZXApIHsKJiM0MzsJCXB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDApOwomIzQzOwkJcmVncy0mZ3Q7cmVnc1tyZWdub10gPSBzYXZlZF9yZWc7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZWdzLSZndDtyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dAomIzQzOwkJICogdHJhY2VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHJlZ2lzdGVycyBtYXkgaGF2ZSByZXdvdW5kIHRoZQomIzQzOwkJICogc3RhdGUgbWFjaGluZS4KJiM0MzsJCSAqLwomIzQzOwkJcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQKJiM0MzsKICNlbmRpZiAvKiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYXVkaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwogCiB0eXBlZGVmIGxvbmcgKCpzeXNjYWxsX2ZuX3QpKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIApAQCAtMTIwLDcgJiM0MzsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAlyZXR1cm4gQVVESVRfQVJDSF9BQVJDSDY0OwogfQogCi1pbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KICNlbmRpZgkvKiBfX0FTTV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA1ZDdmZTNlMTUzYzg1MC4uM2Y2MjFiYTBmOTYxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIHN0cnVjdCB0aHJlYWRfaW5mbyB7CiAJdTY0CQkJbXBhbV9wYXJ0aWRfcG1nOwogI2VuZGlmCiAJdTMyCQkJY3B1OwomIzQzOwl1bnNpZ25lZCBsb25nCQlzeXNjYWxsX3dvcms7ICAgLyogU1lTQ0FMTF9XT1JLXyBmbGFncyAqLwogfTsKIAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQlcCkBAIC02OCwxMSAmIzQzOzY5LDYgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpOwogI2RlZmluZSBUSUZfVVBST0JFCQk1CS8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi8KICNkZWZpbmUgVElGX01URV9BU1lOQ19GQVVMVAk2CS8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovCiAjZGVmaW5lIFRJRl9OT1RJRllfU0lHTkFMCTcJLyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJOAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk5CS8qIHN5c2NhbGwgYXVkaXRpbmcgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVAkxMAkvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqLwotI2RlZmluZSBUSUZfU0VDQ09NUAkJMTEJLyogc3lzY2FsbCBzZWN1cmUgY29tcHV0aW5nICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX0VNVQkJMTIJLyogc3lzY2FsbCBlbXVsYXRpb24gYWN0aXZlICovCiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HCTEzCS8qIHBlbmRpbmcgbGl2ZSBwYXRjaGluZyB1cGRhdGUgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTgJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKQEAgLTk0LDI0ICYjNDM7OTAsMTQgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpOwogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRF9MQVpZCSgxICZsdDsmbHQ7IFRJRl9ORUVEX1JFU0NIRURfTEFaWSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxICZsdDsmbHQ7IFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX0ZPUkVJR05fRlBTVEFURQkoMSAmbHQ7Jmx0OyBUSUZfRk9SRUlHTl9GUFNUQVRFKQotI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgJmx0OyZsdDsgVElGX1NZU0NBTExfVFJBQ0UpCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSAmbHQ7Jmx0OyBUSUZfU1lTQ0FMTF9BVURJVCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQJKDEgJmx0OyZsdDsgVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKLSNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMSAmbHQ7Jmx0OyBUSUZfU0VDQ09NUCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVQkoMSAmbHQ7Jmx0OyBUSUZfU1lTQ0FMTF9FTVUpCiAjZGVmaW5lIF9USUZfUEFUQ0hfUEVORElORwkoMSAmbHQ7Jmx0OyBUSUZfUEFUQ0hfUEVORElORykKICNkZWZpbmUgX1RJRl9VUFJPQkUJCSgxICZsdDsmbHQ7IFRJRl9VUFJPQkUpCi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgJmx0OyZsdDsgVElGX1NJTkdMRVNURVApCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxICZsdDsmbHQ7IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9TVkUJCSgxICZsdDsmbHQ7IFRJRl9TVkUpCiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUCSgxICZsdDsmbHQ7IFRJRl9NVEVfQVNZTkNfRkFVTFQpCiAjZGVmaW5lIF9USUZfTk9USUZZX1NJR05BTAkoMSAmbHQ7Jmx0OyBUSUZfTk9USUZZX1NJR05BTCkKICNkZWZpbmUgX1RJRl9UU0NfU0lHU0VHVgkoMSAmbHQ7Jmx0OyBUSUZfVFNDX1NJR1NFR1YpCiAKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1dPUksJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFwKLQkJCQkgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQgfCBfVElGX1NFQ0NPTVAgfCBcCi0JCQkJIF9USUZfU1lTQ0FMTF9FTVUpCi0KICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0sKICNkZWZpbmUgSU5JVF9TQ1MJCQkJCQkJXAogCS5zY3NfYmFzZQk9IGluaXRfc2hhZG93X2NhbGxfc3RhY2ssCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMKaW5kZXggMjkzMDc2NDJmNGM5MDQuLmM1MzY4MzgzOTE1NTM2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMKQEAgLTM4NSwxMSAmIzQzOzM4NSwxOSBAQCB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAogCWlmICghdGVzdF9hbmRfc2V0X3RpX3RocmVhZF9mbGFnKHRpLCBUSUZfU0lOR0xFU1RFUCkpCiAJCXNldF9yZWdzX3Nwc3Jfc3ModGFza19wdF9yZWdzKHRhc2spKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgY29kZSB0cmlnZ2VycyBhIHRyYXAgb25jZSBzdGVwcGluZwomIzQzOwkgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sCiYjNDM7CSAqIGFzIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZG9lcyBub3QgbmF0aXZlbHkgY2hlY2sgZm9yIFRJRl9TSU5HTEVTVEVQLgomIzQzOwkgKi8KJiM0MzsJc2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTsKIH0KIE5PS1BST0JFX1NZTUJPTCh1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCk7CiAKIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAljbGVhcl90aV90aHJlYWRfZmxhZyh0YXNrX3RocmVhZF9pbmZvKHRhc2spLCBUSUZfU0lOR0xFU1RFUCk7CiYjNDM7CWNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTsKIH0KIE5PS1BST0JFX1NZTUJPTCh1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ZDA4NTk4ZTI4OTFkMy4uNjFhNjY4NjgyOTQ3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCkBAIC04LDcgJiM0Mzs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLgogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9hdWRpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwpAQCAtMTgsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2VjY29tcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbC5oJmd0OwpAQCAtMjgsNyAmIzQzOzI2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9od19icmVha3BvaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVnc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZWxmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL2NvbXBhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9jcHVmZWF0dXJlLmgmZ3Q7CkBAIC0zOCwxMyAmIzQzOzM1LDkgQEAKICNpbmNsdWRlICZsdDthc20vbXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3BvaW50ZXJfYXV0aC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zdGFja3RyYWNlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNtL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICZsdDthc20vdHJhcHMuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3lzdGVtX21pc2MuaCZndDsKIAotI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3N5c2NhbGxzLmgmZ3Q7Ci0KIHN0cnVjdCBwdF9yZWdzX29mZnNldCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgb2Zmc2V0OwpAQCAtMjMzOSwxMTQgJiM0MzsyMzMyLDYgQEAgbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsCiAJcmV0dXJuIHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIH0KIAotZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgewotCVBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCwKLQlQVFJBQ0VfU1lTQ0FMTF9FWElULAotfTsKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHB0cmFjZV9zYXZlX3JlZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJCSAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLAotCQkJCQkJICAgICBpbnQgKnJlZ25vKQotewotCXVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnOwotCi0JLyoKLQkgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbAotCSAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlbgotCSAqIHNpZ25hbGxlZCBmcm9tIHN5c2NhbGwgZW50cnkgb3Igc3lzY2FsbCBleGl0IGJ5IGNsb2JiZXJpbmcgYSBnZW5lcmFsCi0JICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZQotCSAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OgotCSAqCi0JICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlCi0JICogICBpZ25vcmVkL2Rpc2NhcmRlZC4KLQkgKgotCSAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsCi0JICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLgotCSAqCi0JICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwcwotCSAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS4KLQkgKi8KLQkqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7Ci0Jc2F2ZWRfcmVnID0gcmVncy0mZ3Q7cmVnc1sqcmVnbm9dOwotCXJlZ3MtJmd0O3JlZ3NbKnJlZ25vXSA9IGRpcjsKLQotCXJldHVybiBzYXZlZF9yZWc7Ci19Ci0KLXN0YXRpYyBpbnQgcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7Ci0JaW50IHJlZ25vLCByZXQ7Ci0KLQlzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsICZhbXA7cmVnbm8pOwotCXJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTsKLQlpZiAocmV0KQotCQlmb3JnZXRfc3lzY2FsbChyZWdzKTsKLQlyZWdzLSZndDtyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZzsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcG9ydF9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7Ci0JaW50IHJlZ25vOwotCi0Jc2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsICZhbXA7cmVnbm8pOwotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHsKLQkJcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7Ci0JCXJlZ3MtJmd0O3JlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnOwotCX0gZWxzZSB7Ci0JCXJlZ3MtJmd0O3JlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnOwotCi0JCS8qCi0JCSAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0Ci0JCSAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGUKLQkJICogc3RhdGUgbWFjaGluZS4KLQkJICovCi0JCXB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpOwotCX0KLX0KLQotaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0JaW50IHJldDsKLQotCWlmIChmbGFncyAmYW1wOyAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHsKLQkJcmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7Ci0JCWlmIChyZXQgfHwgKGZsYWdzICZhbXA7IF9USUZfU1lTQ0FMTF9FTVUpKQotCQkJcmV0dXJuIE5PX1NZU0NBTEw7Ci0JfQotCi0JLyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQotCQlyZXR1cm4gTk9fU1lTQ0FMTDsKLQotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKQotCQl0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy0mZ3Q7c3lzY2FsbG5vKTsKLQotCWF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy0mZ3Q7c3lzY2FsbG5vLCByZWdzLSZndDtvcmlnX3gwLCByZWdzLSZndDtyZWdzWzFdLAotCQkJICAgIHJlZ3MtJmd0O3JlZ3NbMl0sIHJlZ3MtJmd0O3JlZ3NbM10pOwotCi0JcmV0dXJuIHJlZ3MtJmd0O3N5c2NhbGxubzsKLX0KLQotdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0KLQlhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7Ci0KLQlpZiAoZmxhZ3MgJmFtcDsgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCi0JCXRyYWNlX3N5c19leGl0KHJlZ3MsIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKSk7Ci0KLQlpZiAoZmxhZ3MgJmFtcDsgKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU0lOR0xFU1RFUCkpCi0JCXJlcG9ydF9zeXNjYWxsX2V4aXQocmVncyk7Ci0KLQlyc2VxX3N5c2NhbGwocmVncyk7Ci19Ci0KIC8qCiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS4KICAqIFdlIHBlcm1pdCB1c2Vyc3BhY2UgdG8gc2V0IFNTQlMgKEFBcmNoNjQgYml0IDEyLCBBQXJjaDMyIGJpdCAyMykgd2hpY2ggaXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtOCw4ICYjNDM7OCw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lycS1lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mcmVlemVyLmgmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMzU4ZGRmYmYxNDAxYWMuLmUwYTk4ZmFjM2I4NTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGV4dF90cmFja2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cmFjZS5oJmd0OwpAQCAtNTQsMTUgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sCiAJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIDAsIHJldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfc3lzY2FsbF93b3JrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIHVubGlrZWx5KGZsYWdzICZhbXA7IF9USUZfU1lTQ0FMTF9XT1JLKTsKLX0KLQotc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsCi0JCQkgICBjb25zdCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF90YWJsZVtdKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19uciwKJiM0MzsJCQkJCSAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgd29yazsKIAogCXJlZ3MtJmd0O29yaWdfeDAgPSByZWdzLSZndDtyZWdzWzBdOwogCXJlZ3MtJmd0O3N5c2NhbGxubyA9IHNjbm87CkBAIC05NSw3ICYjNDM7OTIsOCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19uciwKIAkJcmV0dXJuOwogCX0KIAotCWlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkgewomIzQzOwl3b3JrID0gUkVBRF9PTkNFKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0mZ3Q7c3lzY2FsbF93b3JrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHdvcmsgJmFtcDsgU1lTQ0FMTF9XT1JLX0VOVEVSKSkgewogCQkvKgogCQkgKiBUaGUgZGUtZmFjdG8gc3RhbmRhcmQgd2F5IHRvIHNraXAgYSBzeXN0ZW0gY2FsbCB1c2luZyBwdHJhY2UKIAkJICogaXMgdG8gc2V0IHRoZSBzeXN0ZW0gY2FsbCB0byAtMSAoTk9fU1lTQ0FMTCkgYW5kIHNldCB4MCB0byBhCkBAIC0xMTMsMjYgJiM0MzsxMTEsMTQgQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsCiAJCSAqLwogCQlpZiAoc2NubyA9PSBOT19TWVNDQUxMKQogCQkJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApOwotCQlzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTsKJiM0MzsJCXNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspOwogCQlpZiAoc2NubyA9PSBOT19TWVNDQUxMKQogCQkJZ290byB0cmFjZV9leGl0OwogCX0KIAogCWludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTsKLQotCS8qCi0JICogVGhlIHRyYWNpbmcgc3RhdHVzIG1heSBoYXZlIGNoYW5nZWQgdW5kZXIgb3VyIGZlZXQsIHNvIHdlIGhhdmUgdG8KLQkgKiBjaGVjayBhZ2Fpbi4gSG93ZXZlciwgaWYgd2Ugd2VyZSB0cmFjaW5nIGVudHJ5LCB0aGVuIHdlIGFsd2F5cyB0cmFjZQotCSAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuCi0JICovCi0JaWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkgewotCQlmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0JCWlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9USUZfU0lOR0xFU1RFUCkpCi0JCQlyZXR1cm47Ci0JfQotCiB0cmFjZV9leGl0OgotCXN5c2NhbGxfdHJhY2VfZXhpdChyZWdzKTsKJiM0MzsJc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpOwogfQogCiB2b2lkIGRvX2VsMF9zdmMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMKaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jCkBAIC0zNDMsMyAmIzQzOzM0MywxOSBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycCkKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNpZ3RyYW1wOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQ09NUEFUCiYjNDM7CWlmIChpc19jb21wYXRfdGFzaygpKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHNpZ3BhZ2UgPSAodW5zaWduZWQgbG9uZyljdXJyZW50LSZndDttbS0mZ3Q7Y29udGV4dC5zaWdwYWdlOwomIzQzOwomIzQzOwkJcmV0dXJuIHJlZ3MtJmd0O3BjICZndDs9IHNpZ3BhZ2UgJmFtcDsmYW1wOyByZWdzLSZndDtwYyAmbHQ7IChzaWdwYWdlICYjNDM7IFBBR0VfU0laRSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsJc2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LSZndDttbS0mZ3Q7Y29udGV4dC52ZHNvLCBzaWd0cmFtcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdzLSZndDtwYyA9PSAoc2lndHJhbXAgJiM0MzsgOCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNmJiNjg1YTI2NDZiNTYuLjExYzVlZmY0MWU5ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJaWYgKHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKSkKIAkJCXJldHVybiAtMTsKIAotCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCiYjNDM7CWlmICghc2VjdXJlX2NvbXB1dGluZygpKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCBkZjhlYTIyM2M3N2IxYS4uOTQ2ODg2Nzk0Y2VkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTg1LDkgJiM0Mzs4NSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAjZW5kaWYJLyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggY2ZhMmRmMjRlY2VkMTIuLmQyNDExNDA0YjlkZmNmIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKQEAgLTI4MSw3ICYjNDM7MjgxLDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcih2b2lkKQogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJcmV0ID0gcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHRhc2tfcHRfcmVncyhjdXJyZW50KSk7CiAKLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0xMzI4LDcgJiM0MzsxMzI4LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCX0KIAogCS8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJcmV0dXJuIC0xOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggODM0ZmNjNGY3YjU0M2IuLjRiM2M1MmVkNmU5ZDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTEzOSw5ICYjNDM7MTM5LDQgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJZWxzZQogCQlyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDsKIH0KLQotc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gZmFsc2U7Ci19CiAjZW5kaWYJLyogX0FTTV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggODA2N2U2NjZhNGNhNjguLjk4N2M5YTc4ODA2Zjc4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMTEyLDExICYjNDM7MTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbCkKIAlyZWdzLSZndDthMCA9IGZuKHJlZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBmYWxzZTsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9mbHVzaF9pY2FjaGUodWludHB0cl90LCB1aW50cHRyX3QsIHVpbnRwdHJfdCk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfaHdwcm9iZShzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqLCBzaXplX3QsIHNpemVfdCwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDQyNzFlNDE2OWY0NWI2Li41ZjMxMGNhYWQxZmNlYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC04OSwxMSAmIzQzOzg5LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJcmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAjZGVmaW5lIFNZU0NBTExfRk1UXzAKICNkZWZpbmUgU1lTQ0FMTF9GTVRfMSAsICYjMzQ7MCYjMzQ7IChyMikKICNkZWZpbmUgU1lTQ0FMTF9GTVRfMiAsICYjMzQ7ZCYjMzQ7IChyMykgU1lTQ0FMTF9GTVRfMQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAwNmY3NjVkNzFhMjk1MS4uODY4N2YxN2NiZTVhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCkBAIC00NjAsNyAmIzQzOzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmMKaW5kZXggYmE3NDk0ZjliZmU0MTIuLjkxNmNkN2FjY2VhZmRmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYwpAQCAtMjcsNyAmIzQzOzI3LDcgQEAgdm9pZCBoYW5kbGVfc3lzY2FsbChzdHJ1Y3QgdW1sX3B0X3JlZ3MgKnIpCiAJCWdvdG8gb3V0OwogCiAJLyogRG8gdGhlIHNlY2NvbXAgY2hlY2sgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJZ290byBvdXQ7CiAKIAlzeXNjYWxsID0gVVBUX1NZU0NBTExfTlIocik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYwppbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYwpAQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgYm9vbCBfX2VtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIAlyZWdzLSZndDtvcmlnX2F4ID0gc3lzY2FsbF9ucjsKIAlyZWdzLSZndDtheCA9IC1FTk9TWVM7CiAJdG1wID0gc2VjdXJlX2NvbXB1dGluZygpOwotCWlmICgoIXRtcCAmYW1wOyZhbXA7IHJlZ3MtJmd0O29yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy0mZ3Q7aXAgIT0gYWRkcmVzcykgewomIzQzOwlpZiAoKHRtcCAmYW1wOyZhbXA7IHJlZ3MtJmd0O29yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy0mZ3Q7aXAgIT0gYWRkcmVzcykgewogCQl3YXJuX2JhZF92c3lzY2FsbChLRVJOX0RFQlVHLCByZWdzLAogCQkJCSAgJiMzNDtzZWNjb21wIHRyaWVkIHRvIGNoYW5nZSBzeXNjYWxsIG5yIG9yIGlwJiMzNDspOwogCQlmb3JjZV9leGl0X3NpZyhTSUdTWVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCmluZGV4IGI4MGQ1NGIyZWEzNGU2Li5lZjc4ZmNkMzE4ZmZjYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTUzLDggJiM0Mzs1NTMsNyBAQCBpbnQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHJlZ3MtJmd0O3N5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fAotCSAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHsKJiM0MzsJaWYgKHJlZ3MtJmd0O3N5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7CiAJCWRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oCmluZGV4IDQxNmEzMzUyMjYxZmU4Li4zZjY2MzIwZTQ2ZDMzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oCkBAIC0xMDAsOSAmIzQzOzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsCiAKIAkvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqLwogCWlmICh3b3JrICZhbXA7IFNZU0NBTExfV09SS19TRUNDT01QKSB7Ci0JCXJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpOwotCQlpZiAocmV0ID09IC0xTCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoIV9fc2VjdXJlX2NvbXB1dGluZygpKQomIzQzOwkJCXJldHVybiAtMUw7CiAJfQogCiAJLyogRWl0aGVyIG9mIHRoZSBhYm92ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHN5c2NhbGwgbnVtYmVyICovCkBAIC0xMTMsNyAmIzQzOzExMiw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsCiAKIAlzeXNjYWxsX2VudGVyX2F1ZGl0KHJlZ3MsIHN5c2NhbGwpOwogCi0JcmV0dXJuIHJldCA/IDogc3lzY2FsbDsKJiM0MzsJcmV0dXJuIHN5c2NhbGw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmggYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaAppbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCkBAIC0yMiwxNCAmIzQzOzIyLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY2NvbXAuaCZndDsKIAotZXh0ZXJuIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7CiYjNDM7ZXh0ZXJuIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgotc3RhdGljIGlubGluZSBpbnQgc2VjdXJlX2NvbXB1dGluZyh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpCiB7CiAJaWYgKHVubGlrZWx5KHRlc3Rfc3lzY2FsbF93b3JrKFNFQ0NPTVApKSkKIAkJcmV0dXJuICBfX3NlY3VyZV9jb21wdXRpbmcoKTsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQogZXh0ZXJuIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCk7CkBAIC01MCwxMSAmIzQzOzUwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY2NvbXBfbW9kZShzdHJ1Y3Qgc2VjY29tcCAqcykKIHN0cnVjdCBzZWNjb21wX2RhdGE7CiAKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIDA7IH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpIHsgcmV0dXJuOyB9CiAjZW5kaWYKLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBwcmN0bF9nZXRfc2VjY29tcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgKaW5kZXggMzg1OGE2ZmZkZDVjODQuLjczZDY5ZTAyODA3ZDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWQogCiYjNDM7Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogaW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBjaGFyIF9fdXNlciAqc2VsZWN0b3IpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMKaW5kZXggZDg5ZGZmY2MyZDY0MjkuLmFjZjU0NTc3NGQzNzIwIDEwMDY0NAotLS0gYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jCkBAIC0zMiw2ICYjNDM7MzIsMTEgQEAgc3RhdGljIHZvaWQgdHJpZ2dlcl9zaWdzeXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJZm9yY2Vfc2lnX2luZm8oJmFtcDtpbmZvKTsKIH0KIAomIzQzO2Jvb2wgX193ZWFrIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9ICZhbXA7Y3VycmVudC0mZ3Q7c3lzY2FsbF9kaXNwYXRjaDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zZWNjb21wLmMgYi9rZXJuZWwvc2VjY29tcC5jCmluZGV4IDA2NjkwOTM5M2MzOGY1Li4xZmVjNmVmZWRhYjYyNyAxMDA2NDQKLS0tIGEva2VybmVsL3NlY2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2VjY29tcC5jCkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpCiAJZWxzZQogCQlCVUcoKTsKIH0KLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkKJiM0Mztib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKQogewogCWludCB0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7CiAKIAlzZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpOwotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KICNlbHNlCiAKQEAgLTEyNTYsNyAmIzQzOzEyNTYsNyBAQCBzdGF0aWMgaW50IHNlY2NvbXBfZG9fdXNlcl9ub3RpZmljYXRpb24oaW50IHRoaXNfc3lzY2FsbCwKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiYjNDM7c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiB7CiAJdTMyIGZpbHRlcl9yZXQsIGFjdGlvbjsKIAlzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkOwpAQCAtMTI5NCw3ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJY2FzZSBTRUNDT01QX1JFVF9UUkFDRToKIAkJLyogV2UmIzM5O3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi8KIAkJaWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCi0JCQlyZXR1cm4gMDsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAogCQkvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqLwogCQlpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkgewpAQCAtMTMzMCwxOSAmIzQzOzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSkKIAkJICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogCQkgKi8KIAkJaWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAogCWNhc2UgU0VDQ09NUF9SRVRfVVNFUl9OT1RJRjoKIAkJaWYgKHNlY2NvbXBfZG9fdXNlcl9ub3RpZmljYXRpb24odGhpc19zeXNjYWxsLCBtYXRjaCwgJmFtcDtzZCkpCiAJCQlnb3RvIHNraXA7CiAKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAogCWNhc2UgU0VDQ09NUF9SRVRfTE9HOgogCQlzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7Ci0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAljYXNlIFNFQ0NPTVBfUkVUX0FMTE9XOgogCQkvKgpAQCAtMTM1MCw3ICYjNDM7MTM1MCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJCSAqIHRoaXMgYWN0aW9uIHNpbmNlIFNFQ0NPTVBfUkVUX0FMTE9XIGlzIHRoZSBzdGFydGluZwogCQkgKiBzdGF0ZSBpbiBzZWNjb21wX3J1bl9maWx0ZXJzKCkuCiAJCSAqLwotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiB0cnVlOwogCiAJY2FzZSBTRUNDT01QX1JFVF9LSUxMX1RIUkVBRDoKIAljYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzoKQEAgLTEzNjcsNDYgJiM0MzsxMzY3LDQ2IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJCX0gZWxzZSB7CiAJCQlkb19leGl0KFNJR1NZUyk7CiAJCX0KLQkJcmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqLwogCX0KIAogCXVucmVhY2hhYmxlKCk7CiAKIHNraXA6CiAJc2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtJmd0O2xvZyA6IGZhbHNlKTsKLQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKQomIzQzO3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKQogewogCUJVRygpOwogCi0JcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAotaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKQomIzQzO2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpCiB7CiAJaW50IG1vZGUgPSBjdXJyZW50LSZndDtzZWNjb21wLm1vZGU7CiAJaW50IHRoaXNfc3lzY2FsbDsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkUpICZhbXA7JmFtcDsKIAkgICAgdW5saWtlbHkoY3VycmVudC0mZ3Q7cHRyYWNlICZhbXA7IFBUX1NVU1BFTkRfU0VDQ09NUCkpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAl0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6CiAJCV9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi8KLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAljYXNlIFNFQ0NPTVBfTU9ERV9GSUxURVI6CiAJCXJldHVybiBfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgZmFsc2UpOwogCS8qIFN1cnZpdmluZyBTRUNDT01QX1JFVF9LSUxMXyogbXVzdCBiZSBwcm9hY3RpdmVseSBpbXBvc3NpYmxlLiAqLwogCWNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6CiAJCVdBUk5fT05fT05DRSgxKTsKIAkJZG9fZXhpdChTSUdLSUxMKTsKLQkJcmV0dXJuIC0xOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2lnbmlmaWNhbnQgQXJtNjQgU3lzY2FsbCBFbnRyeSBBcmNoaXRlY3R1cmFsIFNoaWZ0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBiaWcgY2hhbmdlcyB0byBob3cgYHNlY3VyZV9jb21wdXRpbmcoKWAgaGFuZGxlcyBzeXNjYWxscyBhbmQgdHJhY2luZyBvbiBhcm02NC4gRmlyc3Qgb2ZmLCBpdCBsb29rcyBsaWtlIGBzZWN1cmVfY29tcHV0aW5nKClgIGlzIG5vdyByZXR1cm5pbmcgYSBgYm9vbGAgaW5zdGVhZCBvZiBhbiBgaW50YC4gQSBgdHJ1ZWAgbWVhbnMgdGhlIHN5c2NhbGwgc2hvdWxkIHByb2NlZWQsIGBmYWxzZWAgbWVhbnMgaXQgZ2V0cyBza2lwcGVkLiBJbnRlcmVzdGluZywgdGhlIG9sZCB3YXkgdXNlZCBgMGAgZm9yIHN1Y2Nlc3MgYW5kIGAtMWAgZm9yIHNraXAuIFNlZW1zIGNsZWFuZXIsIG1vcmUgc2VtYW50aWMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgY2hhbmdlcyB0byBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCBhbmQgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgYXJlIHRoZSBrZXkgaGVyZSwgaXQgbG9va3MgbGlrZSBhcm02NCBpcyBtb3Zpbmcgb3ZlciB0byB0aGUgYEdFTkVSSUNfRU5UUllgIGNvZGUuIEFuZCB5dXAsIHRoZSBgS2NvbmZpZ2AgY29uZmlybXMgaXQgc2VsZWN0cyBgR0VORVJJQ19FTlRSWWAuICBUaGUgYHN5c2NhbGwuY2AgZmlsZSBpcyBub3cgdXNpbmcgYHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yaylgIGFuZCBgc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpYC4gVGhpcyBpcyBhIGJpZyBhcmNoaXRlY3R1cmFsIHNoaWZ0IGZvciBhcm02NCwgbW92aW5nIHRvIHRoaXMgZ2VuZXJpYyBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBhbmQgYHN5c2NhbGxfdHJhY2VfZXhpdGAgZnJvbSBgYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNgLCBhbmQgYSBidW5jaCBvZiBgVElGX1NZU0NBTExfVFJBQ0VgIGZsYWdzIGZyb20gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaGAgYXJlIGdvbmUsIHJlcGxhY2VkIHdpdGggYHN5c2NhbGxfd29ya2AuICBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AgaXMgc2V0dGluZyBgU1lTQ0FMTF9FWElUX1RSQVBgLiBBbmQsIGBhcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY2Agbm93IGluY2x1ZGVzIGAmbHQ7bGludXgvZW50cnktY29tbW9uLmgmZ3Q7YC4gIFBsdXMsIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuCgpUaGlzIGlzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbWlncmF0aW9uIHRvIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzY2FsbHMgb24gYXJtNjQgaXMgc3Vic3RhbnRpYWwuICBUaGUgd2hvbGUgc3lzY2FsbCBwYXRoIGlzIGJlaW5nIHJld3JpdHRlbi4KCldvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgdG91Y2hpbmcgdGhlIHZlcnkgY29yZSBvZiBzeXNjYWxsIGVudHJ5IGFuZCBleGl0IGZvciBhcm02NC4gVGhpcyB3YXJyYW50cyB0aG9yb3VnaCB0ZXN0aW5nLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJiMzOTtkIHNheSBgZWwwX3N2Y19jb21tb25gIGluIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGlzIGZyb250IGFuZCBjZW50ZXIuIEnigJlsbCBhbHNvIGxvb2sgYXQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaW4gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2Agc2luY2UgdGhlIHZEU08gaXMgYWx3YXlzIGEgc2Vuc2l0aXZlIGFyZWEuIEFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHB0cmFjZSwgbmFtZWx5IGBwdHJhY2Vfc2F2ZV9yZWdgLCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgIGlzIGNyaXRpY2FsLiBUaGVzZSB3aWxsIG5lZWQgYSBjbG9zZSBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsMF9zdmNfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0zOT1zdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTU3LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjU4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy01OS1cdFx0XHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9MTI0PXZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjEyNjpcdGVsMF9zdmNfY29tbW9uKHJlZ3MsIHJlZ3MtXHUwMDNlcmVnc1s4XSwgX19OUl9zeXNjYWxscywgc3lzX2NhbGxfdGFibGUpO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEyNy19XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTEzMD12b2lkIGRvX2VsMF9zdmNfY29tcGF0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMS17XG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTMyOlx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cdTAwM2VyZWdzWzddLCBfX05SX2NvbXBhdDMyX3N5c2NhbGxzLFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMy1cdFx0ICAgICAgIGNvbXBhdF9zeXNfY2FsbF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBUk02NCBTeXN0ZW0gQ2FsbCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgc3lzdGVtIGNhbGwgcGF0aCBvbiBBUk02NC4gU2luY2UgYGVsMF9zdmNfY29tbW9uYCBpcyBgX19hbHdheXNfaW5saW5lYCwgSSYjMzk7bSBnb2luZyB0byBieXBhc3MgdGhhdCBhbmQgZm9jdXMgZGlyZWN0bHkgb24gdGhlIGZ1bmN0aW9ucyBpdCBjYWxsczogYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCBhbG9uZyB3aXRoIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBzaW5jZSB0aGF0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSBzeXNjYWxscyB3b3VsZCBiZSBoYW5kbGVkLgoKSW5pdGlhbGx5LCBJIGFsc28gY29uc2lkZXJlZCBgc3lzY2FsbF90cmFjZV9lbnRlcmAgaW4gYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgYWxzbyBhbiBgX19hbHdheXNfaW5saW5lYCBmdW5jdGlvbi4gVGhlIGdlbmVyaWMgZW50cnkgZnVuY3Rpb25zIGFyZSBgc3lzY2FsbF9lbnRlcl9mcm9tX3VzZXJfbW9kZWAsIGFuZCBgc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZWAuCgpHaXZlbiB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgSSB0aGluayB0aGUgZ2VuZXJpYyBvbmVzIGFyZSBub3Qgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBzZWUgd2hhdCB0aG9zZSBpbmxpbmVzIGV4cGFuZCB0by4gU28sIGJhY2sgdG8gYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgLgoKUmlnaHQsIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0IHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZWwwX3N2YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjMtXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTI0OnZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjktI2lmZGVmIENPTkZJR19DT01QQVRcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMzA6dm9pZCBkb19lbDBfc3ZjX2NvbXBhdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODM2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEFSTTY0IFZEU08gZm9yIFNpZ3JldHVybiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBgc2lncmV0dXJuYCBjYWxscywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRFNPIG9uIEFSTTY0LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGludG8gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgY29kZSByZWxhdGVkIHRvIHRoZSBWaXJ0dWFsIER5bmFtaWMgU2hhcmVkIE9iamVjdCBhbmQgdGhlIGtlcm5lbCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZm9yIHN5c2NhbGxzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gbmFtZWQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGEgc3lzY2FsbCBpcyBhIFZEU08tcHJvdmlkZWQgYHNpZ3JldHVybmAgcmF0aGVyIHRoYW4gYSBzdGFuZGFyZCBvbmUuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IGNvbnRleHQgaXMgcmVzdG9yZWQuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBWRFNPIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3Zkc28uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9MzMzPWludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy0zNDYtXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6MzQ3OmJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTM0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBcm02NCBTaW5nbGUtU3RlcHBpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXItbW9kZSBzaW5nbGUtc3RlcHBpbmcgaXMgZW5hYmxlZCBhbmQgZGlzYWJsZWQgb24gQXJtNjQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBkZWFscyB3aXRoIHRoZSBkZWJ1ZyBtb25pdG9ycywgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbGlrZWx5IGhhbmRsZWQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhcmUgcHJvYmFibHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBhbmQgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGlzIGZlYXR1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM9Mzc2PXZvaWQga2VybmVsX2Zhc3Rmb3J3YXJkX3NpbmdsZV9zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzgxLS8qIHB0cmFjZSBBUEkgKi9cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM6MzgyOnZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYy0zODMte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzk1LX1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM6Mzk2Ok5PS1BST0JFX1NZTUJPTCh1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCk7XG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBzZWNjb21wLmMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgc3RyYWlnaHQgdG8gYGtlcm5lbC9zZWNjb21wLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHBpZWNlczogYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRob3NlIGludGVyYWN0LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgbWFjaGluZXJ5IGhlcmUsIHNlZWluZyBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZG9lcyogc2VjdXJlIGNvbXB1dGluZy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGNoZWNrcyBhcmUgZW5mb3JjZWQsIHdoZXJlIHRoZSBmaWx0ZXJzIGFyZSBpbnN0YWxsZWQsIGFuZCBob3cgdGhlIHN5c2NhbGwgaW50ZXJmYWNlIGlzIG1vZGlmaWVkLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgc2VjdXJpdHkgcG9zdHVyZSwgc28gSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZWN1cmVfY29tcHV0aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NlY2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2VjY29tcC5jPTEwNTY9c3RhdGljIGNvbnN0IGludCBtb2RlMV9zeXNjYWxsc1tdID0ge1xuLS1cbmtlcm5lbC9zZWNjb21wLmMtMTA2Ni1cbmtlcm5lbC9zZWNjb21wLmM6MTA2NzpzdGF0aWMgdm9pZCBfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG5rZXJuZWwvc2VjY29tcC5jLTEwNjgte1xuLS1cbmtlcm5lbC9zZWNjb21wLmM9MTA4OD12b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMDk4LVx0ZWxzZSBpZiAobW9kZSA9PSBTRUNDT01QX01PREVfU1RSSUNUKVxua2VybmVsL3NlY2NvbXAuYzoxMDk5Olx0XHRfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG5rZXJuZWwvc2VjY29tcC5jLTExMDAtXHRlbHNlXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMTAyLX1cbmtlcm5lbC9zZWNjb21wLmM6MTEwMzpib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxua2VybmVsL3NlY2NvbXAuYy0xMTA0LXtcbi0tXG5rZXJuZWwvc2VjY29tcC5jPTEzODA9c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMzg3LVxua2VybmVsL3NlY2NvbXAuYzoxMzg4OmJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG5rZXJuZWwvc2VjY29tcC5jLTEzODkte1xuLS1cbmtlcm5lbC9zZWNjb21wLmMtMTQwMC1cdGNhc2UgU0VDQ09NUF9NT0RFX1NUUklDVDpcbmtlcm5lbC9zZWNjb21wLmM6MTQwMTpcdFx0X19zZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpOyAgLyogbWF5IGNhbGwgZG9fZXhpdCAqL1xua2VybmVsL3NlY2NvbXAuYy0xNDAyLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgU3lzY2FsbCBEaXNwYXRjaCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gY2FsbCBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCB3b3Jrcy4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBkYXRhIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIGtlcm5lbCBpbnRlcmNlcHRzIGEgc3lzdGVtIGNhbGwgZnJvbSB1c2VyIHNwYWNlIGFuZCBob3cgdGhlIHJpZ2h0IGhhbmRsZXIgaXMgc2VsZWN0ZWQgYW5kIGNhbGxlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2lzdGVyIHBhc3NpbmcsIHByaXZpbGVnZSBsZXZlbCBjaGVja3MsIGFuZCBhbnkgY29udGV4dCBzd2l0Y2hpbmcgdGhhdCBvY2N1cnMgYXQgdGhhdCBwb2ludC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgdGhlcmUsIGFuZCBlbnN1cmUgSSYjMzk7bSB1cCB0byBzcGVlZCBvbiB0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2Vcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFx1MDAzZVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTM5LVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzo0MjpcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXHUwMDI2Y3VycmVudC1cdTAwM2VzeXNjYWxsX2Rpc3BhdGNoO1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQzLVx0Y2hhciBzdGF0ZTtcbi0tXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6Nzc6c3RhdGljIGludCB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIG1vZGUsXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzgtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy05OS1cdFx0Lypcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDA6XHRcdCAqIEludmVydCB0aGUgcmFuZ2UsIHRoZSBjaGVjayBpbiBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEwMS1cdFx0ICogc3VwcG9ydHMgd3JhcC1hcm91bmQuXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzNS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMzY6aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3Rvcilcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzgte1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzOTpcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDAtfVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0MS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDI6aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0My1cdFx0XHRcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEpXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQ0LXtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDU6XHRzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9IFx1MDAyNnRhc2stXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDYtXHRzdHJ1Y3QgcHRyYWNlX3N1ZF9jb25maWcgY2ZnO1xuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNjUtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTY2OmludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfc2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNjctXHRcdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhKVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3Olx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzgtXHRcdFx0XHRcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTeXN0ZW0gQ2FsbCBUcmFjZSBFbnRyeSBQb2ludCBNb2RpZmljYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBgc3lzY2FsbF90cmFjZV9lbnRlcmAsIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIHRoaXMgYXJlYSBpcyBnb2luZyB0byBoYXZlIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHRyYWNpbmcsIGRlYnVnZ2luZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gcGVyZm9ybWFuY2UsIGdpdmVuIHRoZSBmcmVxdWVuY3kgd2l0aCB3aGljaCBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkLiBCZWZvcmUgZGl2aW5nIGRlZXAgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBtZW50YWwgbWFwIG9mIHdoYXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgIGluIG15IGhlYWQgYW5kIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdC4gSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB1c3VhbCBwcm9sb2d1ZSBzdHJ1Y3R1cmUsIHRoZSByZWdpc3RlciBzYXZpbmcvcmVzdG9yYXRpb24gY29udmVudGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdGhhdCBtaWdodCBiZSBpbiBvciBhcm91bmQgYHN5c2NhbGxfdHJhY2VfZW50ZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIGEgZGlyZWN0IGVudHJ5IHBvaW50LCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIGxheWVyIG9mIGFic3RyYWN0aW9uIG9yIHdyYXBwZXIgZnVuY3Rpb24sIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgY3JpdGljYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3RyYWNlX2VudGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTQyLSAqXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjQzOiAqIEludm9rZWQgZnJvbSBzeXNjYWxsX3RyYWNlX2VudGVyKCkgdG8gd3JhcCBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoKS5cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNDQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2VudGVyX2F1ZGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03MS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NzI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNzMte1xuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9MTQxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX2VudGVyX2Zyb21fdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgc3lzY2FsbClcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0NS1cdGlmICh3b3JrIFx1MDAyNiBTWVNDQUxMX1dPUktfRU5URVIpXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjE0NjpcdFx0c3lzY2FsbCA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yayk7XG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIyOS1cdCAqIHRoZW4gdGhlIHRyYWNlcnMgYmVsb3cgYXJlIG5vdCBpbnZva2VkIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMwOlx0ICogdGhlIGVudHJ5IHNpZGUgd2FzIG5vdCBpbnZva2VkIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKTogVGhlIEFCSVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMzEtXHQgKiBvZiB0aGVzZSBzeXNjYWxscyBpcyB1bmtub3duLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgc3lzY2FsbF90cmFjZV9lbnRlcmAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYF9fc2VjdXJlX2NvbXB1dGluZygpYC4gUHJldmlvdXNseSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgc3RvcmVkIGluIGByZXRgLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBhbiBlcnJvci4gTm93LCB0aGUgbG9naWMgaXMgc2ltcGxpZmllZDogaWYgYF9fc2VjdXJlX2NvbXB1dGluZygpYCByZXR1cm5zIGBmYWxzZWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC0xTGAuIE1ha2VzIHNlbnNlLiBUaGUgaW50ZW50IGlzIHRvIGNhdGNoIHRyYWNlciBjaGFuZ2VzLCB3aGljaCB3ZXJlIHBvc3NpYmx5IGEgcHJlLWV4aXN0aW5nIGlzc3VlLgoKSSBzZWUgdGhhdCB0aGlzIGNoYW5nZSBpcyBnZW5lcmljLCBub3QgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBJbnRlcmVzdGluZy4gR2l2ZW4gdGhhdCBmYWN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBhZmZlY3RlZC4gSSBub3RpY2UgdGhhdCB0aGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgZmlsZSBzZWxlY3RzIGBHRU5FUklDX0VOVFJZYC4gVGhpcyB0ZWxscyBtZSB0aGF0IEFSTTY0IGlzIG5vdyB1c2luZyB0aGlzIGdlbmVyaWMgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgZXhwbGFpbnMgd2h5IHRoZSBjaGFuZ2UgaXMgZ2VuZXJpYy4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSXQgYXBwZWFycyB0aGF0IGBHRU5FUklDX0VOVFJZYCBpcyBzZWxlY3RlZCB0aHJvdWdoIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cC4gVG8gdGVzdCB0aGUgYF9fc2VjdXJlX2NvbXB1dGluZygpYCBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGBTRUNDT01QYC4gSSYjMzk7bGwgYWxzbyBuZWVkIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGZvciBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBhbmQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIHRvIGNvbmZpcm0gdGhhdCBgU0VDQ09NUGAgYW5kIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGFyZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNDT01QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz02Mjg9Y29uZmlnIEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLS1cbmFyY2gvS2NvbmZpZy02NDYtXG5hcmNoL0tjb25maWc6NjQ3OmNvbmZpZyBTRUNDT01QXG5hcmNoL0tjb25maWctNjQ4LVx0cHJvbXB0IFwmIzM0O0VuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBleGVjdXRlIHVudHJ1c3RlZCBieXRlY29kZVwmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZy02NjMtXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxuYXJjaC9LY29uZmlnLTY2NS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL0tjb25maWctNjczLVxuYXJjaC9LY29uZmlnOjY3NDpjb25maWcgU0VDQ09NUF9DQUNIRV9ERUJVR1xuYXJjaC9LY29uZmlnLTY3NS1cdGJvb2wgXCYjMzQ7U2hvdyBzZWNjb21wIGZpbHRlciBjYWNoZSBzdGF0dXMgaW4gL3Byb2MvcGlkL3NlY2NvbXBfY2FjaGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIENhbGwgRGlzcGF0Y2gqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJiMzOTt0IGl0PyBUaGUgY29yZSBvZiB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtLCB3aGVyZSB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyBhcmUgZmluYWxseSBzb3J0ZWQgYW5kIGRpcmVjdGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgaGFuZGxlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZGlzcGF0Y2ggaXMgYmVpbmcgaGFuZGxlZCDigJMgaG93IHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgZ2V0cyB0cmFuc2xhdGVkIGludG8gdGhlIGNvcnJlY3Qga2VybmVsIGZ1bmN0aW9uLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgbWlzZGlyZWN0aW9uIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgd29ya3MuIEdvdHRhIGNoZWNrIGhvdyB0aGlzIG1lY2hhbmlzbSB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIGRvY3VtZW50YXRpb24gdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgYSBsb3QgdG8gZG8sIGJ1dCB0aGF0IGlzIHRoZSBvbmx5IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUyMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIExvY2F0aW9uIEh1bnQgZm9yIFNZU0NBTExfVVNFUl9ESVNQQVRDSCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBjbGFzc2ljIHBsYWNlcyB3aGVyZSB5b3UmIzM5O2QgZmluZCBjb3JlIGtlcm5lbCBmZWF0dXJlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBidWlsZCBvcHRpb25zIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgZmlsZXMgY2xvc2VseSB0byB2ZXJpZnkuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBxdWljayBncmVwIG9yIGZpbmQgaW4gdGhvc2UgZGlyZWN0b3JpZXMgYW5kIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX1VTRVJfRElTUEFUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0PTUyPWZvbGxvd2luZyBwcmN0bDpcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01My1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo1NDogIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFx1MDAzY29wXHUwMDNlLCBcdTAwM2NvZmZzZXRcdTAwM2UsIFx1MDAzY2xlbmd0aFx1MDAzZSwgW3NlbGVjdG9yXSlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3Q9ODE9QWRkaXRpb25hbGx5LCBhIHRhc2tzIHN5c2NhbGwgdXNlciBkaXNwYXRjaCBjb25maWd1cmF0aW9uIGNhbiBiZSBwZWVrZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo4MjphbmQgcG9rZWQgdmlhIHRoZSBQVFJBQ0VfKEdFVHxTRVQpX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgcHRyYWNlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3QtODMtcmVxdWVzdHMuIFRoaXMgaXMgdXNlZnVsIGZvciBjaGVja3BvaW50L3Jlc3RhcnQgc29mdHdhcmUuXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yNy1cdFx0XHRcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9BVURJVCB8XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjI4Olx0XHRcdFx0IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0ggfFx0XFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjktXHRcdFx0XHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfUlNFUV9TTElDRSlcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTM1LVx0XHRcdFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUIHxcdFx0XFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MzY6XHRcdFx0XHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCB8XHRcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0zNy1cdFx0XHRcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9FWElUX1RSQVApXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODAtXHQgKi9cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6ODE6XHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04Mi1cdFx0aWYgKHN5c2NhbGxfdXNlcl9kaXNwYXRjaChyZWdzKSlcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIzMi1cdCAqL1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDoyMzM6XHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMzQtXHRcdGlmICh1bmxpa2VseShjdXJyZW50LVx1MDAzZXN5c2NhbGxfZGlzcGF0Y2gub25fZGlzcGF0Y2gpKSB7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC00LSAqL1xuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDo1OiNpZm5kZWYgX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9IXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oOjY6I2RlZmluZSBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0hcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtNy1cbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oPTE0PWludCBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xNy0jZGVmaW5lIGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2godHNrKSBcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDoxODpcdGNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRzaywgU1lTQ0FMTF9VU0VSX0RJU1BBVENIKVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xOS1cbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oPTQ0PXN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oLTUxLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDo1MjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9IICovXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaF90eXBlcy5oOjI6I2lmbmRlZiBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX1RZUEVTX0hcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MzojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg9MTg9c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCB7fTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaF90eXBlcy5oLTIxLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaDoyMjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9UWVBFU19IICovXG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oPTQxPWVudW0gc3lzY2FsbF93b3JrX2JpdCB7XG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTQ2LVx0U1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX0FVRElULFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oOjQ3Olx0U1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgtNDgtXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfRVhJVF9UUkFQLFxuLS1cbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC01Ni0jZGVmaW5lIFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUXHRcdEJJVChTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfQVVESVQpXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg6NTc6I2RlZmluZSBTWVNDQUxMX1dPUktfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gpXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgtNTgtI2RlZmluZSBTWVNDQUxMX1dPUktfU1lTQ0FMTF9FWElUX1RSQVBcdFx0QklUKFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9FWElUX1RSQVApXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2Ny0vKiBEaXNwYXRjaCBzeXNjYWxscyB0byBhIHVzZXJzcGFjZSBoYW5kbGVyICovXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNjg6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjY5LSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdFx0MFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaD0xMTA9c3RydWN0IHB0cmFjZV9yc2VxX2NvbmZpZ3VyYXRpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaC0xMTctXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmg6MTE4OiNkZWZpbmUgUFRSQUNFX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHIDB4NDIxMFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oOjExOTojZGVmaW5lIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRyAweDQyMTFcbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaC0xMjAtXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTc3PXN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMjgtXHRpZiAobW9kZSAhPSBQUl9TWVNfRElTUEFUQ0hfT0ZGKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEyOTpcdFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfVVNFUl9ESVNQQVRDSCk7XG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTMwLVx0ZWxzZVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzMTpcdFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9VU0VSX0RJU1BBVENIKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzItXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTE0Mj1pbnQgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX2dldF9jb25maWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE1MC1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNTE6XHRpZiAodGVzdF90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE1Mi1cdFx0Y2ZnLm1vZGUgPSBQUl9TWVNfRElTUEFUQ0hfT047XG4tLVxua2VybmVsL3B0cmFjZS5jPTExNjI9aW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbi0tXG5rZXJuZWwvcHRyYWNlLmMtMTM5Ny1cbmtlcm5lbC9wdHJhY2UuYzoxMzk4Olx0Y2FzZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUc6XG5rZXJuZWwvcHRyYWNlLmMtMTM5OS1cdFx0cmV0ID0gc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoY2hpbGQsIGFkZHIsIGRhdGF2cCk7XG4tLVxua2VybmVsL3B0cmFjZS5jLTE0MDEtXG5rZXJuZWwvcHRyYWNlLmM6MTQwMjpcdGNhc2UgUFRSQUNFX0dFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHOlxua2VybmVsL3B0cmFjZS5jLTE0MDMtXHRcdHJldCA9IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKGNoaWxkLCBhZGRyLCBkYXRhdnApO1xuLS1cbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4tLVxua2VybmVsL3N5cy5jLTI4MDEtXHRcdGJyZWFrO1xua2VybmVsL3N5cy5jOjI4MDI6XHRjYXNlIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0g6XG5rZXJuZWwvc3lzLmMtMjgwMy1cdFx0ZXJyb3IgPSBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKGFyZzIsIGFyZzMsIGFyZzQsXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI1NS0vKiBEaXNwYXRjaCBzeXNjYWxscyB0byBhIHVzZXJzcGFjZSBoYW5kbGVyICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNTY6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjU3LSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdFx0MFxuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oPTEzND1zdHJ1Y3QgcHJjdGxfbW1fbWFwIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjctLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg6MjY4OiNkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFx0NTlcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2OS0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXHRcdDBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYz0xOD1URVNUKGdldF9zZXRfc3VkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTM5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NDA6XHRyZXQgPSBzeXNfcHRyYWNlKFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRywgY2hpbGQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy00MS1cdFx0XHQgKHZvaWQgKilzaXplb2YoY29uZmlnKSwgXHUwMDI2Y29uZmlnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy01My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jOjU0Olx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTUtXHRcdFx0ICh2b2lkICopc2l6ZW9mKGNvbmZpZyksIFx1MDAyNmNvbmZpZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTktXHRtZW1zZXQoXHUwMDI2Y29uZmlnLCAxLCBzaXplb2YoY29uZmlnKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYzo2MDpcdHJldCA9IHN5c19wdHJhY2UoUFRSQUNFX0dFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHLCBjaGlsZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTYxLVx0XHRcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcdTAwMjZjb25maWcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjIxOiNpZm5kZWYgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYzoyMjojIGRlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYy0yMy0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXHQwXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYz0xMzY9aW50IG1haW4odm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jLTE2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmM6MTYzOlx0aWYgKHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9PTixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMTY0LVx0XHQgIHN5c2NhbGxfZGlzcGF0Y2hlcl9zdGFydCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0xOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjE5OiNpZm5kZWYgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjA6IyBkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFx0NTlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTIxLSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdDBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy00NS0gKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NDY6ICogLSBkaXNwYXRjaF90cmlnZ2VyX3NpZ3N5czogVmVyaWZ5IGlmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0ggaXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTQ3LSAqICAgYWJsZSB0byB0cmlnZ2VyIFNJR1NZUyBvbiBhIHN5c2NhbGwuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9NjU9VEVTVF9TSUdOQUwoZGlzcGF0Y2hfdHJpZ2dlcl9zaWdzeXMsIFNJR1NZUylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy03My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjc0Olx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXHUwMDI2c2VsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc1LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NzY6XHRcdFRIX0xPRyhcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc3LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTg4PXN0YXRpYyB2b2lkIHByY3RsX3ZhbGlkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05MS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo5MjpcdEVYUEVDVF9FUSgwLCBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBvcCwgb2ZmLCBzaXplLCBzZWwpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTkzLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz05NT1zdGF0aWMgdm9pZCBwcmN0bF9pbnZhbGlkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05OC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo5OTpcdEVYUEVDVF9FUSgtMSwgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgb3AsIG9mZiwgc2l6ZSwgc2VsKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0xMDAtXHRFWFBFQ1RfRVEoZXJyLCBlcnJubyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MjEwPVRFU1QoZGlzcGF0Y2hfYW5kX3JldHVybilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjQ6XHRyZXQgPSBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBQUl9TWVNfRElTUEFUQ0hfRVhDTFVTSVZFX09OLCAwLCAwLCBcdTAwMjZnbG9iX3NlbCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjUtXHRBU1NFUlRfRVEoMCwgcmV0KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjY6XHRcdFRIX0xPRyhcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTIyNy1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz0yNTU9VEVTVF9TSUdOQUwoYmFkX3NlbGVjdG9yLCBTSUdTWVMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjgwOlx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXHUwMDI2Z2xvYl9zZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjgxLVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjgyOlx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODMtXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9Mjk4PVRFU1QoZGlzYWJsZV9kaXNwYXRjaClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDQ6XHRyZXQgPSBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBQUl9TWVNfRElTUEFUQ0hfRVhDTFVTSVZFX09OLCAwLCAwLCBcdTAwMjZzZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA1LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzA2Olx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMDctXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzEyOlx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09GRiwgMCwgMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMTMtXHRFWFBFQ1RfRVEoMCwgcmV0KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzI2PVRFU1QoZGlyZWN0X2Rpc3BhdGNoX3JhbmdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMzNS1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzM2Olx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgLTFMLCBcdTAwMjZzZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzM3LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzM4Olx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzktXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzQ5PXN0YXRpYyB2b2lkIHRlc3RfcmFuZ2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTM1NC1cdFNZU0NBTExfRElTUEFUQ0hfT0ZGKGdsb2Jfc2VsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjM1NTpcdEVYUEVDVF9FUSgwLCBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBvcCwgb2ZmLCBzaXplLCBcdTAwMjZnbG9iX3NlbCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzU2LVx0U1lTQ0FMTF9ESVNQQVRDSF9PTihnbG9iX3NlbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTWF6ZSoqCgpSaWdodCwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgLCBidXQgdGhhdCBuYW1lIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgc3RpY2tpbmcuIEhtbSwgY291bGQgaXQgYmUganVzdCBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4PyBObywgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgcG9pbnQgc3R1ZmYgaXMgd2hhdCBlbmFibGVzIGl0LiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIFllYWgsIEkgc2hvdWxkIHJlYWxseSBjb25zdWx0IGBpbml0L0tjb25maWdgIHRvIGNvbmZpcm0gd2hlcmUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgd2hhdCBlbmFibGVzIGl0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBjaGFzaW5nIGEgZ2hvc3QgaGVyZSwgb3IsIHdvcnNlLCBtaXN1bmRlcnN0YW5kaW5nIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGVzLiBDb25zaWRlcmluZyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBrZXJuZWwvZW50cnkvS2NvbmZpZ2AgZmlsZSBmaXJzdC4gSWYgaXQmIzM5O3Mgbm90IGxvY2F0ZWQgdGhlcmUsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoIGFuZCBnbyB0byB0aGUgbW9yZSBnZW5lcmFsIGBLY29uZmlnYCBmaWxlcyB0aGF0IGFyZSBjb21tb25seSB1c2VkLiBUaGF0IHNob3VsZCBwaW5wb2ludCB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgKioKCkhtbSwgc28gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBrZXJuZWwgY29uZmlnIG9wdGlvbiwgaXMgaXQ/IEludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHdhbnQgdG8gY2hlY2sgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtIGNhbGxzIHBhdGguIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgZGlzcGF0Y2ggYmFzZWQgb24gdGhpcy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb25kaXRpb25hbCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZCB2cyB3aGVuIGl0JiMzOTtzIG5vdC4gSXMgaXQgYSBjb21waWxlLXRpbWUgaW5jbHVzaW9uPyBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoaW4gdGhlIG1haW4gc3lzY2FsbCBoYW5kbGluZyBwYXRoPyBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvcHRpb24gaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgcHJvZmlsaW5nIHRoZSBzeXNjYWxsIHBhdGggYW5kIGRldGVybWluaW5nIGlmIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZSBpbiBhbnkgd2F5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBndWFyZCBibG9ja3Mgb2YgY29kZSByZWxhdGVkIHRvIHVzZXIgZGlzcGF0Y2guIEFuZCBpZiBpdCYjMzk7cyB0aGVyZSwgdGhlbiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkaWZmZXJlbmNlcyBhcmUgd2hlbiBpdCYjMzk7cyBub3QgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgUG9pbnQgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBpbml0aWFsaXplcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBlbnRyeSBwb2ludCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5cyB0byBob3cgdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsIHNldHVwIGlzIG9yY2hlc3RyYXRlZCDigJMgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLCB0aGUgZWFybHkgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiwgYW5kIHdoYXQgY2FsbHMgdGhlIGBzdGFydGAgcm91dGluZS4gR290dGEgc2VlIGhvdyB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHVzZWQsIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibHkgZmlsZXMgdGhhdCBhcmUgbGlua2VkIGVhcmx5LCBhbnkgcHJlLW1haW4gc2V0dXAgc3RlcHMuLi4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIGd1biBvZiB0aGUgd2hvbGUgZGFtbiB0aGluZywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyB3cml0dGVuIG9uIHRoZSBiYXJyZWwuIFRoZSBNYWtlZmlsZSBpdHNlbGYgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2NhbGxfdXNlcl9kaXNwYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvTWFrZWZpbGU9MTU9b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcdCYjNDM7PSBjb21tb24ub1xua2VybmVsL2VudHJ5L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFx0XHQmIzQzOz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xua2VybmVsL2VudHJ5L01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19WSVJUX1hGRVJfVE9fR1VFU1RfV09SSylcdCYjNDM7PSB2aXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4ga2VybmVsIGRldmVsb3BtZW50IGFuZCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gc3lzdGVtIGNhbGxzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBvciBgQ09ORklHX0dFTkVSSUNfRU5UUllgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHN5c3RlbSBjYWxsIHN1cHBvcnQuIExldCYjMzk7cyBkaWcgaW4uIE9rYXksIHRoZSBNYWtlZmlsZSBpcyByZXZlYWxpbmcgYSBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX0dFTkVSSUNfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwtY29tbW9uLm8gc3lzY2FsbF91c2VyX2Rpc3BhdGNoLm9gLiBUaGF0IGNvbmZpcm1zIGl0IOKAkyBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBjcnVjaWFsIG9iamVjdCBmaWxlcy4gQnV0IGl0IG1ha2VzIG1lIHdvbmRlciwgcHJlY2lzZWx5IHdoYXQgZG9lcyB0aGlzIG9wdGlvbiBlbnRhaWw/IE15IGtuZWUtamVyayByZWFjdGlvbiBpcyB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb24gb2YgYEdFTkVSSUNfU1lTQ0FMTGAgKHNpbmNlIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBpcyBpdHMgY29uZmlndXJhdGlvbiBjb3VudGVycGFydCkgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZTsgc28sIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50cyBhcmUgaGFuZGxlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dFTkVSSUNfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OgoKKipEaWdnaW5nIGludG8gdGhlIEVudHJ5IFBvaW50IENvbmZpZ3VyYXRpb24qKgoKSG1tLCBzbyBgYXJjaC9hcm02NC9LY29uZmlnYCBpcyBhY3R1YWxseSBzZWxlY3RpbmcgYEdFTkVSSUNfRU5UUllgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHRob3VnaHQgSSBoYWQgdGhlIHJlbGF0aW9uc2hpcCBvZiBgR0VORVJJQ19FTlRSWWAgcGlubmVkIGRvd24sIGJ1dCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBkb3VibGUgY2hlY2sgaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCBga2VybmVsL2VudHJ5L01ha2VmaWxlYC4gTWF5YmUgSSBtaXNyZW1lbWJlcmVkIHNvbWUgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgS2NvbmZpZ3MgYW5kIE1ha2VmaWxlcy4gVGltZSB0byBkaXZlIGJhY2sgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7R0VORVJJQ19FTlRSWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzQwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGVudHJ5IE1ha2VmaWxlLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBFbnRyeSBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgaXMgYSBjcnVjaWFsIGZpbGUsIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCYjMzk7cyBlbnRyeSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBpbml0aWFsIHNldHVwIGlzIGhhbmRsZWQsIHRoaW5ncyBsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLCBib290LXRpbWUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgbGlua2luZyBvZiB0aGUgZW50cnkgcG9pbnQuIEkgd2FudCB0byBzZWUgd2hpY2ggb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBpbmNsdWRlZCwgd2hhdCBjb21waWxlciBmbGFncyBhcmUgYmVpbmcgdXNlZCwgYW5kIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibHkgY29kZSB0aGF0JiMzOTtzIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYm9vdCBwcm9jZXNzIGl0c2VsZjsgdGhpbmdzIGxpa2UgdGhlIGVhcmx5IGludGVycnVwdCBoYW5kbGluZyBzZXQtdXAgYW5kIHdoZXJlIHRoZSBpbml0aWFsIHN0YWNrcyBhcmUgZXN0YWJsaXNoZWQgYXJlIGdvaW5nIHRvIGJlIGtleS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYm9vdGxvYWRlciBoYW5kcyBvZmYgY29udHJvbCB0byB0aGUga2VybmVsIHByb3Blci4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgb2ZmZXIgaW5zaWdodCBpbnRvIHNwZWNpZmljIGRlc2lnbiBjaG9pY2VzLiBUaW1lIHRvIGNyYWNrIGl0IG9wZW4gYW5kIHNlZSB3aGF0IGdlbXMgYXJlIGluc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0IyBQcmV2ZW50IHRoZSBub2luc3RyIHNlY3Rpb24gZnJvbSBiZWluZyBwZXN0ZXJlZCBieSBzYW5pdGl6ZXIgYW5kIG90aGVyIGdvb2RpZXNcbiAgIDQ6XHQjIGFzIGxvbmcgYXMgdGhlc2UgdGhpbmdzIGNhbm5vdCBiZSBkaXNhYmxlZCBwZXIgZnVuY3Rpb24uXG4gICA1Olx0S0FTQU5fU0FOSVRJWkUgOj0gblxuICAgNjpcdFVCU0FOX1NBTklUSVpFIDo9IG5cbiAgIDc6XHRLQ09WX0lOU1RSVU1FTlQgOj0gblxuICAgODpcdFxuICAgOTpcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24mIzM5O3Qgbm9pbnN0ci1zYWZlXG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMTE6XHRcbiAgMTI6XHRDRkxBR1NfUkVNT1ZFX2NvbW1vbi5vXHQgPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbiAgMTM6XHRDRkxBR1NfY29tbW9uLm9cdFx0JiM0Mzs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXG4gIDE0Olx0XG4gIDE1Olx0b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcdCYjNDM7PSBjb21tb24ub1xuICAxNjpcdG9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFx0XHQmIzQzOz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xuICAxNzpcdG9iai0kKENPTkZJR19WSVJUX1hGRVJfVE9fR1VFU1RfV09SSylcdCYjNDM7PSB2aXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19HRU5FUklDX1NZU0NBTExgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gZHJpbGwgZG93bi4gV2hlcmUgZXhhY3RseSAqaXMqIHRoaXMgb3B0aW9uIGRlZmluZWQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdFTkVSSUNfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA1PWNvbmZpZyBHRU5FUklDX0lSUV9FTlRSWVxuLS1cbmFyY2gvS2NvbmZpZy0xMDctXG5hcmNoL0tjb25maWc6MTA4OmNvbmZpZyBHRU5FUklDX1NZU0NBTExcbmFyY2gvS2NvbmZpZy0xMDktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTc5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgR0VORVJJQ19TWVNDQUxMIFVzYWdlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBhIGRpcmVjdGVkIGZvY3VzOiAqTGV0JiMzOTtzIHNlZSB3aGF0IHNlbGVjdHMgYEdFTkVSSUNfU1lTQ0FMTGAuKiBUaGlzIGlzIHdoZXJlIEkgYmVnaW4gdGhlIGludmVzdGlnYXRpdmUgcHJvY2VzcywgdGhlIGFuYWx5c2lzLiBJJiMzOTttIG5vdCBqdXN0IGlkbHkgcG9uZGVyaW5nOyBJJiMzOTttIGFjdGl2ZWx5IGZvcm11bGF0aW5nIGEgcGxhbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBkZWZpbml0aW9uLiBUaGUgc2VsZWN0aW9uIG9mIGBHRU5FUklDX1NZU0NBTExgIGlzIHRoZSBmb2NhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGtlcm5lbCBhcmUgdHlpbmcgaW50byB0aGlzLiBNeSBuZXh0IHN0ZXBzIGFyZSBwcm9iYWJseSwgdG8gZGlnIGludG8gdGhlIHNvdXJjZSB0cmVlIGFuZCB0cmFjZSB3aGVyZSB0aGlzIHN5bWJvbCBpcyB1c2VkLiBJcyBpdCBhIGxlZ2FjeSB0aGluZz8gQSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IFNvbWUgc29ydCBvZiBhYnN0cmFjdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aGF0JiMzNDsgYW5kIHRoZSAmIzM0O3doeSYjMzQ7IG9mIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVlcGVyIGFyY2hpdGVjdHVyYWwgZGVzaWduIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvczogSXMgaXQgYSBjb21tb24gZmFsbGJhY2s/IFBhcnQgb2YgYSBtb2R1bGFyIHN5c3RlbT8gRG9lcyBpdHMgc2VsZWN0aW9uIGNvcnJlbGF0ZSB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgR0VORVJJQ19TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTI9Y29uZmlnIEdFTkVSSUNfRU5UUllcbi0tXG5hcmNoL0tjb25maWctMTE0LVx0c2VsZWN0IEdFTkVSSUNfSVJRX0VOVFJZXG5hcmNoL0tjb25maWc6MTE1Olx0c2VsZWN0IEdFTkVSSUNfU1lTQ0FMTFxuYXJjaC9LY29uZmlnLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBUk02NCBHZW5lcmljIFN5c2NhbGwgRW50cnkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGdlbmVyaWMgZW50cnkgcG9pbnQgKGBHRU5FUklDX0VOVFJZYCkgaXMgdGhlIG9uZSBiZWluZyB1c2VkIHRvIGRpc3BhdGNoIGBHRU5FUklDX1NZU0NBTExgLCBhbmQgSSByZW1lbWJlciB0aGF0IGBhcmNoL2FybTY0L0tjb25maWdgIHNlbGVjdHMgaXQuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBtdXN0IGJlIHNlbGVjdGluZyBpdC4uLiB3YWl0LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiAqRXhhbWluZXMgdGhlIGRpZmYqIEFoLCB0aGUgZGlmZiBjb25maXJtcyBpdDogdGhlIHBhdGNoIGV4cGxpY2l0bHkgKmFkZHMqIGBzZWxlY3QgR0VORVJJQ19FTlRSWWAgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIHdoaWxlIHJlbW92aW5nIGBHRU5FUklDX0lSUV9FTlRSWWAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgd2hhdCBhYm91dCB0ZXN0aW5nIHRoaXM/IFdoaWNoIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50PyBIbW0sIGBTRUNDT01QYCBpcyBhIG5vLWJyYWluZXIgYmVjYXVzZSBgc2VjdXJlX2NvbXB1dGluZ2AgZ2V0cyBtb2RpZmllZCBhbmQgaXMgdXNlZCBieSB0aGUgcGF0Y2guIE9mIGNvdXJzZSwgYFNFQ0NPTVBfRklMVEVSYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGVuLCBgQ09NUEFUYCBsb29rcyB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAsIHdoaWNoIGFyZSBiZWluZyBtb2RpZmllZCwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuIEFzIGZvciBgREVCVUdfUlNFUWAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyByZW1vdmVkIGZyb20gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AsIGJ1dCB0aGUgYHJzZXFfc3lzY2FsbGAgaXMgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyBlbnRyeSwgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBpbXBhY3RzIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24uIExldCBtZSBjb25maXJtIGlmIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNpbmNlIGl0JiMzOTtzIGp1c3QgZW5hYmxlZCBpZiBgR0VORVJJQ19TWVNDQUxMYCBpcyBlbmFibGVkLiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIEFybTY0IFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXNuJiMzOTt0IGEgc3RhbmRhbG9uZSBvcHRpb24uIEl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgd2hlbiBgR0VORVJJQ19TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGxldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJbiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5IHBvaW50cy4gQWgsIHllcywgYGRvX2VsMF9zdmNgIGlzIHRoZSBtYWluIGhhbmRsZXIgZm9yIHN5c2NhbGxzLCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCBoYW5kbGVzIHRoZSBjb21wYXRpYmlsaXR5IGNhbGxzLiBFeGNlbGxlbnQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBzZWN1cml0eSBhc3BlY3RzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggc2VjY29tcC4gSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZWN1cmVfY29tcHV0aW5nYCBmdW5jdGlvbiBpcywgYXMgZXhwZWN0ZWQsIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX1NFQ0NPTVBgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcm9sZSBvZiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgd2hpY2ggc2hvdWxkIGJlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGFuZCBidWlsdCB3aGVuIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBpcyBhY3RpdmUuCgpTbywgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZToKCiogICBgU0VDQ09NUGAKKiAgIGBTRUNDT01QX0ZJTFRFUmAKKiAgIGBDT01QQVRgICh0byB0ZXN0IHRob3NlIGNvbXBhdGliaWxpdHkgc3lzY2FsbHMpCgpJIGtub3cgYFNFQ0NPTVBgIGFuZCBgU0VDQ09NUF9GSUxURVJgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSBjZXJ0YWluLCBzbyBJIHdpbGwgbGlzdCB0aGVtIGhlcmUuCgpPaCwgd2FpdCwgdGhlcmUmIzM5O3MgYEdFTkVSSUNfRU5UUllgLiBJIHJlY2FsbCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQVJNNjRgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhbHdheXMgYWN0aXZlIG9uIGFybTY0IGFyY2hpdGVjdHVyZXMuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucz8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY2AuIEhtbSwgYHB0cmFjZV9zYXZlX3JlZ2AgaGFzIG1vdmVkIGZyb20gYHB0cmFjZS5jYCB0byBgZW50cnktY29tbW9uLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgYW5kIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0YCBoYXZlIGJlZW4gYWRkZWQgdG8gYGVudHJ5LWNvbW1vbi5oYC4gU28gdGhlc2UgYXJlIGNvbXBpbGVkIGluIGFsbCB0aGUgdGltZS4gTm93IEkgc2hvdWxkIGNoZWNrIHdoYXQgaXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD02ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtOTItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjkzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC05NC17XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0xMDYtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjEwNzojZGVmaW5lIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gSG90bmVzcyBmb3IgVGVzdCBEaXN0cmlidXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIHNrZXcgbXkgdGVzdCBkaXN0cmlidXRpb25zLCBhbmQgdGhlc2Ugb25lcyBqdW1wZWQgb3V0OiBgZG9fZWwwX3N2Y2AsIGBkb19lbDBfc3ZjX2NvbXBhdGAsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gLCBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgYF9fc2VjdXJlX2NvbXB1dGluZ2AsIGBfX3NlY2NvbXBfZmlsdGVyYCwgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCwgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgLgoKVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kLCBoYW5nIG9uLi4uIGBkb19lbDBfc3ZjYCBpcyBhICpodWdlKiBvZmZlbmRlciBoZXJlLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IGZvciAqZXZlcnkqIEVMMCBzeXN0ZW0gY2FsbCEgVGhhdCYjMzk7cyBnb2luZyB0byBkb21pbmF0ZSBhbnkgdGVzdCBhbmQgaW52YWxpZGF0ZSB0aGUgcmVzdWx0cy4gRGVmaW5pdGVseSBhdm9pZGluZyB0aGF0LgoKVGhlbiwgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYCDigJMgdGhleSYjMzk7cmUgb24gdGhlIGZhc3QgcGF0aCB0b28gaWYgc2VjY29tcCBpcyBlbmFibGVkLCBzbywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gY29uZmlnLCB3ZSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoZW0uCgpgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyB0aGUgbmV4dCBvbmUuIEl0JiMzOTtzIGV4ZWN1dGVkIGZvciBldmVyeSBzeXNjYWxsIGlmIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgY29udHJvbGxlZCBieSBhIGZsYWcsIHNvIG1heWJlIG5vdCAqYXMqIGhvdCBhcyB0aGUgb3RoZXJzLCBidXQgc3RpbGwgb24gdGhlIHN5c2NhbGwgcGF0aCwgc28gcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuCgpBbmQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgY2FsbGVkIGZyb20gYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAsIHNvIHRoYXQmIzM5O3MgaW5kaXJlY3RseSBob3QuCgpCdXQgd2FpdCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBhY3R1YWxseSAqY2FsbGVkKiBpZiBgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgc2V0ISBHb29kIHRvIGtub3csIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAgdG8gc2VlIGhvdyB0aGlzIGZsYWcgaXMgc2V0IGFuZCBob3cgY29tbW9uIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC01Ny1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NTg6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC01OS1sb25nIHRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgc3lzY2FsbCk7XG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODEtXHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo4MjpcdFx0aWYgKHN5c2NhbGxfdXNlcl9kaXNwYXRjaChyZWdzKSlcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODMtXHRcdFx0cmV0dXJuIC0xTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5ODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCBzY2FuIGhhcyBwb2ludGVkIG1lIHRvd2FyZHMgc29tZSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsb2dpYyBmbG93IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhhdCBzcGVjaWZpYyBmbGFnIGlzIHNldCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHRvIGV4cGxvcmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYC4gVGhpcyBmdW5jdGlvbiBpcyBhbm90aGVyIGNvbXBlbGxpbmcgYXZlbnVlIHRvIGludmVzdGlnYXRlLCBhbmQgd2FycmFudHMgZnVydGhlciBhdHRlbnRpb24uCgpGdXJ0aGVybW9yZSwgdGhlIHBhaXIgb2YgZnVuY3Rpb25zIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGxvb2sgcGFydGljdWxhcmx5IHJlbGV2YW50LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHB0cmFjZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNpbmdsZS1zdGVwcGluZywgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaGFuZGxpbmcgbG93LWxldmVsIGNvbnRyb2wgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UsIGFzIHB0cmFjZSBpcyBub3RvcmlvdXNseSBjb21wbGV4LgoKRmluYWxseSwgYHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGlzIGludHJpZ3VpbmcuIEl0JiMzOTtzIHRoZSBwcmN0bCBoYW5kbGVyLCBzbyBpdCBvZmZlcnMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gY2FsbCBkaXNwYXRjaC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTQwPWJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03Ni1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzo3NzpzdGF0aWMgaW50IHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgbW9kZSxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzNS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMzY6aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3Rvcilcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzgte1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzOTpcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDAtfVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0xNjY9aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3Olx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzgtXHRcdFx0XHRcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBGdXp6aW5nIFRhcmdldCBDYW5kaWRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgd2l0aCBmdXp6aW5nIHRhcmdldHMuICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvc3NpYmlsaXRpZXMsIGFsb25nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZ2V0dGVycyBhbmQgc2V0dGVyczogYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnYCBhbmQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLgoKTGV0JiMzOTtzIGRvIHNvbWUgZGlnZ2luZy4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jYC4gQWgsIHJpZ2h0LCB0aGUgcGF0Y2ggcmVtb3ZlZCB0aGUgYHN5c2NhbGxfdHJhY2VfZW50ZXJgIGFuZCBgc3lzY2FsbF90cmFjZV9leGl0YCBmdW5jdGlvbnMuIFRoZXkmIzM5O3ZlIGJlZW4gcmVwbGFjZWQgYnkgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgLCB3aGljaCBhcmUgbm93IGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYC4gIEhtbSwgYnV0IGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuICBUaGF0JiMzOTtzIGEgbm8tZ28gZm9yIGRpcmVjdCBmdXp6aW5nLiBXaGF0IGFib3V0IHRoZSBnZW5lcmljIGBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgPyBJdCYjMzk7cyBhIHBvc3NpYmlsaXR5LCBidXQgcG90ZW50aWFsbHkgbm90IGFzIGludGVyZXN0aW5nIGFzIG90aGVycy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNgLiAgQWgsIGhlcmUgd2UgZ28sIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGFyZSBiZWluZyBtb2RpZmllZCB0byBzZXQgb3IgY2xlYXIgdGhlIGBTWVNDQUxMX0VYSVRfVFJBUGAgZmxhZy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgZ29vZCBjYW5kaWRhdGVzIQoKVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBga2VybmVsL3NlY2NvbXAuY2AuIEkgc2VlIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAgbm93IHJldHVybiBhIGBib29sYC4gIFRoZXkgYXJlIGJvdGggY2FsbGVkIG9uIHN5c2NhbGwgZW50cnkgaWYgc2VjY29tcCBpcyBlbmFibGVkLiAgVGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhleSB0b28gaG90PyAgR2VuZXJhbGx5LCBpbiBhIGZ1enppbmcgc2V0dXAsIHNlY2NvbXAgaXMgdXN1YWxseSBvbmx5IGVuYWJsZWQgZm9yIHNwZWNpZmljIHRlc3RzLCBidXQgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBzZWNjb21wIHRvIGlzb2xhdGUgcHJvY2Vzc2VzLiAqV2FpdCwgaXQgZG9lc24mIzM5O3QgdXNlIHNlY2NvbXAgZm9yIGl0cyBvd24gcHJvY2Vzc2VzLCBidXQgaXQgbWlnaHQgZnV6eiBpdC4qIEFjdHVhbGx5LCBgX19zZWNjb21wX2ZpbHRlcmAgaXMgbGlrZWx5IGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBvZiBzZWNjb21wIGZpbHRlcmluZy4KCkhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCYjMzQ7IHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEkga25vdyBgX19zZWN1cmVfY29tcHV0aW5nYCBpcyBwcm9iYWJseSBhIGhvdCBwYXRoIGlmIHNlY2NvbXAgaXMgZW5hYmxlZC4gSSBzaG91bGQgc3RpY2sgdG8gdGhlIGxlc3MgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuIFNvLCBsZXQgbWUgbmFycm93IGl0IGRvd24gdG86CgoqICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAKKiAgIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgCiogICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAKKiAgIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgCiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX2dldF9jb25maWdgCiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWdgCiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgCiogICBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYAoKT2theSwgaG9sZCBvbi4uLkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBleGhhdXN0ZWQgYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZXJlPyBUaGF0IHNob3VsZCBiZSBhIGdvb2QgYXJlYSB0byBzdGFydCBsb29raW5nIGF0IG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTM5LVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEFybTY0IGFuZCBHZW5lcmljIFN5c2NhbGwgRW50cnkqKgoKT2theSwgc28gaW5pdGlhbGx5IEkgd2FzIGEgYml0IGNvbmZ1c2VkLiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBhIGdlbmVyYWwgbWVjaGFuaXNtLCBidXQgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBpdCBzcGVjaWZpY2FsbHkgZm9yIGFybTY0IGJ5IHNlbGVjdGluZyBgR0VORVJJQ19FTlRSWWAuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhY3R1YWxseSAqYWRkKiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIGRpcmVjdGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgdG8gc2V0IGBHRU5FUklDX0VOVFJZYCwgd2hpY2ggY29uZGl0aW9uYWxseSBpbmNsdWRlcyBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIGlmIGBHRU5FUklDX1NZU0NBTExgIGlzIGFsc28gY2hvc2VuLiBSaWdodCwgZ290IGl0LgoKQnV0IGhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRpZmYgaXRzZWxmLi4uICpBaGEhKiBUaGUgZGlmZiAqZG9lcyogdG91Y2ggYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIE5vdyBJIHNlZSBpdC4gVGhlIHBhdGNoIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYXMgYSB3ZWFrIGZ1bmN0aW9uIHRoZXJlLiBPa2F5LCBzbyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciB0aGlzIGNoYW5nZS4gTm93IEkgdW5kZXJzdGFuZC4gVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIHBpZWNlLgoKTGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBsb29rIGF0IG90aGVyIGFmZmVjdGVkIGZpbGVzIHdpdGhpbiB0aGUgcGF0Y2guIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgdG8gYGFyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNgLCBgYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNgLCBgYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuY2AsIGFuZCBgYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jYC4gVGhleSYjMzk7cmUgYWxsIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgIXNlY3VyZV9jb21wdXRpbmcoKWAgaW5zdGVhZCBvZiBgc2VjdXJlX2NvbXB1dGluZygpID09IC0xYC4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBhIHdpZGVyLCBmdW5kYW1lbnRhbCBjaGFuZ2UgYWNyb3NzIHRoZSBrZXJuZWwgd2hlcmUgYHNlY3VyZV9jb21wdXRpbmcoKWAgaXMgbm93IHJldHVybmluZyBhIGJvb2xlYW4uCgpTbywgc3VtbWluZyBpdCB1cCwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0d28tZm9sZDogRmlyc3QsIGl0JiMzOTtzIGEgdHJlZS13aWRlIGNoYW5nZSB0byBjb252ZXJ0IGBzZWN1cmVfY29tcHV0aW5nKClgIHRvIGEgYm9vbGVhbiByZXR1cm4uIEJ1dCB0aGUgYmlnZ2VyLCBhcmNoaXRlY3R1cmFsIGNoYW5nZSBpcyBtaWdyYXRpbmcgYXJtNjQgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50IG1lY2hhbmlzbS4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LCBJIGJlbGlldmUuCgpUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBsZXQmIzM5O3MgbGlzdCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlOgoqICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAKKiAgIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAKKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgCgpXYWl0LCBoYW5nIG9uLi4uIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb250ZW50cyBvZiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCB0b28uIFdoaWxlIGl0IHdvbiYjMzk7dCBiZSBhcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgKmltcGFjdCogb2YgdGhlIGNoYW5nZSwgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFybTY0IHNwZWNpZmljIGNvZGUuIExvb2tzIGxpa2UgYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgIGFyZSBob3QgcGF0aHMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGBpbnZva2Vfc3lzY2FsbGAsIGFsdGhvdWdoIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGNvbnRleHQgd2hlbiByZXZpZXdpbmcgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFjdHVhbCBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCBmaWxlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW52b2tlX3N5c2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTIzPXN0YXRpYyBsb25nIGRvX25pX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0zMy1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozNDpzdGF0aWMgbG9uZyBfX2ludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF9mbilcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0zNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTM4LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjM5OnN0YXRpYyB2b2lkIGludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2NubyxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy00MC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2NfbnIsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTQ5LVx0XHRzeXNjYWxsX2ZuID0gc3lzY2FsbF90YWJsZVthcnJheV9pbmRleF9ub3NwZWMoc2Nubywgc2NfbnIpXTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzo1MDpcdFx0cmV0ID0gX19pbnZva2Vfc3lzY2FsbChyZWdzLCBzeXNjYWxsX2ZuKTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy01MS1cdH0gZWxzZSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTE4LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjExOTpcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjAtdHJhY2VfZXhpdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXN0ZW0gQ2FsbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHRoZSBtb3N0IGludGVyZXN0aW5nIGNoYW5nZXMgd2l0aGluIHRoaXMgc3lzdGVtIGNhbGwgcGF0Y2guIEkgcXVpY2tseSBob25lZCBpbiBvbiB0aGUgaG90IHBhdGhzLCBsaWtlIGBpbnZva2Vfc3lzY2FsbGAgYW5kIGBfX2ludm9rZV9zeXNjYWxsYCwgd2hpY2ggSSBmaWx0ZXJlZCBvdXQgdG8gZm9jdXMgb24gdGhlIGtleSBtb2RpZmljYXRpb25zLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBpbnRvIGBzeXNjYWxsX3RyYWNlX2VudGVyYCwgd2hpY2ggbGVkIG1lIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbnMuCgpNeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBsZXNzIGZyZXF1ZW50bHkgZXhlY3V0ZWQgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIEkgbm90aWNlZCBtb2RpZmljYXRpb25zIHRvOgoKKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gCiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgCiogICBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYAoKSSB0aGVuIGRvdWJsZS1jaGVja2VkIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLiBJdCB3YXNuJiMzOTt0IGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBzYXcgdGhlIGFkZGl0aW9uIG9mIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGFuZCB0aGVyZWZvcmUgYmVhcnMgcmVsZXZhbmNlLiBJIG1vdmVkIG9uIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaG93IGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGltcGxlbWVudGVkIGZvciBBUk02NC4gVGhlIGRpZmZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgVkRTTyBzaWdyZXR1cm4gbWVjaGFuaXNtLCBzZWVtIGNyaXRpY2FsLgoKSSB0aGVuIGNvbnNpZGVyZWQgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gV2hpbGUgdGhvc2UgYXJlIGNvcmUgc2VjY29tcCBjaGFuZ2VzIGluIHRoZSBwYXRjaCwgbXkgZm9jdXMgaXMgb24gbGVzcy1mcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHNlY2NvbXAsIGJ1dCB0aGUgaG90IHBhdGggZnVuY3Rpb25zIGFyZSBub3QgdGhlIGZvY3VzLCBJIGRpc2NhcmRlZCB0aGVzZS4KCkkgcmV2aXNpdGVkIHRoZSBxdWVzdGlvbiBvZiBnZW5lcmljIGhvdCBwYXRocywgbWFraW5nIHN1cmUgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZW0gaW4gbXkgc2VsZWN0aW9uLCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoZXJlZm9yZSwgSSBzZXR0bGVkIG9uIGxpc3RpbmcgdGhlIGZvbGxvd2luZzoKCiogICBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYAoqICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYAoqICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAKClRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMgd2l0aG91dCBiZWluZyBvdmVybHkgZ2VuZXJpYy4KCkZpbmFsbHksIEkgY2hlY2tlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0YWJpbGl0eS4KKiAgIGBTRUNDT01QYAoqICAgYFNFQ0NPTVBfRklMVEVSYAoqICAgYENPTVBBVGAgKG5lZWRlZCBiZWNhdXNlIG9mIGNvbXBhdC1yZWxhdGVkIGxvZ2ljIGluIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gKQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUEFUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTc3NT1jb25maWcgS1VTRVJfSEVMUEVSU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xODAxLVxuYXJjaC9hcm02NC9LY29uZmlnOjE4MDI6Y29uZmlnIENPTVBBVF9WRFNPXG5hcmNoL2FybTY0L0tjb25maWctMTgwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIHZEU08gZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTgxNT1jb25maWcgVEhVTUIyX0NPTVBBVF9WRFNPXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE4MjItXG5hcmNoL2FybTY0L0tjb25maWc6MTgyMzpjb25maWcgQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODI0LVx0Ym9vbCBcJiMzNDtGaXggdXAgbWlzYWxpZ25lZCBtdWx0aS13b3JkIGxvYWRzIGFuZCBzdG9yZXMgaW4gdXNlciBzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25maWcgaGVyZS4gR29vZCwgYENPTVBBVGAgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbjsgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggdGhpcyBgU0VDQ09NUGAgYW5kIGBTRUNDT01QX0ZJTFRFUmAgY29tYm8uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNldHRpbmdzLiBHb3R0YSBlbnN1cmUgbm8gb3ZlcnNpZ2h0cyBoZXJlLiBHb3R0YSBjb25maXJtIHRoZSBTRUNDT01QIHBvbGljaWVzIGFyZSB3ZWxsLWRlZmluZWQuIEFscmlnaHQsIGxldCYjMzk7cyBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDQ09NUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9NjI4PWNvbmZpZyBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbi0tXG5hcmNoL0tjb25maWctNjQ2LVxuYXJjaC9LY29uZmlnOjY0Nzpjb25maWcgU0VDQ09NUFxuYXJjaC9LY29uZmlnLTY0OC1cdHByb21wdCBcJiMzNDtFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgZXhlY3V0ZSB1bnRydXN0ZWQgYnl0ZWNvZGVcJiMzNDtcbi0tXG5hcmNoL0tjb25maWctNjYzLVxuYXJjaC9LY29uZmlnOjY2NDpjb25maWcgU0VDQ09NUF9GSUxURVJcbmFyY2gvS2NvbmZpZy02NjUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9LY29uZmlnLTY3My1cbmFyY2gvS2NvbmZpZzo2NzQ6Y29uZmlnIFNFQ0NPTVBfQ0FDSEVfREVCVUdcbmFyY2gvS2NvbmZpZy02NzUtXHRib29sIFwmIzM0O1Nob3cgc2VjY29tcCBmaWx0ZXIgY2FjaGUgc3RhdHVzIGluIC9wcm9jL3BpZC9zZWNjb21wX2NhY2hlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjEyCgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBcm02NCBTeXN0ZW0gQ2FsbCBNaWdyYXRpb24gUGF0Y2gqKgoKT2theSwgdGhpcyBsb29rcyB2YWxpZC4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhpcyBwYXRjaCYjMzk7cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzIEkgbmVlZCB0byBjb25zaWRlcj8gUmlnaHQsIGl0IG1vZGlmaWVzIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlbGVjdCBgR0VORVJJQ19FTlRSWWAuIGBHRU5FUklDX0VOVFJZYCBpcyAqc2VsZWN0ZWQqLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSBpdCBleHBsaWNpdGx5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgb2YgdGhpczogdGhlIHBhdGNoIG1vdmVzIGFybTY0IHRvIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCYjMzk7cyBkaXRjaGluZyB0aGUgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIGdlbmVyaWMgYHN5c2NhbGxfdHJhY2VfZW50ZXIoKWAgYW5kIGBzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsoKWAgZnVuY3Rpb25zLiBJdCBhbHNvIG1vZGlmaWVzIGBzZWN1cmVfY29tcHV0aW5nKClgIGFjcm9zcyB0aGUgdHJlZSB0byByZXR1cm4gYSBib29sZWFuIGluc3RlYWQgb2YgYW4gaW50ZWdlci4gVGhhdCYjMzk7cyBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHN5c2NhbGxzIHdvcmsgb24gYXJtNjQsIGFuZCBpdCByaXBwbGVzIG91dCB0byBzZWNjb21wIGhhbmRsaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKVGhlcmVmb3JlLCBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHRhcmdldCB0aGUgc3BlY2lmaWMgbmV3IGVudHJ5IHBvaW50cyBvbiBhcm02NCBpbnRyb2R1Y2VkIGJ5IHRoZSBnZW5lcmljIGVudHJ5IG1lY2hhbmlzbS4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhpbmdzIGxpa2UgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIEFuZCwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBzaW5nbGUtc3RlcCBwdHJhY2UgaW50ZXJhY3Rpb24sIHNpbmNlIHRoYXQgd2FzIG1vZGlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyBlbnRyeS4KClRvIGV4ZXJjaXNlIHRoZSBzZWNjb21wIGNoYW5nZXMgYW5kIHRoZSBjb21wYXQgYnJhbmNoIG9mIHRoZSB2ZHNvIHNpZ3JldHVybiBjaGVjaywgSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYFNFQ0NPTVBgLCBgU0VDQ09NUF9GSUxURVJgLCBhbmQgYENPTVBBVGAuCgpNeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZToKCiogICBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYAoqICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYAoqICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAKCldhaXQuLi4gSSBzZWUgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgKmFsc28qIGFkZGVkIGFzIGEgd2VhayBmdW5jdGlvbiBpbiBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gbW9yZSB0aGFuIG9uZSBwbGFjZS4KCkhtbSwgd2hhdCBhYm91dCBmdXp6aW5nIGBfX3NlY3VyZV9jb21wdXRpbmdgIGRpcmVjdGx5PyBJdCYjMzk7cyBhIGhvdCBwYXRoLCBhbmQgaXQmIzM5O3MgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEhvd2V2ZXIsIGl0JiMzOTtzIHRvbyByaXNreSB0byBpbmNsdWRlIGluIHRoaXMgY3VycmVudCBmb2N1cy4gSSBkb24mIzM5O3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzIGJ5IGluY2x1ZGluZyBjb2RlIHRoYXQgaXMgdG9vIGJyb2FkbHkgY2hhbmdlZC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLi4uIE9rYXksIGBwdHJhY2Vfc2F2ZV9yZWdgIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgIGFyZSBhbGwgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgbWVhbnMgSSBjYW4mIzM5O3QgdGFyZ2V0IHRoZW0gZGlyZWN0bHkgZm9yIGZ1enppbmcuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCB3aXRoIHRoZXNlIHRocmVlIGZvY3VzIHN5bWJvbHMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNDT01QJiMzNDssCiAgICAmIzM0O1NFQ0NPTVBfRklMVEVSJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICAgJiMzNDt1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCYjMzQ7LAogICAgJiMzNDt1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNDT01QJiMzNDssCiAgICAmIzM0O1NFQ0NPTVBfRklMVEVSJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICAgJiMzNDt1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCYjMzQ7LAogICAgJiMzNDt1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjc6NDcuNjk4MjUwMTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NDU4NDExNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ0NPTVBcIixcbiAgICBcIlNFQ0NPTVBfRklMVEVSXCIsXG4gICAgXCJDT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgICBcInVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwXCIsXG4gICAgXCJ1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjQ3LjY5ODI1NzUyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzIzMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDM2NjlmOTQyZWI1M2VkZTBmOTIxNGRlMzZlOGNmNDNiMDE4OTg5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxNToyNzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggMDY4Nzc2MGVhNDY2OTguLjI3ZDk4NDdiMTA4MjM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpXFxuIFxcdCAqIElmIHRoaXMgZmFpbHMsIHNlY2NvbXAgbWF5IGFscmVhZHkgaGF2ZSBzZXQgdXAgdGhlIHJldHVybiB2YWx1ZVxcbiBcXHQgKiAoZS5nLiBTRUNDT01QX1JFVF9FUlJOTyAvIFRSQUNFKS5cXG4gXFx0ICovXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcXG4rXFx0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpIHtcXG4gXFx0XFx0aWYgKHJlZ3MtXFx1MDAzZXIxOSA9PSAwIFxcdTAwMjZcXHUwMDI2IHJlZ3MtXFx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxcbiBcXHRcXHRcXHRzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncywgLUVOT1NZUywgMCk7XFxuIFxcdFxcdHN5c2NhbGxfc2V0X25yKGN1cnJlbnQsIHJlZ3MsIC0xKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXFxuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC04NTUsNyArODU1LDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFxuIFxcdC8qIERvIHNlY2NvbXAgYWZ0ZXIgcHRyYWNlOyBzeXNjYWxsIG1heSBoYXZlIGNoYW5nZWQuICovXFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuICNlbHNlXFxuIFxcdC8qIFhYWDogcmVtb3ZlIHRoaXMgb25jZSBPQUJJIGdldHMgZml4ZWQgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuaW5kZXggYjNhZmUwNjg4OTE5YmQuLmFlYTY4NmRjZTNkNWFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbkBAIC0xMjgsOSArMTI4LDkgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXFxuIFxcdHNlbGVjdCBHRU5FUklDX0NQVV9WVUxORVJBQklMSVRJRVNcXG4gXFx0c2VsZWN0IEdFTkVSSUNfRUFSTFlfSU9SRU1BUFxcbitcXHRzZWxlY3QgR0VORVJJQ19FTlRSWVxcbiBcXHRzZWxlY3QgR0VORVJJQ19JRExFX1BPTExfU0VUVVBcXG4gXFx0c2VsZWN0IEdFTkVSSUNfSU9SRU1BUFxcbi1cXHRzZWxlY3QgR0VORVJJQ19JUlFfRU5UUllcXG4gXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSVxcbiBcXHRzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRFxcbiBcXHRzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcXG5pbmRleCBkMjc3OWQ2MDRjN2JlMi4uZjQzZDRkZWE5MTZhNWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcXG5AQCAtMTg1LDYgKzE4NSw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIHN0cnVjdCBsaW51eF9iaW5wcm07XFxuIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgdXNlc19pbnRlcnApO1xcbitleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbiBcXG4gLyogMUdCIG9mIFZBICovXFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oXFxuaW5kZXggY2FiOGNkNzhmNjkzODUuLmQ4YmY0YmYzNDJlODBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oXFxuQEAgLTMsMTQgKzMsMjEgQEBcXG4gI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXFxuICNkZWZpbmUgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cmFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGhyZWFkX2luZm8uaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vY29tcGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RhaWZmbGFncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Zwc2ltZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL210ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFxcdTAwM2VcXG4gXFxuK2VudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcXG4rXFx0UFRSQUNFX1NZU0NBTExfRU5URVIgPSAwLFxcbitcXHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxcbit9O1xcbitcXG4gI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpXFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbkBAIC01NCw0ICs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxcbiBcXG4gI2RlZmluZSBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWRcXG4gXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCAqcmVnbm8pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxcbitcXHQgKiBleGl0IHN0b3BzIGJlY2F1c2Ugd2UgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHN0b3AgaGFzIGJlZW5cXG4rXFx0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcXG4rXFx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxcbitcXHQgKiBhbmQgcmVzdG9yaW5nIGl0cyBvbGQgdmFsdWUgYWZ0ZXIgdGhlIHN0b3AuIFRoaXMgbWVhbnMgdGhhdDpcXG4rXFx0ICpcXG4rXFx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXFxuK1xcdCAqICAgaWdub3JlZC9kaXNjYXJkZWQuXFxuK1xcdCAqXFxuK1xcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXFxuK1xcdCAqICAgc28gdGhlIHRyYWNlciBjYW5ub3Qgc2F2ZSBpdCBhbmQgcmVzdG9yZSBpdCBsYXRlci5cXG4rXFx0ICpcXG4rXFx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xcbitcXHQgKiAgICh0aGUgbGF0dGVyIGRvIG5vdCBub2JibGUgYW55IHJlZ2lzdGVycykuXFxuK1xcdCAqL1xcbitcXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XFxuK1xcdHNhdmVkX3JlZyA9IHJlZ3MtXFx1MDAzZXJlZ3NbKnJlZ25vXTtcXG4rXFx0cmVncy1cXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xcbitcXG4rXFx0cmV0dXJuIHNhdmVkX3JlZztcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcdGludCByZWdubywgcmV0O1xcbitcXG4rXFx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcXHUwMDI2cmVnbm8pO1xcbitcXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGZvcmdldF9zeXNjYWxsKHJlZ3MpO1xcbitcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IHN0ZXApXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcdGludCByZWdubztcXG4rXFxuK1xcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FWElULCBcXHUwMDI2cmVnbm8pO1xcbitcXHRpZiAoIXN0ZXApIHtcXG4rXFx0XFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XFxuK1xcdFxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0XFxuK1xcdFxcdCAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGVcXG4rXFx0XFx0ICogc3RhdGUgbWFjaGluZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpO1xcbitcXHR9XFxuK31cXG4rXFxuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdCBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0XFxuK1xcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggNWU0YzdmYzQ0ZjczMTUuLjg0YjFjMzYyMzNkNDFlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYXVkaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yc2VxLmhcXHUwMDNlXFxuIFxcbiB0eXBlZGVmIGxvbmcgKCpzeXNjYWxsX2ZuX3QpKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4gXFxuQEAgLTEyMCw3ICsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0cmV0dXJuIEFVRElUX0FSQ0hfQUFSQ0g2NDtcXG4gfVxcbiBcXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLVxcbiAjZW5kaWZcXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuaW5kZXggNWQ3ZmUzZTE1M2M4NTAuLjNmNjIxYmEwZjk2MTM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxcbkBAIC00Niw2ICs0Niw3IEBAIHN0cnVjdCB0aHJlYWRfaW5mbyB7XFxuIFxcdHU2NFxcdFxcdFxcdG1wYW1fcGFydGlkX3BtZztcXG4gI2VuZGlmXFxuIFxcdHUzMlxcdFxcdFxcdGNwdTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHN5c2NhbGxfd29yazsgICAvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spXFx0XFxcXFxcbkBAIC02OCwxMSArNjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XFxuICNkZWZpbmUgVElGX1VQUk9CRVxcdFxcdDVcXHQvKiB1cHJvYmUgYnJlYWtwb2ludCBvciBzaW5nbGVzdGVwICovXFxuICNkZWZpbmUgVElGX01URV9BU1lOQ19GQVVMVFxcdDZcXHQvKiBNVEUgQXN5bmNocm9ub3VzIFRhZyBDaGVjayBGYXVsdCAqL1xcbiAjZGVmaW5lIFRJRl9OT1RJRllfU0lHTkFMXFx0N1xcdC8qIHNpZ25hbCBub3RpZmljYXRpb25zIGV4aXN0ICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VcXHQ4XFx0Lyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi9cXG4tI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVFxcdDlcXHQvKiBzeXNjYWxsIGF1ZGl0aW5nICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVFxcdDEwXFx0Lyogc3lzY2FsbCB0cmFjZXBvaW50IGZvciBmdHJhY2UgKi9cXG4tI2RlZmluZSBUSUZfU0VDQ09NUFxcdFxcdDExXFx0Lyogc3lzY2FsbCBzZWN1cmUgY29tcHV0aW5nICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXFx0XFx0MTJcXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cXG4gI2RlZmluZSBUSUZfUEFUQ0hfUEVORElOR1xcdDEzXFx0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xcbiAjZGVmaW5lIFRJRl9NRU1ESUVcXHRcXHQxOFxcdC8qIGlzIHRlcm1pbmF0aW5nIGR1ZSB0byBPT00ga2lsbGVyICovXFxuICNkZWZpbmUgVElGX0ZSRUVaRVxcdFxcdDE5XFxuQEAgLTk0LDI0ICs5MCwxNCBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XFxuICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRURfTEFaWVxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9ORUVEX1JFU0NIRURfTEFaWSlcXG4gI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUVcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfTk9USUZZX1JFU1VNRSlcXG4gI2RlZmluZSBfVElGX0ZPUkVJR05fRlBTVEFURVxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9GT1JFSUdOX0ZQU1RBVEUpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0UpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1NZU0NBTExfQVVESVQpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxcbi0jZGVmaW5lIF9USUZfU0VDQ09NUFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9TRUNDT01QKVxcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9FTVVcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1lTQ0FMTF9FTVUpXFxuICNkZWZpbmUgX1RJRl9QQVRDSF9QRU5ESU5HXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1BBVENIX1BFTkRJTkcpXFxuICNkZWZpbmUgX1RJRl9VUFJPQkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfVVBST0JFKVxcbi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9TSU5HTEVTVEVQKVxcbiAjZGVmaW5lIF9USUZfMzJCSVRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfMzJCSVQpXFxuICNkZWZpbmUgX1RJRl9TVkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1ZFKVxcbiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX01URV9BU1lOQ19GQVVMVClcXG4gI2RlZmluZSBfVElGX05PVElGWV9TSUdOQUxcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfTk9USUZZX1NJR05BTClcXG4gI2RlZmluZSBfVElGX1RTQ19TSUdTRUdWXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1RTQ19TSUdTRUdWKVxcbiBcXG4tI2RlZmluZSBfVElGX1NZU0NBTExfV09SS1xcdChfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQgfCBcXFxcXFxuLVxcdFxcdFxcdFxcdCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB8IF9USUZfU0VDQ09NUCB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0IF9USUZfU1lTQ0FMTF9FTVUpXFxuLVxcbiAjaWZkZWYgQ09ORklHX1NIQURPV19DQUxMX1NUQUNLXFxuICNkZWZpbmUgSU5JVF9TQ1NcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zY3NfYmFzZVxcdD0gaW5pdF9zaGFkb3dfY2FsbF9zdGFjayxcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXFxuaW5kZXggMjkzMDc2NDJmNGM5MDQuLmM1MzY4MzgzOTE1NTM2IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXFxuQEAgLTM4NSwxMSArMzg1LDE5IEBAIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiBcXG4gXFx0aWYgKCF0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcodGksIFRJRl9TSU5HTEVTVEVQKSlcXG4gXFx0XFx0c2V0X3JlZ3Nfc3Bzcl9zcyh0YXNrX3B0X3JlZ3ModGFzaykpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5zdXJlIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgY29kZSB0cmlnZ2VycyBhIHRyYXAgb25jZSBzdGVwcGluZ1xcbitcXHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXFxuK1xcdCAqIGFzIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZG9lcyBub3QgbmF0aXZlbHkgY2hlY2sgZm9yIFRJRl9TSU5HTEVTVEVQLlxcbitcXHQgKi9cXG4rXFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcXG4gfVxcbiBOT0tQUk9CRV9TWU1CT0wodXNlcl9lbmFibGVfc2luZ2xlX3N0ZXApO1xcbiBcXG4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiB7XFxuIFxcdGNsZWFyX3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8odGFzayksIFRJRl9TSU5HTEVTVEVQKTtcXG4rXFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9FWElUX1RSQVApO1xcbiB9XFxuIE5PS1BST0JFX1NZTUJPTCh1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXApO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggNGQwODU5OGUyODkxZDMuLjYxYTY2ODY4Mjk0NzE1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtOCw3ICs4LDYgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuXFxuICAqL1xcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1ZGl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuQEAgLTE4LDcgKzE3LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWNjb21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsLmhcXHUwMDNlXFxuQEAgLTI4LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h3X2JyZWFrcG9pbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3NldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZWxmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yc2VxLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG5AQCAtMzgsMTMgKzM1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb2ludGVyX2F1dGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc20vc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RyYXBzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3lzdGVtX21pc2MuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcbi0jaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmhcXHUwMDNlXFxuLVxcbiBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHRpbnQgb2Zmc2V0O1xcbkBAIC0yMzM5LDExNCArMjMzMiw2IEBAIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LFxcbiBcXHRyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpO1xcbiB9XFxuIFxcbi1lbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7XFxuLVxcdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcXG4tXFx0UFRSQUNFX1NZU0NBTExfRVhJVCxcXG4tfTtcXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCAqcmVnbm8pXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxcbi1cXHQgKiBleGl0IHN0b3BzIGJlY2F1c2Ugd2UgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHN0b3AgaGFzIGJlZW5cXG4tXFx0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcXG4tXFx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxcbi1cXHQgKiBhbmQgcmVzdG9yaW5nIGl0cyBvbGQgdmFsdWUgYWZ0ZXIgdGhlIHN0b3AuIFRoaXMgbWVhbnMgdGhhdDpcXG4tXFx0ICpcXG4tXFx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXFxuLVxcdCAqICAgaWdub3JlZC9kaXNjYXJkZWQuXFxuLVxcdCAqXFxuLVxcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXFxuLVxcdCAqICAgc28gdGhlIHRyYWNlciBjYW5ub3Qgc2F2ZSBpdCBhbmQgcmVzdG9yZSBpdCBsYXRlci5cXG4tXFx0ICpcXG4tXFx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xcbi1cXHQgKiAgICh0aGUgbGF0dGVyIGRvIG5vdCBub2JibGUgYW55IHJlZ2lzdGVycykuXFxuLVxcdCAqL1xcbi1cXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XFxuLVxcdHNhdmVkX3JlZyA9IHJlZ3MtXFx1MDAzZXJlZ3NbKnJlZ25vXTtcXG4tXFx0cmVncy1cXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xcbi1cXG4tXFx0cmV0dXJuIHNhdmVkX3JlZztcXG4tfVxcbi1cXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcXG4tXFx0aW50IHJlZ25vLCByZXQ7XFxuLVxcbi1cXHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsIFxcdTAwMjZyZWdubyk7XFxuLVxcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Zm9yZ2V0X3N5c2NhbGwocmVncyk7XFxuLVxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcXG4tXFx0aW50IHJlZ25vO1xcbi1cXG4tXFx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFxcdTAwMjZyZWdubyk7XFxuLVxcdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcXG4tXFx0XFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XFxuLVxcdFxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0XFxuLVxcdFxcdCAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGVcXG4tXFx0XFx0ICogc3RhdGUgbWFjaGluZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpO1xcbi1cXHR9XFxuLX1cXG4tXFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSByZWFkX3RocmVhZF9mbGFncygpO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgKF9USUZfU1lTQ0FMTF9FTVUgfCBfVElGX1NZU0NBTExfVFJBQ0UpKSB7XFxuLVxcdFxcdHJldCA9IHJlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpO1xcbi1cXHRcXHRpZiAocmV0IHx8IChmbGFncyBcXHUwMDI2IF9USUZfU1lTQ0FMTF9FTVUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gTk9fU1lTQ0FMTDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi9cXG4tXFx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIE5PX1NZU0NBTEw7XFxuLVxcbi1cXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcXG4tXFx0XFx0dHJhY2Vfc3lzX2VudGVyKHJlZ3MsIHJlZ3MtXFx1MDAzZXN5c2NhbGxubyk7XFxuLVxcbi1cXHRhdWRpdF9zeXNjYWxsX2VudHJ5KHJlZ3MtXFx1MDAzZXN5c2NhbGxubywgcmVncy1cXHUwMDNlb3JpZ194MCwgcmVncy1cXHUwMDNlcmVnc1sxXSxcXG4tXFx0XFx0XFx0ICAgIHJlZ3MtXFx1MDAzZXJlZ3NbMl0sIHJlZ3MtXFx1MDAzZXJlZ3NbM10pO1xcbi1cXG4tXFx0cmV0dXJuIHJlZ3MtXFx1MDAzZXN5c2NhbGxubztcXG4tfVxcbi1cXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XFxuLVxcbi1cXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XFxuLVxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVClcXG4tXFx0XFx0dHJhY2Vfc3lzX2V4aXQocmVncywgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpKTtcXG4tXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IChfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NJTkdMRVNURVApKVxcbi1cXHRcXHRyZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MpO1xcbi1cXG4tXFx0cnNlcV9zeXNjYWxsKHJlZ3MpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cXG4gICogV2UgcGVybWl0IHVzZXJzcGFjZSB0byBzZXQgU1NCUyAoQUFyY2g2NCBiaXQgMTIsIEFBcmNoMzIgYml0IDIzKSB3aGljaCBpc1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXFxuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcXG5AQCAtOCw4ICs4LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYWNoZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEtZW50cnktY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcXG5pbmRleCAzNThkZGZiZjE0MDFhYy4uZTBhOThmYWMzYjg1NjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxuQEAgLTU0LDE1ICs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuIFxcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAwLCByZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzX3N5c2NhbGxfd29yayh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi17XFxuLVxcdHJldHVybiB1bmxpa2VseShmbGFncyBcXHUwMDI2IF9USUZfU1lTQ0FMTF9XT1JLKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyB3b3JrO1xcbiBcXG4gXFx0cmVncy1cXHUwMDNlb3JpZ194MCA9IHJlZ3MtXFx1MDAzZXJlZ3NbMF07XFxuIFxcdHJlZ3MtXFx1MDAzZXN5c2NhbGxubyA9IHNjbm87XFxuQEAgLTk1LDcgKzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGhhc19zeXNjYWxsX3dvcmsoZmxhZ3MpKSB7XFxuK1xcdHdvcmsgPSBSRUFEX09OQ0UoY3VycmVudF90aHJlYWRfaW5mbygpLVxcdTAwM2VzeXNjYWxsX3dvcmspO1xcbitcXHRpZiAodW5saWtlbHkod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUikpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIGRlLWZhY3RvIHN0YW5kYXJkIHdheSB0byBza2lwIGEgc3lzdGVtIGNhbGwgdXNpbmcgcHRyYWNlXFxuIFxcdFxcdCAqIGlzIHRvIHNldCB0aGUgc3lzdGVtIGNhbGwgdG8gLTEgKE5PX1NZU0NBTEwpIGFuZCBzZXQgeDAgdG8gYVxcbkBAIC0xMTMsMjYgKzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXFxuIFxcdFxcdFxcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcXG4tXFx0XFx0c2NubyA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncyk7XFxuK1xcdFxcdHNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspO1xcbiBcXHRcXHRpZiAoc2NubyA9PSBOT19TWVNDQUxMKVxcbiBcXHRcXHRcXHRnb3RvIHRyYWNlX2V4aXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSB0cmFjaW5nIHN0YXR1cyBtYXkgaGF2ZSBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LCBzbyB3ZSBoYXZlIHRvXFxuLVxcdCAqIGNoZWNrIGFnYWluLiBIb3dldmVyLCBpZiB3ZSB3ZXJlIHRyYWNpbmcgZW50cnksIHRoZW4gd2UgYWx3YXlzIHRyYWNlXFxuLVxcdCAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIWhhc19zeXNjYWxsX3dvcmsoZmxhZ3MpIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkge1xcbi1cXHRcXHRmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XFxuLVxcdFxcdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IF9USUZfU0lOR0xFU1RFUCkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4gdHJhY2VfZXhpdDpcXG4tXFx0c3lzY2FsbF90cmFjZV9leGl0KHJlZ3MpO1xcbitcXHRzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsocmVncyk7XFxuIH1cXG4gXFxuIHZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXFxuaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xcbkBAIC0zNDMsMyArMzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzaWd0cmFtcDtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQ09NUEFUXFxuK1xcdGlmIChpc19jb21wYXRfdGFzaygpKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc2lncGFnZSA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vjb250ZXh0LnNpZ3BhZ2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmVncy1cXHUwMDNlcGMgXFx1MDAzZT0gc2lncGFnZSBcXHUwMDI2XFx1MDAyNiByZWdzLVxcdTAwM2VwYyBcXHUwMDNjIChzaWdwYWdlICsgUEFHRV9TSVpFKTtcXG4rXFx0fVxcbisjZW5kaWZcXG4rXFx0c2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC52ZHNvLCBzaWd0cmFtcCk7XFxuK1xcbitcXHRyZXR1cm4gcmVncy1cXHUwMDNlcGMgPT0gKHNpZ3RyYW1wICsgOCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMzIzLDcgKzMyMyw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdGlmIChwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggZGY4ZWEyMjNjNzdiMWEuLjk0Njg4Njc5NGNlZGYwIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbkBAIC04NSw5ICs4NSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuICNlbmRpZlxcdC8qIF9fQVNNX0xPT05HQVJDSF9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMjgxLDcgKzI4MSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcXG4gXFx0aWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKVxcbiBcXHRcXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkodGFza19wdF9yZWdzKGN1cnJlbnQpKTtcXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xcbmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC0xMzI4LDcgKzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxcbitcXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKVxcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXFxuQEAgLTM1MSw3ICszNTEsNyBAQCBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi9cXG4tXFx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcXG4rXFx0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggODM0ZmNjNGY3YjU0M2IuLjRiM2M1MmVkNmU5ZDJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuQEAgLTEzOSw5ICsxMzksNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4gI2VuZGlmXFx0LyogX0FTTV9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbmluZGV4IDgwNjdlNjY2YTRjYTY4Li45ODdjOWE3ODgwNmY3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuQEAgLTExMiwxMSArMTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbClcXG4gXFx0cmVncy1cXHUwMDNlYTAgPSBmbihyZWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfZmx1c2hfaWNhY2hlKHVpbnRwdHJfdCwgdWludHB0cl90LCB1aW50cHRyX3QpO1xcbiBcXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9od3Byb2JlKHN0cnVjdCByaXNjdl9od3Byb2JlICosIHNpemVfdCwgc2l6ZV90LFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbmluZGV4IDQyNzFlNDE2OWY0NWI2Li41ZjMxMGNhYWQxZmNlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbkBAIC04OSwxMSArODksNiBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbi19XFxuLVxcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8xICwgXFxcIjBcXFwiIChyMilcXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8yICwgXFxcImRcXFwiIChyMykgU1lTQ0FMTF9GTVRfMVxcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXFxuaW5kZXggMDZmNzY1ZDcxYTI5NTEuLjg2ODdmMTdjYmU1YWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXFxuKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcXG5AQCAtNDYwLDcgKzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcXG4rKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xcbkBAIC0yNyw3ICsyNyw3IEBAIHZvaWQgaGFuZGxlX3N5c2NhbGwoc3RydWN0IHVtbF9wdF9yZWdzICpyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIERvIHRoZSBzZWNjb21wIGNoZWNrIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHN5c2NhbGwgPSBVUFRfU1lTQ0FMTF9OUihyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcXG5pbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuY1xcbisrKyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcXG5AQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiBcXHRyZWdzLVxcdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcXG4gXFx0cmVncy1cXHUwMDNlYXggPSAtRU5PU1lTO1xcbiBcXHR0bXAgPSBzZWN1cmVfY29tcHV0aW5nKCk7XFxuLVxcdGlmICgoIXRtcCBcXHUwMDI2XFx1MDAyNiByZWdzLVxcdTAwM2VvcmlnX2F4ICE9IHN5c2NhbGxfbnIpIHx8IHJlZ3MtXFx1MDAzZWlwICE9IGFkZHJlc3MpIHtcXG4rXFx0aWYgKCh0bXAgXFx1MDAyNlxcdTAwMjYgcmVncy1cXHUwMDNlb3JpZ19heCAhPSBzeXNjYWxsX25yKSB8fCByZWdzLVxcdTAwM2VpcCAhPSBhZGRyZXNzKSB7XFxuIFxcdFxcdHdhcm5fYmFkX3ZzeXNjYWxsKEtFUk5fREVCVUcsIHJlZ3MsXFxuIFxcdFxcdFxcdFxcdCAgXFxcInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXBcXFwiKTtcXG4gXFx0XFx0Zm9yY2VfZXhpdF9zaWcoU0lHU1lTKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggYjgwZDU0YjJlYTM0ZTYuLmVmNzhmY2QzMThmZmNjIDEwMDY0NFxcbi0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC01NTMsOCArNTUzLDcgQEAgaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmVncy1cXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8XFxuLVxcdCAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcXG4rXFx0aWYgKHJlZ3MtXFx1MDAzZXN5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7XFxuIFxcdFxcdGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXFxuaW5kZXggNDE2YTMzNTIyNjFmZTguLjNmNjYzMjBlNDZkMzMxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXFxuQEAgLTEwMCw5ICsxMDAsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbFxcbiBcXG4gXFx0LyogRG8gc2VjY29tcCBhZnRlciBwdHJhY2UsIHRvIGNhdGNoIGFueSB0cmFjZXIgY2hhbmdlcy4gKi9cXG4gXFx0aWYgKHdvcmsgXFx1MDAyNiBTWVNDQUxMX1dPUktfU0VDQ09NUCkge1xcbi1cXHRcXHRyZXQgPSBfX3NlY3VyZV9jb21wdXRpbmcoKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtMUwpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmICghX19zZWN1cmVfY29tcHV0aW5nKCkpXFxuK1xcdFxcdFxcdHJldHVybiAtMUw7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEVpdGhlciBvZiB0aGUgYWJvdmUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSBzeXNjYWxsIG51bWJlciAqL1xcbkBAIC0xMTMsNyArMTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcXG4gXFxuIFxcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xcbitcXHRyZXR1cm4gc3lzY2FsbDtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcXG5pbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxcbkBAIC0yMiwxNCArMjIsMTQgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY2NvbXAuaFxcdTAwM2VcXG4gXFxuLWV4dGVybiBpbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpO1xcbitleHRlcm4gYm9vbCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KHRlc3Rfc3lzY2FsbF93b3JrKFNFQ0NPTVApKSlcXG4gXFx0XFx0cmV0dXJuICBfX3NlY3VyZV9jb21wdXRpbmcoKTtcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuIGV4dGVybiB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpO1xcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjY29tcF9tb2RlKHN0cnVjdCBzZWNjb21wICpzKVxcbiBzdHJ1Y3Qgc2VjY29tcF9kYXRhO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpIHsgcmV0dXJuOyB9XFxuICNlbmRpZlxcbi1zdGF0aWMgaW5saW5lIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBwcmN0bF9nZXRfc2VjY29tcCh2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXFxuaW5kZXggMzg1OGE2ZmZkZDVjODQuLjczZDY5ZTAyODA3ZDg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxcbiBcXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbiBpbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciBfX3VzZXIgKnNlbGVjdG9yKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYyBiL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xcbmluZGV4IGQ4OWRmZmNjMmQ2NDI5Li5hY2Y1NDU3NzRkMzcyMCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcXG4rKysgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcXG5AQCAtMzIsNiArMzIsMTEgQEAgc3RhdGljIHZvaWQgdHJpZ2dlcl9zaWdzeXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdGZvcmNlX3NpZ19pbmZvKFxcdTAwMjZpbmZvKTtcXG4gfVxcbiBcXG4rYm9vbCBfX3dlYWsgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCAqc2QgPSBcXHUwMDI2Y3VycmVudC1cXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NlY2NvbXAuYyBiL2tlcm5lbC9zZWNjb21wLmNcXG5pbmRleCAwNjY5MDkzOTNjMzhmNS4uMWZlYzZlZmVkYWI2MjcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NlY2NvbXAuY1xcbisrKyBiL2tlcm5lbC9zZWNjb21wLmNcXG5AQCAtMTEwMCwxMiArMTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXFxuIFxcdGVsc2VcXG4gXFx0XFx0QlVHKCk7XFxuIH1cXG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbiB7XFxuIFxcdGludCB0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7XFxuIFxcbiBcXHRzZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG4gXFxuQEAgLTEyNTYsNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQgc2VjY29tcF9kb191c2VyX25vdGlmaWNhdGlvbihpbnQgdGhpc19zeXNjYWxsLFxcbiBcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuK3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbiB7XFxuIFxcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XFxuIFxcdHN0cnVjdCBzZWNjb21wX2RhdGEgc2Q7XFxuQEAgLTEyOTQsNyArMTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfVFJBQ0U6XFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi9cXG4gXFx0XFx0aWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdFxcdC8qIEVOT1NZUyB0aGVzZSBjYWxscyBpZiB0aGVyZSBpcyBubyB0cmFjZXIgYXR0YWNoZWQuICovXFxuIFxcdFxcdGlmICghcHRyYWNlX2V2ZW50X2VuYWJsZWQoY3VycmVudCwgUFRSQUNFX0VWRU5UX1NFQ0NPTVApKSB7XFxuQEAgLTEzMzAsMTkgKzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcXG4gXFx0XFx0ICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XFxuIFxcdFxcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFxcdTAwMjZzZCkpXFxuIFxcdFxcdFxcdGdvdG8gc2tpcDtcXG4gXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfTE9HOlxcbiBcXHRcXHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfQUxMT1c6XFxuIFxcdFxcdC8qXFxuQEAgLTEzNTAsNyArMTM1MCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuIFxcdFxcdCAqIHRoaXMgYWN0aW9uIHNpbmNlIFNFQ0NPTVBfUkVUX0FMTE9XIGlzIHRoZSBzdGFydGluZ1xcbiBcXHRcXHQgKiBzdGF0ZSBpbiBzZWNjb21wX3J1bl9maWx0ZXJzKCkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfVEhSRUFEOlxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzpcXG5AQCAtMTM2Nyw0NiArMTM2Nyw0NiBAQCBzdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkb19leGl0KFNJR1NZUyk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7IC8qIHNraXAgdGhlIHN5c2NhbGwgZ28gZGlyZWN0bHkgdG8gc2lnbmFsIGhhbmRsaW5nICovXFxuIFxcdH1cXG4gXFxuIFxcdHVucmVhY2hhYmxlKCk7XFxuIFxcbiBza2lwOlxcbiBcXHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgbWF0Y2ggPyBtYXRjaC1cXHUwMDNlbG9nIDogZmFsc2UpO1xcbi1cXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbitzdGF0aWMgYm9vbCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcXG4ge1xcbiBcXHRCVUcoKTtcXG4gXFxuLVxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbiB7XFxuIFxcdGludCBtb2RlID0gY3VycmVudC1cXHUwMDNlc2VjY29tcC5tb2RlO1xcbiBcXHRpbnQgdGhpc19zeXNjYWxsO1xcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZXB0cmFjZSBcXHUwMDI2IFBUX1NVU1BFTkRfU0VDQ09NUCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcXG4gXFxuIFxcdHN3aXRjaCAobW9kZSkge1xcbiBcXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XFxuIFxcdFxcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIFNFQ0NPTVBfTU9ERV9GSUxURVI6XFxuIFxcdFxcdHJldHVybiBfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgZmFsc2UpO1xcbiBcXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cXG4gXFx0Y2FzZSBTRUNDT01QX01PREVfREVBRDpcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRkb19leGl0KFNJR0tJTEwpO1xcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjc6NDguMTg3NDI2NDg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc5NjkyMjMxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDQ09NUFwiLFxuICAgIFwiU0VDQ09NUF9GSUxURVJcIixcbiAgICBcIkNPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVyblwiLFxuICAgIFwidXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBcIixcbiAgICBcInVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1pZ3JhdGVzIGFybTY0IHRvIHVzZSB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGZvciBzeXN0ZW0gY2FsbHMsIHJlcGxhY2luZyBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgd2l0aCBnZW5lcmljIGhvb2tzLiBJdCBhbHNvIG1vZGlmaWVzIHNlY3VyZV9jb21wdXRpbmcoKSB0cmVlLXdpZGUgdG8gcmV0dXJuIGEgYm9vbGVhbi4gVGhpcyBpcyBhIG1ham9yIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c2NhbGwgcGF0aCBvbiBhcm02NCBhbmQgc2VjY29tcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGFybTY0LXNwZWNpZmljIGdlbmVyaWMgZW50cnkgaG9va3MgKGUuZy4sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybikgYW5kIHB0cmFjZSBzaW5nbGUtc3RlcCB0b2dnbGluZyB3aGljaCB3YXMgbW9kaWZpZWQgdG8gaW50ZXJhY3Qgd2l0aCBnZW5lcmljIGVudHJ5LiBTRUNDT01QIGFuZCBDT01QQVQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIHNlY2NvbXAgbG9naWMgYW5kIGNvbXBhdCB2ZHNvIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzY2OWY5NDJlYjUzZWRlMGY5MjE0ZGUzNmU4Y2Y0M2IwMTg5ODlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6Mjc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXG5pbmRleCAwNjg3NzYwZWE0NjY5OC4uMjdkOTg0N2IxMDgyMzcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcbkBAIC0zODcsNyArMzg3LDcgQEAgYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcbiBcdCAqIElmIHRoaXMgZmFpbHMsIHNlY2NvbXAgbWF5IGFscmVhZHkgaGF2ZSBzZXQgdXAgdGhlIHJldHVybiB2YWx1ZVxuIFx0ICogKGUuZy4gU0VDQ09NUF9SRVRfRVJSTk8gLyBUUkFDRSkuXG4gXHQgKi9cbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcbitcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGlmIChyZWdzLVx1MDAzZXIxOSA9PSAwIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxuIFx0XHRcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcbiBcdFx0c3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNcbkBAIC04NTUsNyArODU1LDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcbiBcdC8qIERvIHNlY2NvbXAgYWZ0ZXIgcHRyYWNlOyBzeXNjYWxsIG1heSBoYXZlIGNoYW5nZWQuICovXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4rXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuICNlbHNlXG4gXHQvKiBYWFg6IHJlbW92ZSB0aGlzIG9uY2UgT0FCSSBnZXRzIGZpeGVkICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uYWVhNjg2ZGNlM2Q1YWMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTEyOCw5ICsxMjgsOSBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXG4gXHRzZWxlY3QgR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTXG4gXHRzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQXG4rXHRzZWxlY3QgR0VORVJJQ19FTlRSWVxuIFx0c2VsZWN0IEdFTkVSSUNfSURMRV9QT0xMX1NFVFVQXG4gXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQXG4tXHRzZWxlY3QgR0VORVJJQ19JUlFfRU5UUllcbiBcdHNlbGVjdCBHRU5FUklDX0lSUV9JUElcbiBcdHNlbGVjdCBHRU5FUklDX0lSUV9LRVhFQ19DTEVBUl9WTV9GT1JXQVJEXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuaW5kZXggZDI3NzlkNjA0YzdiZTIuLmY0M2Q0ZGVhOTE2YTViIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuQEAgLTE4NSw2ICsxODUsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRcdFx0XHQgICAgICAgaW50IHVzZXNfaW50ZXJwKTtcbitleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuIC8qIDFHQiBvZiBWQSAqL1xuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbkBAIC0zLDE0ICszLDIxIEBAXG4gI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXG4gI2RlZmluZSBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aHJlYWRfaW5mby5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kYWlmZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbiBcbitlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7XG4rXHRQVFJBQ0VfU1lTQ0FMTF9FTlRFUiA9IDAsXG4rXHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxuK307XG4rXG4gI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpXG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfZXhpdF90b191c2VyX21vZGVfd29yayhzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbkBAIC01NCw0ICs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxuIFxuICNkZWZpbmUgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkXG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHB0cmFjZV9zYXZlX3JlZyhzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbitcdFx0XHRcdFx0XHQgICAgIGVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIGRpcixcbitcdFx0XHRcdFx0XHQgICAgIGludCAqcmVnbm8pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4rXG4rXHQvKlxuK1x0ICogV2UgaGF2ZSBzb21lIEFCSSB3ZWlyZG5lc3MgaGVyZSBpbiB0aGUgd2F5IHRoYXQgd2UgaGFuZGxlIHN5c2NhbGxcbitcdCAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlblxuK1x0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcbitcdCAqIHB1cnBvc2UgcmVnaXN0ZXIgKGlwL3IxMiBmb3IgQUFyY2gzMiwgeDcgZm9yIEFBcmNoNjQpIGluIHRoZSB0cmFjZWVcbitcdCAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OlxuK1x0ICpcbitcdCAqIC0gQW55IHdyaXRlcyBieSB0aGUgdHJhY2VyIHRvIHRoaXMgcmVnaXN0ZXIgZHVyaW5nIHRoZSBzdG9wIGFyZVxuK1x0ICogICBpZ25vcmVkL2Rpc2NhcmRlZC5cbitcdCAqXG4rXHQgKiAtIFRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGlzIG5vdCBhdmFpbGFibGUgZHVyaW5nIHRoZSBzdG9wLFxuK1x0ICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLlxuK1x0ICpcbitcdCAqIC0gU3lzY2FsbCBzdG9wcyBiZWhhdmUgZGlmZmVyZW50bHkgdG8gc2VjY29tcCBhbmQgcHNldWRvLXN0ZXAgdHJhcHNcbitcdCAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS5cbitcdCAqL1xuK1x0KnJlZ25vID0gKGlzX2NvbXBhdF90YXNrKCkgPyAxMiA6IDcpO1xuK1x0c2F2ZWRfcmVnID0gcmVncy1cdTAwM2VyZWdzWypyZWdub107XG4rXHRyZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXSA9IGRpcjtcbitcbitcdHJldHVybiBzYXZlZF9yZWc7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuK1x0aW50IHJlZ25vLCByZXQ7XG4rXG4rXHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsIFx1MDAyNnJlZ25vKTtcbitcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdGZvcmdldF9zeXNjYWxsKHJlZ3MpO1xuK1x0cmVncy1cdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbitcdFx0XHRcdFx0XHRcdCAgICBpbnQgc3RlcClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbitcdGludCByZWdubztcbitcbitcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FWElULCBcdTAwMjZyZWdubyk7XG4rXHRpZiAoIXN0ZXApIHtcbitcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4rXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuK1x0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4rXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4rXHRcdCAqL1xuK1x0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbitcdH1cbit9XG4rXG4rI2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRcbitcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hdWRpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuIFxuIHR5cGVkZWYgbG9uZyAoKnN5c2NhbGxfZm5fdCkoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuQEAgLTEyMCw3ICsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdHJldHVybiBBVURJVF9BUkNIX0FBUkNINjQ7XG4gfVxuIFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tXG4gI2VuZGlmXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDVkN2ZlM2UxNTNjODUwLi4zZjYyMWJhMGY5NjEzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dTY0XHRcdFx0bXBhbV9wYXJ0aWRfcG1nO1xuICNlbmRpZlxuIFx0dTMyXHRcdFx0Y3B1O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRzeXNjYWxsX3dvcms7ICAgLyogU1lTQ0FMTF9XT1JLXyBmbGFncyAqL1xuIH07XG4gXG4gI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKVx0XFxcbkBAIC02OCwxMSArNjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XG4gI2RlZmluZSBUSUZfVVBST0JFXHRcdDVcdC8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi9cbiAjZGVmaW5lIFRJRl9NVEVfQVNZTkNfRkFVTFRcdDZcdC8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovXG4gI2RlZmluZSBUSUZfTk9USUZZX1NJR05BTFx0N1x0Lyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFXHQ4XHQvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfQVVESVRcdDlcdC8qIHN5c2NhbGwgYXVkaXRpbmcgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlRcdDEwXHQvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqL1xuLSNkZWZpbmUgVElGX1NFQ0NPTVBcdFx0MTFcdC8qIHN5c2NhbGwgc2VjdXJlIGNvbXB1dGluZyAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXHRcdDEyXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cbiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HXHQxM1x0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xuICNkZWZpbmUgVElGX01FTURJRVx0XHQxOFx0LyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi9cbiAjZGVmaW5lIFRJRl9GUkVFWkVcdFx0MTlcbkBAIC05NCwyNCArOTAsMTQgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpO1xuICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRURfTEFaWVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9ORUVEX1JFU0NIRURfTEFaWSlcbiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9OT1RJRllfUkVTVU1FKVxuICNkZWZpbmUgX1RJRl9GT1JFSUdOX0ZQU1RBVEVcdCgxIFx1MDAzY1x1MDAzYyBUSUZfRk9SRUlHTl9GUFNUQVRFKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0UpXG4tI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVRcdCgxIFx1MDAzY1x1MDAzYyBUSUZfU1lTQ0FMTF9BVURJVClcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0VQT0lOVClcbi0jZGVmaW5lIF9USUZfU0VDQ09NUFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NFQ0NPTVApXG4tI2RlZmluZSBfVElGX1NZU0NBTExfRU1VXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfRU1VKVxuICNkZWZpbmUgX1RJRl9QQVRDSF9QRU5ESU5HXHQoMSBcdTAwM2NcdTAwM2MgVElGX1BBVENIX1BFTkRJTkcpXG4gI2RlZmluZSBfVElGX1VQUk9CRVx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1VQUk9CRSlcbi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NJTkdMRVNURVApXG4gI2RlZmluZSBfVElGXzMyQklUXHRcdCgxIFx1MDAzY1x1MDAzYyBUSUZfMzJCSVQpXG4gI2RlZmluZSBfVElGX1NWRVx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NWRSlcbiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUXHQoMSBcdTAwM2NcdTAwM2MgVElGX01URV9BU1lOQ19GQVVMVClcbiAjZGVmaW5lIF9USUZfTk9USUZZX1NJR05BTFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9OT1RJRllfU0lHTkFMKVxuICNkZWZpbmUgX1RJRl9UU0NfU0lHU0VHVlx0KDEgXHUwMDNjXHUwMDNjIFRJRl9UU0NfU0lHU0VHVilcbiBcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9XT1JLXHQoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgXFxcbi1cdFx0XHRcdCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB8IF9USUZfU0VDQ09NUCB8IFxcXG4tXHRcdFx0XHQgX1RJRl9TWVNDQUxMX0VNVSlcbi1cbiAjaWZkZWYgQ09ORklHX1NIQURPV19DQUxMX1NUQUNLXG4gI2RlZmluZSBJTklUX1NDU1x0XHRcdFx0XHRcdFx0XFxcbiBcdC5zY3NfYmFzZVx0PSBpbml0X3NoYWRvd19jYWxsX3N0YWNrLFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbmluZGV4IDI5MzA3NjQyZjRjOTA0Li5jNTM2ODM4MzkxNTUzNiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbkBAIC0zODUsMTEgKzM4NSwxOSBAQCB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcbiBcdGlmICghdGVzdF9hbmRfc2V0X3RpX3RocmVhZF9mbGFnKHRpLCBUSUZfU0lOR0xFU1RFUCkpXG4gXHRcdHNldF9yZWdzX3Nwc3Jfc3ModGFza19wdF9yZWdzKHRhc2spKTtcbitcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIHRyaWdnZXJzIGEgdHJhcCBvbmNlIHN0ZXBwaW5nXG4rXHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXG4rXHQgKiBhcyB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGRvZXMgbm90IG5hdGl2ZWx5IGNoZWNrIGZvciBUSUZfU0lOR0xFU1RFUC5cbitcdCAqL1xuK1x0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcbiBcbiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4ge1xuIFx0Y2xlYXJfdGlfdGhyZWFkX2ZsYWcodGFza190aHJlYWRfaW5mbyh0YXNrKSwgVElGX1NJTkdMRVNURVApO1xuK1x0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9FWElUX1RSQVApO1xuIH1cbiBOT0tQUk9CRV9TWU1CT0wodXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXG5pbmRleCA0ZDA4NTk4ZTI4OTFkMy4uNjFhNjY4NjgyOTQ3MTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcbkBAIC04LDcgKzgsNiBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1ZGl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbkBAIC0xOCw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY2NvbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuQEAgLTI4LDcgKzI2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od19icmVha3BvaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuQEAgLTM4LDEzICszNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BvaW50ZXJfYXV0aC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdHJhcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zeXN0ZW1fbWlzYy5oXHUwMDNlXG4gXG4tI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4tI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmhcdTAwM2Vcbi1cbiBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQge1xuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMjMzOSwxMTQgKzIzMzIsNiBAQCBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbiBcdHJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7XG4gfVxuIFxuLWVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcbi1cdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbi1cdFBUUkFDRV9TWVNDQUxMX0VYSVQsXG4tfTtcbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgaW50ICpyZWdubylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuLVx0ICogZXhpdCBzdG9wcyBiZWNhdXNlIHdlIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdG9wIGhhcyBiZWVuXG4tXHQgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbFxuLVx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuLVx0ICogYW5kIHJlc3RvcmluZyBpdHMgb2xkIHZhbHVlIGFmdGVyIHRoZSBzdG9wLiBUaGlzIG1lYW5zIHRoYXQ6XG4tXHQgKlxuLVx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4tXHQgKiAgIGlnbm9yZWQvZGlzY2FyZGVkLlxuLVx0ICpcbi1cdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4tXHQgKiAgIHNvIHRoZSB0cmFjZXIgY2Fubm90IHNhdmUgaXQgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuXG4tXHQgKlxuLVx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuLVx0ICogICAodGhlIGxhdHRlciBkbyBub3Qgbm9iYmxlIGFueSByZWdpc3RlcnMpLlxuLVx0ICovXG4tXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4tXHRzYXZlZF9yZWcgPSByZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xuLVxuLVx0cmV0dXJuIHNhdmVkX3JlZztcbi19XG4tXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cdGludCByZWdubywgcmV0O1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcdTAwMjZyZWdubyk7XG4tXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRpZiAocmV0KVxuLVx0XHRmb3JnZXRfc3lzY2FsbChyZWdzKTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuLVx0aW50IHJlZ25vO1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFx1MDAyNnJlZ25vKTtcbi1cdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcbi1cdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4tXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuLVx0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4tXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4tXHRcdCAqL1xuLVx0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbi1cdH1cbi19XG4tXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHtcbi1cdFx0cmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRcdGlmIChyZXQgfHwgKGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfRU1VKSlcbi1cdFx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cdH1cbi1cbi1cdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuLVx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cbi1cdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuLVx0XHR0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy1cdTAwM2VzeXNjYWxsbm8pO1xuLVxuLVx0YXVkaXRfc3lzY2FsbF9lbnRyeShyZWdzLVx1MDAzZXN5c2NhbGxubywgcmVncy1cdTAwM2VvcmlnX3gwLCByZWdzLVx1MDAzZXJlZ3NbMV0sXG4tXHRcdFx0ICAgIHJlZ3MtXHUwMDNlcmVnc1syXSwgcmVncy1cdTAwM2VyZWdzWzNdKTtcbi1cbi1cdHJldHVybiByZWdzLVx1MDAzZXN5c2NhbGxubztcbi19XG4tXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXG4tXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxuLVx0XHR0cmFjZV9zeXNfZXhpdChyZWdzLCBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncykpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0cmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzKTtcbi1cbi1cdHJzZXFfc3lzY2FsbChyZWdzKTtcbi19XG4tXG4gLypcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cbiAgKiBXZSBwZXJtaXQgdXNlcnNwYWNlIHRvIHNldCBTU0JTIChBQXJjaDY0IGJpdCAxMiwgQUFyY2gzMiBiaXQgMjMpIHdoaWNoIGlzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY1xuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXG5AQCAtOCw4ICs4LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEtZW50cnktY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXG5pbmRleCAzNThkZGZiZjE0MDFhYy4uZTBhOThmYWMzYjg1NjcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2VcbkBAIC01NCwxNSArNTUsMTEgQEAgc3RhdGljIHZvaWQgaW52b2tlX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzY25vLFxuIFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIDAsIHJldCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfc3lzY2FsbF93b3JrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4te1xuLVx0cmV0dXJuIHVubGlrZWx5KGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfV09SSyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuLVx0XHRcdCAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF90YWJsZVtdKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSByZWFkX3RocmVhZF9mbGFncygpO1xuK1x0dW5zaWduZWQgbG9uZyB3b3JrO1xuIFxuIFx0cmVncy1cdTAwM2VvcmlnX3gwID0gcmVncy1cdTAwM2VyZWdzWzBdO1xuIFx0cmVncy1cdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xuQEAgLTk1LDcgKzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkge1xuK1x0d29yayA9IFJFQURfT05DRShjdXJyZW50X3RocmVhZF9pbmZvKCktXHUwMDNlc3lzY2FsbF93b3JrKTtcbitcdGlmICh1bmxpa2VseSh3b3JrIFx1MDAyNiBTWVNDQUxMX1dPUktfRU5URVIpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBkZS1mYWN0byBzdGFuZGFyZCB3YXkgdG8gc2tpcCBhIHN5c3RlbSBjYWxsIHVzaW5nIHB0cmFjZVxuIFx0XHQgKiBpcyB0byBzZXQgdGhlIHN5c3RlbSBjYWxsIHRvIC0xIChOT19TWVNDQUxMKSBhbmQgc2V0IHgwIHRvIGFcbkBAIC0xMTMsMjYgKzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbiBcdFx0ICovXG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApO1xuLVx0XHRzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTtcbitcdFx0c2NubyA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yayk7XG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0Z290byB0cmFjZV9leGl0O1xuIFx0fVxuIFxuIFx0aW52b2tlX3N5c2NhbGwocmVncywgc2Nubywgc2NfbnIsIHN5c2NhbGxfdGFibGUpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSB0cmFjaW5nIHN0YXR1cyBtYXkgaGF2ZSBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LCBzbyB3ZSBoYXZlIHRvXG4tXHQgKiBjaGVjayBhZ2Fpbi4gSG93ZXZlciwgaWYgd2Ugd2VyZSB0cmFjaW5nIGVudHJ5LCB0aGVuIHdlIGFsd2F5cyB0cmFjZVxuLVx0ICogZXhpdCByZWdhcmRsZXNzLCBhcyB0aGUgb2xkIGVudHJ5IGFzc2VtYmx5IGRpZC5cbi1cdCAqL1xuLVx0aWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1JTRVEpKSB7XG4tXHRcdGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcbi1cdFx0aWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0XHRyZXR1cm47XG4tXHR9XG4tXG4gdHJhY2VfZXhpdDpcbi1cdHN5c2NhbGxfdHJhY2VfZXhpdChyZWdzKTtcbitcdHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVfd29yayhyZWdzKTtcbiB9XG4gXG4gdm9pZCBkb19lbDBfc3ZjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uYyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xuaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNcbkBAIC0zNDMsMyArMzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzaWd0cmFtcDtcbitcbisjaWZkZWYgQ09ORklHX0NPTVBBVFxuK1x0aWYgKGlzX2NvbXBhdF90YXNrKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzaWdwYWdlID0gKHVuc2lnbmVkIGxvbmcpY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0LnNpZ3BhZ2U7XG4rXG4rXHRcdHJldHVybiByZWdzLVx1MDAzZXBjIFx1MDAzZT0gc2lncGFnZSBcdTAwMjZcdTAwMjYgcmVncy1cdTAwM2VwYyBcdTAwM2MgKHNpZ3BhZ2UgKyBQQUdFX1NJWkUpO1xuK1x0fVxuKyNlbmRpZlxuK1x0c2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQudmRzbywgc2lndHJhbXApO1xuK1xuK1x0cmV0dXJuIHJlZ3MtXHUwMDNlcGMgPT0gKHNpZ3RyYW1wICsgOCk7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5AQCAtMzIzLDcgKzMyMyw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbitcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IGRmOGVhMjIzYzc3YjFhLi45NDY4ODY3OTRjZWRmMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5AQCAtODUsOSArODUsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuICNlbmRpZlx0LyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5AQCAtMjgxLDcgKzI4MSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSlcbiBcdFx0cmV0ID0gcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHRhc2tfcHRfcmVncyhjdXJyZW50KSk7XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbkBAIC0xMzI4LDcgKzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcbmluZGV4IDhhMTdhYjdlNmUwYjkzLi41NjViNTFhNDhjOGE4NyAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXG5AQCAtMzUxLDcgKzM1MSw3IEBAIGxvbmcgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdH1cbiBcbiBcdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi9cbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4rXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgzNGZjYzRmN2I1NDNiLi40YjNjNTJlZDZlOWQyYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMzksOSArMTM5LDQgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHRlbHNlXG4gXHRcdHJldHVybiBBVURJVF9BUkNIX1BQQzY0O1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4gI2VuZGlmXHQvKiBfQVNNX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgwNjdlNjY2YTRjYTY4Li45ODdjOWE3ODgwNmY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTExMiwxMSArMTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbClcbiBcdHJlZ3MtXHUwMDNlYTAgPSBmbihyZWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfZmx1c2hfaWNhY2hlKHVpbnRwdHJfdCwgdWludHB0cl90LCB1aW50cHRyX3QpO1xuIFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfaHdwcm9iZShzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqLCBzaXplX3QsIHNpemVfdCxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuaW5kZXggNDI3MWU0MTY5ZjQ1YjYuLjVmMzEwY2FhZDFmY2VjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTg5LDExICs4OSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzEgLCBcIjBcIiAocjIpXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8yICwgXCJkXCIgKHIzKSBTWVNDQUxMX0ZNVF8xXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuY1xuaW5kZXggMDZmNzY1ZDcxYTI5NTEuLjg2ODdmMTdjYmU1YWRjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcbisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXG5AQCAtNDYwLDcgKzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xuKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcbkBAIC0yNyw3ICsyNyw3IEBAIHZvaWQgaGFuZGxlX3N5c2NhbGwoc3RydWN0IHVtbF9wdF9yZWdzICpyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIERvIHRoZSBzZWNjb21wIGNoZWNrIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0c3lzY2FsbCA9IFVQVF9TWVNDQUxMX05SKHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMgYi9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG5pbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG4rKysgYi9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG5AQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIFx0cmVncy1cdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcbiBcdHJlZ3MtXHUwMDNlYXggPSAtRU5PU1lTO1xuIFx0dG1wID0gc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0aWYgKCghdG1wIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZW9yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy1cdTAwM2VpcCAhPSBhZGRyZXNzKSB7XG4rXHRpZiAoKHRtcCBcdTAwMjZcdTAwMjYgcmVncy1cdTAwM2VvcmlnX2F4ICE9IHN5c2NhbGxfbnIpIHx8IHJlZ3MtXHUwMDNlaXAgIT0gYWRkcmVzcykge1xuIFx0XHR3YXJuX2JhZF92c3lzY2FsbChLRVJOX0RFQlVHLCByZWdzLFxuIFx0XHRcdFx0ICBcInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXBcIik7XG4gXHRcdGZvcmNlX2V4aXRfc2lnKFNJR1NZUyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXG5pbmRleCBiODBkNTRiMmVhMzRlNi4uZWY3OGZjZDMxOGZmY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmNcbisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTU1Myw4ICs1NTMsNyBAQCBpbnQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAocmVncy1cdTAwM2VzeXNjYWxsID09IE5PX1NZU0NBTEwgfHxcbi1cdCAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcbitcdGlmIChyZWdzLVx1MDAzZXN5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG5pbmRleCA0MTZhMzM1MjI2MWZlOC4uM2Y2NjMyMGU0NmQzMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG5AQCAtMTAwLDkgKzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqL1xuIFx0aWYgKHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19TRUNDT01QKSB7XG4tXHRcdHJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0XHRpZiAocmV0ID09IC0xTClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoIV9fc2VjdXJlX2NvbXB1dGluZygpKVxuK1x0XHRcdHJldHVybiAtMUw7XG4gXHR9XG4gXG4gXHQvKiBFaXRoZXIgb2YgdGhlIGFib3ZlIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgc3lzY2FsbCBudW1iZXIgKi9cbkBAIC0xMTMsNyArMTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcbiBcbiBcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XG4gXG4tXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xuK1x0cmV0dXJuIHN5c2NhbGw7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcbmluZGV4IDliOTU5OTcyYmY0YTIyLi43YWYzMTczZjQwZTk4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxuQEAgLTIyLDE0ICsyMiwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY2NvbXAuaFx1MDAzZVxuIFxuLWV4dGVybiBpbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpO1xuK2V4dGVybiBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZClcbitzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuIHtcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3N5c2NhbGxfd29yayhTRUNDT01QKSkpXG4gXHRcdHJldHVybiAgX19zZWN1cmVfY29tcHV0aW5nKCk7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuIGV4dGVybiB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpO1xuQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWNjb21wX21vZGUoc3RydWN0IHNlY2NvbXAgKnMpXG4gc3RydWN0IHNlY2NvbXBfZGF0YTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKSB7IHJldHVybjsgfVxuICNlbmRpZlxuLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4gXG4gc3RhdGljIGlubGluZSBsb25nIHByY3RsX2dldF9zZWNjb21wKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG5pbmRleCAzODU4YTZmZmRkNWM4NC4uNzNkNjllMDI4MDdkODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG5AQCAtMTAsNiArMTAsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxuIFxuK2Jvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbiBpbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBjaGFyIF9fdXNlciAqc2VsZWN0b3IpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYyBiL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xuaW5kZXggZDg5ZGZmY2MyZDY0MjkuLmFjZjU0NTc3NGQzNzIwIDEwMDY0NFxuLS0tIGEva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jXG4rKysgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcbkBAIC0zMiw2ICszMiwxMSBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyX3NpZ3N5cyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGZvcmNlX3NpZ19pbmZvKFx1MDAyNmluZm8pO1xuIH1cbiBcbitib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9IFx1MDAyNmN1cnJlbnQtXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2VjY29tcC5jIGIva2VybmVsL3NlY2NvbXAuY1xuaW5kZXggMDY2OTA5MzkzYzM4ZjUuLjFmZWM2ZWZlZGFiNjI3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NlY2NvbXAuY1xuKysrIGIva2VybmVsL3NlY2NvbXAuY1xuQEAgLTExMDAsMTIgKzExMDAsMTIgQEAgdm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxuIFx0ZWxzZVxuIFx0XHRCVUcoKTtcbiB9XG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuK2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4ge1xuIFx0aW50IHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuIFxuQEAgLTEyNTYsNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQgc2VjY29tcF9kb191c2VyX25vdGlmaWNhdGlvbihpbnQgdGhpc19zeXNjYWxsLFxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuK3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIHtcbiBcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XG4gXHRzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkO1xuQEAgLTEyOTQsNyArMTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1RSQUNFOlxuIFx0XHQvKiBXZSd2ZSBiZWVuIHB1dCBpbiB0aGlzIHN0YXRlIGJ5IHRoZSBwdHJhY2VyIGFscmVhZHkuICovXG4gXHRcdGlmIChyZWNoZWNrX2FmdGVyX3RyYWNlKVxuLVx0XHRcdHJldHVybiAwO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqL1xuIFx0XHRpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkge1xuQEAgLTEzMzAsMTkgKzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLlxuIFx0XHQgKi9cbiBcdFx0aWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XG4gXHRcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFx1MDAyNnNkKSlcbiBcdFx0XHRnb3RvIHNraXA7XG4gXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfTE9HOlxuIFx0XHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfQUxMT1c6XG4gXHRcdC8qXG5AQCAtMTM1MCw3ICsxMzUwLDcgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogdGhpcyBhY3Rpb24gc2luY2UgU0VDQ09NUF9SRVRfQUxMT1cgaXMgdGhlIHN0YXJ0aW5nXG4gXHRcdCAqIHN0YXRlIGluIHNlY2NvbXBfcnVuX2ZpbHRlcnMoKS5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfS0lMTF9USFJFQUQ6XG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzpcbkBAIC0xMzY3LDQ2ICsxMzY3LDQ2IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZG9fZXhpdChTSUdTWVMpO1xuIFx0XHR9XG4tXHRcdHJldHVybiAtMTsgLyogc2tpcCB0aGUgc3lzY2FsbCBnbyBkaXJlY3RseSB0byBzaWduYWwgaGFuZGxpbmcgKi9cbitcdFx0cmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuIFx0fVxuIFxuIFx0dW5yZWFjaGFibGUoKTtcbiBcbiBza2lwOlxuIFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtXHUwMDNlbG9nIDogZmFsc2UpO1xuLVx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4rc3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4ge1xuIFx0QlVHKCk7XG4gXG4tXHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuIHtcbiBcdGludCBtb2RlID0gY3VycmVudC1cdTAwM2VzZWNjb21wLm1vZGU7XG4gXHRpbnQgdGhpc19zeXNjYWxsO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoY3VycmVudC1cdTAwM2VwdHJhY2UgXHUwMDI2IFBUX1NVU1BFTkRfU0VDQ09NUCkpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHN3aXRjaCAobW9kZSkge1xuIFx0Y2FzZSBTRUNDT01QX01PREVfU1RSSUNUOlxuIFx0XHRfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7ICAvKiBtYXkgY2FsbCBkb19leGl0ICovXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0ZJTFRFUjpcbiBcdFx0cmV0dXJuIF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCBmYWxzZSk7XG4gXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0ZG9fZXhpdChTSUdLSUxMKTtcbi1cdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjQ4LjE4NzQyOTM2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNjA1ODk2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2lnbmlmaWNhbnQgQXJtNjQgU3lzY2FsbCBFbnRyeSBBcmNoaXRlY3R1cmFsIFNoaWZ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBiaWcgY2hhbmdlcyB0byBob3cgYHNlY3VyZV9jb21wdXRpbmcoKWAgaGFuZGxlcyBzeXNjYWxscyBhbmQgdHJhY2luZyBvbiBhcm02NC4gRmlyc3Qgb2ZmLCBpdCBsb29rcyBsaWtlIGBzZWN1cmVfY29tcHV0aW5nKClgIGlzIG5vdyByZXR1cm5pbmcgYSBgYm9vbGAgaW5zdGVhZCBvZiBhbiBgaW50YC4gQSBgdHJ1ZWAgbWVhbnMgdGhlIHN5c2NhbGwgc2hvdWxkIHByb2NlZWQsIGBmYWxzZWAgbWVhbnMgaXQgZ2V0cyBza2lwcGVkLiBJbnRlcmVzdGluZywgdGhlIG9sZCB3YXkgdXNlZCBgMGAgZm9yIHN1Y2Nlc3MgYW5kIGAtMWAgZm9yIHNraXAuIFNlZW1zIGNsZWFuZXIsIG1vcmUgc2VtYW50aWMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGFuZCBgYXJjaC9hcm02NC9LY29uZmlnYCBhcmUgdGhlIGtleSBoZXJlLCBpdCBsb29rcyBsaWtlIGFybTY0IGlzIG1vdmluZyBvdmVyIHRvIHRoZSBgR0VORVJJQ19FTlRSWWAgY29kZS4gQW5kIHl1cCwgdGhlIGBLY29uZmlnYCBjb25maXJtcyBpdCBzZWxlY3RzIGBHRU5FUklDX0VOVFJZYC4gIFRoZSBgc3lzY2FsbC5jYCBmaWxlIGlzIG5vdyB1c2luZyBgc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzLCB3b3JrKWAgYW5kIGBzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsocmVncylgLiBUaGlzIGlzIGEgYmlnIGFyY2hpdGVjdHVyYWwgc2hpZnQgZm9yIGFybTY0LCBtb3ZpbmcgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBkaWcgZGVlcGVyLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBhbmQgYHN5c2NhbGxfdHJhY2VfZXhpdGAgZnJvbSBgYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNgLCBhbmQgYSBidW5jaCBvZiBgVElGX1NZU0NBTExfVFJBQ0VgIGZsYWdzIGZyb20gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaGAgYXJlIGdvbmUsIHJlcGxhY2VkIHdpdGggYHN5c2NhbGxfd29ya2AuICBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AgaXMgc2V0dGluZyBgU1lTQ0FMTF9FWElUX1RSQVBgLiBBbmQsIGBhcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY2Agbm93IGluY2x1ZGVzIGBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZWAuICBQbHVzLCBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCBhZGRzIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gLlxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbWlncmF0aW9uIHRvIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzY2FsbHMgb24gYXJtNjQgaXMgc3Vic3RhbnRpYWwuICBUaGUgd2hvbGUgc3lzY2FsbCBwYXRoIGlzIGJlaW5nIHJld3JpdHRlbi5cblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyB0aGUgdmVyeSBjb3JlIG9mIHN5c2NhbGwgZW50cnkgYW5kIGV4aXQgZm9yIGFybTY0LiBUaGlzIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSBjcml0aWNhbCB0byBmb2N1cyBvbiBmb3IgZnV6emluZz8gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSdkIHNheSBgZWwwX3N2Y19jb21tb25gIGluIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGlzIGZyb250IGFuZCBjZW50ZXIuIEnigJlsbCBhbHNvIGxvb2sgYXQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaW4gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2Agc2luY2UgdGhlIHZEU08gaXMgYWx3YXlzIGEgc2Vuc2l0aXZlIGFyZWEuIEFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHB0cmFjZSwgbmFtZWx5IGBwdHJhY2Vfc2F2ZV9yZWdgLCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgIGlzIGNyaXRpY2FsLiBUaGVzZSB3aWxsIG5lZWQgYSBjbG9zZSBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjU3LjU0ODAyMzE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzODc1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWwwX3N2Y19jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0zOT1zdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTctXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjU4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTktXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0xMjQ9dm9pZCBkb19lbDBfc3ZjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMjY6XFx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cXHUwMDNlcmVnc1s4XSwgX19OUl9zeXNjYWxscywgc3lzX2NhbGxfdGFibGUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjctfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTEzMD12b2lkIGRvX2VsMF9zdmNfY29tcGF0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMzEte1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMzI6XFx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cXHUwMDNlcmVnc1s3XSwgX19OUl9jb21wYXQzMl9zeXNjYWxscyxcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTMzLVxcdFxcdCAgICAgICBjb21wYXRfc3lzX2NhbGxfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyNzo1Ny44Mzk0MTg2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjEyMTIwNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVJNNjQgU3lzdGVtIENhbGwgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBzeXN0ZW0gY2FsbCBwYXRoIG9uIEFSTTY0LiBTaW5jZSBgZWwwX3N2Y19jb21tb25gIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBJJ20gZ29pbmcgdG8gYnlwYXNzIHRoYXQgYW5kIGZvY3VzIGRpcmVjdGx5IG9uIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHM6IGBkb19lbDBfc3ZjYCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgYWxvbmcgd2l0aCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCwgc2luY2UgdGhhdCdzIGFub3RoZXIgYXJlYSB3aGVyZSBzeXNjYWxscyB3b3VsZCBiZSBoYW5kbGVkLlxuXG5Jbml0aWFsbHksIEkgYWxzbyBjb25zaWRlcmVkIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBpbiBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgdGhhdCdzIGFsc28gYW4gYF9fYWx3YXlzX2lubGluZWAgZnVuY3Rpb24uIFRoZSBnZW5lcmljIGVudHJ5IGZ1bmN0aW9ucyBhcmUgYHN5c2NhbGxfZW50ZXJfZnJvbV91c2VyX21vZGVgLCBhbmQgYHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVgLlxuXG5HaXZlbiB0aGF0IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHRoaW5rIHRoZSBnZW5lcmljIG9uZXMgYXJlIG5vdCB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHNlZSB3aGF0IHRob3NlIGlubGluZXMgZXhwYW5kIHRvLiBTbywgYmFjayB0byBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuXG5cblJpZ2h0LCBsZXQncyBoZWFkIG92ZXIgdG8gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0IHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjEyLjA1MTU0MjMzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lbDBfc3ZjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEyMy1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTI0OnZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTI1LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjktI2lmZGVmIENPTkZJR19DT01QQVRcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTMwOnZvaWQgZG9fZWwwX3N2Y19jb21wYXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjEyLjExMDg3OTY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzODYwNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEFSTTY0IFZEU08gZm9yIFNpZ3JldHVybiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBoYW5kbGVzIGBzaWdyZXR1cm5gIGNhbGxzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFZEU08gb24gQVJNNjQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGludG8gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2AuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBjb2RlIHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgRHluYW1pYyBTaGFyZWQgT2JqZWN0IGFuZCB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGZvciBzeXNjYWxscyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gbmFtZWQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpdCdzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUga2VybmVsIGRldGVybWluZXMgaWYgYSBzeXNjYWxsIGlzIGEgVkRTTy1wcm92aWRlZCBgc2lncmV0dXJuYCByYXRoZXIgdGhhbiBhIHN0YW5kYXJkIG9uZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgY29udGV4dCBpcyByZXN0b3JlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBWRFNPIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjE2LjY0OTQ4ODk4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3MzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz0zMzM9aW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtMzQ2LVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzozNDc6Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTM0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjE2LjcxMzA3MDUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODcyNjM0MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcm02NCBTaW5nbGUtU3RlcHBpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1tb2RlIHNpbmdsZS1zdGVwcGluZyBpcyBlbmFibGVkIGFuZCBkaXNhYmxlZCBvbiBBcm02NC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBkZWFscyB3aXRoIHRoZSBkZWJ1ZyBtb25pdG9ycywgYXMgdGhhdCdzIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBsaWtlbHkgaGFuZGxlZC4gU28sIGxldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBleHBlY3RpbmcgdG8gZmluZCBhcmUgcHJvYmFibHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBhbmQgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAuIFRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhpcyBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjM2LjU4NTcwODE5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDA4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jPTM3Nj12b2lkIGtlcm5lbF9mYXN0Zm9yd2FyZF9zaW5nbGVfc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzgxLS8qIHB0cmFjZSBBUEkgKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jOjM4Mjp2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM4My17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5NS19XFxuYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYzozOTY6Tk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjg6MzYuNjQ1NzE1MDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDkxMjk2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNlY2NvbXAuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIHN0cmFpZ2h0IHRvIGBrZXJuZWwvc2VjY29tcC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHBpZWNlczogYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhvc2UgaW50ZXJhY3QuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb3JlIG1hY2hpbmVyeSBoZXJlLCBzZWVpbmcgaG93IHRoZSBrZXJuZWwgYWN0dWFsbHkgKmRvZXMqIHNlY3VyZSBjb21wdXRpbmcuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBjaGVja3MgYXJlIGVuZm9yY2VkLCB3aGVyZSB0aGUgZmlsdGVycyBhcmUgaW5zdGFsbGVkLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyZmFjZSBpcyBtb2RpZmllZCwgaWYgYXQgYWxsLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgc2VjdXJpdHkgcG9zdHVyZSwgc28gSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgc3BlY2lmaWNzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQwLjE1NDg0ODA4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MzYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zZWN1cmVfY29tcHV0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zZWNjb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NlY2NvbXAuYz0xMDU2PXN0YXRpYyBjb25zdCBpbnQgbW9kZTFfc3lzY2FsbHNbXSA9IHtcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMTA2Ni1cXG5rZXJuZWwvc2VjY29tcC5jOjEwNjc6c3RhdGljIHZvaWQgX19zZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxcbmtlcm5lbC9zZWNjb21wLmMtMTA2OC17XFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTEwODg9dm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxcbi0tXFxua2VybmVsL3NlY2NvbXAuYy0xMDk4LVxcdGVsc2UgaWYgKG1vZGUgPT0gU0VDQ09NUF9NT0RFX1NUUklDVClcXG5rZXJuZWwvc2VjY29tcC5jOjEwOTk6XFx0XFx0X19zZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpO1xcbmtlcm5lbC9zZWNjb21wLmMtMTEwMC1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTExMDItfVxcbmtlcm5lbC9zZWNjb21wLmM6MTEwMzpib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbmtlcm5lbC9zZWNjb21wLmMtMTEwNC17XFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTEzODA9c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTEzODctXFxua2VybmVsL3NlY2NvbXAuYzoxMzg4OmJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxua2VybmVsL3NlY2NvbXAuYy0xMzg5LXtcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMTQwMC1cXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XFxua2VybmVsL3NlY2NvbXAuYzoxNDAxOlxcdFxcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cXG5rZXJuZWwvc2VjY29tcC5jLTE0MDItXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQwLjIxNTY4OTc0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NjIwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU3lzY2FsbCBEaXNwYXRjaCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGNhbGwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgd29ya3MuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBkYXRhIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIGtlcm5lbCBpbnRlcmNlcHRzIGEgc3lzdGVtIGNhbGwgZnJvbSB1c2VyIHNwYWNlIGFuZCBob3cgdGhlIHJpZ2h0IGhhbmRsZXIgaXMgc2VsZWN0ZWQgYW5kIGNhbGxlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVnaXN0ZXIgcGFzc2luZywgcHJpdmlsZWdlIGxldmVsIGNoZWNrcywgYW5kIGFueSBjb250ZXh0IHN3aXRjaGluZyB0aGF0IG9jY3VycyBhdCB0aGF0IHBvaW50LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIHRoZXJlLCBhbmQgZW5zdXJlIEknbSB1cCB0byBzcGVlZCBvbiB0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQ0LjQyMzMxMzE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMTQ3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY2FsbF91c2VyX2Rpc3BhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFxcdTAwM2VcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMzktXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy00MS17XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQyOlxcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQzLVxcdGNoYXIgc3RhdGU7XFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjc3OnN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy05OS1cXHRcXHQvKlxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDA6XFx0XFx0ICogSW52ZXJ0IHRoZSByYW5nZSwgdGhlIGNoZWNrIGluIHN5c2NhbGxfdXNlcl9kaXNwYXRjaCgpXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEwMS1cXHRcXHQgKiBzdXBwb3J0cyB3cmFwLWFyb3VuZC5cXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzUtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzNjppbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3RvcilcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTM4LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTM5OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQwLX1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQxLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDI6aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDMtXFx0XFx0XFx0XFx0ICAgICB2b2lkIF9fdXNlciAqZGF0YSlcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQ0LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTQ1OlxcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXFx1MDAyNnRhc2stXFx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0Ni1cXHRzdHJ1Y3QgcHRyYWNlX3N1ZF9jb25maWcgY2ZnO1xcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE2NS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTY2OmludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfc2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTY3LVxcdFxcdFxcdFxcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTc2LVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNzc6XFx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjg6NDQuNDgyMzMxNzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDY0NTk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFRyYWNlIEVudHJ5IFBvaW50IE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHN5c2NhbGxfdHJhY2VfZW50ZXJgLCBzcGVjaWZpY2FsbHkgaW4gYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQW55IG1vZGlmaWNhdGlvbiB0byB0aGlzIGFyZWEgaXMgZ29pbmcgdG8gaGF2ZSBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGltcGFjdCBvbiB0cmFjaW5nLCBkZWJ1Z2dpbmcsIGFuZCBwb3RlbnRpYWxseSBldmVuIHBlcmZvcm1hbmNlLCBnaXZlbiB0aGUgZnJlcXVlbmN5IHdpdGggd2hpY2ggaXQncyBsaWtlbHkgY2FsbGVkLiBCZWZvcmUgZGl2aW5nIGRlZXAgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBhbHJlYWR5IHRoZXJlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgIGluIG15IGhlYWQgYW5kIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdC4gSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB1c3VhbCBwcm9sb2d1ZSBzdHJ1Y3R1cmUsIHRoZSByZWdpc3RlciBzYXZpbmcvcmVzdG9yYXRpb24gY29udmVudGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdGhhdCBtaWdodCBiZSBpbiBvciBhcm91bmQgYHN5c2NhbGxfdHJhY2VfZW50ZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgYSBkaXJlY3QgZW50cnkgcG9pbnQsIG9yIGlmIHRoZXJlIGlzIGFub3RoZXIgbGF5ZXIgb2YgYWJzdHJhY3Rpb24gb3Igd3JhcHBlciBmdW5jdGlvbiwgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBjcml0aWNhbCB0byBmdWxseSBncmFzcCB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyODo1MC42Mjg3OTU4MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzEwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxfdHJhY2VfZW50ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTQyLSAqXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo0MzogKiBJbnZva2VkIGZyb20gc3lzY2FsbF90cmFjZV9lbnRlcigpIHRvIHdyYXAgcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KCkuXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC00NC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9lbnRlcl9hdWRpdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBzeXNjYWxsKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03MS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjcyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHdvcmspXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTE0MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF9lbnRlcl9mcm9tX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0NS1cXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUilcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjE0NjpcXHRcXHRzeXNjYWxsID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzLCB3b3JrKTtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9MjIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzeXNjYWxsX2V4aXRfd29yayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMjktXFx0ICogdGhlbiB0aGUgdHJhY2VycyBiZWxvdyBhcmUgbm90IGludm9rZWQgZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMwOlxcdCAqIHRoZSBlbnRyeSBzaWRlIHdhcyBub3QgaW52b2tlZCBpbiBzeXNjYWxsX3RyYWNlX2VudGVyKCk6IFRoZSBBQklcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIzMS1cXHQgKiBvZiB0aGVzZSBzeXNjYWxscyBpcyB1bmtub3duLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyODo1MC42OTk1MTI1NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5OTcwMzMzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3lzY2FsbF90cmFjZV9lbnRlcmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgc3lzY2FsbF90cmFjZV9lbnRlcmAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYF9fc2VjdXJlX2NvbXB1dGluZygpYC4gUHJldmlvdXNseSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgc3RvcmVkIGluIGByZXRgLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBhbiBlcnJvci4gTm93LCB0aGUgbG9naWMgaXMgc2ltcGxpZmllZDogaWYgYF9fc2VjdXJlX2NvbXB1dGluZygpYCByZXR1cm5zIGBmYWxzZWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC0xTGAuIE1ha2VzIHNlbnNlLiBUaGUgaW50ZW50IGlzIHRvIGNhdGNoIHRyYWNlciBjaGFuZ2VzLCB3aGljaCB3ZXJlIHBvc3NpYmx5IGEgcHJlLWV4aXN0aW5nIGlzc3VlLlxuXG5JIHNlZSB0aGF0IHRoaXMgY2hhbmdlIGlzIGdlbmVyaWMsIG5vdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEludGVyZXN0aW5nLiBHaXZlbiB0aGF0IGZhY3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGFyY2hpdGVjdHVyZXMgYXJlIGFmZmVjdGVkLiBJIG5vdGljZSB0aGF0IHRoZSBgYXJjaC9hcm02NC9LY29uZmlnYCBmaWxlIHNlbGVjdHMgYEdFTkVSSUNfRU5UUllgLiBUaGlzIHRlbGxzIG1lIHRoYXQgQVJNNjQgaXMgbm93IHVzaW5nIHRoaXMgZ2VuZXJpYyBjb2RlLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBleHBsYWlucyB3aHkgdGhlIGNoYW5nZSBpcyBnZW5lcmljLlxuXG5Ob3csIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQuIEl0IGFwcGVhcnMgdGhhdCBgR0VORVJJQ19FTlRSWWAgaXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cC4gVG8gdGVzdCB0aGUgYF9fc2VjdXJlX2NvbXB1dGluZygpYCBmdW5jdGlvbmFsaXR5LCBJJ2xsIG5lZWQgYFNFQ0NPTVBgLiBJJ2xsIGFsc28gbmVlZCBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBmb3IgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIHRlc3RpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIHRvIGNvbmZpcm0gdGhhdCBgU0VDQ09NUGAgYW5kIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGFyZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzM0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjAyLjY5NjU0OTg0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjU2MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTYyOD1jb25maWcgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLS1cXG5hcmNoL0tjb25maWctNjQ2LVxcbmFyY2gvS2NvbmZpZzo2NDc6Y29uZmlnIFNFQ0NPTVBcXG5hcmNoL0tjb25maWctNjQ4LVxcdHByb21wdCBcXFwiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGV4ZWN1dGUgdW50cnVzdGVkIGJ5dGVjb2RlXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnLTY2My1cXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxcbmFyY2gvS2NvbmZpZy02NjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9LY29uZmlnLTY3My1cXG5hcmNoL0tjb25maWc6Njc0OmNvbmZpZyBTRUNDT01QX0NBQ0hFX0RFQlVHXFxuYXJjaC9LY29uZmlnLTY3NS1cXHRib29sIFxcXCJTaG93IHNlY2NvbXAgZmlsdGVyIGNhY2hlIHN0YXR1cyBpbiAvcHJvYy9waWQvc2VjY29tcF9jYWNoZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MDUuMDAzMTIzNTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Mjc3NTg3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIENhbGwgRGlzcGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBUaGUgY29yZSBvZiB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtLCB3aGVyZSB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyBhcmUgZmluYWxseSBzb3J0ZWQgYW5kIGRpcmVjdGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgaGFuZGxlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZGlzcGF0Y2ggaXMgYmVpbmcgaGFuZGxlZCDigJMgaG93IHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgZ2V0cyB0cmFuc2xhdGVkIGludG8gdGhlIGNvcnJlY3Qga2VybmVsIGZ1bmN0aW9uLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgbWlzZGlyZWN0aW9uIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgd29ya3MuIEdvdHRhIGNoZWNrIGhvdyB0aGlzIG1lY2hhbmlzbSB3b3Jrcy4gSSdtIGdvaW5nIHRvIGxvb2sgdGhyb3VnaCB0aGUgZG9jdW1lbnRhdGlvbiB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBhIGxvdCB0byBkbywgYnV0IHRoYXQgaXMgdGhlIG9ubHkgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MDguNzMwODg3MDc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDE5OTAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTAuODgzMzE5ODYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NTQwNDUzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIExvY2F0aW9uIEh1bnQgZm9yIFNZU0NBTExfVVNFUl9ESVNQQVRDSCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGNsYXNzaWMgcGxhY2VzIHdoZXJlIHlvdSdkIGZpbmQgY29yZSBrZXJuZWwgZmVhdHVyZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQgb3B0aW9ucyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgZmlsZXMgY2xvc2VseSB0byB2ZXJpZnkuIEknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAgb3IgZmluZCBpbiB0aG9zZSBkaXJlY3RvcmllcyBhbmQgc2VlIHdoYXQgdHVybnMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTIyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTYuNzM3MzY5NzkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4NTY4MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0PTUyPWZvbGxvd2luZyBwcmN0bDpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3QtNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0OjU0OiAgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgXFx1MDAzY29wXFx1MDAzZSwgXFx1MDAzY29mZnNldFxcdTAwM2UsIFxcdTAwM2NsZW5ndGhcXHUwMDNlLCBbc2VsZWN0b3JdKVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdD04MT1BZGRpdGlvbmFsbHksIGEgdGFza3Mgc3lzY2FsbCB1c2VyIGRpc3BhdGNoIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHBlZWtlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo4MjphbmQgcG9rZWQgdmlhIHRoZSBQVFJBQ0VfKEdFVHxTRVQpX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgcHRyYWNlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0LTgzLXJlcXVlc3RzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2hlY2twb2ludC9yZXN0YXJ0IHNvZnR3YXJlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yNy1cXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfQVVESVQgfFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjI4OlxcdFxcdFxcdFxcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9VU0VSX0RJU1BBVENIIHxcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yOS1cXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfUlNFUV9TTElDRSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMzUtXFx0XFx0XFx0XFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUIHxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDozNjpcXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCB8XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMzctXFx0XFx0XFx0XFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0VYSVRfVFJBUClcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODAtXFx0ICovXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo4MTpcXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0gpIHtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTgyLVxcdFxcdGlmIChzeXNjYWxsX3VzZXJfZGlzcGF0Y2gocmVncykpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjMyLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMzOlxcdGlmICh3b3JrIFxcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjM0LVxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VzeXNjYWxsX2Rpc3BhdGNoLm9uX2Rpc3BhdGNoKSkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC00LSAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6NTojaWZuZGVmIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6NjojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg9MTQ9aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtMTctI2RlZmluZSBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHRzaykgXFxcXFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6MTg6XFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodHNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg9NDQ9c3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC01MS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oOjUyOiNlbmRpZiAvKiBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0ggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MjojaWZuZGVmIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MzojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg9MTg9c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCB7fTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtMjEtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaDoyMjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9UWVBFU19IICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg9NDE9ZW51bSBzeXNjYWxsX3dvcmtfYml0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC00Ni1cXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfQVVESVQsXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oOjQ3OlxcdFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILFxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC00OC1cXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfRVhJVF9UUkFQLFxcbi0tXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTU2LSNkZWZpbmUgU1lTQ0FMTF9XT1JLX1NZU0NBTExfQVVESVRcXHRcXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX0FVRElUKVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaDo1NzojZGVmaW5lIFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gpXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTU4LSNkZWZpbmUgU1lTQ0FMTF9XT1JLX1NZU0NBTExfRVhJVF9UUkFQXFx0XFx0QklUKFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9FWElUX1RSQVApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjctLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjI2ODojZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2OS0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXFx0XFx0MFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oPTExMD1zdHJ1Y3QgcHRyYWNlX3JzZXFfY29uZmlndXJhdGlvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmgtMTE3LVxcbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaDoxMTg6I2RlZmluZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgMHg0MjEwXFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oOjExOTojZGVmaW5lIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRyAweDQyMTFcXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmgtMTIwLVxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTc3PXN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEyOC1cXHRpZiAobW9kZSAhPSBQUl9TWVNfRElTUEFUQ0hfT0ZGKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMjk6XFx0XFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfVVNFUl9ESVNQQVRDSCk7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzMC1cXHRlbHNlXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzMTpcXHRcXHRjbGVhcl90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpO1xcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzItXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM9MTQyPWludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNTAtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjE1MTpcXHRpZiAodGVzdF90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNTItXFx0XFx0Y2ZnLm1vZGUgPSBQUl9TWVNfRElTUEFUQ0hfT047XFxuLS1cXG5rZXJuZWwvcHRyYWNlLmM9MTE2Mj1pbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LFxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTEzOTctXFxua2VybmVsL3B0cmFjZS5jOjEzOTg6XFx0Y2FzZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUc6XFxua2VybmVsL3B0cmFjZS5jLTEzOTktXFx0XFx0cmV0ID0gc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoY2hpbGQsIGFkZHIsIGRhdGF2cCk7XFxuLS1cXG5rZXJuZWwvcHRyYWNlLmMtMTQwMS1cXG5rZXJuZWwvcHRyYWNlLmM6MTQwMjpcXHRjYXNlIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRzpcXG5rZXJuZWwvcHRyYWNlLmMtMTQwMy1cXHRcXHRyZXQgPSBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZyhjaGlsZCwgYWRkciwgZGF0YXZwKTtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjgwMS1cXHRcXHRicmVhaztcXG5rZXJuZWwvc3lzLmM6MjgwMjpcXHRjYXNlIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0g6XFxua2VybmVsL3N5cy5jLTI4MDMtXFx0XFx0ZXJyb3IgPSBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKGFyZzIsIGFyZzMsIGFyZzQsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNTUtLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjI1NjojZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI1Ny0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXFx0XFx0MFxcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjY3LS8qIERpc3BhdGNoIHN5c2NhbGxzIHRvIGEgdXNlcnNwYWNlIGhhbmRsZXIgKi9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNjg6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFx0NTlcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjktIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdFxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jPTE4PVRFU1QoZ2V0X3NldF9zdWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy0zOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYzo0MDpcXHRyZXQgPSBzeXNfcHRyYWNlKFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRywgY2hpbGQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNDEtXFx0XFx0XFx0ICh2b2lkICopc2l6ZW9mKGNvbmZpZyksIFxcdTAwMjZjb25maWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NTQ6XFx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTU1LVxcdFxcdFxcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcXHUwMDI2Y29uZmlnKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTU5LVxcdG1lbXNldChcXHUwMDI2Y29uZmlnLCAxLCBzaXplb2YoY29uZmlnKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NjA6XFx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfR0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTYxLVxcdFxcdFxcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcXHUwMDI2Y29uZmlnKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYzoyMTojaWZuZGVmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjIyOiMgZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjMtIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmM9MTM2PWludCBtYWluKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jLTE2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjE2MzpcXHRpZiAocHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09OLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMTY0LVxcdFxcdCAgc3lzY2FsbF9kaXNwYXRjaGVyX3N0YXJ0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MTk6I2lmbmRlZiBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjA6IyBkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxcdDU5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjEtIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTQ1LSAqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NDY6ICogLSBkaXNwYXRjaF90cmlnZ2VyX3NpZ3N5czogVmVyaWZ5IGlmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0ggaXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy00Ny0gKiAgIGFibGUgdG8gdHJpZ2dlciBTSUdTWVMgb24gYSBzeXNjYWxsLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9NjU9VEVTVF9TSUdOQUwoZGlzcGF0Y2hfdHJpZ2dlcl9zaWdzeXMsIFNJR1NZUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTczLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjc0OlxcdHJldCA9IHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9FWENMVVNJVkVfT04sIDAsIDAsIFxcdTAwMjZzZWwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo3NjpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy03Ny1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz04OD1zdGF0aWMgdm9pZCBwcmN0bF92YWxpZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6OTI6XFx0RVhQRUNUX0VRKDAsIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIG9wLCBvZmYsIHNpemUsIHNlbCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTkzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTk1PXN0YXRpYyB2b2lkIHByY3RsX2ludmFsaWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtOTgte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjk5OlxcdEVYUEVDVF9FUSgtMSwgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgb3AsIG9mZiwgc2l6ZSwgc2VsKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMTAwLVxcdEVYUEVDVF9FUShlcnIsIGVycm5vKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTIxMD1URVNUKGRpc3BhdGNoX2FuZF9yZXR1cm4pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjI0OlxcdHJldCA9IHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9FWENMVVNJVkVfT04sIDAsIDAsIFxcdTAwMjZnbG9iX3NlbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjI1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjY6XFx0XFx0VEhfTE9HKFxcXCJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjI3LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTI1NT1URVNUX1NJR05BTChiYWRfc2VsZWN0b3IsIFNJR1NZUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTI3OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyODA6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXFx1MDAyNmdsb2Jfc2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODEtXFx0QVNTRVJUX0VRKDAsIHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjI4MjpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODMtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9Mjk4PVRFU1QoZGlzYWJsZV9kaXNwYXRjaClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMwMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDQ6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXFx1MDAyNnNlbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDY6XFx0XFx0VEhfTE9HKFxcXCJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA3LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMxMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMTI6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09GRiwgMCwgMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzEzLVxcdEVYUEVDVF9FUSgwLCByZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTMyNj1URVNUKGRpcmVjdF9kaXNwYXRjaF9yYW5nZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMzNS1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMzY6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgLTFMLCBcXHUwMDI2c2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzctXFx0QVNTRVJUX0VRKDAsIHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjMzODpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzQ5PXN0YXRpYyB2b2lkIHRlc3RfcmFuZ2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzU0LVxcdFNZU0NBTExfRElTUEFUQ0hfT0ZGKGdsb2Jfc2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozNTU6XFx0RVhQRUNUX0VRKDAsIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIG9wLCBvZmYsIHNpemUsIFxcdTAwMjZnbG9iX3NlbCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTM1Ni1cXHRTWVNDQUxMX0RJU1BBVENIX09OKGdsb2Jfc2VsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTguNzE1OTY0NzczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDgyNTQzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIE1hemUqKlxuXG5SaWdodCwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgLCBidXQgdGhhdCBuYW1lIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdGlja2luZy4gSG1tLCBjb3VsZCBpdCBiZSBqdXN0IGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg/IE5vLCB3YWl0IGEgbWludXRlLi4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgZ2VuZXJpYyBlbnRyeSBwb2ludCBzdHVmZiBpcyB3aGF0IGVuYWJsZXMgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjay4gWWVhaCwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCB3aGF0IGVuYWJsZXMgaXQuIE5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgY2hhc2luZyBhIGdob3N0IGhlcmUsIG9yLCB3b3JzZSwgbWlzdW5kZXJzdGFuZGluZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MjIuODY0MjIyODM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzMxNzUwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjIyLjkzMTU0OTgyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA0MjQwNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgd291bGQgYmUgdGhlIEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBpdCdzIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBrZXJuZWwvZW50cnkvS2NvbmZpZ2AgZmlsZSBmaXJzdC4gSWYgaXQncyBub3QgbG9jYXRlZCB0aGVyZSwgdGhlbiBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCBhbmQgZ28gdG8gdGhlIG1vcmUgZ2VuZXJhbCBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBhcmUgY29tbW9ubHkgdXNlZC4gVGhhdCBzaG91bGQgcGlucG9pbnQgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgdXNlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOToyNy4yMzU3OTU2NjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODY4MDU2MDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOToyOS4yMjI2MTI1NzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzMTk5NTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCoqXG5cbkhtbSwgc28gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBrZXJuZWwgY29uZmlnIG9wdGlvbiwgaXMgaXQ/IEludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgd2FudCB0byBjaGVjayBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0gY2FsbHMgcGF0aC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaXNwYXRjaCBiYXNlZCBvbiB0aGlzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb25kaXRpb25hbCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZCB2cyB3aGVuIGl0J3Mgbm90LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBpbmNsdXNpb24/IEEgY29uZGl0aW9uYWwgYnJhbmNoIHdpdGhpbiB0aGUgbWFpbiBzeXNjYWxsIGhhbmRsaW5nIHBhdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9wdGlvbiBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBwcm9maWxpbmcgdGhlIHN5c2NhbGwgcGF0aCBhbmQgZGV0ZXJtaW5pbmcgaWYgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlIGluIGFueSB3YXkuIEknbGwgbmVlZCB0byBsb29rIGZvciBgI2lmZGVmYCBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgZ3VhcmQgYmxvY2tzIG9mIGNvZGUgcmVsYXRlZCB0byB1c2VyIGRpc3BhdGNoLiBBbmQgaWYgaXQncyB0aGVyZSwgdGhlbiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRpZmZlcmVuY2VzIGFyZSB3aGVuIGl0J3Mgbm90IHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjM1LjA1NDYxMjY0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTkyMTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjM1LjEyMDgyNDUwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUzMDA0OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgUG9pbnQgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGluaXRpYWxpemVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGVudHJ5IHBvaW50IGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5cyB0byBob3cgdGhlIGtlcm5lbCdzIGluaXRpYWwgc2V0dXAgaXMgb3JjaGVzdHJhdGVkIOKAkyB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MsIHRoZSBlYXJseSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uLCBhbmQgd2hhdCBjYWxscyB0aGUgYHN0YXJ0YCByb3V0aW5lLiBHb3R0YSBzZWUgaG93IHRoZSBsaW5rZXIgc2NyaXB0cyBhcmUgdXNlZCwgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJseSBmaWxlcyB0aGF0IGFyZSBsaW5rZWQgZWFybHksIGFueSBwcmUtbWFpbiBzZXR1cCBzdGVwcy4uLiBJdCdzIHRoZSBzdGFydGluZyBndW4gb2YgdGhlIHdob2xlIGRhbW4gdGhpbmcsIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQncyB3cml0dGVuIG9uIHRoZSBiYXJyZWwuIFRoZSBNYWtlZmlsZSBpdHNlbGYgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MzguODczODMxODYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzOTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjYWxsX3VzZXJfZGlzcGF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2VudHJ5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9lbnRyeS9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfR0VORVJJQ19JUlFfRU5UUlkpIFxcdCs9IGNvbW1vbi5vXFxua2VybmVsL2VudHJ5L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFxcdFxcdCs9IHN5c2NhbGwtY29tbW9uLm8gc3lzY2FsbF91c2VyX2Rpc3BhdGNoLm9cXG5rZXJuZWwvZW50cnkvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX1ZJUlRfWEZFUl9UT19HVUVTVF9XT1JLKVxcdCs9IHZpcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTozOC45MzU4ODQwNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNDk1MTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlJ3JlIHVzaW5nIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBvciBgQ09ORklHX0dFTkVSSUNfRU5UUllgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHN5c3RlbSBjYWxsIHN1cHBvcnQuIExldCdzIGRpZyBpbi4gT2theSwgdGhlIE1ha2VmaWxlIGlzIHJldmVhbGluZyBhIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfR0VORVJJQ19TWVNDQUxMKSArPSBzeXNjYWxsLWNvbW1vbi5vIHN5c2NhbGxfdXNlcl9kaXNwYXRjaC5vYC4gVGhhdCBjb25maXJtcyBpdCDigJMgYENPTkZJR19HRU5FUklDX1NZU0NBTExgIGlzIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb2YgdGhvc2UgY3J1Y2lhbCBvYmplY3QgZmlsZXMuIEJ1dCBpdCBtYWtlcyBtZSB3b25kZXIsIHByZWNpc2VseSB3aGF0IGRvZXMgdGhpcyBvcHRpb24gZW50YWlsPyBNeSBrbmVlLWplcmsgcmVhY3Rpb24gaXMgdG8gdmVyaWZ5IHRoZSBkZWZpbml0aW9uIG9mIGBHRU5FUklDX1NZU0NBTExgIChzaW5jZSBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgaXRzIGNvbmZpZ3VyYXRpb24gY291bnRlcnBhcnQpIGFuZCBob3cgaXTigJlzIHVzZWQgd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmU7IHNvLCBJJ20gaGVhZGluZyBvdmVyIHRvIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50cyBhcmUgaGFuZGxlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ0LjA2MDgzNzk0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NTU1MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkdFTkVSSUNfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ0LjEyMzM5OTgxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwNTY5NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBFbnRyeSBQb2ludCBDb25maWd1cmF0aW9uKipcblxuSG1tLCBzbyBgYXJjaC9hcm02NC9LY29uZmlnYCBpcyBhY3R1YWxseSBzZWxlY3RpbmcgYEdFTkVSSUNfRU5UUllgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgdGhvdWdodCBJIGhhZCB0aGUgcmVsYXRpb25zaGlwIG9mIGBHRU5FUklDX0VOVFJZYCBwaW5uZWQgZG93biwgYnV0IGl0IHdvdWxkbid0IGh1cnQgdG8gZG91YmxlIGNoZWNrIGl0IGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCBga2VybmVsL2VudHJ5L01ha2VmaWxlYC4gTWF5YmUgSSBtaXNyZW1lbWJlcmVkIHNvbWUgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgS2NvbmZpZ3MgYW5kIE1ha2VmaWxlcy4gVGltZSB0byBkaXZlIGJhY2sgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6NDYuOTkzOTcyODY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3ODgxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiR0VORVJJQ19FTlRSWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ3LjA1NTY2NDY1OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDA4NDQ1MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGVudHJ5IE1ha2VmaWxlLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgTWFrZWZpbGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBrZXJuZWwvZW50cnkvTWFrZWZpbGVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaWxlLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwncyBlbnRyeSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIGluaXRpYWwgc2V0dXAgaXMgaGFuZGxlZCwgdGhpbmdzIGxpa2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUsIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBsaW5raW5nIG9mIHRoZSBlbnRyeSBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGJlaW5nIGluY2x1ZGVkLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJseSBjb2RlIHRoYXQncyBpbnZvbHZlZC4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYm9vdCBwcm9jZXNzIGl0c2VsZjsgdGhpbmdzIGxpa2UgdGhlIGVhcmx5IGludGVycnVwdCBoYW5kbGluZyBzZXQtdXAgYW5kIHdoZXJlIHRoZSBpbml0aWFsIHN0YWNrcyBhcmUgZXN0YWJsaXNoZWQgYXJlIGdvaW5nIHRvIGJlIGtleS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBib290bG9hZGVyIGhhbmRzIG9mZiBjb250cm9sIHRvIHRoZSBrZXJuZWwgcHJvcGVyLiBJJ20ga2VlbiB0byBzcG90IGFueSB1bnVzdWFsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG9mZmVyIGluc2lnaHQgaW50byBzcGVjaWZpYyBkZXNpZ24gY2hvaWNlcy4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCBnZW1zIGFyZSBpbnNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6NTMuMDY0MTEzNzczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9lbnRyeS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0IyBQcmV2ZW50IHRoZSBub2luc3RyIHNlY3Rpb24gZnJvbSBiZWluZyBwZXN0ZXJlZCBieSBzYW5pdGl6ZXIgYW5kIG90aGVyIGdvb2RpZXNcXG4gICA0OlxcdCMgYXMgbG9uZyBhcyB0aGVzZSB0aGluZ3MgY2Fubm90IGJlIGRpc2FibGVkIHBlciBmdW5jdGlvbi5cXG4gICA1OlxcdEtBU0FOX1NBTklUSVpFIDo9IG5cXG4gICA2OlxcdFVCU0FOX1NBTklUSVpFIDo9IG5cXG4gICA3OlxcdEtDT1ZfSU5TVFJVTUVOVCA6PSBuXFxuICAgODpcXHRcXG4gICA5OlxcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24ndCBub2luc3RyLXNhZmVcXG4gIDEwOlxcdGNjZmxhZ3MtJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDExOlxcdFxcbiAgMTI6XFx0Q0ZMQUdTX1JFTU9WRV9jb21tb24ub1xcdCA9IC1mc3RhY2stcHJvdGVjdG9yIC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZ1xcbiAgMTM6XFx0Q0ZMQUdTX2NvbW1vbi5vXFx0XFx0Kz0gLWZuby1zdGFjay1wcm90ZWN0b3JcXG4gIDE0OlxcdFxcbiAgMTU6XFx0b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcXHQrPSBjb21tb24ub1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX0dFTkVSSUNfU1lTQ0FMTCkgXFx0XFx0Kz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX1ZJUlRfWEZFUl9UT19HVUVTVF9XT1JLKVxcdCs9IHZpcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTo1My4wNjQxOTA3ODNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxODQ3ODQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gYENPTkZJR19HRU5FUklDX1NZU0NBTExgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBkcmlsbCBkb3duLiBXaGVyZSBleGFjdGx5ICppcyogdGhpcyBvcHRpb24gZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb250ZXh0LiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJlY2F1c2UgdGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTo1Ni4yODI2NzM0NDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTkzNjI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdFTkVSSUNfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwNT1jb25maWcgR0VORVJJQ19JUlFfRU5UUllcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMDctXFxuYXJjaC9LY29uZmlnOjEwODpjb25maWcgR0VORVJJQ19TWVNDQUxMXFxuYXJjaC9LY29uZmlnLTEwOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjU4LjMwMjA0ODUxMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyNjY0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBHRU5FUklDX1NZU0NBTEwgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mga2lja3Mgb2ZmIHdpdGggYSBkaXJlY3RlZCBmb2N1czogKkxldCdzIHNlZSB3aGF0IHNlbGVjdHMgYEdFTkVSSUNfU1lTQ0FMTGAuKiBUaGlzIGlzIHdoZXJlIEkgYmVnaW4gdGhlIGludmVzdGlnYXRpdmUgcHJvY2VzcywgdGhlIGFuYWx5c2lzLiBJJ20gbm90IGp1c3QgaWRseSBwb25kZXJpbmc7IEknbSBhY3RpdmVseSBmb3JtdWxhdGluZyBhIHBsYW4gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgc3BlY2lmaWMgc3lzdGVtIGNhbGwgZGVmaW5pdGlvbi4gVGhlIHNlbGVjdGlvbiBvZiBgR0VORVJJQ19TWVNDQUxMYCBpcyB0aGUgZm9jYWwgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBrZXJuZWwgYXJlIHR5aW5nIGludG8gdGhpcy4gTXkgbmV4dCBzdGVwcyBhcmUgcHJvYmFibHksIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2Ugd2hlcmUgdGhpcyBzeW1ib2wgaXMgdXNlZC4gSXMgaXQgYSBsZWdhY3kgdGhpbmc/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBTb21lIHNvcnQgb2YgYWJzdHJhY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdFwiIGFuZCB0aGUgXCJ3aHlcIiBvZiB0aGUgc2VsZWN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlZXBlciBhcmNoaXRlY3R1cmFsIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBhdCBwbGF5LiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvczogSXMgaXQgYSBjb21tb24gZmFsbGJhY2s/IFBhcnQgb2YgYSBtb2R1bGFyIHN5c3RlbT8gRG9lcyBpdHMgc2VsZWN0aW9uIGNvcnJlbGF0ZSB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjAyLjI2NDcxNjc1MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjM5MzQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR0VORVJJQ19TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTEyPWNvbmZpZyBHRU5FUklDX0VOVFJZXFxuLS1cXG5hcmNoL0tjb25maWctMTE0LVxcdHNlbGVjdCBHRU5FUklDX0lSUV9FTlRSWVxcbmFyY2gvS2NvbmZpZzoxMTU6XFx0c2VsZWN0IEdFTkVSSUNfU1lTQ0FMTFxcbmFyY2gvS2NvbmZpZy0xMTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjA0LjIyNzExNzY2NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY5Mzk3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVJNNjQgR2VuZXJpYyBTeXNjYWxsIEVudHJ5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgZ2VuZXJpYyBlbnRyeSBwb2ludCAoYEdFTkVSSUNfRU5UUllgKSBpcyB0aGUgb25lIGJlaW5nIHVzZWQgdG8gZGlzcGF0Y2ggYEdFTkVSSUNfU1lTQ0FMTGAsIGFuZCBJIHJlbWVtYmVyIHRoYXQgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agc2VsZWN0cyBpdC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG11c3QgYmUgc2VsZWN0aW5nIGl0Li4uIHdhaXQsIGxldCdzIGRvdWJsZS1jaGVjay4gKkV4YW1pbmVzIHRoZSBkaWZmKiBBaCwgdGhlIGRpZmYgY29uZmlybXMgaXQ6IHRoZSBwYXRjaCBleHBsaWNpdGx5ICphZGRzKiBgc2VsZWN0IEdFTkVSSUNfRU5UUllgIGluIGBhcmNoL2FybTY0L0tjb25maWdgLCB3aGlsZSByZW1vdmluZyBgR0VORVJJQ19JUlFfRU5UUllgLiBTbywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB3aGF0IGFib3V0IHRlc3RpbmcgdGhpcz8gV2hpY2ggY29uZmlndXJhdGlvbnMgd2lsbCBiZSBpbXBvcnRhbnQ/IEhtbSwgYFNFQ0NPTVBgIGlzIGEgbm8tYnJhaW5lciBiZWNhdXNlIGBzZWN1cmVfY29tcHV0aW5nYCBnZXRzIG1vZGlmaWVkIGFuZCBpcyB1c2VkIGJ5IHRoZSBwYXRjaC4gT2YgY291cnNlLCBgU0VDQ09NUF9GSUxURVJgIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQuIFRoZW4sIGBDT01QQVRgIGxvb2tzIHRvIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCwgd2hpY2ggYXJlIGJlaW5nIG1vZGlmaWVkLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBBcyBmb3IgYERFQlVHX1JTRVFgLCB0aGF0IGxvb2tzIGxpa2UgaXQncyBiZWluZyByZW1vdmVkIGZyb20gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AsIGJ1dCB0aGUgYHJzZXFfc3lzY2FsbGAgaXMgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyBlbnRyeSwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGltcGFjdHMgdGhlIHRlc3QgY29uZmlndXJhdGlvbi4gTGV0IG1lIGNvbmZpcm0gaWYgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2luY2UgaXQncyBqdXN0IGVuYWJsZWQgaWYgYEdFTkVSSUNfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gT2theSwgSSdsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoYXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoxMC42OTY1MTc5MDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTg3NzQxODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoxMi44OTUzMDM5NzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2MTI4OTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gQXJtNjQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzbid0IGEgc3RhbmRhbG9uZSBvcHRpb24uIEl0J3MgYXV0b21hdGljYWxseSBpbmNsdWRlZCB3aGVuIGBHRU5FUklDX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJbiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5IHBvaW50cy4gQWgsIHllcywgYGRvX2VsMF9zdmNgIGlzIHRoZSBtYWluIGhhbmRsZXIgZm9yIHN5c2NhbGxzLCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCBoYW5kbGVzIHRoZSBjb21wYXRpYmlsaXR5IGNhbGxzLiBFeGNlbGxlbnQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHNlY3VyaXR5IGFzcGVjdHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggc2VjY29tcC4gSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZWN1cmVfY29tcHV0aW5nYCBmdW5jdGlvbiBpcywgYXMgZXhwZWN0ZWQsIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX1NFQ0NPTVBgLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHRoZSByb2xlIG9mIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLCB3aGljaCBzaG91bGQgYmUgaW4gYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIFllcCwgaXQncyB0aGVyZSBhbmQgYnVpbHQgd2hlbiBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgYWN0aXZlLlxuXG5TbywgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBTRUNDT01QYFxuKiAgIGBTRUNDT01QX0ZJTFRFUmBcbiogICBgQ09NUEFUYCAodG8gdGVzdCB0aG9zZSBjb21wYXRpYmlsaXR5IHN5c2NhbGxzKVxuXG5JIGtub3cgYFNFQ0NPTVBgIGFuZCBgU0VDQ09NUF9GSUxURVJgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSBjZXJ0YWluLCBzbyBJIHdpbGwgbGlzdCB0aGVtIGhlcmUuXG5cbk9oLCB3YWl0LCB0aGVyZSdzIGBHRU5FUklDX0VOVFJZYC4gSSByZWNhbGwgaXQncyBzZWxlY3RlZCBieSBgQVJNNjRgLCB3aGljaCBtZWFucyBpdCdzIGFsd2F5cyBhY3RpdmUgb24gYXJtNjQgYXJjaGl0ZWN0dXJlcy4gR29vZCB0byBrZWVwIGluIG1pbmQuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExldCdzIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY2AuIEhtbSwgYHB0cmFjZV9zYXZlX3JlZ2AgaGFzIG1vdmVkIGZyb20gYHB0cmFjZS5jYCB0byBgZW50cnktY29tbW9uLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgYW5kIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0YCBoYXZlIGJlZW4gYWRkZWQgdG8gYGVudHJ5LWNvbW1vbi5oYC4gU28gdGhlc2UgYXJlIGNvbXBpbGVkIGluIGFsbCB0aGUgdGltZS4gTm93IEkgc2hvdWxkIGNoZWNrIHdoYXQgaXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoyMC45NTY1OTY1MzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTk4NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD02ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC05Mi1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjkzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtOTQte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0xMDYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDoxMDc6I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMTA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoyMS4wMjc4MDI3OTVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxNTQwMjY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gSG90bmVzcyBmb3IgVGVzdCBEaXN0cmlidXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb2luZyB0byBza2V3IG15IHRlc3QgZGlzdHJpYnV0aW9ucywgYW5kIHRoZXNlIG9uZXMganVtcGVkIG91dDogYGRvX2VsMF9zdmNgLCBgZG9fZWwwX3N2Y19jb21wYXRgLCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAsIGBfX3NlY3VyZV9jb21wdXRpbmdgLCBgX19zZWNjb21wX2ZpbHRlcmAsIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAsIGFuZCBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYC5cblxuVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kLCBoYW5nIG9uLi4uIGBkb19lbDBfc3ZjYCBpcyBhICpodWdlKiBvZmZlbmRlciBoZXJlLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IGZvciAqZXZlcnkqIEVMMCBzeXN0ZW0gY2FsbCEgVGhhdCdzIGdvaW5nIHRvIGRvbWluYXRlIGFueSB0ZXN0IGFuZCBpbnZhbGlkYXRlIHRoZSByZXN1bHRzLiBEZWZpbml0ZWx5IGF2b2lkaW5nIHRoYXQuXG5cblRoZW4sIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAg4oCTIHRoZXkncmUgb24gdGhlIGZhc3QgcGF0aCB0b28gaWYgc2VjY29tcCBpcyBlbmFibGVkLCBzbywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gY29uZmlnLCB3ZSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoZW0uXG5cbmBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGlzIHRoZSBuZXh0IG9uZS4gSXQncyBleGVjdXRlZCBmb3IgZXZlcnkgc3lzY2FsbCBpZiBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBlbmFibGVkLCBidXQgaXQgbG9va3MgbGlrZSB0aGF0J3MgY29udHJvbGxlZCBieSBhIGZsYWcsIHNvIG1heWJlIG5vdCAqYXMqIGhvdCBhcyB0aGUgb3RoZXJzLCBidXQgc3RpbGwgb24gdGhlIHN5c2NhbGwgcGF0aCwgc28gcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbkFuZCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBpcyBjYWxsZWQgZnJvbSBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgc28gdGhhdCdzIGluZGlyZWN0bHkgaG90LlxuXG5CdXQgd2FpdCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBhY3R1YWxseSAqY2FsbGVkKiBpZiBgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgc2V0ISBHb29kIHRvIGtub3csIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAgdG8gc2VlIGhvdyB0aGlzIGZsYWcgaXMgc2V0IGFuZCBob3cgY29tbW9uIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDozOS4xODE4MzM1MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTYxNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxfdXNlcl9kaXNwYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTU3LVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NTg6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNTktbG9uZyB0cmFjZV9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04MS1cXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0gpIHtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjgyOlxcdFxcdGlmIChzeXNjYWxsX3VzZXJfZGlzcGF0Y2gocmVncykpXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04My1cXHRcXHRcXHRyZXR1cm4gLTFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDozOS4yNjk0MDI2MjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4Njc1OTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBzY2FuIGhhcyBwb2ludGVkIG1lIHRvd2FyZHMgc29tZSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsb2dpYyBmbG93IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhhdCBzcGVjaWZpYyBmbGFnIGlzIHNldCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHRvIGV4cGxvcmUuXG5cblRoZW4sIHRoZXJlJ3MgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgZnVuY3Rpb24gaXMgYW5vdGhlciBjb21wZWxsaW5nIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgYXR0ZW50aW9uLlxuXG5GdXJ0aGVybW9yZSwgdGhlIHBhaXIgb2YgZnVuY3Rpb25zIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGxvb2sgcGFydGljdWxhcmx5IHJlbGV2YW50LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHB0cmFjZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNpbmdsZS1zdGVwcGluZywgc3VnZ2VzdHMgdGhleSdyZSBoYW5kbGluZyBsb3ctbGV2ZWwgY29udHJvbCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBkaWcgaW50byB0aGVzZSwgYXMgcHRyYWNlIGlzIG5vdG9yaW91c2x5IGNvbXBsZXguXG5cbkZpbmFsbHksIGBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBpbnRyaWd1aW5nLiBJdCdzIHRoZSBwcmN0bCBoYW5kbGVyLCBzbyBpdCBvZmZlcnMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gY2FsbCBkaXNwYXRjaC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzA6NDcuNzU2MTY2NDE1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA4MTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM9NDA9Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjc3OnN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzUtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzNjppbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3RvcilcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTM4LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTM5OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQwLX1cXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0xNjY9aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE3Ni1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godGFzaywgY2ZnLm1vZGUsIGNmZy5vZmZzZXQsIGNmZy5sZW4sXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE3OC1cXHRcXHRcXHRcXHRcXHQgICAgICAoY2hhciBfX3VzZXIgKikodWludHB0cl90KWNmZy5zZWxlY3Rvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjQ3LjgyNTI1NTQxOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM0NTA4MTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEZ1enppbmcgVGFyZ2V0IENhbmRpZGF0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgd2l0aCBmdXp6aW5nIHRhcmdldHMuICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvc3NpYmlsaXRpZXMsIGFsb25nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZ2V0dGVycyBhbmQgc2V0dGVyczogYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnYCBhbmQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLlxuXG5MZXQncyBkbyBzb21lIGRpZ2dpbmcuIEknbGwgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jYC4gQWgsIHJpZ2h0LCB0aGUgcGF0Y2ggcmVtb3ZlZCB0aGUgYHN5c2NhbGxfdHJhY2VfZW50ZXJgIGFuZCBgc3lzY2FsbF90cmFjZV9leGl0YCBmdW5jdGlvbnMuIFRoZXkndmUgYmVlbiByZXBsYWNlZCBieSBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAsIHdoaWNoIGFyZSBub3cgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLiAgSG1tLCBidXQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBpcyBkZWNsYXJlZCBhcyBgX19hbHdheXNfaW5saW5lYC4gIFRoYXQncyBhIG5vLWdvIGZvciBkaXJlY3QgZnV6emluZy4gV2hhdCBhYm91dCB0aGUgZ2VuZXJpYyBgcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YD8gSXQncyBhIHBvc3NpYmlsaXR5LCBidXQgcG90ZW50aWFsbHkgbm90IGFzIGludGVyZXN0aW5nIGFzIG90aGVycy5cblxuTm93LCBsZXQncyBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gIEFoLCBoZXJlIHdlIGdvLCBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgIGFuZCBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYCBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gc2V0IG9yIGNsZWFyIHRoZSBgU1lTQ0FMTF9FWElUX1RSQVBgIGZsYWcuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyFcblxuVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIGBrZXJuZWwvc2VjY29tcC5jYC4gSSBzZWUgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYCBub3cgcmV0dXJuIGEgYGJvb2xgLiAgVGhleSBhcmUgYm90aCBjYWxsZWQgb24gc3lzY2FsbCBlbnRyeSBpZiBzZWNjb21wIGlzIGVuYWJsZWQuICBUaGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IHRvbyBob3Q/ICBHZW5lcmFsbHksIGluIGEgZnV6emluZyBzZXR1cCwgc2VjY29tcCBpcyB1c3VhbGx5IG9ubHkgZW5hYmxlZCBmb3Igc3BlY2lmaWMgdGVzdHMsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgU3l6a2FsbGVyIGhlYXZpbHkgbGV2ZXJhZ2VzIHNlY2NvbXAgdG8gaXNvbGF0ZSBwcm9jZXNzZXMuICpXYWl0LCBpdCBkb2Vzbid0IHVzZSBzZWNjb21wIGZvciBpdHMgb3duIHByb2Nlc3NlcywgYnV0IGl0IG1pZ2h0IGZ1enogaXQuKiBBY3R1YWxseSwgYF9fc2VjY29tcF9maWx0ZXJgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlIGJlY2F1c2UgaXQncyB0aGUgY29yZSBvZiBzZWNjb21wIGZpbHRlcmluZy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIFwiZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsXCIgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gSSBrbm93IGBfX3NlY3VyZV9jb21wdXRpbmdgIGlzIHByb2JhYmx5IGEgaG90IHBhdGggaWYgc2VjY29tcCBpcyBlbmFibGVkLiBJIHNob3VsZCBzdGljayB0byB0aGUgbGVzcyBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4gU28sIGxldCBtZSBuYXJyb3cgaXQgZG93biB0bzpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGBcbiogICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGBcbiogICBgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoYFxuKiAgIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZ2BcbiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWdgXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbk9rYXksIGhvbGQgb24uLi5JIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGV4aGF1c3RlZCBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlcmU/IFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIHN0YXJ0IGxvb2tpbmcgYXQgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMTowMi4xNzAzNDA0NDVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTk0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTM1PWJvb2wgX193ZWFrIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0zOS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6NDA6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MDIuMjUxMzQyNzI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQ3MDAzODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBBcm02NCBhbmQgR2VuZXJpYyBTeXNjYWxsIEVudHJ5KipcblxuT2theSwgc28gaW5pdGlhbGx5IEkgd2FzIGEgYml0IGNvbmZ1c2VkLiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBhIGdlbmVyYWwgbWVjaGFuaXNtLCBidXQgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBpdCBzcGVjaWZpY2FsbHkgZm9yIGFybTY0IGJ5IHNlbGVjdGluZyBgR0VORVJJQ19FTlRSWWAuIFRoZSBwYXRjaCBkb2Vzbid0IGFjdHVhbGx5ICphZGQqIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AgZGlyZWN0bHksIGl0J3MgbW9kaWZ5aW5nIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNldCBgR0VORVJJQ19FTlRSWWAsIHdoaWNoIGNvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYCBpZiBgR0VORVJJQ19TWVNDQUxMYCBpcyBhbHNvIGNob3Nlbi4gUmlnaHQsIGdvdCBpdC5cblxuQnV0IGhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRpZmYgaXRzZWxmLi4uICpBaGEhKiBUaGUgZGlmZiAqZG9lcyogdG91Y2ggYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIE5vdyBJIHNlZSBpdC4gVGhlIHBhdGNoIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYXMgYSB3ZWFrIGZ1bmN0aW9uIHRoZXJlLiBPa2F5LCBzbyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHRoaXMgY2hhbmdlLiBOb3cgSSB1bmRlcnN0YW5kLiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZS5cblxuTGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgYWZmZWN0ZWQgZmlsZXMgd2l0aGluIHRoZSBwYXRjaC4gSSdtIHNlZWluZyBjaGFuZ2VzIHRvIGBhcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL202OGsva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jYCwgYGFyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jYCwgYGFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNgLCBhbmQgYGFyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY2AuIFRoZXkncmUgYWxsIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgIXNlY3VyZV9jb21wdXRpbmcoKWAgaW5zdGVhZCBvZiBgc2VjdXJlX2NvbXB1dGluZygpID09IC0xYC4gVGhpcyBtZWFucyB0aGVyZSdzIGEgd2lkZXIsIGZ1bmRhbWVudGFsIGNoYW5nZSBhY3Jvc3MgdGhlIGtlcm5lbCB3aGVyZSBgc2VjdXJlX2NvbXB1dGluZygpYCBpcyBub3cgcmV0dXJuaW5nIGEgYm9vbGVhbi5cblxuU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdHdvLWZvbGQ6IEZpcnN0LCBpdCdzIGEgdHJlZS13aWRlIGNoYW5nZSB0byBjb252ZXJ0IGBzZWN1cmVfY29tcHV0aW5nKClgIHRvIGEgYm9vbGVhbiByZXR1cm4uIEJ1dCB0aGUgYmlnZ2VyLCBhcmNoaXRlY3R1cmFsIGNoYW5nZSBpcyBtaWdyYXRpbmcgYXJtNjQgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50IG1lY2hhbmlzbS4gVGhhdCdzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIEkgYmVsaWV2ZS5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgbGV0J3MgbGlzdCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlOlxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbldhaXQsIGhhbmcgb24uLi4gYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIHRvby4gV2hpbGUgaXQgd29uJ3QgYmUgYXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlICppbXBhY3QqIG9mIHRoZSBjaGFuZ2UsIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFybTY0IHNwZWNpZmljIGNvZGUuIExvb2tzIGxpa2UgYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgIGFyZSBob3QgcGF0aHMsIGFuZCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYGludm9rZV9zeXNjYWxsYCwgYWx0aG91Z2ggSSdtIHByZXR0eSBzdXJlIHRoYXQgaXQncyBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGNvbnRleHQgd2hlbiByZXZpZXdpbmcgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGZpbGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMToxMy4xOTgzNDk2MTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjc1MDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnZva2Vfc3lzY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTIzPXN0YXRpYyBsb25nIGRvX25pX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTMzLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozNDpzdGF0aWMgbG9uZyBfX2ludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF9mbilcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMzUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTM4LVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozOTpzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTQwLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzY19ucixcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy00OS1cXHRcXHRzeXNjYWxsX2ZuID0gc3lzY2FsbF90YWJsZVthcnJheV9pbmRleF9ub3NwZWMoc2Nubywgc2NfbnIpXTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6NTA6XFx0XFx0cmV0ID0gX19pbnZva2Vfc3lzY2FsbChyZWdzLCBzeXNjYWxsX2ZuKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTEtXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz01OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTE4LVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMTk6XFx0aW52b2tlX3N5c2NhbGwocmVncywgc2Nubywgc2NfbnIsIHN5c2NhbGxfdGFibGUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjAtdHJhY2VfZXhpdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MTMuNDIxMTA2OTg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MTM5ODQzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTeXN0ZW0gQ2FsbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBpZGVudGlmeWluZyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGlzIHN5c3RlbSBjYWxsIHBhdGNoLiBJIHF1aWNrbHkgaG9uZWQgaW4gb24gdGhlIGhvdCBwYXRocywgbGlrZSBgaW52b2tlX3N5c2NhbGxgIGFuZCBgX19pbnZva2Vfc3lzY2FsbGAsIHdoaWNoIEkgZmlsdGVyZWQgb3V0IHRvIGZvY3VzIG9uIHRoZSBrZXkgbW9kaWZpY2F0aW9ucy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgaW50byBgc3lzY2FsbF90cmFjZV9lbnRlcmAsIHdoaWNoIGxlZCBtZSB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb25zLlxuXG5NeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBsZXNzIGZyZXF1ZW50bHkgZXhlY3V0ZWQgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIEkgbm90aWNlZCBtb2RpZmljYXRpb25zIHRvOlxuXG4qICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmBcbiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgXG4qICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGBcblxuSSB0aGVuIGRvdWJsZS1jaGVja2VkIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLiBJdCB3YXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQgYnV0IHNhdyB0aGUgYWRkaXRpb24gb2YgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYW5kIHRoZXJlZm9yZSBiZWFycyByZWxldmFuY2UuIEkgbW92ZWQgb24gdG8gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgaW1wbGVtZW50ZWQgZm9yIEFSTTY0LiBUaGUgZGlmZmVyZW5jZXMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBWRFNPIHNpZ3JldHVybiBtZWNoYW5pc20sIHNlZW0gY3JpdGljYWwuXG5cbkkgdGhlbiBjb25zaWRlcmVkIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAuIFdoaWxlIHRob3NlIGFyZSBjb3JlIHNlY2NvbXAgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIG15IGZvY3VzIGlzIG9uIGxlc3MtZnJlcXVlbnRseSBjYWxsZWQgZnVuY3Rpb25zLiBTaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzZWNjb21wLCBidXQgdGhlIGhvdCBwYXRoIGZ1bmN0aW9ucyBhcmUgbm90IHRoZSBmb2N1cywgSSBkaXNjYXJkZWQgdGhlc2UuXG5cbkkgcmV2aXNpdGVkIHRoZSBxdWVzdGlvbiBvZiBnZW5lcmljIGhvdCBwYXRocywgbWFraW5nIHN1cmUgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZW0gaW4gbXkgc2VsZWN0aW9uLCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoZXJlZm9yZSwgSSBzZXR0bGVkIG9uIGxpc3RpbmcgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cblRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMgd2l0aG91dCBiZWluZyBvdmVybHkgZ2VuZXJpYy5cblxuRmluYWxseSwgSSBjaGVja2VkIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgcHJvcGVyIHRlc3RhYmlsaXR5LlxuKiAgIGBTRUNDT01QYFxuKiAgIGBTRUNDT01QX0ZJTFRFUmBcbiogICBgQ09NUEFUYCAobmVlZGVkIGJlY2F1c2Ugb2YgY29tcGF0LXJlbGF0ZWQgbG9naWMgaW4gYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmApXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMTozNy41NjA5NTQ2MDZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODU0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzU0LVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTYtXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTc3NT1jb25maWcgS1VTRVJfSEVMUEVSU1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE4MDEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE4MDI6Y29uZmlnIENPTVBBVF9WRFNPXFxuYXJjaC9hcm02NC9LY29uZmlnLTE4MDMtXFx0Ym9vbCBcXFwiRW5hYmxlIHZEU08gZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTgxNT1jb25maWcgVEhVTUIyX0NPTVBBVF9WRFNPXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTgyMi1cXG5hcmNoL2FybTY0L0tjb25maWc6MTgyMzpjb25maWcgQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFNcXG5hcmNoL2FybTY0L0tjb25maWctMTgyNC1cXHRib29sIFxcXCJGaXggdXAgbWlzYWxpZ25lZCBtdWx0aS13b3JkIGxvYWRzIGFuZCBzdG9yZXMgaW4gdXNlciBzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MzcuNjQxODIwMjk4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzkwMzk1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBjb25maWcgaGVyZS4gR29vZCwgYENPTVBBVGAgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbjsgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggdGhpcyBgU0VDQ09NUGAgYW5kIGBTRUNDT01QX0ZJTFRFUmAgY29tYm8uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNldHRpbmdzLiBHb3R0YSBlbnN1cmUgbm8gb3ZlcnNpZ2h0cyBoZXJlLiBHb3R0YSBjb25maXJtIHRoZSBTRUNDT01QIHBvbGljaWVzIGFyZSB3ZWxsLWRlZmluZWQuIEFscmlnaHQsIGxldCdzIGRlbHZlIGRlZXBlciB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6NDEuMTIwODYzNTE1WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTg2MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTYyOD1jb25maWcgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLS1cXG5hcmNoL0tjb25maWctNjQ2LVxcbmFyY2gvS2NvbmZpZzo2NDc6Y29uZmlnIFNFQ0NPTVBcXG5hcmNoL0tjb25maWctNjQ4LVxcdHByb21wdCBcXFwiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGV4ZWN1dGUgdW50cnVzdGVkIGJ5dGVjb2RlXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnLTY2My1cXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxcbmFyY2gvS2NvbmZpZy02NjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9LY29uZmlnLTY3My1cXG5hcmNoL0tjb25maWc6Njc0OmNvbmZpZyBTRUNDT01QX0NBQ0hFX0RFQlVHXFxuYXJjaC9LY29uZmlnLTY3NS1cXHRib29sIFxcXCJTaG93IHNlY2NvbXAgZmlsdGVyIGNhY2hlIHN0YXR1cyBpbiAvcHJvYy9waWQvc2VjY29tcF9jYWNoZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6NDEuMjE2NzMzNjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODU5ODI4MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFybTY0IFN5c3RlbSBDYWxsIE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgdmFsaWQuIExldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMgcGF0Y2gncyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzIEkgbmVlZCB0byBjb25zaWRlcj8gUmlnaHQsIGl0IG1vZGlmaWVzIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlbGVjdCBgR0VORVJJQ19FTlRSWWAuIGBHRU5FUklDX0VOVFJZYCBpcyAqc2VsZWN0ZWQqLCBzbyBJIGRvbid0IG5lZWQgdG8gZW5hYmxlIGl0IGV4cGxpY2l0bHkuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNvcmUgb2YgdGhpczogdGhlIHBhdGNoIG1vdmVzIGFybTY0IHRvIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCdzIGRpdGNoaW5nIHRoZSBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgYW5kIHN3aXRjaGluZyB0byB0aGUgZ2VuZXJpYyBgc3lzY2FsbF90cmFjZV9lbnRlcigpYCBhbmQgYHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVfd29yaygpYCBmdW5jdGlvbnMuIEl0IGFsc28gbW9kaWZpZXMgYHNlY3VyZV9jb21wdXRpbmcoKWAgYWNyb3NzIHRoZSB0cmVlIHRvIHJldHVybiBhIGJvb2xlYW4gaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLiBUaGF0J3MgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBzeXNjYWxscyB3b3JrIG9uIGFybTY0LCBhbmQgaXQgcmlwcGxlcyBvdXQgdG8gc2VjY29tcCBoYW5kbGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy5cblxuVGhlcmVmb3JlLCBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHRhcmdldCB0aGUgc3BlY2lmaWMgbmV3IGVudHJ5IHBvaW50cyBvbiBhcm02NCBpbnRyb2R1Y2VkIGJ5IHRoZSBnZW5lcmljIGVudHJ5IG1lY2hhbmlzbS4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGluZ3MgbGlrZSBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYC4gQW5kLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHNpbmdsZS1zdGVwIHB0cmFjZSBpbnRlcmFjdGlvbiwgc2luY2UgdGhhdCB3YXMgbW9kaWZpZWQgdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIGVudHJ5LlxuXG5UbyBleGVyY2lzZSB0aGUgc2VjY29tcCBjaGFuZ2VzIGFuZCB0aGUgY29tcGF0IGJyYW5jaCBvZiB0aGUgdmRzbyBzaWdyZXR1cm4gY2hlY2ssIEkgc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGBTRUNDT01QYCwgYFNFQ0NPTVBfRklMVEVSYCwgYW5kIGBDT01QQVRgLlxuXG5NeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZTpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbldhaXQuLi4gSSBzZWUgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgKmFsc28qIGFkZGVkIGFzIGEgd2VhayBmdW5jdGlvbiBpbiBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gbW9yZSB0aGFuIG9uZSBwbGFjZS5cblxuSG1tLCB3aGF0IGFib3V0IGZ1enppbmcgYF9fc2VjdXJlX2NvbXB1dGluZ2AgZGlyZWN0bHk/IEl0J3MgYSBob3QgcGF0aCwgYW5kIGl0J3MgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEhvd2V2ZXIsIGl0J3MgdG9vIHJpc2t5IHRvIGluY2x1ZGUgaW4gdGhpcyBjdXJyZW50IGZvY3VzLiBJIGRvbid0IHdhbnQgdG8gc2tldyB0aGUgcmVzdWx0cyBieSBpbmNsdWRpbmcgY29kZSB0aGF0IGlzIHRvbyBicm9hZGx5IGNoYW5nZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLi4uIE9rYXksIGBwdHJhY2Vfc2F2ZV9yZWdgIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgIGFyZSBhbGwgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgbWVhbnMgSSBjYW4ndCB0YXJnZXQgdGhlbSBkaXJlY3RseSBmb3IgZnV6emluZy5cblxuT2theSwgSSdtIGNvbmZpZGVudCB3aXRoIHRoZXNlIHRocmVlIGZvY3VzIHN5bWJvbHMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMTIsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMxOjU2LjA3NjU2NDUwM1oiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDc4OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNDT01QXCIsXG4gICAgXCJTRUNDT01QX0ZJTFRFUlwiLFxuICAgIFwiQ09NUEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuXCIsXG4gICAgXCJ1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcFwiLFxuICAgIFwidXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ0NPTVBcIixcbiAgICBcIlNFQ0NPTVBfRklMVEVSXCIsXG4gICAgXCJDT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgICBcInVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwXCIsXG4gICAgXCJ1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 15:17:43 +0000 UTC FinishedAt: 2026-06-29 15:31:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECCOMP", "SECCOMP_FILTER", "COMPAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECCOMP", "SECCOMP_FILTER", "COMPAT" ], "series_id": "a39c9165-716a-4c61-a21f-ce0bc84e5b6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_syscall_is_vdso_sigreturn", "user_enable_single_step", "user_disable_single_step" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ0NPTVAmIzM0OywKICAgICYjMzQ7U0VDQ09NUF9GSUxURVImIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuJiMzNDssCiAgICAmIzM0O3VzZXJfZW5hYmxlX3NpbmdsZV9zdGVwJiMzNDssCiAgICAmIzM0O3VzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMzY2OWY5NDJlYjUzZWRlMGY5MjE0ZGUzNmU4Y2Y0M2IwMTg5ODlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6Mjc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggMDY4Nzc2MGVhNDY2OTguLjI3ZDk4NDdiMTA4MjM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXG5AQCAtMzg3LDcgJiM0MzszODcsNyBAQCBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcih2b2lkKVxuIFx0ICogSWYgdGhpcyBmYWlscywgc2VjY29tcCBtYXkgYWxyZWFkeSBoYXZlIHNldCB1cCB0aGUgcmV0dXJuIHZhbHVlXG4gXHQgKiAoZS5nLiBTRUNDT01QX1JFVF9FUlJOTyAvIFRSQUNFKS5cbiBcdCAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkge1xuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGlmIChyZWdzLVx1MDAzZXIxOSA9PSAwIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxuIFx0XHRcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcbiBcdFx0c3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNcbkBAIC04NTUsNyAmIzQzOzg1NSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZTsgc3lzY2FsbCBtYXkgaGF2ZSBjaGFuZ2VkLiAqL1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gI2Vsc2VcbiBcdC8qIFhYWDogcmVtb3ZlIHRoaXMgb25jZSBPQUJJIGdldHMgZml4ZWQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWJkLi5hZWE2ODZkY2UzZDVhYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTI4LDkgJiM0MzsxMjgsOSBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXG4gXHRzZWxlY3QgR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTXG4gXHRzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQXG4mIzQzO1x0c2VsZWN0IEdFTkVSSUNfRU5UUllcbiBcdHNlbGVjdCBHRU5FUklDX0lETEVfUE9MTF9TRVRVUFxuIFx0c2VsZWN0IEdFTkVSSUNfSU9SRU1BUFxuLVx0c2VsZWN0IEdFTkVSSUNfSVJRX0VOVFJZXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfSVBJXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRFxuIFx0c2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbmluZGV4IGQyNzc5ZDYwNGM3YmUyLi5mNDNkNGRlYTkxNmE1YiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcbkBAIC0xODUsNiAmIzQzOzE4NSw3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIHN0cnVjdCBsaW51eF9iaW5wcm07XG4gZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdFx0XHRcdCAgICAgICBpbnQgdXNlc19pbnRlcnApO1xuJiM0MztleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuIC8qIDFHQiBvZiBWQSAqL1xuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbkBAIC0zLDE0ICYjNDM7MywyMSBAQFxuICNpZm5kZWYgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxuICNkZWZpbmUgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RocmVhZF9pbmZvLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kYWlmZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbiBcbiYjNDM7ZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIge1xuJiM0MztcdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbiYjNDM7XHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIEFSQ0hfRVhJVF9UT19VU0VSX01PREVfV09SSyAoX1RJRl9NVEVfQVNZTkNfRkFVTFQgfCBfVElGX0ZPUkVJR05fRlBTVEFURSlcbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuQEAgLTU0LDQgJiM0Mzs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxuIFxuICNkZWZpbmUgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkXG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGludCAqcmVnbm8pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuJiM0MztcdCAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlblxuJiM0MztcdCAqIHNpZ25hbGxlZCBmcm9tIHN5c2NhbGwgZW50cnkgb3Igc3lzY2FsbCBleGl0IGJ5IGNsb2JiZXJpbmcgYSBnZW5lcmFsXG4mIzQzO1x0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuJiM0MztcdCAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4mIzQzO1x0ICogICBpZ25vcmVkL2Rpc2NhcmRlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4mIzQzO1x0ICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuJiM0MztcdCAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4mIzQzO1x0c2F2ZWRfcmVnID0gcmVncy1cdTAwM2VyZWdzWypyZWdub107XG4mIzQzO1x0cmVncy1cdTAwM2VyZWdzWypyZWdub10gPSBkaXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9yZWc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4mIzQzO1x0aW50IHJlZ25vLCByZXQ7XG4mIzQzO1xuJiM0MztcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FTlRFUiwgXHUwMDI2cmVnbm8pO1xuJiM0MztcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Zm9yZ2V0X3N5c2NhbGwocmVncyk7XG4mIzQzO1x0cmVncy1cdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIGludCBzdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4mIzQzO1x0aW50IHJlZ25vO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRVhJVCwgXHUwMDI2cmVnbm8pO1xuJiM0MztcdGlmICghc3RlcCkge1xuJiM0MztcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuJiM0MztcdFx0ICogdHJhY2VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHJlZ2lzdGVycyBtYXkgaGF2ZSByZXdvdW5kIHRoZVxuJiM0MztcdFx0ICogc3RhdGUgbWFjaGluZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdFxuJiM0MztcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYXVkaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG4gXG4gdHlwZWRlZiBsb25nICgqc3lzY2FsbF9mbl90KShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4gXG5AQCAtMTIwLDcgJiM0MzsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdHJldHVybiBBVURJVF9BUkNIX0FBUkNINjQ7XG4gfVxuIFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tXG4gI2VuZGlmXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDVkN2ZlM2UxNTNjODUwLi4zZjYyMWJhMGY5NjEzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNDYsNiAmIzQzOzQ2LDcgQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcbiBcdHU2NFx0XHRcdG1wYW1fcGFydGlkX3BtZztcbiAjZW5kaWZcbiBcdHUzMlx0XHRcdGNwdTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHN5c2NhbGxfd29yazsgICAvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXG4gfTtcbiBcbiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spXHRcXFxuQEAgLTY4LDExICYjNDM7NjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XG4gI2RlZmluZSBUSUZfVVBST0JFXHRcdDVcdC8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi9cbiAjZGVmaW5lIFRJRl9NVEVfQVNZTkNfRkFVTFRcdDZcdC8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovXG4gI2RlZmluZSBUSUZfTk9USUZZX1NJR05BTFx0N1x0Lyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFXHQ4XHQvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfQVVESVRcdDlcdC8qIHN5c2NhbGwgYXVkaXRpbmcgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlRcdDEwXHQvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqL1xuLSNkZWZpbmUgVElGX1NFQ0NPTVBcdFx0MTFcdC8qIHN5c2NhbGwgc2VjdXJlIGNvbXB1dGluZyAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXHRcdDEyXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cbiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HXHQxM1x0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xuICNkZWZpbmUgVElGX01FTURJRVx0XHQxOFx0LyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi9cbiAjZGVmaW5lIFRJRl9GUkVFWkVcdFx0MTlcbkBAIC05NCwyNCAmIzQzOzkwLDE0IEBAIHZvaWQgYXJjaF9zZXR1cF9uZXdfZXhlYyh2b2lkKTtcbiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVEX0xBWllcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTkVFRF9SRVNDSEVEX0xBWlkpXG4gI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUVcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTk9USUZZX1JFU1VNRSlcbiAjZGVmaW5lIF9USUZfRk9SRUlHTl9GUFNUQVRFXHQoMSBcdTAwM2NcdTAwM2MgVElGX0ZPUkVJR05fRlBTVEFURSlcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX1RSQUNFKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfQVVESVQpXG4tI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpXG4tI2RlZmluZSBfVElGX1NFQ0NPTVBcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TRUNDT01QKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TWVNDQUxMX0VNVSlcbiAjZGVmaW5lIF9USUZfUEFUQ0hfUEVORElOR1x0KDEgXHUwMDNjXHUwMDNjIFRJRl9QQVRDSF9QRU5ESU5HKVxuICNkZWZpbmUgX1RJRl9VUFJPQkVcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9VUFJPQkUpXG4tI2RlZmluZSBfVElGX1NJTkdMRVNURVBcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TSU5HTEVTVEVQKVxuICNkZWZpbmUgX1RJRl8zMkJJVFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGXzMyQklUKVxuICNkZWZpbmUgX1RJRl9TVkVcdFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9TVkUpXG4gI2RlZmluZSBfVElGX01URV9BU1lOQ19GQVVMVFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9NVEVfQVNZTkNfRkFVTFQpXG4gI2RlZmluZSBfVElGX05PVElGWV9TSUdOQUxcdCgxIFx1MDAzY1x1MDAzYyBUSUZfTk9USUZZX1NJR05BTClcbiAjZGVmaW5lIF9USUZfVFNDX1NJR1NFR1ZcdCgxIFx1MDAzY1x1MDAzYyBUSUZfVFNDX1NJR1NFR1YpXG4gXG4tI2RlZmluZSBfVElGX1NZU0NBTExfV09SS1x0KF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFxcXG4tXHRcdFx0XHQgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQgfCBfVElGX1NFQ0NPTVAgfCBcXFxuLVx0XHRcdFx0IF9USUZfU1lTQ0FMTF9FTVUpXG4tXG4gI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDS1xuICNkZWZpbmUgSU5JVF9TQ1NcdFx0XHRcdFx0XHRcdFxcXG4gXHQuc2NzX2Jhc2VcdD0gaW5pdF9zaGFkb3dfY2FsbF9zdGFjayxcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG5pbmRleCAyOTMwNzY0MmY0YzkwNC4uYzUzNjgzODM5MTU1MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXG5AQCAtMzg1LDExICYjNDM7Mzg1LDE5IEBAIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFxuIFx0aWYgKCF0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcodGksIFRJRl9TSU5HTEVTVEVQKSlcbiBcdFx0c2V0X3JlZ3Nfc3Bzcl9zcyh0YXNrX3B0X3JlZ3ModGFzaykpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB0aGF0IHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgdHJpZ2dlcnMgYSB0cmFwIG9uY2Ugc3RlcHBpbmdcbiYjNDM7XHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXG4mIzQzO1x0ICogYXMgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBkb2VzIG5vdCBuYXRpdmVseSBjaGVjayBmb3IgVElGX1NJTkdMRVNURVAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcbiBcbiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4ge1xuIFx0Y2xlYXJfdGlfdGhyZWFkX2ZsYWcodGFza190aHJlYWRfaW5mbyh0YXNrKSwgVElGX1NJTkdMRVNURVApO1xuJiM0MztcdGNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNGQwODU5OGUyODkxZDMuLjYxYTY2ODY4Mjk0NzE1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXG5AQCAtOCw3ICYjNDM7OCw2IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYXVkaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuQEAgLTE4LDcgJiM0MzsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY2NvbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuQEAgLTI4LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdfYnJlYWtwb2ludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnc2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9jb21wYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHVmZWF0dXJlLmhcdTAwM2VcbkBAIC0zOCwxMyAmIzQzOzM1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9pbnRlcl9hdXRoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS90cmFwcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N5c3RlbV9taXNjLmhcdTAwM2VcbiBcbi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbi0jaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc3lzY2FsbHMuaFx1MDAzZVxuLVxuIHN0cnVjdCBwdF9yZWdzX29mZnNldCB7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIFx0aW50IG9mZnNldDtcbkBAIC0yMzM5LDExNCAmIzQzOzIzMzIsNiBAQCBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbiBcdHJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7XG4gfVxuIFxuLWVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcbi1cdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbi1cdFBUUkFDRV9TWVNDQUxMX0VYSVQsXG4tfTtcbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgaW50ICpyZWdubylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuLVx0ICogZXhpdCBzdG9wcyBiZWNhdXNlIHdlIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdG9wIGhhcyBiZWVuXG4tXHQgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbFxuLVx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuLVx0ICogYW5kIHJlc3RvcmluZyBpdHMgb2xkIHZhbHVlIGFmdGVyIHRoZSBzdG9wLiBUaGlzIG1lYW5zIHRoYXQ6XG4tXHQgKlxuLVx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4tXHQgKiAgIGlnbm9yZWQvZGlzY2FyZGVkLlxuLVx0ICpcbi1cdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4tXHQgKiAgIHNvIHRoZSB0cmFjZXIgY2Fubm90IHNhdmUgaXQgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuXG4tXHQgKlxuLVx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuLVx0ICogICAodGhlIGxhdHRlciBkbyBub3Qgbm9iYmxlIGFueSByZWdpc3RlcnMpLlxuLVx0ICovXG4tXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4tXHRzYXZlZF9yZWcgPSByZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xuLVxuLVx0cmV0dXJuIHNhdmVkX3JlZztcbi19XG4tXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cdGludCByZWdubywgcmV0O1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcdTAwMjZyZWdubyk7XG4tXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRpZiAocmV0KVxuLVx0XHRmb3JnZXRfc3lzY2FsbChyZWdzKTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuLVx0aW50IHJlZ25vO1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFx1MDAyNnJlZ25vKTtcbi1cdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcbi1cdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4tXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuLVx0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4tXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4tXHRcdCAqL1xuLVx0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbi1cdH1cbi19XG4tXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHtcbi1cdFx0cmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRcdGlmIChyZXQgfHwgKGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfRU1VKSlcbi1cdFx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cdH1cbi1cbi1cdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuLVx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cbi1cdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuLVx0XHR0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy1cdTAwM2VzeXNjYWxsbm8pO1xuLVxuLVx0YXVkaXRfc3lzY2FsbF9lbnRyeShyZWdzLVx1MDAzZXN5c2NhbGxubywgcmVncy1cdTAwM2VvcmlnX3gwLCByZWdzLVx1MDAzZXJlZ3NbMV0sXG4tXHRcdFx0ICAgIHJlZ3MtXHUwMDNlcmVnc1syXSwgcmVncy1cdTAwM2VyZWdzWzNdKTtcbi1cbi1cdHJldHVybiByZWdzLVx1MDAzZXN5c2NhbGxubztcbi19XG4tXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXG4tXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxuLVx0XHR0cmFjZV9zeXNfZXhpdChyZWdzLCBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncykpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0cmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzKTtcbi1cbi1cdHJzZXFfc3lzY2FsbChyZWdzKTtcbi19XG4tXG4gLypcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cbiAgKiBXZSBwZXJtaXQgdXNlcnNwYWNlIHRvIHNldCBTU0JTIChBQXJjaDY0IGJpdCAxMiwgQUFyY2gzMiBiaXQgMjMpIHdoaWNoIGlzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY1xuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXG5AQCAtOCw4ICYjNDM7OCw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS1lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcmVlemVyLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcbmluZGV4IDM1OGRkZmJmMTQwMWFjLi5lMGE5OGZhYzNiODU2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cmFjZS5oXHUwMDNlXG5AQCAtNTQsMTUgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXG4gXHRzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncywgMCwgcmV0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGhhc19zeXNjYWxsX3dvcmsodW5zaWduZWQgbG9uZyBmbGFncylcbi17XG4tXHRyZXR1cm4gdW5saWtlbHkoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9XT1JLKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4tXHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHdvcms7XG4gXG4gXHRyZWdzLVx1MDAzZW9yaWdfeDAgPSByZWdzLVx1MDAzZXJlZ3NbMF07XG4gXHRyZWdzLVx1MDAzZXN5c2NhbGxubyA9IHNjbm87XG5AQCAtOTUsNyAmIzQzOzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkge1xuJiM0MztcdHdvcmsgPSBSRUFEX09OQ0UoY3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXN5c2NhbGxfd29yayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUikpIHtcbiBcdFx0LypcbiBcdFx0ICogVGhlIGRlLWZhY3RvIHN0YW5kYXJkIHdheSB0byBza2lwIGEgc3lzdGVtIGNhbGwgdXNpbmcgcHRyYWNlXG4gXHRcdCAqIGlzIHRvIHNldCB0aGUgc3lzdGVtIGNhbGwgdG8gLTEgKE5PX1NZU0NBTEwpIGFuZCBzZXQgeDAgdG8gYVxuQEAgLTExMywyNiAmIzQzOzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbiBcdFx0ICovXG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApO1xuLVx0XHRzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTtcbiYjNDM7XHRcdHNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspO1xuIFx0XHRpZiAoc2NubyA9PSBOT19TWVNDQUxMKVxuIFx0XHRcdGdvdG8gdHJhY2VfZXhpdDtcbiBcdH1cbiBcbiBcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcbi1cbi1cdC8qXG4tXHQgKiBUaGUgdHJhY2luZyBzdGF0dXMgbWF5IGhhdmUgY2hhbmdlZCB1bmRlciBvdXIgZmVldCwgc28gd2UgaGF2ZSB0b1xuLVx0ICogY2hlY2sgYWdhaW4uIEhvd2V2ZXIsIGlmIHdlIHdlcmUgdHJhY2luZyBlbnRyeSwgdGhlbiB3ZSBhbHdheXMgdHJhY2Vcbi1cdCAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuXG4tXHQgKi9cbi1cdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkge1xuLVx0XHRmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRcdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9USUZfU0lOR0xFU1RFUCkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuLVxuIHRyYWNlX2V4aXQ6XG4tXHRzeXNjYWxsX3RyYWNlX2V4aXQocmVncyk7XG4mIzQzO1x0c3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpO1xuIH1cbiBcbiB2b2lkIGRvX2VsMF9zdmMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXG5pbmRleCA1OTJkZDg2NjhkZTQ2My4uNWEwMzE0YTNjMjZlODIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xuQEAgLTM0MywzICYjNDM7MzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2lndHJhbXA7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVFxuJiM0MztcdGlmIChpc19jb21wYXRfdGFzaygpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHNpZ3BhZ2UgPSAodW5zaWduZWQgbG9uZyljdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuc2lncGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmVncy1cdTAwM2VwYyBcdTAwM2U9IHNpZ3BhZ2UgXHUwMDI2XHUwMDI2IHJlZ3MtXHUwMDNlcGMgXHUwMDNjIChzaWdwYWdlICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRzaWd0cmFtcCA9ICh1bnNpZ25lZCBsb25nKVZEU09fU1lNQk9MKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlY29udGV4dC52ZHNvLCBzaWd0cmFtcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdzLVx1MDAzZXBjID09IChzaWd0cmFtcCAmIzQzOyA4KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5AQCAtMzIzLDcgJiM0MzszMjMsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRpZiAocHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4mIzQzO1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuaW5kZXggZGY4ZWEyMjNjNzdiMWEuLjk0Njg4Njc5NGNlZGYwIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC04NSw5ICYjNDM7ODUsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuICNlbmRpZlx0LyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5AQCAtMjgxLDcgJiM0MzsyODEsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpXG4gXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpXG4gXHRcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSh0YXNrX3B0X3JlZ3MoY3VycmVudCkpO1xuIFxuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggM2Y0Yzk0Yzg4MTI0MTcuLjBkODA5Y2RhNzU0MjkyIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTEzMjgsNyAmIzQzOzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxuJiM0MztcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXG5pbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0XG4tLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0fVxuIFxuIFx0LyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgY2hlY2sgYWZ0ZXIgcHRyYWNlLiAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgzNGZjYzRmN2I1NDNiLi40YjNjNTJlZDZlOWQyYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMzksOSAmIzQzOzEzOSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDtcbiB9XG4tXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuICNlbmRpZlx0LyogX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5pbmRleCA4MDY3ZTY2NmE0Y2E2OC4uOTg3YzlhNzg4MDZmNzggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMTIsMTEgJiM0MzsxMTIsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bG9uZyBzeXNjYWxsKVxuIFx0cmVncy1cdTAwM2VhMCA9IGZuKHJlZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9mbHVzaF9pY2FjaGUodWludHB0cl90LCB1aW50cHRyX3QsIHVpbnRwdHJfdCk7XG4gXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9od3Byb2JlKHN0cnVjdCByaXNjdl9od3Byb2JlICosIHNpemVfdCwgc2l6ZV90LFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5pbmRleCA0MjcxZTQxNjlmNDViNi4uNWYzMTBjYWFkMWZjZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5AQCAtODksMTEgJiM0Mzs4OSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzEgLCBcJiMzNDswXCYjMzQ7IChyMilcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzIgLCBcJiMzNDtkXCYjMzQ7IChyMykgU1lTQ0FMTF9GTVRfMVxuZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcbmluZGV4IDA2Zjc2NWQ3MWEyOTUxLi44Njg3ZjE3Y2JlNWFkYyAxMDA2NDRcbi0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuY1xuQEAgLTQ2MCw3ICYjNDM7NDYwLDcgQEAgYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4mIzQzO1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcbkBAIC0yNyw3ICYjNDM7MjcsNyBAQCB2b2lkIGhhbmRsZV9zeXNjYWxsKHN0cnVjdCB1bWxfcHRfcmVncyAqcilcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBEbyB0aGUgc2VjY29tcCBjaGVjayBhZnRlciBwdHJhY2U7IGZhaWx1cmVzIHNob3VsZCBiZSBmYXN0LiAqL1xuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbiYjNDM7XHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRzeXNjYWxsID0gVVBUX1NZU0NBTExfTlIocik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbmluZGV4IGVhMzZkZTlmYTg2NDFkLi42YWVkMzk4N2I5Zjk2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcbkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIFx0cmVncy1cdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcbiBcdHJlZ3MtXHUwMDNlYXggPSAtRU5PU1lTO1xuIFx0dG1wID0gc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0aWYgKCghdG1wIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZW9yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy1cdTAwM2VpcCAhPSBhZGRyZXNzKSB7XG4mIzQzO1x0aWYgKCh0bXAgXHUwMDI2XHUwMDI2IHJlZ3MtXHUwMDNlb3JpZ19heCAhPSBzeXNjYWxsX25yKSB8fCByZWdzLVx1MDAzZWlwICE9IGFkZHJlc3MpIHtcbiBcdFx0d2Fybl9iYWRfdnN5c2NhbGwoS0VSTl9ERUJVRywgcmVncyxcbiBcdFx0XHRcdCAgXCYjMzQ7c2VjY29tcCB0cmllZCB0byBjaGFuZ2Ugc3lzY2FsbCBuciBvciBpcFwmIzM0Oyk7XG4gXHRcdGZvcmNlX2V4aXRfc2lnKFNJR1NZUyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXG5pbmRleCBiODBkNTRiMmVhMzRlNi4uZWY3OGZjZDMxOGZmY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTU1Myw4ICYjNDM7NTUzLDcgQEAgaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKHJlZ3MtXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8XG4tXHQgICAgc2VjdXJlX2NvbXB1dGluZygpID09IC0xKSB7XG4mIzQzO1x0aWYgKHJlZ3MtXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8ICFzZWN1cmVfY29tcHV0aW5nKCkpIHtcbiBcdFx0ZG9fc3lzY2FsbF90cmFjZV9sZWF2ZShyZWdzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaCBiL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbmluZGV4IDQxNmEzMzUyMjYxZmU4Li4zZjY2MzIwZTQ2ZDMzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcbkBAIC0xMDAsOSAmIzQzOzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqL1xuIFx0aWYgKHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19TRUNDT01QKSB7XG4tXHRcdHJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0XHRpZiAocmV0ID09IC0xTClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCFfX3NlY3VyZV9jb21wdXRpbmcoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xTDtcbiBcdH1cbiBcbiBcdC8qIEVpdGhlciBvZiB0aGUgYWJvdmUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSBzeXNjYWxsIG51bWJlciAqL1xuQEAgLTExMyw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcbiBcbiBcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XG4gXG4tXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xuJiM0MztcdHJldHVybiBzeXNjYWxsO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaCBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oXG5pbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcbkBAIC0yMiwxNCAmIzQzOzIyLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjY29tcC5oXHUwMDNlXG4gXG4tZXh0ZXJuIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7XG4mIzQzO2V4dGVybiBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNlY3VyZV9jb21wdXRpbmcodm9pZClcbiB7XG4gXHRpZiAodW5saWtlbHkodGVzdF9zeXNjYWxsX3dvcmsoU0VDQ09NUCkpKVxuIFx0XHRyZXR1cm4gIF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4gZXh0ZXJuIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCk7XG5AQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWNjb21wX21vZGUoc3RydWN0IHNlY2NvbXAgKnMpXG4gc3RydWN0IHNlY2NvbXBfZGF0YTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCkgeyByZXR1cm47IH1cbiAjZW5kaWZcbi1zdGF0aWMgaW5saW5lIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbiBcbiBzdGF0aWMgaW5saW5lIGxvbmcgcHJjdGxfZ2V0X3NlY2NvbXAodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbmluZGV4IDM4NThhNmZmZGQ1Yzg0Li43M2Q2OWUwMjgwN2Q4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxuIFxuJiM0Mztib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4gaW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbiBcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciBfX3VzZXIgKnNlbGVjdG9yKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcbmluZGV4IGQ4OWRmZmNjMmQ2NDI5Li5hY2Y1NDU3NzRkMzcyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jXG5AQCAtMzIsNiAmIzQzOzMyLDExIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJfc2lnc3lzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0Zm9yY2Vfc2lnX2luZm8oXHUwMDI2aW5mbyk7XG4gfVxuIFxuJiM0Mztib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCAqc2QgPSBcdTAwMjZjdXJyZW50LVx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NlY2NvbXAuYyBiL2tlcm5lbC9zZWNjb21wLmNcbmluZGV4IDA2NjkwOTM5M2MzOGY1Li4xZmVjNmVmZWRhYjYyNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zZWNjb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zZWNjb21wLmNcbkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG4gXHRlbHNlXG4gXHRcdEJVRygpO1xuIH1cbi1pbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4mIzQzO2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4ge1xuIFx0aW50IHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbiBcbkBAIC0xMjU2LDcgJiM0MzsxMjU2LDcgQEAgc3RhdGljIGludCBzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKGludCB0aGlzX3N5c2NhbGwsXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4mIzQzO3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIHtcbiBcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XG4gXHRzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkO1xuQEAgLTEyOTQsNyAmIzQzOzEyOTQsNyBAQCBzdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIFx0Y2FzZSBTRUNDT01QX1JFVF9UUkFDRTpcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi9cbiBcdFx0aWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqL1xuIFx0XHRpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkge1xuQEAgLTEzMzAsMTkgJiM0MzsxMzMwLDE5IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRcdCAqIGEgc2tpcCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXBvcnRlZC5cbiBcdFx0ICovXG4gXHRcdGlmIChfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgdHJ1ZSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XG4gXHRcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFx1MDAyNnNkKSlcbiBcdFx0XHRnb3RvIHNraXA7XG4gXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0xPRzpcbiBcdFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIHRydWUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBTRUNDT01QX1JFVF9BTExPVzpcbiBcdFx0LypcbkBAIC0xMzUwLDcgJiM0MzsxMzUwLDcgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogdGhpcyBhY3Rpb24gc2luY2UgU0VDQ09NUF9SRVRfQUxMT1cgaXMgdGhlIHN0YXJ0aW5nXG4gXHRcdCAqIHN0YXRlIGluIHNlY2NvbXBfcnVuX2ZpbHRlcnMoKS5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfVEhSRUFEOlxuIFx0Y2FzZSBTRUNDT01QX1JFVF9LSUxMX1BST0NFU1M6XG5AQCAtMTM2Nyw0NiAmIzQzOzEzNjcsNDYgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19leGl0KFNJR1NZUyk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuIFx0fVxuIFxuIFx0dW5yZWFjaGFibGUoKTtcbiBcbiBza2lwOlxuIFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtXHUwMDNlbG9nIDogZmFsc2UpO1xuLVx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuJiM0MztzdGF0aWMgYm9vbCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiB7XG4gXHRCVUcoKTtcbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbiYjNDM7Ym9vbCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbiB7XG4gXHRpbnQgbW9kZSA9IGN1cnJlbnQtXHUwMDNlc2VjY29tcC5tb2RlO1xuIFx0aW50IHRoaXNfc3lzY2FsbDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlcHRyYWNlIFx1MDAyNiBQVF9TVVNQRU5EX1NFQ0NPTVApKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0dGhpc19zeXNjYWxsID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgY3VycmVudF9wdF9yZWdzKCkpO1xuIFxuIFx0c3dpdGNoIChtb2RlKSB7XG4gXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XG4gXHRcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0ZJTFRFUjpcbiBcdFx0cmV0dXJuIF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCBmYWxzZSk7XG4gXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0ZG9fZXhpdChTSUdLSUxMKTtcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0QlVHKCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDQ09NUCYjMzQ7LAogICAgJiMzNDtTRUNDT01QX0ZJTFRFUiYjMzQ7LAogICAgJiMzNDtDT01QQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4mIzM0OywKICAgICYjMzQ7dXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAmIzM0OywKICAgICYjMzQ7dXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIGFybTY0IHRvIHVzZSB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGZvciBzeXN0ZW0gY2FsbHMsIHJlcGxhY2luZyBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgd2l0aCBnZW5lcmljIGhvb2tzLiBJdCBhbHNvIG1vZGlmaWVzIHNlY3VyZV9jb21wdXRpbmcoKSB0cmVlLXdpZGUgdG8gcmV0dXJuIGEgYm9vbGVhbi4gVGhpcyBpcyBhIG1ham9yIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c2NhbGwgcGF0aCBvbiBhcm02NCBhbmQgc2VjY29tcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGFybTY0LXNwZWNpZmljIGdlbmVyaWMgZW50cnkgaG9va3MgKGUuZy4sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybikgYW5kIHB0cmFjZSBzaW5nbGUtc3RlcCB0b2dnbGluZyB3aGljaCB3YXMgbW9kaWZpZWQgdG8gaW50ZXJhY3Qgd2l0aCBnZW5lcmljIGVudHJ5LiBTRUNDT01QIGFuZCBDT01QQVQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIHNlY2NvbXAgbG9naWMgYW5kIGNvbXBhdCB2ZHNvIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDM2NjlmOTQyZWI1M2VkZTBmOTIxNGRlMzZlOGNmNDNiMDE4OTg5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDE1OjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYwppbmRleCAwNjg3NzYwZWE0NjY5OC4uMjdkOTg0N2IxMDgyMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpCiAJICogSWYgdGhpcyBmYWlscywgc2VjY29tcCBtYXkgYWxyZWFkeSBoYXZlIHNldCB1cCB0aGUgcmV0dXJuIHZhbHVlCiAJICogKGUuZy4gU0VDQ09NUF9SRVRfRVJSTk8gLyBUUkFDRSkuCiAJICovCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkgewomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkgewogCQlpZiAocmVncy0mZ3Q7cjE5ID09IDAgJmFtcDsmYW1wOyByZWdzLSZndDtyMCA9PSAodW5zaWduZWQgbG9uZyktMSkKIAkJCXN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTsKIAkJc3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IDc5NTFiMmMwNmZlYzYwLi41MjEwNzQ1NzI1Y2E3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtODU1LDcgJiM0Mzs4NTUsNyBAQCBhc21saW5rYWdlIGludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCiAJLyogRG8gc2VjY29tcCBhZnRlciBwdHJhY2U7IHN5c2NhbGwgbWF5IGhhdmUgY2hhbmdlZC4gKi8KICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKICNlbHNlCiAJLyogWFhYOiByZW1vdmUgdGhpcyBvbmNlIE9BQkkgZ2V0cyBmaXhlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi5hZWE2ODZkY2UzZDVhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMTI4LDkgJiM0MzsxMjgsOSBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgR0VORVJJQ19DUFVfREVWSUNFUwogCXNlbGVjdCBHRU5FUklDX0NQVV9WVUxORVJBQklMSVRJRVMKIAlzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQCiYjNDM7CXNlbGVjdCBHRU5FUklDX0VOVFJZCiAJc2VsZWN0IEdFTkVSSUNfSURMRV9QT0xMX1NFVFVQCiAJc2VsZWN0IEdFTkVSSUNfSU9SRU1BUAotCXNlbGVjdCBHRU5FUklDX0lSUV9FTlRSWQogCXNlbGVjdCBHRU5FUklDX0lSUV9JUEkKIAlzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRAogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZDI3NzlkNjA0YzdiZTIuLmY0M2Q0ZGVhOTE2YTViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VsZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTE4NSw2ICYjNDM7MTg1LDcgQEAgZG8gewkJCQkJCQkJCVwKIHN0cnVjdCBsaW51eF9iaW5wcm07CiBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCSAgICAgICBpbnQgdXNlc19pbnRlcnApOwomIzQzO2V4dGVybiBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qIDFHQiBvZiBWQSAqLwogI2lmZGVmIENPTkZJR19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oCmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oCkBAIC0zLDE0ICYjNDM7MywyMSBAQAogI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9ICiAjZGVmaW5lIF9BU01fQVJNNjRfRU5UUllfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aHJlYWRfaW5mby5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9kYWlmZmxhZ3MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZnBzaW1kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL210ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zdGFja3RyYWNlLmgmZ3Q7CiAKJiM0MztlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7CiYjNDM7CVBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCwKJiM0MzsJUFRSQUNFX1NZU0NBTExfRVhJVCwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpCiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCkBAIC01NCw0ICYjNDM7NjEsNzMgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWQodm9pZCkKIAogI2RlZmluZSBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWQKIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiYjNDM7CQkJCQkJICAgICBlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciBkaXIsCiYjNDM7CQkJCQkJICAgICBpbnQgKnJlZ25vKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGhhdmUgc29tZSBBQkkgd2VpcmRuZXNzIGhlcmUgaW4gdGhlIHdheSB0aGF0IHdlIGhhbmRsZSBzeXNjYWxsCiYjNDM7CSAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlbgomIzQzOwkgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbAomIzQzOwkgKiBwdXJwb3NlIHJlZ2lzdGVyIChpcC9yMTIgZm9yIEFBcmNoMzIsIHg3IGZvciBBQXJjaDY0KSBpbiB0aGUgdHJhY2VlCiYjNDM7CSAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OgomIzQzOwkgKgomIzQzOwkgKiAtIEFueSB3cml0ZXMgYnkgdGhlIHRyYWNlciB0byB0aGlzIHJlZ2lzdGVyIGR1cmluZyB0aGUgc3RvcCBhcmUKJiM0MzsJICogICBpZ25vcmVkL2Rpc2NhcmRlZC4KJiM0MzsJICoKJiM0MzsJICogLSBUaGUgYWN0dWFsIHZhbHVlIG9mIHRoZSByZWdpc3RlciBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyB0aGUgc3RvcCwKJiM0MzsJICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLgomIzQzOwkgKgomIzQzOwkgKiAtIFN5c2NhbGwgc3RvcHMgYmVoYXZlIGRpZmZlcmVudGx5IHRvIHNlY2NvbXAgYW5kIHBzZXVkby1zdGVwIHRyYXBzCiYjNDM7CSAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS4KJiM0MzsJICovCiYjNDM7CSpyZWdubyA9IChpc19jb21wYXRfdGFzaygpID8gMTIgOiA3KTsKJiM0MzsJc2F2ZWRfcmVnID0gcmVncy0mZ3Q7cmVnc1sqcmVnbm9dOwomIzQzOwlyZWdzLSZndDtyZWdzWypyZWdub10gPSBkaXI7CiYjNDM7CiYjNDM7CXJldHVybiBzYXZlZF9yZWc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CWludCByZWdubywgcmV0OwomIzQzOwomIzQzOwlzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsICZhbXA7cmVnbm8pOwomIzQzOwlyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmb3JnZXRfc3lzY2FsbChyZWdzKTsKJiM0MzsJcmVncy0mZ3Q7cmVnc1tyZWdub10gPSBzYXZlZF9yZWc7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKJiM0MzsJCQkJCQkJICAgIGludCBzdGVwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7CiYjNDM7CWludCByZWdubzsKJiM0MzsKJiM0MzsJc2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsICZhbXA7cmVnbm8pOwomIzQzOwlpZiAoIXN0ZXApIHsKJiM0MzsJCXB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDApOwomIzQzOwkJcmVncy0mZ3Q7cmVnc1tyZWdub10gPSBzYXZlZF9yZWc7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZWdzLSZndDtyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dAomIzQzOwkJICogdHJhY2VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHJlZ2lzdGVycyBtYXkgaGF2ZSByZXdvdW5kIHRoZQomIzQzOwkJICogc3RhdGUgbWFjaGluZS4KJiM0MzsJCSAqLwomIzQzOwkJcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQKJiM0MzsKICNlbmRpZiAvKiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYXVkaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwogCiB0eXBlZGVmIGxvbmcgKCpzeXNjYWxsX2ZuX3QpKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIApAQCAtMTIwLDcgJiM0MzsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAlyZXR1cm4gQVVESVRfQVJDSF9BQVJDSDY0OwogfQogCi1pbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KICNlbmRpZgkvKiBfX0FTTV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA1ZDdmZTNlMTUzYzg1MC4uM2Y2MjFiYTBmOTYxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIHN0cnVjdCB0aHJlYWRfaW5mbyB7CiAJdTY0CQkJbXBhbV9wYXJ0aWRfcG1nOwogI2VuZGlmCiAJdTMyCQkJY3B1OwomIzQzOwl1bnNpZ25lZCBsb25nCQlzeXNjYWxsX3dvcms7ICAgLyogU1lTQ0FMTF9XT1JLXyBmbGFncyAqLwogfTsKIAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKQlcCkBAIC02OCwxMSAmIzQzOzY5LDYgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpOwogI2RlZmluZSBUSUZfVVBST0JFCQk1CS8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi8KICNkZWZpbmUgVElGX01URV9BU1lOQ19GQVVMVAk2CS8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovCiAjZGVmaW5lIFRJRl9OT1RJRllfU0lHTkFMCTcJLyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJOAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk5CS8qIHN5c2NhbGwgYXVkaXRpbmcgKi8KLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVAkxMAkvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqLwotI2RlZmluZSBUSUZfU0VDQ09NUAkJMTEJLyogc3lzY2FsbCBzZWN1cmUgY29tcHV0aW5nICovCi0jZGVmaW5lIFRJRl9TWVNDQUxMX0VNVQkJMTIJLyogc3lzY2FsbCBlbXVsYXRpb24gYWN0aXZlICovCiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HCTEzCS8qIHBlbmRpbmcgbGl2ZSBwYXRjaGluZyB1cGRhdGUgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTgJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKQEAgLTk0LDI0ICYjNDM7OTAsMTQgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpOwogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRF9MQVpZCSgxICZsdDsmbHQ7IFRJRl9ORUVEX1JFU0NIRURfTEFaWSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxICZsdDsmbHQ7IFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX0ZPUkVJR05fRlBTVEFURQkoMSAmbHQ7Jmx0OyBUSUZfRk9SRUlHTl9GUFNUQVRFKQotI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgJmx0OyZsdDsgVElGX1NZU0NBTExfVFJBQ0UpCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSAmbHQ7Jmx0OyBUSUZfU1lTQ0FMTF9BVURJVCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQJKDEgJmx0OyZsdDsgVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKLSNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMSAmbHQ7Jmx0OyBUSUZfU0VDQ09NUCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVQkoMSAmbHQ7Jmx0OyBUSUZfU1lTQ0FMTF9FTVUpCiAjZGVmaW5lIF9USUZfUEFUQ0hfUEVORElORwkoMSAmbHQ7Jmx0OyBUSUZfUEFUQ0hfUEVORElORykKICNkZWZpbmUgX1RJRl9VUFJPQkUJCSgxICZsdDsmbHQ7IFRJRl9VUFJPQkUpCi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgJmx0OyZsdDsgVElGX1NJTkdMRVNURVApCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxICZsdDsmbHQ7IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9TVkUJCSgxICZsdDsmbHQ7IFRJRl9TVkUpCiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUCSgxICZsdDsmbHQ7IFRJRl9NVEVfQVNZTkNfRkFVTFQpCiAjZGVmaW5lIF9USUZfTk9USUZZX1NJR05BTAkoMSAmbHQ7Jmx0OyBUSUZfTk9USUZZX1NJR05BTCkKICNkZWZpbmUgX1RJRl9UU0NfU0lHU0VHVgkoMSAmbHQ7Jmx0OyBUSUZfVFNDX1NJR1NFR1YpCiAKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1dPUksJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFwKLQkJCQkgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQgfCBfVElGX1NFQ0NPTVAgfCBcCi0JCQkJIF9USUZfU1lTQ0FMTF9FTVUpCi0KICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0sKICNkZWZpbmUgSU5JVF9TQ1MJCQkJCQkJXAogCS5zY3NfYmFzZQk9IGluaXRfc2hhZG93X2NhbGxfc3RhY2ssCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMKaW5kZXggMjkzMDc2NDJmNGM5MDQuLmM1MzY4MzgzOTE1NTM2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMKQEAgLTM4NSwxMSAmIzQzOzM4NSwxOSBAQCB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAogCWlmICghdGVzdF9hbmRfc2V0X3RpX3RocmVhZF9mbGFnKHRpLCBUSUZfU0lOR0xFU1RFUCkpCiAJCXNldF9yZWdzX3Nwc3Jfc3ModGFza19wdF9yZWdzKHRhc2spKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgY29kZSB0cmlnZ2VycyBhIHRyYXAgb25jZSBzdGVwcGluZwomIzQzOwkgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sCiYjNDM7CSAqIGFzIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZG9lcyBub3QgbmF0aXZlbHkgY2hlY2sgZm9yIFRJRl9TSU5HTEVTVEVQLgomIzQzOwkgKi8KJiM0MzsJc2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTsKIH0KIE5PS1BST0JFX1NZTUJPTCh1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCk7CiAKIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAljbGVhcl90aV90aHJlYWRfZmxhZyh0YXNrX3RocmVhZF9pbmZvKHRhc2spLCBUSUZfU0lOR0xFU1RFUCk7CiYjNDM7CWNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTsKIH0KIE5PS1BST0JFX1NZTUJPTCh1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ZDA4NTk4ZTI4OTFkMy4uNjFhNjY4NjgyOTQ3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCkBAIC04LDcgJiM0Mzs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLgogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9hdWRpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwpAQCAtMTgsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2VjY29tcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpZ25hbC5oJmd0OwpAQCAtMjgsNyAmIzQzOzI2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9od19icmVha3BvaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVnc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZWxmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL2NvbXBhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9jcHVmZWF0dXJlLmgmZ3Q7CkBAIC0zOCwxMyAmIzQzOzM1LDkgQEAKICNpbmNsdWRlICZsdDthc20vbXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3BvaW50ZXJfYXV0aC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zdGFja3RyYWNlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNtL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICZsdDthc20vdHJhcHMuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3lzdGVtX21pc2MuaCZndDsKIAotI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3N5c2NhbGxzLmgmZ3Q7Ci0KIHN0cnVjdCBwdF9yZWdzX29mZnNldCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgb2Zmc2V0OwpAQCAtMjMzOSwxMTQgJiM0MzsyMzMyLDYgQEAgbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsCiAJcmV0dXJuIHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIH0KIAotZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgewotCVBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCwKLQlQVFJBQ0VfU1lTQ0FMTF9FWElULAotfTsKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHB0cmFjZV9zYXZlX3JlZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJCSAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLAotCQkJCQkJICAgICBpbnQgKnJlZ25vKQotewotCXVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnOwotCi0JLyoKLQkgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbAotCSAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlbgotCSAqIHNpZ25hbGxlZCBmcm9tIHN5c2NhbGwgZW50cnkgb3Igc3lzY2FsbCBleGl0IGJ5IGNsb2JiZXJpbmcgYSBnZW5lcmFsCi0JICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZQotCSAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OgotCSAqCi0JICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlCi0JICogICBpZ25vcmVkL2Rpc2NhcmRlZC4KLQkgKgotCSAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsCi0JICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLgotCSAqCi0JICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwcwotCSAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS4KLQkgKi8KLQkqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7Ci0Jc2F2ZWRfcmVnID0gcmVncy0mZ3Q7cmVnc1sqcmVnbm9dOwotCXJlZ3MtJmd0O3JlZ3NbKnJlZ25vXSA9IGRpcjsKLQotCXJldHVybiBzYXZlZF9yZWc7Ci19Ci0KLXN0YXRpYyBpbnQgcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7Ci0JaW50IHJlZ25vLCByZXQ7Ci0KLQlzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsICZhbXA7cmVnbm8pOwotCXJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTsKLQlpZiAocmV0KQotCQlmb3JnZXRfc3lzY2FsbChyZWdzKTsKLQlyZWdzLSZndDtyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZzsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcG9ydF9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7Ci0JaW50IHJlZ25vOwotCi0Jc2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsICZhbXA7cmVnbm8pOwotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHsKLQkJcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7Ci0JCXJlZ3MtJmd0O3JlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnOwotCX0gZWxzZSB7Ci0JCXJlZ3MtJmd0O3JlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnOwotCi0JCS8qCi0JCSAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0Ci0JCSAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGUKLQkJICogc3RhdGUgbWFjaGluZS4KLQkJICovCi0JCXB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpOwotCX0KLX0KLQotaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0JaW50IHJldDsKLQotCWlmIChmbGFncyAmYW1wOyAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHsKLQkJcmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7Ci0JCWlmIChyZXQgfHwgKGZsYWdzICZhbXA7IF9USUZfU1lTQ0FMTF9FTVUpKQotCQkJcmV0dXJuIE5PX1NZU0NBTEw7Ci0JfQotCi0JLyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQotCQlyZXR1cm4gTk9fU1lTQ0FMTDsKLQotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKQotCQl0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy0mZ3Q7c3lzY2FsbG5vKTsKLQotCWF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy0mZ3Q7c3lzY2FsbG5vLCByZWdzLSZndDtvcmlnX3gwLCByZWdzLSZndDtyZWdzWzFdLAotCQkJICAgIHJlZ3MtJmd0O3JlZ3NbMl0sIHJlZ3MtJmd0O3JlZ3NbM10pOwotCi0JcmV0dXJuIHJlZ3MtJmd0O3N5c2NhbGxubzsKLX0KLQotdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0KLQlhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7Ci0KLQlpZiAoZmxhZ3MgJmFtcDsgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCi0JCXRyYWNlX3N5c19leGl0KHJlZ3MsIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKSk7Ci0KLQlpZiAoZmxhZ3MgJmFtcDsgKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU0lOR0xFU1RFUCkpCi0JCXJlcG9ydF9zeXNjYWxsX2V4aXQocmVncyk7Ci0KLQlyc2VxX3N5c2NhbGwocmVncyk7Ci19Ci0KIC8qCiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS4KICAqIFdlIHBlcm1pdCB1c2Vyc3BhY2UgdG8gc2V0IFNTQlMgKEFBcmNoNjQgYml0IDEyLCBBQXJjaDMyIGJpdCAyMykgd2hpY2ggaXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtOCw4ICYjNDM7OCw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lycS1lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mcmVlemVyLmgmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMzU4ZGRmYmYxNDAxYWMuLmUwYTk4ZmFjM2I4NTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGV4dF90cmFja2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cmFjZS5oJmd0OwpAQCAtNTQsMTUgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sCiAJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIDAsIHJldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfc3lzY2FsbF93b3JrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIHVubGlrZWx5KGZsYWdzICZhbXA7IF9USUZfU1lTQ0FMTF9XT1JLKTsKLX0KLQotc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsCi0JCQkgICBjb25zdCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF90YWJsZVtdKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19uciwKJiM0MzsJCQkJCSAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgd29yazsKIAogCXJlZ3MtJmd0O29yaWdfeDAgPSByZWdzLSZndDtyZWdzWzBdOwogCXJlZ3MtJmd0O3N5c2NhbGxubyA9IHNjbm87CkBAIC05NSw3ICYjNDM7OTIsOCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19uciwKIAkJcmV0dXJuOwogCX0KIAotCWlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkgewomIzQzOwl3b3JrID0gUkVBRF9PTkNFKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0mZ3Q7c3lzY2FsbF93b3JrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHdvcmsgJmFtcDsgU1lTQ0FMTF9XT1JLX0VOVEVSKSkgewogCQkvKgogCQkgKiBUaGUgZGUtZmFjdG8gc3RhbmRhcmQgd2F5IHRvIHNraXAgYSBzeXN0ZW0gY2FsbCB1c2luZyBwdHJhY2UKIAkJICogaXMgdG8gc2V0IHRoZSBzeXN0ZW0gY2FsbCB0byAtMSAoTk9fU1lTQ0FMTCkgYW5kIHNldCB4MCB0byBhCkBAIC0xMTMsMjYgJiM0MzsxMTEsMTQgQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsCiAJCSAqLwogCQlpZiAoc2NubyA9PSBOT19TWVNDQUxMKQogCQkJc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApOwotCQlzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTsKJiM0MzsJCXNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspOwogCQlpZiAoc2NubyA9PSBOT19TWVNDQUxMKQogCQkJZ290byB0cmFjZV9leGl0OwogCX0KIAogCWludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTsKLQotCS8qCi0JICogVGhlIHRyYWNpbmcgc3RhdHVzIG1heSBoYXZlIGNoYW5nZWQgdW5kZXIgb3VyIGZlZXQsIHNvIHdlIGhhdmUgdG8KLQkgKiBjaGVjayBhZ2Fpbi4gSG93ZXZlciwgaWYgd2Ugd2VyZSB0cmFjaW5nIGVudHJ5LCB0aGVuIHdlIGFsd2F5cyB0cmFjZQotCSAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuCi0JICovCi0JaWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkgewotCQlmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7Ci0JCWlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9USUZfU0lOR0xFU1RFUCkpCi0JCQlyZXR1cm47Ci0JfQotCiB0cmFjZV9leGl0OgotCXN5c2NhbGxfdHJhY2VfZXhpdChyZWdzKTsKJiM0MzsJc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpOwogfQogCiB2b2lkIGRvX2VsMF9zdmMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMKaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jCkBAIC0zNDMsMyAmIzQzOzM0MywxOSBAQCBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycCkKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNpZ3RyYW1wOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQ09NUEFUCiYjNDM7CWlmIChpc19jb21wYXRfdGFzaygpKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHNpZ3BhZ2UgPSAodW5zaWduZWQgbG9uZyljdXJyZW50LSZndDttbS0mZ3Q7Y29udGV4dC5zaWdwYWdlOwomIzQzOwomIzQzOwkJcmV0dXJuIHJlZ3MtJmd0O3BjICZndDs9IHNpZ3BhZ2UgJmFtcDsmYW1wOyByZWdzLSZndDtwYyAmbHQ7IChzaWdwYWdlICYjNDM7IFBBR0VfU0laRSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsJc2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LSZndDttbS0mZ3Q7Y29udGV4dC52ZHNvLCBzaWd0cmFtcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdzLSZndDtwYyA9PSAoc2lndHJhbXAgJiM0MzsgOCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNmJiNjg1YTI2NDZiNTYuLjExYzVlZmY0MWU5ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJaWYgKHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKSkKIAkJCXJldHVybiAtMTsKIAotCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCiYjNDM7CWlmICghc2VjdXJlX2NvbXB1dGluZygpKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCBkZjhlYTIyM2M3N2IxYS4uOTQ2ODg2Nzk0Y2VkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTg1LDkgJiM0Mzs4NSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAjZW5kaWYJLyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggY2ZhMmRmMjRlY2VkMTIuLmQyNDExNDA0YjlkZmNmIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKQEAgLTI4MSw3ICYjNDM7MjgxLDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcih2b2lkKQogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJcmV0ID0gcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHRhc2tfcHRfcmVncyhjdXJyZW50KSk7CiAKLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0xMzI4LDcgJiM0MzsxMzI4LDcgQEAgYXNtbGlua2FnZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCX0KIAogCS8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJcmV0dXJuIC0xOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggODM0ZmNjNGY3YjU0M2IuLjRiM2M1MmVkNmU5ZDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTEzOSw5ICYjNDM7MTM5LDQgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJZWxzZQogCQlyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDsKIH0KLQotc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlyZXR1cm4gZmFsc2U7Ci19CiAjZW5kaWYJLyogX0FTTV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggODA2N2U2NjZhNGNhNjguLjk4N2M5YTc4ODA2Zjc4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMTEyLDExICYjNDM7MTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbCkKIAlyZWdzLSZndDthMCA9IGZuKHJlZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBmYWxzZTsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9mbHVzaF9pY2FjaGUodWludHB0cl90LCB1aW50cHRyX3QsIHVpbnRwdHJfdCk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfaHdwcm9iZShzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqLCBzaXplX3QsIHNpemVfdCwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDQyNzFlNDE2OWY0NWI2Li41ZjMxMGNhYWQxZmNlYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC04OSwxMSAmIzQzOzg5LDYgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAJcmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAjZGVmaW5lIFNZU0NBTExfRk1UXzAKICNkZWZpbmUgU1lTQ0FMTF9GTVRfMSAsICYjMzQ7MCYjMzQ7IChyMikKICNkZWZpbmUgU1lTQ0FMTF9GTVRfMiAsICYjMzQ7ZCYjMzQ7IChyMykgU1lTQ0FMTF9GTVRfMQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAwNmY3NjVkNzFhMjk1MS4uODY4N2YxN2NiZTVhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCkBAIC00NjAsNyAmIzQzOzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSkKJiM0MzsJaWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpCiAJCXJldHVybiAtMTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmMKaW5kZXggYmE3NDk0ZjliZmU0MTIuLjkxNmNkN2FjY2VhZmRmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYwpAQCAtMjcsNyAmIzQzOzI3LDcgQEAgdm9pZCBoYW5kbGVfc3lzY2FsbChzdHJ1Y3QgdW1sX3B0X3JlZ3MgKnIpCiAJCWdvdG8gb3V0OwogCiAJLyogRG8gdGhlIHNlY2NvbXAgY2hlY2sgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi8KLQlpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKQomIzQzOwlpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSkKIAkJZ290byBvdXQ7CiAKIAlzeXNjYWxsID0gVVBUX1NZU0NBTExfTlIocik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYwppbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYwpAQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgYm9vbCBfX2VtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIAlyZWdzLSZndDtvcmlnX2F4ID0gc3lzY2FsbF9ucjsKIAlyZWdzLSZndDtheCA9IC1FTk9TWVM7CiAJdG1wID0gc2VjdXJlX2NvbXB1dGluZygpOwotCWlmICgoIXRtcCAmYW1wOyZhbXA7IHJlZ3MtJmd0O29yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy0mZ3Q7aXAgIT0gYWRkcmVzcykgewomIzQzOwlpZiAoKHRtcCAmYW1wOyZhbXA7IHJlZ3MtJmd0O29yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy0mZ3Q7aXAgIT0gYWRkcmVzcykgewogCQl3YXJuX2JhZF92c3lzY2FsbChLRVJOX0RFQlVHLCByZWdzLAogCQkJCSAgJiMzNDtzZWNjb21wIHRyaWVkIHRvIGNoYW5nZSBzeXNjYWxsIG5yIG9yIGlwJiMzNDspOwogCQlmb3JjZV9leGl0X3NpZyhTSUdTWVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCmluZGV4IGI4MGQ1NGIyZWEzNGU2Li5lZjc4ZmNkMzE4ZmZjYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTUzLDggJiM0Mzs1NTMsNyBAQCBpbnQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHJlZ3MtJmd0O3N5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fAotCSAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHsKJiM0MzsJaWYgKHJlZ3MtJmd0O3N5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7CiAJCWRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oCmluZGV4IDQxNmEzMzUyMjYxZmU4Li4zZjY2MzIwZTQ2ZDMzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oCkBAIC0xMDAsOSAmIzQzOzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsCiAKIAkvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqLwogCWlmICh3b3JrICZhbXA7IFNZU0NBTExfV09SS19TRUNDT01QKSB7Ci0JCXJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpOwotCQlpZiAocmV0ID09IC0xTCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoIV9fc2VjdXJlX2NvbXB1dGluZygpKQomIzQzOwkJCXJldHVybiAtMUw7CiAJfQogCiAJLyogRWl0aGVyIG9mIHRoZSBhYm92ZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHN5c2NhbGwgbnVtYmVyICovCkBAIC0xMTMsNyAmIzQzOzExMiw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsCiAKIAlzeXNjYWxsX2VudGVyX2F1ZGl0KHJlZ3MsIHN5c2NhbGwpOwogCi0JcmV0dXJuIHJldCA/IDogc3lzY2FsbDsKJiM0MzsJcmV0dXJuIHN5c2NhbGw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmggYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaAppbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCkBAIC0yMiwxNCAmIzQzOzIyLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY2NvbXAuaCZndDsKIAotZXh0ZXJuIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7CiYjNDM7ZXh0ZXJuIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgotc3RhdGljIGlubGluZSBpbnQgc2VjdXJlX2NvbXB1dGluZyh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpCiB7CiAJaWYgKHVubGlrZWx5KHRlc3Rfc3lzY2FsbF93b3JrKFNFQ0NPTVApKSkKIAkJcmV0dXJuICBfX3NlY3VyZV9jb21wdXRpbmcoKTsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQogZXh0ZXJuIHZvaWQgc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QoaW50IHRoaXNfc3lzY2FsbCk7CkBAIC01MCwxMSAmIzQzOzUwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY2NvbXBfbW9kZShzdHJ1Y3Qgc2VjY29tcCAqcykKIHN0cnVjdCBzZWNjb21wX2RhdGE7CiAKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIDA7IH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpIHsgcmV0dXJuOyB9CiAjZW5kaWYKLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBwcmN0bF9nZXRfc2VjY29tcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgKaW5kZXggMzg1OGE2ZmZkZDVjODQuLjczZDY5ZTAyODA3ZDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWQogCiYjNDM7Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogaW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBjaGFyIF9fdXNlciAqc2VsZWN0b3IpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMKaW5kZXggZDg5ZGZmY2MyZDY0MjkuLmFjZjU0NTc3NGQzNzIwIDEwMDY0NAotLS0gYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jCkBAIC0zMiw2ICYjNDM7MzIsMTEgQEAgc3RhdGljIHZvaWQgdHJpZ2dlcl9zaWdzeXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJZm9yY2Vfc2lnX2luZm8oJmFtcDtpbmZvKTsKIH0KIAomIzQzO2Jvb2wgX193ZWFrIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9ICZhbXA7Y3VycmVudC0mZ3Q7c3lzY2FsbF9kaXNwYXRjaDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zZWNjb21wLmMgYi9rZXJuZWwvc2VjY29tcC5jCmluZGV4IDA2NjkwOTM5M2MzOGY1Li4xZmVjNmVmZWRhYjYyNyAxMDA2NDQKLS0tIGEva2VybmVsL3NlY2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2VjY29tcC5jCkBAIC0xMTAwLDEyICYjNDM7MTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpCiAJZWxzZQogCQlCVUcoKTsKIH0KLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkKJiM0Mztib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKQogewogCWludCB0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7CiAKIAlzZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpOwotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KICNlbHNlCiAKQEAgLTEyNTYsNyAmIzQzOzEyNTYsNyBAQCBzdGF0aWMgaW50IHNlY2NvbXBfZG9fdXNlcl9ub3RpZmljYXRpb24oaW50IHRoaXNfc3lzY2FsbCwKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiYjNDM7c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiB7CiAJdTMyIGZpbHRlcl9yZXQsIGFjdGlvbjsKIAlzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkOwpAQCAtMTI5NCw3ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJY2FzZSBTRUNDT01QX1JFVF9UUkFDRToKIAkJLyogV2UmIzM5O3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi8KIAkJaWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCi0JCQlyZXR1cm4gMDsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAogCQkvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqLwogCQlpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkgewpAQCAtMTMzMCwxOSAmIzQzOzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSkKIAkJICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogCQkgKi8KIAkJaWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAogCWNhc2UgU0VDQ09NUF9SRVRfVVNFUl9OT1RJRjoKIAkJaWYgKHNlY2NvbXBfZG9fdXNlcl9ub3RpZmljYXRpb24odGhpc19zeXNjYWxsLCBtYXRjaCwgJmFtcDtzZCkpCiAJCQlnb3RvIHNraXA7CiAKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAogCWNhc2UgU0VDQ09NUF9SRVRfTE9HOgogCQlzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7Ci0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAljYXNlIFNFQ0NPTVBfUkVUX0FMTE9XOgogCQkvKgpAQCAtMTM1MCw3ICYjNDM7MTM1MCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJCSAqIHRoaXMgYWN0aW9uIHNpbmNlIFNFQ0NPTVBfUkVUX0FMTE9XIGlzIHRoZSBzdGFydGluZwogCQkgKiBzdGF0ZSBpbiBzZWNjb21wX3J1bl9maWx0ZXJzKCkuCiAJCSAqLwotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiB0cnVlOwogCiAJY2FzZSBTRUNDT01QX1JFVF9LSUxMX1RIUkVBRDoKIAljYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzoKQEAgLTEzNjcsNDYgJiM0MzsxMzY3LDQ2IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpCiAJCX0gZWxzZSB7CiAJCQlkb19leGl0KFNJR1NZUyk7CiAJCX0KLQkJcmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqLwogCX0KIAogCXVucmVhY2hhYmxlKCk7CiAKIHNraXA6CiAJc2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtJmd0O2xvZyA6IGZhbHNlKTsKLQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKQomIzQzO3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKQogewogCUJVRygpOwogCi0JcmV0dXJuIC0xOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAotaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKQomIzQzO2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpCiB7CiAJaW50IG1vZGUgPSBjdXJyZW50LSZndDtzZWNjb21wLm1vZGU7CiAJaW50IHRoaXNfc3lzY2FsbDsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkUpICZhbXA7JmFtcDsKIAkgICAgdW5saWtlbHkoY3VycmVudC0mZ3Q7cHRyYWNlICZhbXA7IFBUX1NVU1BFTkRfU0VDQ09NUCkpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAl0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6CiAJCV9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi8KLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAljYXNlIFNFQ0NPTVBfTU9ERV9GSUxURVI6CiAJCXJldHVybiBfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgZmFsc2UpOwogCS8qIFN1cnZpdmluZyBTRUNDT01QX1JFVF9LSUxMXyogbXVzdCBiZSBwcm9hY3RpdmVseSBpbXBvc3NpYmxlLiAqLwogCWNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6CiAJCVdBUk5fT05fT05DRSgxKTsKIAkJZG9fZXhpdChTSUdLSUxMKTsKLQkJcmV0dXJuIC0xOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2lnbmlmaWNhbnQgQXJtNjQgU3lzY2FsbCBFbnRyeSBBcmNoaXRlY3R1cmFsIFNoaWZ0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBiaWcgY2hhbmdlcyB0byBob3cgYHNlY3VyZV9jb21wdXRpbmcoKWAgaGFuZGxlcyBzeXNjYWxscyBhbmQgdHJhY2luZyBvbiBhcm02NC4gRmlyc3Qgb2ZmLCBpdCBsb29rcyBsaWtlIGBzZWN1cmVfY29tcHV0aW5nKClgIGlzIG5vdyByZXR1cm5pbmcgYSBgYm9vbGAgaW5zdGVhZCBvZiBhbiBgaW50YC4gQSBgdHJ1ZWAgbWVhbnMgdGhlIHN5c2NhbGwgc2hvdWxkIHByb2NlZWQsIGBmYWxzZWAgbWVhbnMgaXQgZ2V0cyBza2lwcGVkLiBJbnRlcmVzdGluZywgdGhlIG9sZCB3YXkgdXNlZCBgMGAgZm9yIHN1Y2Nlc3MgYW5kIGAtMWAgZm9yIHNraXAuIFNlZW1zIGNsZWFuZXIsIG1vcmUgc2VtYW50aWMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgY2hhbmdlcyB0byBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCBhbmQgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgYXJlIHRoZSBrZXkgaGVyZSwgaXQgbG9va3MgbGlrZSBhcm02NCBpcyBtb3Zpbmcgb3ZlciB0byB0aGUgYEdFTkVSSUNfRU5UUllgIGNvZGUuIEFuZCB5dXAsIHRoZSBgS2NvbmZpZ2AgY29uZmlybXMgaXQgc2VsZWN0cyBgR0VORVJJQ19FTlRSWWAuICBUaGUgYHN5c2NhbGwuY2AgZmlsZSBpcyBub3cgdXNpbmcgYHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yaylgIGFuZCBgc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHJlZ3MpYC4gVGhpcyBpcyBhIGJpZyBhcmNoaXRlY3R1cmFsIHNoaWZ0IGZvciBhcm02NCwgbW92aW5nIHRvIHRoaXMgZ2VuZXJpYyBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBhbmQgYHN5c2NhbGxfdHJhY2VfZXhpdGAgZnJvbSBgYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNgLCBhbmQgYSBidW5jaCBvZiBgVElGX1NZU0NBTExfVFJBQ0VgIGZsYWdzIGZyb20gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaGAgYXJlIGdvbmUsIHJlcGxhY2VkIHdpdGggYHN5c2NhbGxfd29ya2AuICBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AgaXMgc2V0dGluZyBgU1lTQ0FMTF9FWElUX1RSQVBgLiBBbmQsIGBhcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY2Agbm93IGluY2x1ZGVzIGAmbHQ7bGludXgvZW50cnktY29tbW9uLmgmZ3Q7YC4gIFBsdXMsIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuCgpUaGlzIGlzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbWlncmF0aW9uIHRvIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzY2FsbHMgb24gYXJtNjQgaXMgc3Vic3RhbnRpYWwuICBUaGUgd2hvbGUgc3lzY2FsbCBwYXRoIGlzIGJlaW5nIHJld3JpdHRlbi4KCldvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgdG91Y2hpbmcgdGhlIHZlcnkgY29yZSBvZiBzeXNjYWxsIGVudHJ5IGFuZCBleGl0IGZvciBhcm02NC4gVGhpcyB3YXJyYW50cyB0aG9yb3VnaCB0ZXN0aW5nLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJiMzOTtkIHNheSBgZWwwX3N2Y19jb21tb25gIGluIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGlzIGZyb250IGFuZCBjZW50ZXIuIEnigJlsbCBhbHNvIGxvb2sgYXQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaW4gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2Agc2luY2UgdGhlIHZEU08gaXMgYWx3YXlzIGEgc2Vuc2l0aXZlIGFyZWEuIEFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHB0cmFjZSwgbmFtZWx5IGBwdHJhY2Vfc2F2ZV9yZWdgLCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgIGlzIGNyaXRpY2FsLiBUaGVzZSB3aWxsIG5lZWQgYSBjbG9zZSBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsMF9zdmNfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0zOT1zdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTU3LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjU4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy01OS1cdFx0XHRcdFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9MTI0PXZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjEyNjpcdGVsMF9zdmNfY29tbW9uKHJlZ3MsIHJlZ3MtXHUwMDNlcmVnc1s4XSwgX19OUl9zeXNjYWxscywgc3lzX2NhbGxfdGFibGUpO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEyNy19XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTEzMD12b2lkIGRvX2VsMF9zdmNfY29tcGF0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMS17XG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTMyOlx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cdTAwM2VyZWdzWzddLCBfX05SX2NvbXBhdDMyX3N5c2NhbGxzLFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMy1cdFx0ICAgICAgIGNvbXBhdF9zeXNfY2FsbF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBUk02NCBTeXN0ZW0gQ2FsbCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgc3lzdGVtIGNhbGwgcGF0aCBvbiBBUk02NC4gU2luY2UgYGVsMF9zdmNfY29tbW9uYCBpcyBgX19hbHdheXNfaW5saW5lYCwgSSYjMzk7bSBnb2luZyB0byBieXBhc3MgdGhhdCBhbmQgZm9jdXMgZGlyZWN0bHkgb24gdGhlIGZ1bmN0aW9ucyBpdCBjYWxsczogYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgLiBUaG9zZSBhcmUgdGhlIHByaW1lIHN1c3BlY3RzLCBhbG9uZyB3aXRoIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBzaW5jZSB0aGF0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSBzeXNjYWxscyB3b3VsZCBiZSBoYW5kbGVkLgoKSW5pdGlhbGx5LCBJIGFsc28gY29uc2lkZXJlZCBgc3lzY2FsbF90cmFjZV9lbnRlcmAgaW4gYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgYWxzbyBhbiBgX19hbHdheXNfaW5saW5lYCBmdW5jdGlvbi4gVGhlIGdlbmVyaWMgZW50cnkgZnVuY3Rpb25zIGFyZSBgc3lzY2FsbF9lbnRlcl9mcm9tX3VzZXJfbW9kZWAsIGFuZCBgc3lzY2FsbF9leGl0X3RvX3VzZXJfbW9kZWAuCgpHaXZlbiB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgSSB0aGluayB0aGUgZ2VuZXJpYyBvbmVzIGFyZSBub3Qgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBzZWUgd2hhdCB0aG9zZSBpbmxpbmVzIGV4cGFuZCB0by4gU28sIGJhY2sgdG8gYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgLgoKUmlnaHQsIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0IHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZWwwX3N2YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjMtXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTI0OnZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjktI2lmZGVmIENPTkZJR19DT01QQVRcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMzA6dm9pZCBkb19lbDBfc3ZjX2NvbXBhdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODM2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEFSTTY0IFZEU08gZm9yIFNpZ3JldHVybiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBgc2lncmV0dXJuYCBjYWxscywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRFNPIG9uIEFSTTY0LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGludG8gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgY29kZSByZWxhdGVkIHRvIHRoZSBWaXJ0dWFsIER5bmFtaWMgU2hhcmVkIE9iamVjdCBhbmQgdGhlIGtlcm5lbCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZm9yIHN5c2NhbGxzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gbmFtZWQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGEgc3lzY2FsbCBpcyBhIFZEU08tcHJvdmlkZWQgYHNpZ3JldHVybmAgcmF0aGVyIHRoYW4gYSBzdGFuZGFyZCBvbmUuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IGNvbnRleHQgaXMgcmVzdG9yZWQuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBWRFNPIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL3Zkc28uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9MzMzPWludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy0zNDYtXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6MzQ3OmJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTM0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBcm02NCBTaW5nbGUtU3RlcHBpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXItbW9kZSBzaW5nbGUtc3RlcHBpbmcgaXMgZW5hYmxlZCBhbmQgZGlzYWJsZWQgb24gQXJtNjQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBkZWFscyB3aXRoIHRoZSBkZWJ1ZyBtb25pdG9ycywgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbGlrZWx5IGhhbmRsZWQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhcmUgcHJvYmFibHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBhbmQgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGlzIGZlYXR1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM9Mzc2PXZvaWQga2VybmVsX2Zhc3Rmb3J3YXJkX3NpbmdsZV9zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzgxLS8qIHB0cmFjZSBBUEkgKi9cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM6MzgyOnZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYy0zODMte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzk1LX1cbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmM6Mzk2Ok5PS1BST0JFX1NZTUJPTCh1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCk7XG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBzZWNjb21wLmMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgc3RyYWlnaHQgdG8gYGtlcm5lbC9zZWNjb21wLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHBpZWNlczogYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRob3NlIGludGVyYWN0LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgbWFjaGluZXJ5IGhlcmUsIHNlZWluZyBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZG9lcyogc2VjdXJlIGNvbXB1dGluZy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGNoZWNrcyBhcmUgZW5mb3JjZWQsIHdoZXJlIHRoZSBmaWx0ZXJzIGFyZSBpbnN0YWxsZWQsIGFuZCBob3cgdGhlIHN5c2NhbGwgaW50ZXJmYWNlIGlzIG1vZGlmaWVkLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgc2VjdXJpdHkgcG9zdHVyZSwgc28gSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZWN1cmVfY29tcHV0aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NlY2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2VjY29tcC5jPTEwNTY9c3RhdGljIGNvbnN0IGludCBtb2RlMV9zeXNjYWxsc1tdID0ge1xuLS1cbmtlcm5lbC9zZWNjb21wLmMtMTA2Ni1cbmtlcm5lbC9zZWNjb21wLmM6MTA2NzpzdGF0aWMgdm9pZCBfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG5rZXJuZWwvc2VjY29tcC5jLTEwNjgte1xuLS1cbmtlcm5lbC9zZWNjb21wLmM9MTA4OD12b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMDk4LVx0ZWxzZSBpZiAobW9kZSA9PSBTRUNDT01QX01PREVfU1RSSUNUKVxua2VybmVsL3NlY2NvbXAuYzoxMDk5Olx0XHRfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG5rZXJuZWwvc2VjY29tcC5jLTExMDAtXHRlbHNlXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMTAyLX1cbmtlcm5lbC9zZWNjb21wLmM6MTEwMzpib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxua2VybmVsL3NlY2NvbXAuYy0xMTA0LXtcbi0tXG5rZXJuZWwvc2VjY29tcC5jPTEzODA9c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4tLVxua2VybmVsL3NlY2NvbXAuYy0xMzg3LVxua2VybmVsL3NlY2NvbXAuYzoxMzg4OmJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG5rZXJuZWwvc2VjY29tcC5jLTEzODkte1xuLS1cbmtlcm5lbC9zZWNjb21wLmMtMTQwMC1cdGNhc2UgU0VDQ09NUF9NT0RFX1NUUklDVDpcbmtlcm5lbC9zZWNjb21wLmM6MTQwMTpcdFx0X19zZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpOyAgLyogbWF5IGNhbGwgZG9fZXhpdCAqL1xua2VybmVsL3NlY2NvbXAuYy0xNDAyLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgU3lzY2FsbCBEaXNwYXRjaCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gY2FsbCBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCB3b3Jrcy4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBkYXRhIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIGtlcm5lbCBpbnRlcmNlcHRzIGEgc3lzdGVtIGNhbGwgZnJvbSB1c2VyIHNwYWNlIGFuZCBob3cgdGhlIHJpZ2h0IGhhbmRsZXIgaXMgc2VsZWN0ZWQgYW5kIGNhbGxlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2lzdGVyIHBhc3NpbmcsIHByaXZpbGVnZSBsZXZlbCBjaGVja3MsIGFuZCBhbnkgY29udGV4dCBzd2l0Y2hpbmcgdGhhdCBvY2N1cnMgYXQgdGhhdCBwb2ludC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgdGhlcmUsIGFuZCBlbnN1cmUgSSYjMzk7bSB1cCB0byBzcGVlZCBvbiB0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2Vcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFx1MDAzZVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTM5LVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzo0MjpcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXHUwMDI2Y3VycmVudC1cdTAwM2VzeXNjYWxsX2Rpc3BhdGNoO1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQzLVx0Y2hhciBzdGF0ZTtcbi0tXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6Nzc6c3RhdGljIGludCB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIG1vZGUsXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzgtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy05OS1cdFx0Lypcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDA6XHRcdCAqIEludmVydCB0aGUgcmFuZ2UsIHRoZSBjaGVjayBpbiBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEwMS1cdFx0ICogc3VwcG9ydHMgd3JhcC1hcm91bmQuXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzNS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMzY6aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3Rvcilcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzgte1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzOTpcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDAtfVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0MS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDI6aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0My1cdFx0XHRcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEpXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQ0LXtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDU6XHRzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9IFx1MDAyNnRhc2stXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDYtXHRzdHJ1Y3QgcHRyYWNlX3N1ZF9jb25maWcgY2ZnO1xuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNjUtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTY2OmludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfc2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNjctXHRcdFx0XHQgICAgIHZvaWQgX191c2VyICpkYXRhKVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3Olx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzgtXHRcdFx0XHRcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTeXN0ZW0gQ2FsbCBUcmFjZSBFbnRyeSBQb2ludCBNb2RpZmljYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBgc3lzY2FsbF90cmFjZV9lbnRlcmAsIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIHRoaXMgYXJlYSBpcyBnb2luZyB0byBoYXZlIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHRyYWNpbmcsIGRlYnVnZ2luZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gcGVyZm9ybWFuY2UsIGdpdmVuIHRoZSBmcmVxdWVuY3kgd2l0aCB3aGljaCBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkLiBCZWZvcmUgZGl2aW5nIGRlZXAgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBtZW50YWwgbWFwIG9mIHdoYXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgIGluIG15IGhlYWQgYW5kIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdC4gSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB1c3VhbCBwcm9sb2d1ZSBzdHJ1Y3R1cmUsIHRoZSByZWdpc3RlciBzYXZpbmcvcmVzdG9yYXRpb24gY29udmVudGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdGhhdCBtaWdodCBiZSBpbiBvciBhcm91bmQgYHN5c2NhbGxfdHJhY2VfZW50ZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIGEgZGlyZWN0IGVudHJ5IHBvaW50LCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIGxheWVyIG9mIGFic3RyYWN0aW9uIG9yIHdyYXBwZXIgZnVuY3Rpb24sIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgY3JpdGljYWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3RyYWNlX2VudGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTQyLSAqXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjQzOiAqIEludm9rZWQgZnJvbSBzeXNjYWxsX3RyYWNlX2VudGVyKCkgdG8gd3JhcCBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoKS5cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNDQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2VudGVyX2F1ZGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03MS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NzI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNzMte1xuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9MTQxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX2VudGVyX2Zyb21fdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgc3lzY2FsbClcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0NS1cdGlmICh3b3JrIFx1MDAyNiBTWVNDQUxMX1dPUktfRU5URVIpXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjE0NjpcdFx0c3lzY2FsbCA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yayk7XG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIyOS1cdCAqIHRoZW4gdGhlIHRyYWNlcnMgYmVsb3cgYXJlIG5vdCBpbnZva2VkIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMwOlx0ICogdGhlIGVudHJ5IHNpZGUgd2FzIG5vdCBpbnZva2VkIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKTogVGhlIEFCSVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMzEtXHQgKiBvZiB0aGVzZSBzeXNjYWxscyBpcyB1bmtub3duLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgc3lzY2FsbF90cmFjZV9lbnRlcmAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYF9fc2VjdXJlX2NvbXB1dGluZygpYC4gUHJldmlvdXNseSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgc3RvcmVkIGluIGByZXRgLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBhbiBlcnJvci4gTm93LCB0aGUgbG9naWMgaXMgc2ltcGxpZmllZDogaWYgYF9fc2VjdXJlX2NvbXB1dGluZygpYCByZXR1cm5zIGBmYWxzZWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC0xTGAuIE1ha2VzIHNlbnNlLiBUaGUgaW50ZW50IGlzIHRvIGNhdGNoIHRyYWNlciBjaGFuZ2VzLCB3aGljaCB3ZXJlIHBvc3NpYmx5IGEgcHJlLWV4aXN0aW5nIGlzc3VlLgoKSSBzZWUgdGhhdCB0aGlzIGNoYW5nZSBpcyBnZW5lcmljLCBub3QgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBJbnRlcmVzdGluZy4gR2l2ZW4gdGhhdCBmYWN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBhZmZlY3RlZC4gSSBub3RpY2UgdGhhdCB0aGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgZmlsZSBzZWxlY3RzIGBHRU5FUklDX0VOVFJZYC4gVGhpcyB0ZWxscyBtZSB0aGF0IEFSTTY0IGlzIG5vdyB1c2luZyB0aGlzIGdlbmVyaWMgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgZXhwbGFpbnMgd2h5IHRoZSBjaGFuZ2UgaXMgZ2VuZXJpYy4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSXQgYXBwZWFycyB0aGF0IGBHRU5FUklDX0VOVFJZYCBpcyBzZWxlY3RlZCB0aHJvdWdoIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cC4gVG8gdGVzdCB0aGUgYF9fc2VjdXJlX2NvbXB1dGluZygpYCBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGBTRUNDT01QYC4gSSYjMzk7bGwgYWxzbyBuZWVkIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGZvciBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBhbmQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIHRvIGNvbmZpcm0gdGhhdCBgU0VDQ09NUGAgYW5kIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGFyZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNDT01QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz02Mjg9Y29uZmlnIEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLS1cbmFyY2gvS2NvbmZpZy02NDYtXG5hcmNoL0tjb25maWc6NjQ3OmNvbmZpZyBTRUNDT01QXG5hcmNoL0tjb25maWctNjQ4LVx0cHJvbXB0IFwmIzM0O0VuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBleGVjdXRlIHVudHJ1c3RlZCBieXRlY29kZVwmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZy02NjMtXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxuYXJjaC9LY29uZmlnLTY2NS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL0tjb25maWctNjczLVxuYXJjaC9LY29uZmlnOjY3NDpjb25maWcgU0VDQ09NUF9DQUNIRV9ERUJVR1xuYXJjaC9LY29uZmlnLTY3NS1cdGJvb2wgXCYjMzQ7U2hvdyBzZWNjb21wIGZpbHRlciBjYWNoZSBzdGF0dXMgaW4gL3Byb2MvcGlkL3NlY2NvbXBfY2FjaGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIENhbGwgRGlzcGF0Y2gqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJiMzOTt0IGl0PyBUaGUgY29yZSBvZiB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtLCB3aGVyZSB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyBhcmUgZmluYWxseSBzb3J0ZWQgYW5kIGRpcmVjdGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgaGFuZGxlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZGlzcGF0Y2ggaXMgYmVpbmcgaGFuZGxlZCDigJMgaG93IHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgZ2V0cyB0cmFuc2xhdGVkIGludG8gdGhlIGNvcnJlY3Qga2VybmVsIGZ1bmN0aW9uLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgbWlzZGlyZWN0aW9uIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgd29ya3MuIEdvdHRhIGNoZWNrIGhvdyB0aGlzIG1lY2hhbmlzbSB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIGRvY3VtZW50YXRpb24gdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgYSBsb3QgdG8gZG8sIGJ1dCB0aGF0IGlzIHRoZSBvbmx5IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUyMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIExvY2F0aW9uIEh1bnQgZm9yIFNZU0NBTExfVVNFUl9ESVNQQVRDSCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBjbGFzc2ljIHBsYWNlcyB3aGVyZSB5b3UmIzM5O2QgZmluZCBjb3JlIGtlcm5lbCBmZWF0dXJlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBidWlsZCBvcHRpb25zIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgZmlsZXMgY2xvc2VseSB0byB2ZXJpZnkuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBxdWljayBncmVwIG9yIGZpbmQgaW4gdGhvc2UgZGlyZWN0b3JpZXMgYW5kIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX1VTRVJfRElTUEFUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0PTUyPWZvbGxvd2luZyBwcmN0bDpcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01My1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo1NDogIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFx1MDAzY29wXHUwMDNlLCBcdTAwM2NvZmZzZXRcdTAwM2UsIFx1MDAzY2xlbmd0aFx1MDAzZSwgW3NlbGVjdG9yXSlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3Q9ODE9QWRkaXRpb25hbGx5LCBhIHRhc2tzIHN5c2NhbGwgdXNlciBkaXNwYXRjaCBjb25maWd1cmF0aW9uIGNhbiBiZSBwZWVrZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo4MjphbmQgcG9rZWQgdmlhIHRoZSBQVFJBQ0VfKEdFVHxTRVQpX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgcHRyYWNlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3QtODMtcmVxdWVzdHMuIFRoaXMgaXMgdXNlZnVsIGZvciBjaGVja3BvaW50L3Jlc3RhcnQgc29mdHdhcmUuXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yNy1cdFx0XHRcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9BVURJVCB8XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjI4Olx0XHRcdFx0IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0ggfFx0XFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjktXHRcdFx0XHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfUlNFUV9TTElDRSlcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTM1LVx0XHRcdFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUIHxcdFx0XFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MzY6XHRcdFx0XHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCB8XHRcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0zNy1cdFx0XHRcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9FWElUX1RSQVApXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODAtXHQgKi9cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6ODE6XHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04Mi1cdFx0aWYgKHN5c2NhbGxfdXNlcl9kaXNwYXRjaChyZWdzKSlcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcbi0tXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIzMi1cdCAqL1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDoyMzM6XHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMzQtXHRcdGlmICh1bmxpa2VseShjdXJyZW50LVx1MDAzZXN5c2NhbGxfZGlzcGF0Y2gub25fZGlzcGF0Y2gpKSB7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC00LSAqL1xuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDo1OiNpZm5kZWYgX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9IXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oOjY6I2RlZmluZSBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0hcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtNy1cbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oPTE0PWludCBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xNy0jZGVmaW5lIGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2godHNrKSBcXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDoxODpcdGNsZWFyX3Rhc2tfc3lzY2FsbF93b3JrKHRzaywgU1lTQ0FMTF9VU0VSX0RJU1BBVENIKVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xOS1cbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oPTQ0PXN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oLTUxLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaDo1MjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9IICovXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaF90eXBlcy5oOjI6I2lmbmRlZiBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX1RZUEVTX0hcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MzojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg9MTg9c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCB7fTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaF90eXBlcy5oLTIxLVxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaDoyMjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9UWVBFU19IICovXG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oPTQxPWVudW0gc3lzY2FsbF93b3JrX2JpdCB7XG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTQ2LVx0U1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX0FVRElULFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oOjQ3Olx0U1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgtNDgtXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfRVhJVF9UUkFQLFxuLS1cbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC01Ni0jZGVmaW5lIFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUXHRcdEJJVChTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfQVVESVQpXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg6NTc6I2RlZmluZSBTWVNDQUxMX1dPUktfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gpXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgtNTgtI2RlZmluZSBTWVNDQUxMX1dPUktfU1lTQ0FMTF9FWElUX1RSQVBcdFx0QklUKFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9FWElUX1RSQVApXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2Ny0vKiBEaXNwYXRjaCBzeXNjYWxscyB0byBhIHVzZXJzcGFjZSBoYW5kbGVyICovXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNjg6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjY5LSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdFx0MFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaD0xMTA9c3RydWN0IHB0cmFjZV9yc2VxX2NvbmZpZ3VyYXRpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaC0xMTctXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmg6MTE4OiNkZWZpbmUgUFRSQUNFX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHIDB4NDIxMFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oOjExOTojZGVmaW5lIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRyAweDQyMTFcbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaC0xMjAtXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTc3PXN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMjgtXHRpZiAobW9kZSAhPSBQUl9TWVNfRElTUEFUQ0hfT0ZGKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEyOTpcdFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfVVNFUl9ESVNQQVRDSCk7XG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTMwLVx0ZWxzZVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzMTpcdFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9VU0VSX0RJU1BBVENIKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzItXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTE0Mj1pbnQgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX2dldF9jb25maWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE1MC1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNTE6XHRpZiAodGVzdF90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE1Mi1cdFx0Y2ZnLm1vZGUgPSBQUl9TWVNfRElTUEFUQ0hfT047XG4tLVxua2VybmVsL3B0cmFjZS5jPTExNjI9aW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbi0tXG5rZXJuZWwvcHRyYWNlLmMtMTM5Ny1cbmtlcm5lbC9wdHJhY2UuYzoxMzk4Olx0Y2FzZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUc6XG5rZXJuZWwvcHRyYWNlLmMtMTM5OS1cdFx0cmV0ID0gc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoY2hpbGQsIGFkZHIsIGRhdGF2cCk7XG4tLVxua2VybmVsL3B0cmFjZS5jLTE0MDEtXG5rZXJuZWwvcHRyYWNlLmM6MTQwMjpcdGNhc2UgUFRSQUNFX0dFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHOlxua2VybmVsL3B0cmFjZS5jLTE0MDMtXHRcdHJldCA9IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKGNoaWxkLCBhZGRyLCBkYXRhdnApO1xuLS1cbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4tLVxua2VybmVsL3N5cy5jLTI4MDEtXHRcdGJyZWFrO1xua2VybmVsL3N5cy5jOjI4MDI6XHRjYXNlIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0g6XG5rZXJuZWwvc3lzLmMtMjgwMy1cdFx0ZXJyb3IgPSBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKGFyZzIsIGFyZzMsIGFyZzQsXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI1NS0vKiBEaXNwYXRjaCBzeXNjYWxscyB0byBhIHVzZXJzcGFjZSBoYW5kbGVyICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNTY6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjU3LSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdFx0MFxuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oPTEzND1zdHJ1Y3QgcHJjdGxfbW1fbWFwIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjctLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg6MjY4OiNkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFx0NTlcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2OS0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXHRcdDBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYz0xOD1URVNUKGdldF9zZXRfc3VkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTM5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NDA6XHRyZXQgPSBzeXNfcHRyYWNlKFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRywgY2hpbGQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy00MS1cdFx0XHQgKHZvaWQgKilzaXplb2YoY29uZmlnKSwgXHUwMDI2Y29uZmlnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy01My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jOjU0Olx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTUtXHRcdFx0ICh2b2lkICopc2l6ZW9mKGNvbmZpZyksIFx1MDAyNmNvbmZpZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTktXHRtZW1zZXQoXHUwMDI2Y29uZmlnLCAxLCBzaXplb2YoY29uZmlnKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYzo2MDpcdHJldCA9IHN5c19wdHJhY2UoUFRSQUNFX0dFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfQ09ORklHLCBjaGlsZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTYxLVx0XHRcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcdTAwMjZjb25maWcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjIxOiNpZm5kZWYgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYzoyMjojIGRlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXHQ1OVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYy0yMy0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXHQwXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYz0xMzY9aW50IG1haW4odm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jLTE2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmM6MTYzOlx0aWYgKHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9PTixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMTY0LVx0XHQgIHN5c2NhbGxfZGlzcGF0Y2hlcl9zdGFydCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0xOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjE5OiNpZm5kZWYgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjA6IyBkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFx0NTlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTIxLSMgZGVmaW5lIFBSX1NZU19ESVNQQVRDSF9PRkZcdDBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy00NS0gKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NDY6ICogLSBkaXNwYXRjaF90cmlnZ2VyX3NpZ3N5czogVmVyaWZ5IGlmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0ggaXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTQ3LSAqICAgYWJsZSB0byB0cmlnZ2VyIFNJR1NZUyBvbiBhIHN5c2NhbGwuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9NjU9VEVTVF9TSUdOQUwoZGlzcGF0Y2hfdHJpZ2dlcl9zaWdzeXMsIFNJR1NZUylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy03My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjc0Olx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXHUwMDI2c2VsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc1LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NzY6XHRcdFRIX0xPRyhcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc3LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTg4PXN0YXRpYyB2b2lkIHByY3RsX3ZhbGlkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05MS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo5MjpcdEVYUEVDVF9FUSgwLCBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBvcCwgb2ZmLCBzaXplLCBzZWwpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTkzLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz05NT1zdGF0aWMgdm9pZCBwcmN0bF9pbnZhbGlkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05OC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo5OTpcdEVYUEVDVF9FUSgtMSwgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgb3AsIG9mZiwgc2l6ZSwgc2VsKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0xMDAtXHRFWFBFQ1RfRVEoZXJyLCBlcnJubyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MjEwPVRFU1QoZGlzcGF0Y2hfYW5kX3JldHVybilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjQ6XHRyZXQgPSBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBQUl9TWVNfRElTUEFUQ0hfRVhDTFVTSVZFX09OLCAwLCAwLCBcdTAwMjZnbG9iX3NlbCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjUtXHRBU1NFUlRfRVEoMCwgcmV0KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjY6XHRcdFRIX0xPRyhcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTIyNy1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz0yNTU9VEVTVF9TSUdOQUwoYmFkX3NlbGVjdG9yLCBTSUdTWVMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjgwOlx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXHUwMDI2Z2xvYl9zZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjgxLVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjgyOlx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODMtXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9Mjk4PVRFU1QoZGlzYWJsZV9kaXNwYXRjaClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDQ6XHRyZXQgPSBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBQUl9TWVNfRElTUEFUQ0hfRVhDTFVTSVZFX09OLCAwLCAwLCBcdTAwMjZzZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA1LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzA2Olx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMDctXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzEyOlx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09GRiwgMCwgMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMTMtXHRFWFBFQ1RfRVEoMCwgcmV0KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzI2PVRFU1QoZGlyZWN0X2Rpc3BhdGNoX3JhbmdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMzNS1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzM2Olx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgLTFMLCBcdTAwMjZzZWwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzM3LVx0QVNTRVJUX0VRKDAsIHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MzM4Olx0XHRUSF9MT0coXCYjMzQ7S2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzktXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzQ5PXN0YXRpYyB2b2lkIHRlc3RfcmFuZ2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTM1NC1cdFNZU0NBTExfRElTUEFUQ0hfT0ZGKGdsb2Jfc2VsKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjM1NTpcdEVYUEVDVF9FUSgwLCBwcmN0bChQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILCBvcCwgb2ZmLCBzaXplLCBcdTAwMjZnbG9iX3NlbCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzU2LVx0U1lTQ0FMTF9ESVNQQVRDSF9PTihnbG9iX3NlbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTWF6ZSoqCgpSaWdodCwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgLCBidXQgdGhhdCBuYW1lIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgc3RpY2tpbmcuIEhtbSwgY291bGQgaXQgYmUganVzdCBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4PyBObywgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgcG9pbnQgc3R1ZmYgaXMgd2hhdCBlbmFibGVzIGl0LiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIFllYWgsIEkgc2hvdWxkIHJlYWxseSBjb25zdWx0IGBpbml0L0tjb25maWdgIHRvIGNvbmZpcm0gd2hlcmUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgd2hhdCBlbmFibGVzIGl0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBjaGFzaW5nIGEgZ2hvc3QgaGVyZSwgb3IsIHdvcnNlLCBtaXN1bmRlcnN0YW5kaW5nIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGVzLiBDb25zaWRlcmluZyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBrZXJuZWwvZW50cnkvS2NvbmZpZ2AgZmlsZSBmaXJzdC4gSWYgaXQmIzM5O3Mgbm90IGxvY2F0ZWQgdGhlcmUsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoIGFuZCBnbyB0byB0aGUgbW9yZSBnZW5lcmFsIGBLY29uZmlnYCBmaWxlcyB0aGF0IGFyZSBjb21tb25seSB1c2VkLiBUaGF0IHNob3VsZCBwaW5wb2ludCB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgKioKCkhtbSwgc28gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBrZXJuZWwgY29uZmlnIG9wdGlvbiwgaXMgaXQ/IEludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHdhbnQgdG8gY2hlY2sgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtIGNhbGxzIHBhdGguIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgZGlzcGF0Y2ggYmFzZWQgb24gdGhpcy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb25kaXRpb25hbCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZCB2cyB3aGVuIGl0JiMzOTtzIG5vdC4gSXMgaXQgYSBjb21waWxlLXRpbWUgaW5jbHVzaW9uPyBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoaW4gdGhlIG1haW4gc3lzY2FsbCBoYW5kbGluZyBwYXRoPyBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvcHRpb24gaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgcHJvZmlsaW5nIHRoZSBzeXNjYWxsIHBhdGggYW5kIGRldGVybWluaW5nIGlmIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZSBpbiBhbnkgd2F5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBndWFyZCBibG9ja3Mgb2YgY29kZSByZWxhdGVkIHRvIHVzZXIgZGlzcGF0Y2guIEFuZCBpZiBpdCYjMzk7cyB0aGVyZSwgdGhlbiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkaWZmZXJlbmNlcyBhcmUgd2hlbiBpdCYjMzk7cyBub3QgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgUG9pbnQgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBpbml0aWFsaXplcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBlbnRyeSBwb2ludCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5cyB0byBob3cgdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsIHNldHVwIGlzIG9yY2hlc3RyYXRlZCDigJMgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLCB0aGUgZWFybHkgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiwgYW5kIHdoYXQgY2FsbHMgdGhlIGBzdGFydGAgcm91dGluZS4gR290dGEgc2VlIGhvdyB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHVzZWQsIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibHkgZmlsZXMgdGhhdCBhcmUgbGlua2VkIGVhcmx5LCBhbnkgcHJlLW1haW4gc2V0dXAgc3RlcHMuLi4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIGd1biBvZiB0aGUgd2hvbGUgZGFtbiB0aGluZywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyB3cml0dGVuIG9uIHRoZSBiYXJyZWwuIFRoZSBNYWtlZmlsZSBpdHNlbGYgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2NhbGxfdXNlcl9kaXNwYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvTWFrZWZpbGU9MTU9b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcdCYjNDM7PSBjb21tb24ub1xua2VybmVsL2VudHJ5L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFx0XHQmIzQzOz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xua2VybmVsL2VudHJ5L01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19WSVJUX1hGRVJfVE9fR1VFU1RfV09SSylcdCYjNDM7PSB2aXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4ga2VybmVsIGRldmVsb3BtZW50IGFuZCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gc3lzdGVtIGNhbGxzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBvciBgQ09ORklHX0dFTkVSSUNfRU5UUllgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHN5c3RlbSBjYWxsIHN1cHBvcnQuIExldCYjMzk7cyBkaWcgaW4uIE9rYXksIHRoZSBNYWtlZmlsZSBpcyByZXZlYWxpbmcgYSBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX0dFTkVSSUNfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwtY29tbW9uLm8gc3lzY2FsbF91c2VyX2Rpc3BhdGNoLm9gLiBUaGF0IGNvbmZpcm1zIGl0IOKAkyBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBjcnVjaWFsIG9iamVjdCBmaWxlcy4gQnV0IGl0IG1ha2VzIG1lIHdvbmRlciwgcHJlY2lzZWx5IHdoYXQgZG9lcyB0aGlzIG9wdGlvbiBlbnRhaWw/IE15IGtuZWUtamVyayByZWFjdGlvbiBpcyB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb24gb2YgYEdFTkVSSUNfU1lTQ0FMTGAgKHNpbmNlIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBpcyBpdHMgY29uZmlndXJhdGlvbiBjb3VudGVycGFydCkgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZTsgc28sIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50cyBhcmUgaGFuZGxlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dFTkVSSUNfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OgoKKipEaWdnaW5nIGludG8gdGhlIEVudHJ5IFBvaW50IENvbmZpZ3VyYXRpb24qKgoKSG1tLCBzbyBgYXJjaC9hcm02NC9LY29uZmlnYCBpcyBhY3R1YWxseSBzZWxlY3RpbmcgYEdFTkVSSUNfRU5UUllgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHRob3VnaHQgSSBoYWQgdGhlIHJlbGF0aW9uc2hpcCBvZiBgR0VORVJJQ19FTlRSWWAgcGlubmVkIGRvd24sIGJ1dCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBkb3VibGUgY2hlY2sgaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCBga2VybmVsL2VudHJ5L01ha2VmaWxlYC4gTWF5YmUgSSBtaXNyZW1lbWJlcmVkIHNvbWUgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgS2NvbmZpZ3MgYW5kIE1ha2VmaWxlcy4gVGltZSB0byBkaXZlIGJhY2sgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7R0VORVJJQ19FTlRSWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzQwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGVudHJ5IE1ha2VmaWxlLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBFbnRyeSBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgaXMgYSBjcnVjaWFsIGZpbGUsIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCYjMzk7cyBlbnRyeSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBpbml0aWFsIHNldHVwIGlzIGhhbmRsZWQsIHRoaW5ncyBsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLCBib290LXRpbWUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgbGlua2luZyBvZiB0aGUgZW50cnkgcG9pbnQuIEkgd2FudCB0byBzZWUgd2hpY2ggb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBpbmNsdWRlZCwgd2hhdCBjb21waWxlciBmbGFncyBhcmUgYmVpbmcgdXNlZCwgYW5kIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibHkgY29kZSB0aGF0JiMzOTtzIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYm9vdCBwcm9jZXNzIGl0c2VsZjsgdGhpbmdzIGxpa2UgdGhlIGVhcmx5IGludGVycnVwdCBoYW5kbGluZyBzZXQtdXAgYW5kIHdoZXJlIHRoZSBpbml0aWFsIHN0YWNrcyBhcmUgZXN0YWJsaXNoZWQgYXJlIGdvaW5nIHRvIGJlIGtleS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYm9vdGxvYWRlciBoYW5kcyBvZmYgY29udHJvbCB0byB0aGUga2VybmVsIHByb3Blci4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgb2ZmZXIgaW5zaWdodCBpbnRvIHNwZWNpZmljIGRlc2lnbiBjaG9pY2VzLiBUaW1lIHRvIGNyYWNrIGl0IG9wZW4gYW5kIHNlZSB3aGF0IGdlbXMgYXJlIGluc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0IyBQcmV2ZW50IHRoZSBub2luc3RyIHNlY3Rpb24gZnJvbSBiZWluZyBwZXN0ZXJlZCBieSBzYW5pdGl6ZXIgYW5kIG90aGVyIGdvb2RpZXNcbiAgIDQ6XHQjIGFzIGxvbmcgYXMgdGhlc2UgdGhpbmdzIGNhbm5vdCBiZSBkaXNhYmxlZCBwZXIgZnVuY3Rpb24uXG4gICA1Olx0S0FTQU5fU0FOSVRJWkUgOj0gblxuICAgNjpcdFVCU0FOX1NBTklUSVpFIDo9IG5cbiAgIDc6XHRLQ09WX0lOU1RSVU1FTlQgOj0gblxuICAgODpcdFxuICAgOTpcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24mIzM5O3Qgbm9pbnN0ci1zYWZlXG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMTE6XHRcbiAgMTI6XHRDRkxBR1NfUkVNT1ZFX2NvbW1vbi5vXHQgPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbiAgMTM6XHRDRkxBR1NfY29tbW9uLm9cdFx0JiM0Mzs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXG4gIDE0Olx0XG4gIDE1Olx0b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcdCYjNDM7PSBjb21tb24ub1xuICAxNjpcdG9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFx0XHQmIzQzOz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xuICAxNzpcdG9iai0kKENPTkZJR19WSVJUX1hGRVJfVE9fR1VFU1RfV09SSylcdCYjNDM7PSB2aXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19HRU5FUklDX1NZU0NBTExgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gZHJpbGwgZG93bi4gV2hlcmUgZXhhY3RseSAqaXMqIHRoaXMgb3B0aW9uIGRlZmluZWQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdFTkVSSUNfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA1PWNvbmZpZyBHRU5FUklDX0lSUV9FTlRSWVxuLS1cbmFyY2gvS2NvbmZpZy0xMDctXG5hcmNoL0tjb25maWc6MTA4OmNvbmZpZyBHRU5FUklDX1NZU0NBTExcbmFyY2gvS2NvbmZpZy0xMDktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTc5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgR0VORVJJQ19TWVNDQUxMIFVzYWdlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBhIGRpcmVjdGVkIGZvY3VzOiAqTGV0JiMzOTtzIHNlZSB3aGF0IHNlbGVjdHMgYEdFTkVSSUNfU1lTQ0FMTGAuKiBUaGlzIGlzIHdoZXJlIEkgYmVnaW4gdGhlIGludmVzdGlnYXRpdmUgcHJvY2VzcywgdGhlIGFuYWx5c2lzLiBJJiMzOTttIG5vdCBqdXN0IGlkbHkgcG9uZGVyaW5nOyBJJiMzOTttIGFjdGl2ZWx5IGZvcm11bGF0aW5nIGEgcGxhbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBkZWZpbml0aW9uLiBUaGUgc2VsZWN0aW9uIG9mIGBHRU5FUklDX1NZU0NBTExgIGlzIHRoZSBmb2NhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGtlcm5lbCBhcmUgdHlpbmcgaW50byB0aGlzLiBNeSBuZXh0IHN0ZXBzIGFyZSBwcm9iYWJseSwgdG8gZGlnIGludG8gdGhlIHNvdXJjZSB0cmVlIGFuZCB0cmFjZSB3aGVyZSB0aGlzIHN5bWJvbCBpcyB1c2VkLiBJcyBpdCBhIGxlZ2FjeSB0aGluZz8gQSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IFNvbWUgc29ydCBvZiBhYnN0cmFjdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aGF0JiMzNDsgYW5kIHRoZSAmIzM0O3doeSYjMzQ7IG9mIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVlcGVyIGFyY2hpdGVjdHVyYWwgZGVzaWduIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvczogSXMgaXQgYSBjb21tb24gZmFsbGJhY2s/IFBhcnQgb2YgYSBtb2R1bGFyIHN5c3RlbT8gRG9lcyBpdHMgc2VsZWN0aW9uIGNvcnJlbGF0ZSB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgR0VORVJJQ19TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTI9Y29uZmlnIEdFTkVSSUNfRU5UUllcbi0tXG5hcmNoL0tjb25maWctMTE0LVx0c2VsZWN0IEdFTkVSSUNfSVJRX0VOVFJZXG5hcmNoL0tjb25maWc6MTE1Olx0c2VsZWN0IEdFTkVSSUNfU1lTQ0FMTFxuYXJjaC9LY29uZmlnLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBUk02NCBHZW5lcmljIFN5c2NhbGwgRW50cnkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGdlbmVyaWMgZW50cnkgcG9pbnQgKGBHRU5FUklDX0VOVFJZYCkgaXMgdGhlIG9uZSBiZWluZyB1c2VkIHRvIGRpc3BhdGNoIGBHRU5FUklDX1NZU0NBTExgLCBhbmQgSSByZW1lbWJlciB0aGF0IGBhcmNoL2FybTY0L0tjb25maWdgIHNlbGVjdHMgaXQuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBtdXN0IGJlIHNlbGVjdGluZyBpdC4uLiB3YWl0LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiAqRXhhbWluZXMgdGhlIGRpZmYqIEFoLCB0aGUgZGlmZiBjb25maXJtcyBpdDogdGhlIHBhdGNoIGV4cGxpY2l0bHkgKmFkZHMqIGBzZWxlY3QgR0VORVJJQ19FTlRSWWAgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIHdoaWxlIHJlbW92aW5nIGBHRU5FUklDX0lSUV9FTlRSWWAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgd2hhdCBhYm91dCB0ZXN0aW5nIHRoaXM/IFdoaWNoIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50PyBIbW0sIGBTRUNDT01QYCBpcyBhIG5vLWJyYWluZXIgYmVjYXVzZSBgc2VjdXJlX2NvbXB1dGluZ2AgZ2V0cyBtb2RpZmllZCBhbmQgaXMgdXNlZCBieSB0aGUgcGF0Y2guIE9mIGNvdXJzZSwgYFNFQ0NPTVBfRklMVEVSYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGVuLCBgQ09NUEFUYCBsb29rcyB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAsIHdoaWNoIGFyZSBiZWluZyBtb2RpZmllZCwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuIEFzIGZvciBgREVCVUdfUlNFUWAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyByZW1vdmVkIGZyb20gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AsIGJ1dCB0aGUgYHJzZXFfc3lzY2FsbGAgaXMgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyBlbnRyeSwgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBpbXBhY3RzIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24uIExldCBtZSBjb25maXJtIGlmIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNpbmNlIGl0JiMzOTtzIGp1c3QgZW5hYmxlZCBpZiBgR0VORVJJQ19TWVNDQUxMYCBpcyBlbmFibGVkLiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIEFybTY0IFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXNuJiMzOTt0IGEgc3RhbmRhbG9uZSBvcHRpb24uIEl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgd2hlbiBgR0VORVJJQ19TWVNDQUxMYCBpcyBlbmFibGVkLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGxldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJbiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5IHBvaW50cy4gQWgsIHllcywgYGRvX2VsMF9zdmNgIGlzIHRoZSBtYWluIGhhbmRsZXIgZm9yIHN5c2NhbGxzLCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCBoYW5kbGVzIHRoZSBjb21wYXRpYmlsaXR5IGNhbGxzLiBFeGNlbGxlbnQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBzZWN1cml0eSBhc3BlY3RzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggc2VjY29tcC4gSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZWN1cmVfY29tcHV0aW5nYCBmdW5jdGlvbiBpcywgYXMgZXhwZWN0ZWQsIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX1NFQ0NPTVBgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcm9sZSBvZiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgd2hpY2ggc2hvdWxkIGJlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGFuZCBidWlsdCB3aGVuIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBpcyBhY3RpdmUuCgpTbywgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZToKCiogICBgU0VDQ09NUGAKKiAgIGBTRUNDT01QX0ZJTFRFUmAKKiAgIGBDT01QQVRgICh0byB0ZXN0IHRob3NlIGNvbXBhdGliaWxpdHkgc3lzY2FsbHMpCgpJIGtub3cgYFNFQ0NPTVBgIGFuZCBgU0VDQ09NUF9GSUxURVJgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSBjZXJ0YWluLCBzbyBJIHdpbGwgbGlzdCB0aGVtIGhlcmUuCgpPaCwgd2FpdCwgdGhlcmUmIzM5O3MgYEdFTkVSSUNfRU5UUllgLiBJIHJlY2FsbCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQVJNNjRgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhbHdheXMgYWN0aXZlIG9uIGFybTY0IGFyY2hpdGVjdHVyZXMuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucz8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY2AuIEhtbSwgYHB0cmFjZV9zYXZlX3JlZ2AgaGFzIG1vdmVkIGZyb20gYHB0cmFjZS5jYCB0byBgZW50cnktY29tbW9uLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgYW5kIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0YCBoYXZlIGJlZW4gYWRkZWQgdG8gYGVudHJ5LWNvbW1vbi5oYC4gU28gdGhlc2UgYXJlIGNvbXBpbGVkIGluIGFsbCB0aGUgdGltZS4gTm93IEkgc2hvdWxkIGNoZWNrIHdoYXQgaXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD02ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtOTItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjkzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC05NC17XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0xMDYtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjEwNzojZGVmaW5lIGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gSG90bmVzcyBmb3IgVGVzdCBEaXN0cmlidXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIHNrZXcgbXkgdGVzdCBkaXN0cmlidXRpb25zLCBhbmQgdGhlc2Ugb25lcyBqdW1wZWQgb3V0OiBgZG9fZWwwX3N2Y2AsIGBkb19lbDBfc3ZjX2NvbXBhdGAsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gLCBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgYF9fc2VjdXJlX2NvbXB1dGluZ2AsIGBfX3NlY2NvbXBfZmlsdGVyYCwgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCwgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgLgoKVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kLCBoYW5nIG9uLi4uIGBkb19lbDBfc3ZjYCBpcyBhICpodWdlKiBvZmZlbmRlciBoZXJlLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IGZvciAqZXZlcnkqIEVMMCBzeXN0ZW0gY2FsbCEgVGhhdCYjMzk7cyBnb2luZyB0byBkb21pbmF0ZSBhbnkgdGVzdCBhbmQgaW52YWxpZGF0ZSB0aGUgcmVzdWx0cy4gRGVmaW5pdGVseSBhdm9pZGluZyB0aGF0LgoKVGhlbiwgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYCDigJMgdGhleSYjMzk7cmUgb24gdGhlIGZhc3QgcGF0aCB0b28gaWYgc2VjY29tcCBpcyBlbmFibGVkLCBzbywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gY29uZmlnLCB3ZSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoZW0uCgpgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyB0aGUgbmV4dCBvbmUuIEl0JiMzOTtzIGV4ZWN1dGVkIGZvciBldmVyeSBzeXNjYWxsIGlmIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgY29udHJvbGxlZCBieSBhIGZsYWcsIHNvIG1heWJlIG5vdCAqYXMqIGhvdCBhcyB0aGUgb3RoZXJzLCBidXQgc3RpbGwgb24gdGhlIHN5c2NhbGwgcGF0aCwgc28gcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuCgpBbmQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgY2FsbGVkIGZyb20gYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAsIHNvIHRoYXQmIzM5O3MgaW5kaXJlY3RseSBob3QuCgpCdXQgd2FpdCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBhY3R1YWxseSAqY2FsbGVkKiBpZiBgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgc2V0ISBHb29kIHRvIGtub3csIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAgdG8gc2VlIGhvdyB0aGlzIGZsYWcgaXMgc2V0IGFuZCBob3cgY29tbW9uIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC01Ny1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NTg6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC01OS1sb25nIHRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgc3lzY2FsbCk7XG4tLVxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxuLS1cbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODEtXHRpZiAod29yayBcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo4MjpcdFx0aWYgKHN5c2NhbGxfdXNlcl9kaXNwYXRjaChyZWdzKSlcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODMtXHRcdFx0cmV0dXJuIC0xTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5ODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCBzY2FuIGhhcyBwb2ludGVkIG1lIHRvd2FyZHMgc29tZSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsb2dpYyBmbG93IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhhdCBzcGVjaWZpYyBmbGFnIGlzIHNldCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHRvIGV4cGxvcmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYC4gVGhpcyBmdW5jdGlvbiBpcyBhbm90aGVyIGNvbXBlbGxpbmcgYXZlbnVlIHRvIGludmVzdGlnYXRlLCBhbmQgd2FycmFudHMgZnVydGhlciBhdHRlbnRpb24uCgpGdXJ0aGVybW9yZSwgdGhlIHBhaXIgb2YgZnVuY3Rpb25zIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGxvb2sgcGFydGljdWxhcmx5IHJlbGV2YW50LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHB0cmFjZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNpbmdsZS1zdGVwcGluZywgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaGFuZGxpbmcgbG93LWxldmVsIGNvbnRyb2wgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UsIGFzIHB0cmFjZSBpcyBub3RvcmlvdXNseSBjb21wbGV4LgoKRmluYWxseSwgYHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGlzIGludHJpZ3VpbmcuIEl0JiMzOTtzIHRoZSBwcmN0bCBoYW5kbGVyLCBzbyBpdCBvZmZlcnMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gY2FsbCBkaXNwYXRjaC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTQwPWJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03Ni1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzo3NzpzdGF0aWMgaW50IHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgbW9kZSxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzNS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMzY6aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3Rvcilcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzgte1xua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzOTpcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDAtfVxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0xNjY9aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzYtXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3Olx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNzgtXHRcdFx0XHRcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBGdXp6aW5nIFRhcmdldCBDYW5kaWRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgd2l0aCBmdXp6aW5nIHRhcmdldHMuICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvc3NpYmlsaXRpZXMsIGFsb25nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZ2V0dGVycyBhbmQgc2V0dGVyczogYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnYCBhbmQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLgoKTGV0JiMzOTtzIGRvIHNvbWUgZGlnZ2luZy4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jYC4gQWgsIHJpZ2h0LCB0aGUgcGF0Y2ggcmVtb3ZlZCB0aGUgYHN5c2NhbGxfdHJhY2VfZW50ZXJgIGFuZCBgc3lzY2FsbF90cmFjZV9leGl0YCBmdW5jdGlvbnMuIFRoZXkmIzM5O3ZlIGJlZW4gcmVwbGFjZWQgYnkgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgLCB3aGljaCBhcmUgbm93IGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYC4gIEhtbSwgYnV0IGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuICBUaGF0JiMzOTtzIGEgbm8tZ28gZm9yIGRpcmVjdCBmdXp6aW5nLiBXaGF0IGFib3V0IHRoZSBnZW5lcmljIGBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgPyBJdCYjMzk7cyBhIHBvc3NpYmlsaXR5LCBidXQgcG90ZW50aWFsbHkgbm90IGFzIGludGVyZXN0aW5nIGFzIG90aGVycy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNgLiAgQWgsIGhlcmUgd2UgZ28sIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGFyZSBiZWluZyBtb2RpZmllZCB0byBzZXQgb3IgY2xlYXIgdGhlIGBTWVNDQUxMX0VYSVRfVFJBUGAgZmxhZy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgZ29vZCBjYW5kaWRhdGVzIQoKVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBga2VybmVsL3NlY2NvbXAuY2AuIEkgc2VlIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAgbm93IHJldHVybiBhIGBib29sYC4gIFRoZXkgYXJlIGJvdGggY2FsbGVkIG9uIHN5c2NhbGwgZW50cnkgaWYgc2VjY29tcCBpcyBlbmFibGVkLiAgVGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhleSB0b28gaG90PyAgR2VuZXJhbGx5LCBpbiBhIGZ1enppbmcgc2V0dXAsIHNlY2NvbXAgaXMgdXN1YWxseSBvbmx5IGVuYWJsZWQgZm9yIHNwZWNpZmljIHRlc3RzLCBidXQgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBzZWNjb21wIHRvIGlzb2xhdGUgcHJvY2Vzc2VzLiAqV2FpdCwgaXQgZG9lc24mIzM5O3QgdXNlIHNlY2NvbXAgZm9yIGl0cyBvd24gcHJvY2Vzc2VzLCBidXQgaXQgbWlnaHQgZnV6eiBpdC4qIEFjdHVhbGx5LCBgX19zZWNjb21wX2ZpbHRlcmAgaXMgbGlrZWx5IGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBvZiBzZWNjb21wIGZpbHRlcmluZy4KCkhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCYjMzQ7IHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEkga25vdyBgX19zZWN1cmVfY29tcHV0aW5nYCBpcyBwcm9iYWJseSBhIGhvdCBwYXRoIGlmIHNlY2NvbXAgaXMgZW5hYmxlZC4gSSBzaG91bGQgc3RpY2sgdG8gdGhlIGxlc3MgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuIFNvLCBsZXQgbWUgbmFycm93IGl0IGRvd24gdG86CgoqICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAKKiAgIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgCiogICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAKKiAgIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgCiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX2dldF9jb25maWdgCiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWdgCiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgCiogICBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYAoKT2theSwgaG9sZCBvbi4uLkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBleGhhdXN0ZWQgYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZXJlPyBUaGF0IHNob3VsZCBiZSBhIGdvb2QgYXJlYSB0byBzdGFydCBsb29raW5nIGF0IG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTM5LVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEFybTY0IGFuZCBHZW5lcmljIFN5c2NhbGwgRW50cnkqKgoKT2theSwgc28gaW5pdGlhbGx5IEkgd2FzIGEgYml0IGNvbmZ1c2VkLiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBhIGdlbmVyYWwgbWVjaGFuaXNtLCBidXQgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBpdCBzcGVjaWZpY2FsbHkgZm9yIGFybTY0IGJ5IHNlbGVjdGluZyBgR0VORVJJQ19FTlRSWWAuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhY3R1YWxseSAqYWRkKiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIGRpcmVjdGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgdG8gc2V0IGBHRU5FUklDX0VOVFJZYCwgd2hpY2ggY29uZGl0aW9uYWxseSBpbmNsdWRlcyBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIGlmIGBHRU5FUklDX1NZU0NBTExgIGlzIGFsc28gY2hvc2VuLiBSaWdodCwgZ290IGl0LgoKQnV0IGhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRpZmYgaXRzZWxmLi4uICpBaGEhKiBUaGUgZGlmZiAqZG9lcyogdG91Y2ggYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIE5vdyBJIHNlZSBpdC4gVGhlIHBhdGNoIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYXMgYSB3ZWFrIGZ1bmN0aW9uIHRoZXJlLiBPa2F5LCBzbyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciB0aGlzIGNoYW5nZS4gTm93IEkgdW5kZXJzdGFuZC4gVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIHBpZWNlLgoKTGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBsb29rIGF0IG90aGVyIGFmZmVjdGVkIGZpbGVzIHdpdGhpbiB0aGUgcGF0Y2guIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgdG8gYGFyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNgLCBgYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNgLCBgYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuY2AsIGFuZCBgYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jYC4gVGhleSYjMzk7cmUgYWxsIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgIXNlY3VyZV9jb21wdXRpbmcoKWAgaW5zdGVhZCBvZiBgc2VjdXJlX2NvbXB1dGluZygpID09IC0xYC4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBhIHdpZGVyLCBmdW5kYW1lbnRhbCBjaGFuZ2UgYWNyb3NzIHRoZSBrZXJuZWwgd2hlcmUgYHNlY3VyZV9jb21wdXRpbmcoKWAgaXMgbm93IHJldHVybmluZyBhIGJvb2xlYW4uCgpTbywgc3VtbWluZyBpdCB1cCwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0d28tZm9sZDogRmlyc3QsIGl0JiMzOTtzIGEgdHJlZS13aWRlIGNoYW5nZSB0byBjb252ZXJ0IGBzZWN1cmVfY29tcHV0aW5nKClgIHRvIGEgYm9vbGVhbiByZXR1cm4uIEJ1dCB0aGUgYmlnZ2VyLCBhcmNoaXRlY3R1cmFsIGNoYW5nZSBpcyBtaWdyYXRpbmcgYXJtNjQgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50IG1lY2hhbmlzbS4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LCBJIGJlbGlldmUuCgpUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBsZXQmIzM5O3MgbGlzdCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlOgoqICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAKKiAgIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAKKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgCgpXYWl0LCBoYW5nIG9uLi4uIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb250ZW50cyBvZiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCB0b28uIFdoaWxlIGl0IHdvbiYjMzk7dCBiZSBhcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgKmltcGFjdCogb2YgdGhlIGNoYW5nZSwgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFybTY0IHNwZWNpZmljIGNvZGUuIExvb2tzIGxpa2UgYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgIGFyZSBob3QgcGF0aHMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGBpbnZva2Vfc3lzY2FsbGAsIGFsdGhvdWdoIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGNvbnRleHQgd2hlbiByZXZpZXdpbmcgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFjdHVhbCBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCBmaWxlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW52b2tlX3N5c2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTIzPXN0YXRpYyBsb25nIGRvX25pX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0zMy1cbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozNDpzdGF0aWMgbG9uZyBfX2ludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF9mbilcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0zNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTM4LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjM5OnN0YXRpYyB2b2lkIGludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2NubyxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy00MC1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2NfbnIsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTQ5LVx0XHRzeXNjYWxsX2ZuID0gc3lzY2FsbF90YWJsZVthcnJheV9pbmRleF9ub3NwZWMoc2Nubywgc2NfbnIpXTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzo1MDpcdFx0cmV0ID0gX19pbnZva2Vfc3lzY2FsbChyZWdzLCBzeXNjYWxsX2ZuKTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy01MS1cdH0gZWxzZSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTE4LVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjExOTpcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjAtdHJhY2VfZXhpdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXN0ZW0gQ2FsbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHRoZSBtb3N0IGludGVyZXN0aW5nIGNoYW5nZXMgd2l0aGluIHRoaXMgc3lzdGVtIGNhbGwgcGF0Y2guIEkgcXVpY2tseSBob25lZCBpbiBvbiB0aGUgaG90IHBhdGhzLCBsaWtlIGBpbnZva2Vfc3lzY2FsbGAgYW5kIGBfX2ludm9rZV9zeXNjYWxsYCwgd2hpY2ggSSBmaWx0ZXJlZCBvdXQgdG8gZm9jdXMgb24gdGhlIGtleSBtb2RpZmljYXRpb25zLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBpbnRvIGBzeXNjYWxsX3RyYWNlX2VudGVyYCwgd2hpY2ggbGVkIG1lIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbnMuCgpNeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBsZXNzIGZyZXF1ZW50bHkgZXhlY3V0ZWQgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIEkgbm90aWNlZCBtb2RpZmljYXRpb25zIHRvOgoKKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gCiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgCiogICBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYAoKSSB0aGVuIGRvdWJsZS1jaGVja2VkIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLiBJdCB3YXNuJiMzOTt0IGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBzYXcgdGhlIGFkZGl0aW9uIG9mIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGFuZCB0aGVyZWZvcmUgYmVhcnMgcmVsZXZhbmNlLiBJIG1vdmVkIG9uIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaG93IGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGltcGxlbWVudGVkIGZvciBBUk02NC4gVGhlIGRpZmZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgVkRTTyBzaWdyZXR1cm4gbWVjaGFuaXNtLCBzZWVtIGNyaXRpY2FsLgoKSSB0aGVuIGNvbnNpZGVyZWQgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gV2hpbGUgdGhvc2UgYXJlIGNvcmUgc2VjY29tcCBjaGFuZ2VzIGluIHRoZSBwYXRjaCwgbXkgZm9jdXMgaXMgb24gbGVzcy1mcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHNlY2NvbXAsIGJ1dCB0aGUgaG90IHBhdGggZnVuY3Rpb25zIGFyZSBub3QgdGhlIGZvY3VzLCBJIGRpc2NhcmRlZCB0aGVzZS4KCkkgcmV2aXNpdGVkIHRoZSBxdWVzdGlvbiBvZiBnZW5lcmljIGhvdCBwYXRocywgbWFraW5nIHN1cmUgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZW0gaW4gbXkgc2VsZWN0aW9uLCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoZXJlZm9yZSwgSSBzZXR0bGVkIG9uIGxpc3RpbmcgdGhlIGZvbGxvd2luZzoKCiogICBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYAoqICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYAoqICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAKClRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMgd2l0aG91dCBiZWluZyBvdmVybHkgZ2VuZXJpYy4KCkZpbmFsbHksIEkgY2hlY2tlZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0YWJpbGl0eS4KKiAgIGBTRUNDT01QYAoqICAgYFNFQ0NPTVBfRklMVEVSYAoqICAgYENPTVBBVGAgKG5lZWRlZCBiZWNhdXNlIG9mIGNvbXBhdC1yZWxhdGVkIGxvZ2ljIGluIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gKQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUEFUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTc3NT1jb25maWcgS1VTRVJfSEVMUEVSU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xODAxLVxuYXJjaC9hcm02NC9LY29uZmlnOjE4MDI6Y29uZmlnIENPTVBBVF9WRFNPXG5hcmNoL2FybTY0L0tjb25maWctMTgwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIHZEU08gZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTgxNT1jb25maWcgVEhVTUIyX0NPTVBBVF9WRFNPXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE4MjItXG5hcmNoL2FybTY0L0tjb25maWc6MTgyMzpjb25maWcgQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODI0LVx0Ym9vbCBcJiMzNDtGaXggdXAgbWlzYWxpZ25lZCBtdWx0aS13b3JkIGxvYWRzIGFuZCBzdG9yZXMgaW4gdXNlciBzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBjb25maWcgaGVyZS4gR29vZCwgYENPTVBBVGAgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbjsgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggdGhpcyBgU0VDQ09NUGAgYW5kIGBTRUNDT01QX0ZJTFRFUmAgY29tYm8uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNldHRpbmdzLiBHb3R0YSBlbnN1cmUgbm8gb3ZlcnNpZ2h0cyBoZXJlLiBHb3R0YSBjb25maXJtIHRoZSBTRUNDT01QIHBvbGljaWVzIGFyZSB3ZWxsLWRlZmluZWQuIEFscmlnaHQsIGxldCYjMzk7cyBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDQ09NUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9NjI4PWNvbmZpZyBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbi0tXG5hcmNoL0tjb25maWctNjQ2LVxuYXJjaC9LY29uZmlnOjY0Nzpjb25maWcgU0VDQ09NUFxuYXJjaC9LY29uZmlnLTY0OC1cdHByb21wdCBcJiMzNDtFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgZXhlY3V0ZSB1bnRydXN0ZWQgYnl0ZWNvZGVcJiMzNDtcbi0tXG5hcmNoL0tjb25maWctNjYzLVxuYXJjaC9LY29uZmlnOjY2NDpjb25maWcgU0VDQ09NUF9GSUxURVJcbmFyY2gvS2NvbmZpZy02NjUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9LY29uZmlnLTY3My1cbmFyY2gvS2NvbmZpZzo2NzQ6Y29uZmlnIFNFQ0NPTVBfQ0FDSEVfREVCVUdcbmFyY2gvS2NvbmZpZy02NzUtXHRib29sIFwmIzM0O1Nob3cgc2VjY29tcCBmaWx0ZXIgY2FjaGUgc3RhdHVzIGluIC9wcm9jL3BpZC9zZWNjb21wX2NhY2hlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjEyCgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBcm02NCBTeXN0ZW0gQ2FsbCBNaWdyYXRpb24gUGF0Y2gqKgoKT2theSwgdGhpcyBsb29rcyB2YWxpZC4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhpcyBwYXRjaCYjMzk7cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzIEkgbmVlZCB0byBjb25zaWRlcj8gUmlnaHQsIGl0IG1vZGlmaWVzIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlbGVjdCBgR0VORVJJQ19FTlRSWWAuIGBHRU5FUklDX0VOVFJZYCBpcyAqc2VsZWN0ZWQqLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSBpdCBleHBsaWNpdGx5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvcmUgb2YgdGhpczogdGhlIHBhdGNoIG1vdmVzIGFybTY0IHRvIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCYjMzk7cyBkaXRjaGluZyB0aGUgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIGdlbmVyaWMgYHN5c2NhbGxfdHJhY2VfZW50ZXIoKWAgYW5kIGBzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsoKWAgZnVuY3Rpb25zLiBJdCBhbHNvIG1vZGlmaWVzIGBzZWN1cmVfY29tcHV0aW5nKClgIGFjcm9zcyB0aGUgdHJlZSB0byByZXR1cm4gYSBib29sZWFuIGluc3RlYWQgb2YgYW4gaW50ZWdlci4gVGhhdCYjMzk7cyBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHN5c2NhbGxzIHdvcmsgb24gYXJtNjQsIGFuZCBpdCByaXBwbGVzIG91dCB0byBzZWNjb21wIGhhbmRsaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKVGhlcmVmb3JlLCBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHRhcmdldCB0aGUgc3BlY2lmaWMgbmV3IGVudHJ5IHBvaW50cyBvbiBhcm02NCBpbnRyb2R1Y2VkIGJ5IHRoZSBnZW5lcmljIGVudHJ5IG1lY2hhbmlzbS4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhpbmdzIGxpa2UgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIEFuZCwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBzaW5nbGUtc3RlcCBwdHJhY2UgaW50ZXJhY3Rpb24sIHNpbmNlIHRoYXQgd2FzIG1vZGlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyBlbnRyeS4KClRvIGV4ZXJjaXNlIHRoZSBzZWNjb21wIGNoYW5nZXMgYW5kIHRoZSBjb21wYXQgYnJhbmNoIG9mIHRoZSB2ZHNvIHNpZ3JldHVybiBjaGVjaywgSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYFNFQ0NPTVBgLCBgU0VDQ09NUF9GSUxURVJgLCBhbmQgYENPTVBBVGAuCgpNeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZToKCiogICBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYAoqICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYAoqICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAKCldhaXQuLi4gSSBzZWUgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgKmFsc28qIGFkZGVkIGFzIGEgd2VhayBmdW5jdGlvbiBpbiBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gbW9yZSB0aGFuIG9uZSBwbGFjZS4KCkhtbSwgd2hhdCBhYm91dCBmdXp6aW5nIGBfX3NlY3VyZV9jb21wdXRpbmdgIGRpcmVjdGx5PyBJdCYjMzk7cyBhIGhvdCBwYXRoLCBhbmQgaXQmIzM5O3MgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEhvd2V2ZXIsIGl0JiMzOTtzIHRvbyByaXNreSB0byBpbmNsdWRlIGluIHRoaXMgY3VycmVudCBmb2N1cy4gSSBkb24mIzM5O3Qgd2FudCB0byBza2V3IHRoZSByZXN1bHRzIGJ5IGluY2x1ZGluZyBjb2RlIHRoYXQgaXMgdG9vIGJyb2FkbHkgY2hhbmdlZC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLi4uIE9rYXksIGBwdHJhY2Vfc2F2ZV9yZWdgIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgIGFyZSBhbGwgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgbWVhbnMgSSBjYW4mIzM5O3QgdGFyZ2V0IHRoZW0gZGlyZWN0bHkgZm9yIGZ1enppbmcuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCB3aXRoIHRoZXNlIHRocmVlIGZvY3VzIHN5bWJvbHMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNDT01QJiMzNDssCiAgICAmIzM0O1NFQ0NPTVBfRklMVEVSJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICAgJiMzNDt1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCYjMzQ7LAogICAgJiMzNDt1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNDT01QJiMzNDssCiAgICAmIzM0O1NFQ0NPTVBfRklMVEVSJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybiYjMzQ7LAogICAgJiMzNDt1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcCYjMzQ7LAogICAgJiMzNDt1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjc6NDcuNjk4MjUwMTExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NDU4NDExNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ0NPTVBcIixcbiAgICBcIlNFQ0NPTVBfRklMVEVSXCIsXG4gICAgXCJDT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgICBcInVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwXCIsXG4gICAgXCJ1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjQ3LjY5ODI1NzUyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzIzMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDM2NjlmOTQyZWI1M2VkZTBmOTIxNGRlMzZlOGNmNDNiMDE4OTg5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxNToyNzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggMDY4Nzc2MGVhNDY2OTguLjI3ZDk4NDdiMTA4MjM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHZvaWQpXFxuIFxcdCAqIElmIHRoaXMgZmFpbHMsIHNlY2NvbXAgbWF5IGFscmVhZHkgaGF2ZSBzZXQgdXAgdGhlIHJldHVybiB2YWx1ZVxcbiBcXHQgKiAoZS5nLiBTRUNDT01QX1JFVF9FUlJOTyAvIFRSQUNFKS5cXG4gXFx0ICovXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcXG4rXFx0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpIHtcXG4gXFx0XFx0aWYgKHJlZ3MtXFx1MDAzZXIxOSA9PSAwIFxcdTAwMjZcXHUwMDI2IHJlZ3MtXFx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxcbiBcXHRcXHRcXHRzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncywgLUVOT1NZUywgMCk7XFxuIFxcdFxcdHN5c2NhbGxfc2V0X25yKGN1cnJlbnQsIHJlZ3MsIC0xKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXFxuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC04NTUsNyArODU1LDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFxuIFxcdC8qIERvIHNlY2NvbXAgYWZ0ZXIgcHRyYWNlOyBzeXNjYWxsIG1heSBoYXZlIGNoYW5nZWQuICovXFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuICNlbHNlXFxuIFxcdC8qIFhYWDogcmVtb3ZlIHRoaXMgb25jZSBPQUJJIGdldHMgZml4ZWQgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuaW5kZXggYjNhZmUwNjg4OTE5YmQuLmFlYTY4NmRjZTNkNWFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbkBAIC0xMjgsOSArMTI4LDkgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXFxuIFxcdHNlbGVjdCBHRU5FUklDX0NQVV9WVUxORVJBQklMSVRJRVNcXG4gXFx0c2VsZWN0IEdFTkVSSUNfRUFSTFlfSU9SRU1BUFxcbitcXHRzZWxlY3QgR0VORVJJQ19FTlRSWVxcbiBcXHRzZWxlY3QgR0VORVJJQ19JRExFX1BPTExfU0VUVVBcXG4gXFx0c2VsZWN0IEdFTkVSSUNfSU9SRU1BUFxcbi1cXHRzZWxlY3QgR0VORVJJQ19JUlFfRU5UUllcXG4gXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSVxcbiBcXHRzZWxlY3QgR0VORVJJQ19JUlFfS0VYRUNfQ0xFQVJfVk1fRk9SV0FSRFxcbiBcXHRzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcXG5pbmRleCBkMjc3OWQ2MDRjN2JlMi4uZjQzZDRkZWE5MTZhNWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWxmLmhcXG5AQCAtMTg1LDYgKzE4NSw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIHN0cnVjdCBsaW51eF9iaW5wcm07XFxuIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgdXNlc19pbnRlcnApO1xcbitleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbiBcXG4gLyogMUdCIG9mIFZBICovXFxuICNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oXFxuaW5kZXggY2FiOGNkNzhmNjkzODUuLmQ4YmY0YmYzNDJlODBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oXFxuQEAgLTMsMTQgKzMsMjEgQEBcXG4gI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXFxuICNkZWZpbmUgX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cmFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGhyZWFkX2luZm8uaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vY29tcGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RhaWZmbGFncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Zwc2ltZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL210ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFxcdTAwM2VcXG4gXFxuK2VudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcXG4rXFx0UFRSQUNFX1NZU0NBTExfRU5URVIgPSAwLFxcbitcXHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxcbit9O1xcbitcXG4gI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpXFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9leGl0X3RvX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbkBAIC01NCw0ICs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxcbiBcXG4gI2RlZmluZSBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkIGFyY2hfaXJxZW50cnlfZXhpdF9uZWVkX3Jlc2NoZWRcXG4gXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCAqcmVnbm8pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxcbitcXHQgKiBleGl0IHN0b3BzIGJlY2F1c2Ugd2UgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHN0b3AgaGFzIGJlZW5cXG4rXFx0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcXG4rXFx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxcbitcXHQgKiBhbmQgcmVzdG9yaW5nIGl0cyBvbGQgdmFsdWUgYWZ0ZXIgdGhlIHN0b3AuIFRoaXMgbWVhbnMgdGhhdDpcXG4rXFx0ICpcXG4rXFx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXFxuK1xcdCAqICAgaWdub3JlZC9kaXNjYXJkZWQuXFxuK1xcdCAqXFxuK1xcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXFxuK1xcdCAqICAgc28gdGhlIHRyYWNlciBjYW5ub3Qgc2F2ZSBpdCBhbmQgcmVzdG9yZSBpdCBsYXRlci5cXG4rXFx0ICpcXG4rXFx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xcbitcXHQgKiAgICh0aGUgbGF0dGVyIGRvIG5vdCBub2JibGUgYW55IHJlZ2lzdGVycykuXFxuK1xcdCAqL1xcbitcXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XFxuK1xcdHNhdmVkX3JlZyA9IHJlZ3MtXFx1MDAzZXJlZ3NbKnJlZ25vXTtcXG4rXFx0cmVncy1cXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xcbitcXG4rXFx0cmV0dXJuIHNhdmVkX3JlZztcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcdGludCByZWdubywgcmV0O1xcbitcXG4rXFx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcXHUwMDI2cmVnbm8pO1xcbitcXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGZvcmdldF9zeXNjYWxsKHJlZ3MpO1xcbitcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IHN0ZXApXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuK1xcdGludCByZWdubztcXG4rXFxuK1xcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FWElULCBcXHUwMDI2cmVnbm8pO1xcbitcXHRpZiAoIXN0ZXApIHtcXG4rXFx0XFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XFxuK1xcdFxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0XFxuK1xcdFxcdCAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGVcXG4rXFx0XFx0ICogc3RhdGUgbWFjaGluZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpO1xcbitcXHR9XFxuK31cXG4rXFxuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdCBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0XFxuK1xcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggNWU0YzdmYzQ0ZjczMTUuLjg0YjFjMzYyMzNkNDFlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYXVkaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yc2VxLmhcXHUwMDNlXFxuIFxcbiB0eXBlZGVmIGxvbmcgKCpzeXNjYWxsX2ZuX3QpKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4gXFxuQEAgLTEyMCw3ICsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0cmV0dXJuIEFVRElUX0FSQ0hfQUFSQ0g2NDtcXG4gfVxcbiBcXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLVxcbiAjZW5kaWZcXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuaW5kZXggNWQ3ZmUzZTE1M2M4NTAuLjNmNjIxYmEwZjk2MTM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxcbkBAIC00Niw2ICs0Niw3IEBAIHN0cnVjdCB0aHJlYWRfaW5mbyB7XFxuIFxcdHU2NFxcdFxcdFxcdG1wYW1fcGFydGlkX3BtZztcXG4gI2VuZGlmXFxuIFxcdHUzMlxcdFxcdFxcdGNwdTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHN5c2NhbGxfd29yazsgICAvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spXFx0XFxcXFxcbkBAIC02OCwxMSArNjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XFxuICNkZWZpbmUgVElGX1VQUk9CRVxcdFxcdDVcXHQvKiB1cHJvYmUgYnJlYWtwb2ludCBvciBzaW5nbGVzdGVwICovXFxuICNkZWZpbmUgVElGX01URV9BU1lOQ19GQVVMVFxcdDZcXHQvKiBNVEUgQXN5bmNocm9ub3VzIFRhZyBDaGVjayBGYXVsdCAqL1xcbiAjZGVmaW5lIFRJRl9OT1RJRllfU0lHTkFMXFx0N1xcdC8qIHNpZ25hbCBub3RpZmljYXRpb25zIGV4aXN0ICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VcXHQ4XFx0Lyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi9cXG4tI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVFxcdDlcXHQvKiBzeXNjYWxsIGF1ZGl0aW5nICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVFxcdDEwXFx0Lyogc3lzY2FsbCB0cmFjZXBvaW50IGZvciBmdHJhY2UgKi9cXG4tI2RlZmluZSBUSUZfU0VDQ09NUFxcdFxcdDExXFx0Lyogc3lzY2FsbCBzZWN1cmUgY29tcHV0aW5nICovXFxuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXFx0XFx0MTJcXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cXG4gI2RlZmluZSBUSUZfUEFUQ0hfUEVORElOR1xcdDEzXFx0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xcbiAjZGVmaW5lIFRJRl9NRU1ESUVcXHRcXHQxOFxcdC8qIGlzIHRlcm1pbmF0aW5nIGR1ZSB0byBPT00ga2lsbGVyICovXFxuICNkZWZpbmUgVElGX0ZSRUVaRVxcdFxcdDE5XFxuQEAgLTk0LDI0ICs5MCwxNCBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XFxuICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRURfTEFaWVxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9ORUVEX1JFU0NIRURfTEFaWSlcXG4gI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUVcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfTk9USUZZX1JFU1VNRSlcXG4gI2RlZmluZSBfVElGX0ZPUkVJR05fRlBTVEFURVxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9GT1JFSUdOX0ZQU1RBVEUpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0UpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1NZU0NBTExfQVVESVQpXFxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxcbi0jZGVmaW5lIF9USUZfU0VDQ09NUFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9TRUNDT01QKVxcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9FTVVcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1lTQ0FMTF9FTVUpXFxuICNkZWZpbmUgX1RJRl9QQVRDSF9QRU5ESU5HXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1BBVENIX1BFTkRJTkcpXFxuICNkZWZpbmUgX1RJRl9VUFJPQkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfVVBST0JFKVxcbi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIFRJRl9TSU5HTEVTVEVQKVxcbiAjZGVmaW5lIF9USUZfMzJCSVRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfMzJCSVQpXFxuICNkZWZpbmUgX1RJRl9TVkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfU1ZFKVxcbiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX01URV9BU1lOQ19GQVVMVClcXG4gI2RlZmluZSBfVElGX05PVElGWV9TSUdOQUxcXHQoMSBcXHUwMDNjXFx1MDAzYyBUSUZfTk9USUZZX1NJR05BTClcXG4gI2RlZmluZSBfVElGX1RTQ19TSUdTRUdWXFx0KDEgXFx1MDAzY1xcdTAwM2MgVElGX1RTQ19TSUdTRUdWKVxcbiBcXG4tI2RlZmluZSBfVElGX1NZU0NBTExfV09SS1xcdChfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQgfCBcXFxcXFxuLVxcdFxcdFxcdFxcdCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB8IF9USUZfU0VDQ09NUCB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0IF9USUZfU1lTQ0FMTF9FTVUpXFxuLVxcbiAjaWZkZWYgQ09ORklHX1NIQURPV19DQUxMX1NUQUNLXFxuICNkZWZpbmUgSU5JVF9TQ1NcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zY3NfYmFzZVxcdD0gaW5pdF9zaGFkb3dfY2FsbF9zdGFjayxcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXFxuaW5kZXggMjkzMDc2NDJmNGM5MDQuLmM1MzY4MzgzOTE1NTM2IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jXFxuQEAgLTM4NSwxMSArMzg1LDE5IEBAIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiBcXG4gXFx0aWYgKCF0ZXN0X2FuZF9zZXRfdGlfdGhyZWFkX2ZsYWcodGksIFRJRl9TSU5HTEVTVEVQKSlcXG4gXFx0XFx0c2V0X3JlZ3Nfc3Bzcl9zcyh0YXNrX3B0X3JlZ3ModGFzaykpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5zdXJlIHRoYXQgdGhlIGdlbmVyaWMgZW50cnkgY29kZSB0cmlnZ2VycyBhIHRyYXAgb25jZSBzdGVwcGluZ1xcbitcXHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXFxuK1xcdCAqIGFzIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZG9lcyBub3QgbmF0aXZlbHkgY2hlY2sgZm9yIFRJRl9TSU5HTEVTVEVQLlxcbitcXHQgKi9cXG4rXFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcXG4gfVxcbiBOT0tQUk9CRV9TWU1CT0wodXNlcl9lbmFibGVfc2luZ2xlX3N0ZXApO1xcbiBcXG4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiB7XFxuIFxcdGNsZWFyX3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8odGFzayksIFRJRl9TSU5HTEVTVEVQKTtcXG4rXFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9FWElUX1RSQVApO1xcbiB9XFxuIE5PS1BST0JFX1NZTUJPTCh1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXApO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggNGQwODU5OGUyODkxZDMuLjYxYTY2ODY4Mjk0NzE1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtOCw3ICs4LDYgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuXFxuICAqL1xcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1ZGl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuQEAgLTE4LDcgKzE3LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWNjb21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lnbmFsLmhcXHUwMDNlXFxuQEAgLTI4LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h3X2JyZWFrcG9pbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3NldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZWxmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yc2VxLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG5AQCAtMzgsMTMgKzM1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb2ludGVyX2F1dGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc20vc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RyYXBzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3lzdGVtX21pc2MuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcbi0jaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmhcXHUwMDNlXFxuLVxcbiBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHRpbnQgb2Zmc2V0O1xcbkBAIC0yMzM5LDExNCArMjMzMiw2IEBAIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LFxcbiBcXHRyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpO1xcbiB9XFxuIFxcbi1lbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7XFxuLVxcdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcXG4tXFx0UFRSQUNFX1NZU0NBTExfRVhJVCxcXG4tfTtcXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJhY2Vfc2F2ZV9yZWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCAqcmVnbm8pXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxcbi1cXHQgKiBleGl0IHN0b3BzIGJlY2F1c2Ugd2UgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHN0b3AgaGFzIGJlZW5cXG4tXFx0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcXG4tXFx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxcbi1cXHQgKiBhbmQgcmVzdG9yaW5nIGl0cyBvbGQgdmFsdWUgYWZ0ZXIgdGhlIHN0b3AuIFRoaXMgbWVhbnMgdGhhdDpcXG4tXFx0ICpcXG4tXFx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXFxuLVxcdCAqICAgaWdub3JlZC9kaXNjYXJkZWQuXFxuLVxcdCAqXFxuLVxcdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXFxuLVxcdCAqICAgc28gdGhlIHRyYWNlciBjYW5ub3Qgc2F2ZSBpdCBhbmQgcmVzdG9yZSBpdCBsYXRlci5cXG4tXFx0ICpcXG4tXFx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xcbi1cXHQgKiAgICh0aGUgbGF0dGVyIGRvIG5vdCBub2JibGUgYW55IHJlZ2lzdGVycykuXFxuLVxcdCAqL1xcbi1cXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XFxuLVxcdHNhdmVkX3JlZyA9IHJlZ3MtXFx1MDAzZXJlZ3NbKnJlZ25vXTtcXG4tXFx0cmVncy1cXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xcbi1cXG4tXFx0cmV0dXJuIHNhdmVkX3JlZztcXG4tfVxcbi1cXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcXG4tXFx0aW50IHJlZ25vLCByZXQ7XFxuLVxcbi1cXHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsIFxcdTAwMjZyZWdubyk7XFxuLVxcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Zm9yZ2V0X3N5c2NhbGwocmVncyk7XFxuLVxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcXG4tXFx0aW50IHJlZ25vO1xcbi1cXG4tXFx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFxcdTAwMjZyZWdubyk7XFxuLVxcdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcXG4tXFx0XFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XFxuLVxcdFxcdHJlZ3MtXFx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyZWdzLVxcdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFNpZ25hbCBhIHBzZXVkby1zdGVwIGV4Y2VwdGlvbiBzaW5jZSB3ZSBhcmUgc3RlcHBpbmcgYnV0XFxuLVxcdFxcdCAqIHRyYWNlciBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpc3RlcnMgbWF5IGhhdmUgcmV3b3VuZCB0aGVcXG4tXFx0XFx0ICogc3RhdGUgbWFjaGluZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDEpO1xcbi1cXHR9XFxuLX1cXG4tXFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSByZWFkX3RocmVhZF9mbGFncygpO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgKF9USUZfU1lTQ0FMTF9FTVUgfCBfVElGX1NZU0NBTExfVFJBQ0UpKSB7XFxuLVxcdFxcdHJldCA9IHJlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpO1xcbi1cXHRcXHRpZiAocmV0IHx8IChmbGFncyBcXHUwMDI2IF9USUZfU1lTQ0FMTF9FTVUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gTk9fU1lTQ0FMTDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgYWZ0ZXIgcHRyYWNlOyBmYWlsdXJlcyBzaG91bGQgYmUgZmFzdC4gKi9cXG4tXFx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIE5PX1NZU0NBTEw7XFxuLVxcbi1cXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcXG4tXFx0XFx0dHJhY2Vfc3lzX2VudGVyKHJlZ3MsIHJlZ3MtXFx1MDAzZXN5c2NhbGxubyk7XFxuLVxcbi1cXHRhdWRpdF9zeXNjYWxsX2VudHJ5KHJlZ3MtXFx1MDAzZXN5c2NhbGxubywgcmVncy1cXHUwMDNlb3JpZ194MCwgcmVncy1cXHUwMDNlcmVnc1sxXSxcXG4tXFx0XFx0XFx0ICAgIHJlZ3MtXFx1MDAzZXJlZ3NbMl0sIHJlZ3MtXFx1MDAzZXJlZ3NbM10pO1xcbi1cXG4tXFx0cmV0dXJuIHJlZ3MtXFx1MDAzZXN5c2NhbGxubztcXG4tfVxcbi1cXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XFxuLVxcbi1cXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XFxuLVxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVClcXG4tXFx0XFx0dHJhY2Vfc3lzX2V4aXQocmVncywgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpKTtcXG4tXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IChfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NJTkdMRVNURVApKVxcbi1cXHRcXHRyZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MpO1xcbi1cXG4tXFx0cnNlcV9zeXNjYWxsKHJlZ3MpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cXG4gICogV2UgcGVybWl0IHVzZXJzcGFjZSB0byBzZXQgU1NCUyAoQUFyY2g2NCBiaXQgMTIsIEFBcmNoMzIgYml0IDIzKSB3aGljaCBpc1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXFxuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcXG5AQCAtOCw4ICs4LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYWNoZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEtZW50cnktY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcXG5pbmRleCAzNThkZGZiZjE0MDFhYy4uZTBhOThmYWMzYjg1NjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxuQEAgLTU0LDE1ICs1NSwxMSBAQCBzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuIFxcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAwLCByZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzX3N5c2NhbGxfd29yayh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi17XFxuLVxcdHJldHVybiB1bmxpa2VseShmbGFncyBcXHUwMDI2IF9USUZfU1lTQ0FMTF9XT1JLKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcXG4rXFx0dW5zaWduZWQgbG9uZyB3b3JrO1xcbiBcXG4gXFx0cmVncy1cXHUwMDNlb3JpZ194MCA9IHJlZ3MtXFx1MDAzZXJlZ3NbMF07XFxuIFxcdHJlZ3MtXFx1MDAzZXN5c2NhbGxubyA9IHNjbm87XFxuQEAgLTk1LDcgKzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGhhc19zeXNjYWxsX3dvcmsoZmxhZ3MpKSB7XFxuK1xcdHdvcmsgPSBSRUFEX09OQ0UoY3VycmVudF90aHJlYWRfaW5mbygpLVxcdTAwM2VzeXNjYWxsX3dvcmspO1xcbitcXHRpZiAodW5saWtlbHkod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUikpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIGRlLWZhY3RvIHN0YW5kYXJkIHdheSB0byBza2lwIGEgc3lzdGVtIGNhbGwgdXNpbmcgcHRyYWNlXFxuIFxcdFxcdCAqIGlzIHRvIHNldCB0aGUgc3lzdGVtIGNhbGwgdG8gLTEgKE5PX1NZU0NBTEwpIGFuZCBzZXQgeDAgdG8gYVxcbkBAIC0xMTMsMjYgKzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXFxuIFxcdFxcdFxcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcXG4tXFx0XFx0c2NubyA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncyk7XFxuK1xcdFxcdHNjbm8gPSBzeXNjYWxsX3RyYWNlX2VudGVyKHJlZ3MsIHdvcmspO1xcbiBcXHRcXHRpZiAoc2NubyA9PSBOT19TWVNDQUxMKVxcbiBcXHRcXHRcXHRnb3RvIHRyYWNlX2V4aXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGludm9rZV9zeXNjYWxsKHJlZ3MsIHNjbm8sIHNjX25yLCBzeXNjYWxsX3RhYmxlKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSB0cmFjaW5nIHN0YXR1cyBtYXkgaGF2ZSBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LCBzbyB3ZSBoYXZlIHRvXFxuLVxcdCAqIGNoZWNrIGFnYWluLiBIb3dldmVyLCBpZiB3ZSB3ZXJlIHRyYWNpbmcgZW50cnksIHRoZW4gd2UgYWx3YXlzIHRyYWNlXFxuLVxcdCAqIGV4aXQgcmVnYXJkbGVzcywgYXMgdGhlIG9sZCBlbnRyeSBhc3NlbWJseSBkaWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIWhhc19zeXNjYWxsX3dvcmsoZmxhZ3MpIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19ERUJVR19SU0VRKSkge1xcbi1cXHRcXHRmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XFxuLVxcdFxcdGlmICghaGFzX3N5c2NhbGxfd29yayhmbGFncykgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IF9USUZfU0lOR0xFU1RFUCkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4gdHJhY2VfZXhpdDpcXG4tXFx0c3lzY2FsbF90cmFjZV9leGl0KHJlZ3MpO1xcbitcXHRzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsocmVncyk7XFxuIH1cXG4gXFxuIHZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXFxuaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xcbkBAIC0zNDMsMyArMzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBzaWd0cmFtcDtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQ09NUEFUXFxuK1xcdGlmIChpc19jb21wYXRfdGFzaygpKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc2lncGFnZSA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vjb250ZXh0LnNpZ3BhZ2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmVncy1cXHUwMDNlcGMgXFx1MDAzZT0gc2lncGFnZSBcXHUwMDI2XFx1MDAyNiByZWdzLVxcdTAwM2VwYyBcXHUwMDNjIChzaWdwYWdlICsgUEFHRV9TSVpFKTtcXG4rXFx0fVxcbisjZW5kaWZcXG4rXFx0c2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC52ZHNvLCBzaWd0cmFtcCk7XFxuK1xcbitcXHRyZXR1cm4gcmVncy1cXHUwMDNlcGMgPT0gKHNpZ3RyYW1wICsgOCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMzIzLDcgKzMyMyw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdGlmIChwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggZGY4ZWEyMjNjNzdiMWEuLjk0Njg4Njc5NGNlZGYwIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbkBAIC04NSw5ICs4NSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuICNlbmRpZlxcdC8qIF9fQVNNX0xPT05HQVJDSF9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmNcXG5AQCAtMjgxLDcgKzI4MSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcXG4gXFx0aWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKVxcbiBcXHRcXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkodGFza19wdF9yZWdzKGN1cnJlbnQpKTtcXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xcbmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC0xMzI4LDcgKzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxcbitcXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKVxcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcXG5pbmRleCA4YTE3YWI3ZTZlMGI5My4uNTY1YjUxYTQ4YzhhODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXFxuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXFxuQEAgLTM1MSw3ICszNTEsNyBAQCBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi9cXG4tXFx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcXG4rXFx0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuaW5kZXggODM0ZmNjNGY3YjU0M2IuLjRiM2M1MmVkNmU5ZDJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuQEAgLTEzOSw5ICsxMzksNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQVVESVRfQVJDSF9QUEM2NDtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4gI2VuZGlmXFx0LyogX0FTTV9TWVNDQUxMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbmluZGV4IDgwNjdlNjY2YTRjYTY4Li45ODdjOWE3ODgwNmY3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuQEAgLTExMiwxMSArMTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbClcXG4gXFx0cmVncy1cXHUwMDNlYTAgPSBmbihyZWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfZmx1c2hfaWNhY2hlKHVpbnRwdHJfdCwgdWludHB0cl90LCB1aW50cHRyX3QpO1xcbiBcXG4gYXNtbGlua2FnZSBsb25nIHN5c19yaXNjdl9od3Byb2JlKHN0cnVjdCByaXNjdl9od3Byb2JlICosIHNpemVfdCwgc2l6ZV90LFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbmluZGV4IDQyNzFlNDE2OWY0NWI2Li41ZjMxMGNhYWQxZmNlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxcbkBAIC04OSwxMSArODksNiBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4gXFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbi19XFxuLVxcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8xICwgXFxcIjBcXFwiIChyMilcXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8yICwgXFxcImRcXFwiIChyMykgU1lTQ0FMTF9GTVRfMVxcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXFxuaW5kZXggMDZmNzY1ZDcxYTI5NTEuLjg2ODdmMTdjYmU1YWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXFxuKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcXG5AQCAtNDYwLDcgKzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcXG4rKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xcbkBAIC0yNyw3ICsyNyw3IEBAIHZvaWQgaGFuZGxlX3N5c2NhbGwoc3RydWN0IHVtbF9wdF9yZWdzICpyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIERvIHRoZSBzZWNjb21wIGNoZWNrIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXFxuLVxcdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXFxuK1xcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHN5c2NhbGwgPSBVUFRfU1lTQ0FMTF9OUihyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcXG5pbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuY1xcbisrKyBiL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNcXG5AQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiBcXHRyZWdzLVxcdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcXG4gXFx0cmVncy1cXHUwMDNlYXggPSAtRU5PU1lTO1xcbiBcXHR0bXAgPSBzZWN1cmVfY29tcHV0aW5nKCk7XFxuLVxcdGlmICgoIXRtcCBcXHUwMDI2XFx1MDAyNiByZWdzLVxcdTAwM2VvcmlnX2F4ICE9IHN5c2NhbGxfbnIpIHx8IHJlZ3MtXFx1MDAzZWlwICE9IGFkZHJlc3MpIHtcXG4rXFx0aWYgKCh0bXAgXFx1MDAyNlxcdTAwMjYgcmVncy1cXHUwMDNlb3JpZ19heCAhPSBzeXNjYWxsX25yKSB8fCByZWdzLVxcdTAwM2VpcCAhPSBhZGRyZXNzKSB7XFxuIFxcdFxcdHdhcm5fYmFkX3ZzeXNjYWxsKEtFUk5fREVCVUcsIHJlZ3MsXFxuIFxcdFxcdFxcdFxcdCAgXFxcInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXBcXFwiKTtcXG4gXFx0XFx0Zm9yY2VfZXhpdF9zaWcoU0lHU1lTKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXFxuaW5kZXggYjgwZDU0YjJlYTM0ZTYuLmVmNzhmY2QzMThmZmNjIDEwMDY0NFxcbi0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xcbisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xcbkBAIC01NTMsOCArNTUzLDcgQEAgaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmVncy1cXHUwMDNlc3lzY2FsbCA9PSBOT19TWVNDQUxMIHx8XFxuLVxcdCAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcXG4rXFx0aWYgKHJlZ3MtXFx1MDAzZXN5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7XFxuIFxcdFxcdGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXFxuaW5kZXggNDE2YTMzNTIyNjFmZTguLjNmNjYzMjBlNDZkMzMxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXFxuQEAgLTEwMCw5ICsxMDAsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbFxcbiBcXG4gXFx0LyogRG8gc2VjY29tcCBhZnRlciBwdHJhY2UsIHRvIGNhdGNoIGFueSB0cmFjZXIgY2hhbmdlcy4gKi9cXG4gXFx0aWYgKHdvcmsgXFx1MDAyNiBTWVNDQUxMX1dPUktfU0VDQ09NUCkge1xcbi1cXHRcXHRyZXQgPSBfX3NlY3VyZV9jb21wdXRpbmcoKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtMUwpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmICghX19zZWN1cmVfY29tcHV0aW5nKCkpXFxuK1xcdFxcdFxcdHJldHVybiAtMUw7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEVpdGhlciBvZiB0aGUgYWJvdmUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSBzeXNjYWxsIG51bWJlciAqL1xcbkBAIC0xMTMsNyArMTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcXG4gXFxuIFxcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XFxuIFxcbi1cXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xcbitcXHRyZXR1cm4gc3lzY2FsbDtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcXG5pbmRleCA5Yjk1OTk3MmJmNGEyMi4uN2FmMzE3M2Y0MGU5ODUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxcbkBAIC0yMiwxNCArMjIsMTQgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY2NvbXAuaFxcdTAwM2VcXG4gXFxuLWV4dGVybiBpbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpO1xcbitleHRlcm4gYm9vbCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KHRlc3Rfc3lzY2FsbF93b3JrKFNFQ0NPTVApKSlcXG4gXFx0XFx0cmV0dXJuICBfX3NlY3VyZV9jb21wdXRpbmcoKTtcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuIGV4dGVybiB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpO1xcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjY29tcF9tb2RlKHN0cnVjdCBzZWNjb21wICpzKVxcbiBzdHJ1Y3Qgc2VjY29tcF9kYXRhO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpIHsgcmV0dXJuOyB9XFxuICNlbmRpZlxcbi1zdGF0aWMgaW5saW5lIGludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBwcmN0bF9nZXRfc2VjY29tcCh2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXFxuaW5kZXggMzg1OGE2ZmZkZDVjODQuLjczZDY5ZTAyODA3ZDg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxcbiBcXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbiBpbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciBfX3VzZXIgKnNlbGVjdG9yKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYyBiL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xcbmluZGV4IGQ4OWRmZmNjMmQ2NDI5Li5hY2Y1NDU3NzRkMzcyMCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcXG4rKysgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcXG5AQCAtMzIsNiArMzIsMTEgQEAgc3RhdGljIHZvaWQgdHJpZ2dlcl9zaWdzeXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdGZvcmNlX3NpZ19pbmZvKFxcdTAwMjZpbmZvKTtcXG4gfVxcbiBcXG4rYm9vbCBfX3dlYWsgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCAqc2QgPSBcXHUwMDI2Y3VycmVudC1cXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NlY2NvbXAuYyBiL2tlcm5lbC9zZWNjb21wLmNcXG5pbmRleCAwNjY5MDkzOTNjMzhmNS4uMWZlYzZlZmVkYWI2MjcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NlY2NvbXAuY1xcbisrKyBiL2tlcm5lbC9zZWNjb21wLmNcXG5AQCAtMTEwMCwxMiArMTEwMCwxMiBAQCB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpXFxuIFxcdGVsc2VcXG4gXFx0XFx0QlVHKCk7XFxuIH1cXG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbiB7XFxuIFxcdGludCB0aGlzX3N5c2NhbGwgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCBjdXJyZW50X3B0X3JlZ3MoKSk7XFxuIFxcbiBcXHRzZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG4gXFxuQEAgLTEyNTYsNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQgc2VjY29tcF9kb191c2VyX25vdGlmaWNhdGlvbihpbnQgdGhpc19zeXNjYWxsLFxcbiBcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuK3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbiB7XFxuIFxcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XFxuIFxcdHN0cnVjdCBzZWNjb21wX2RhdGEgc2Q7XFxuQEAgLTEyOTQsNyArMTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfVFJBQ0U6XFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gcHV0IGluIHRoaXMgc3RhdGUgYnkgdGhlIHB0cmFjZXIgYWxyZWFkeS4gKi9cXG4gXFx0XFx0aWYgKHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdFxcdC8qIEVOT1NZUyB0aGVzZSBjYWxscyBpZiB0aGVyZSBpcyBubyB0cmFjZXIgYXR0YWNoZWQuICovXFxuIFxcdFxcdGlmICghcHRyYWNlX2V2ZW50X2VuYWJsZWQoY3VycmVudCwgUFRSQUNFX0VWRU5UX1NFQ0NPTVApKSB7XFxuQEAgLTEzMzAsMTkgKzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcXG4gXFx0XFx0ICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XFxuIFxcdFxcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFxcdTAwMjZzZCkpXFxuIFxcdFxcdFxcdGdvdG8gc2tpcDtcXG4gXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfTE9HOlxcbiBcXHRcXHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgU0VDQ09NUF9SRVRfQUxMT1c6XFxuIFxcdFxcdC8qXFxuQEAgLTEzNTAsNyArMTM1MCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuIFxcdFxcdCAqIHRoaXMgYWN0aW9uIHNpbmNlIFNFQ0NPTVBfUkVUX0FMTE9XIGlzIHRoZSBzdGFydGluZ1xcbiBcXHRcXHQgKiBzdGF0ZSBpbiBzZWNjb21wX3J1bl9maWx0ZXJzKCkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfVEhSRUFEOlxcbiBcXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzpcXG5AQCAtMTM2Nyw0NiArMTM2Nyw0NiBAQCBzdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkb19leGl0KFNJR1NZUyk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIC0xOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7IC8qIHNraXAgdGhlIHN5c2NhbGwgZ28gZGlyZWN0bHkgdG8gc2lnbmFsIGhhbmRsaW5nICovXFxuIFxcdH1cXG4gXFxuIFxcdHVucmVhY2hhYmxlKCk7XFxuIFxcbiBza2lwOlxcbiBcXHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgbWF0Y2ggPyBtYXRjaC1cXHUwMDNlbG9nIDogZmFsc2UpO1xcbi1cXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxcbitzdGF0aWMgYm9vbCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcXG4ge1xcbiBcXHRCVUcoKTtcXG4gXFxuLVxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbiB7XFxuIFxcdGludCBtb2RlID0gY3VycmVudC1cXHUwMDNlc2VjY29tcC5tb2RlO1xcbiBcXHRpbnQgdGhpc19zeXNjYWxsO1xcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZXB0cmFjZSBcXHUwMDI2IFBUX1NVU1BFTkRfU0VDQ09NUCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcXG4gXFxuIFxcdHN3aXRjaCAobW9kZSkge1xcbiBcXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XFxuIFxcdFxcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRjYXNlIFNFQ0NPTVBfTU9ERV9GSUxURVI6XFxuIFxcdFxcdHJldHVybiBfX3NlY2NvbXBfZmlsdGVyKHRoaXNfc3lzY2FsbCwgZmFsc2UpO1xcbiBcXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cXG4gXFx0Y2FzZSBTRUNDT01QX01PREVfREVBRDpcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRkb19leGl0KFNJR0tJTEwpO1xcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjc6NDguMTg3NDI2NDg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc5NjkyMjMxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDQ09NUFwiLFxuICAgIFwiU0VDQ09NUF9GSUxURVJcIixcbiAgICBcIkNPTVBBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVyblwiLFxuICAgIFwidXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBcIixcbiAgICBcInVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1pZ3JhdGVzIGFybTY0IHRvIHVzZSB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGZvciBzeXN0ZW0gY2FsbHMsIHJlcGxhY2luZyBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgd2l0aCBnZW5lcmljIGhvb2tzLiBJdCBhbHNvIG1vZGlmaWVzIHNlY3VyZV9jb21wdXRpbmcoKSB0cmVlLXdpZGUgdG8gcmV0dXJuIGEgYm9vbGVhbi4gVGhpcyBpcyBhIG1ham9yIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c2NhbGwgcGF0aCBvbiBhcm02NCBhbmQgc2VjY29tcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGFybTY0LXNwZWNpZmljIGdlbmVyaWMgZW50cnkgaG9va3MgKGUuZy4sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybikgYW5kIHB0cmFjZSBzaW5nbGUtc3RlcCB0b2dnbGluZyB3aGljaCB3YXMgbW9kaWZpZWQgdG8gaW50ZXJhY3Qgd2l0aCBnZW5lcmljIGVudHJ5LiBTRUNDT01QIGFuZCBDT01QQVQgY29uZmlncyBhcmUgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIHNlY2NvbXAgbG9naWMgYW5kIGNvbXBhdCB2ZHNvIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzY2OWY5NDJlYjUzZWRlMGY5MjE0ZGUzNmU4Y2Y0M2IwMTg5ODlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTU6Mjc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jXG5pbmRleCAwNjg3NzYwZWE0NjY5OC4uMjdkOTg0N2IxMDgyMzcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmNcbkBAIC0zODcsNyArMzg3LDcgQEAgYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcbiBcdCAqIElmIHRoaXMgZmFpbHMsIHNlY2NvbXAgbWF5IGFscmVhZHkgaGF2ZSBzZXQgdXAgdGhlIHJldHVybiB2YWx1ZVxuIFx0ICogKGUuZy4gU0VDQ09NUF9SRVRfRVJSTk8gLyBUUkFDRSkuXG4gXHQgKi9cbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcbitcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGlmIChyZWdzLVx1MDAzZXIxOSA9PSAwIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZXIwID09ICh1bnNpZ25lZCBsb25nKS0xKVxuIFx0XHRcdHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzLCAtRU5PU1lTLCAwKTtcbiBcdFx0c3lzY2FsbF9zZXRfbnIoY3VycmVudCwgcmVncywgLTEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuY1xuaW5kZXggNzk1MWIyYzA2ZmVjNjAuLjUyMTA3NDU3MjVjYTdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNcbkBAIC04NTUsNyArODU1LDcgQEAgYXNtbGlua2FnZSBpbnQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcbiBcdC8qIERvIHNlY2NvbXAgYWZ0ZXIgcHRyYWNlOyBzeXNjYWxsIG1heSBoYXZlIGNoYW5nZWQuICovXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4rXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuICNlbHNlXG4gXHQvKiBYWFg6IHJlbW92ZSB0aGlzIG9uY2UgT0FCSSBnZXRzIGZpeGVkICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uYWVhNjg2ZGNlM2Q1YWMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTEyOCw5ICsxMjgsOSBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTXG4gXHRzZWxlY3QgR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTXG4gXHRzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQXG4rXHRzZWxlY3QgR0VORVJJQ19FTlRSWVxuIFx0c2VsZWN0IEdFTkVSSUNfSURMRV9QT0xMX1NFVFVQXG4gXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQXG4tXHRzZWxlY3QgR0VORVJJQ19JUlFfRU5UUllcbiBcdHNlbGVjdCBHRU5FUklDX0lSUV9JUElcbiBcdHNlbGVjdCBHRU5FUklDX0lSUV9LRVhFQ19DTEVBUl9WTV9GT1JXQVJEXG4gXHRzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuaW5kZXggZDI3NzlkNjA0YzdiZTIuLmY0M2Q0ZGVhOTE2YTViIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbGYuaFxuQEAgLTE4NSw2ICsxODUsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRcdFx0XHQgICAgICAgaW50IHVzZXNfaW50ZXJwKTtcbitleHRlcm4gYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuIC8qIDFHQiBvZiBWQSAqL1xuICNpZmRlZiBDT05GSUdfQ09NUEFUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbmluZGV4IGNhYjhjZDc4ZjY5Mzg1Li5kOGJmNGJmMzQyZTgwZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcbkBAIC0zLDE0ICszLDIxIEBAXG4gI2lmbmRlZiBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXG4gI2RlZmluZSBfQVNNX0FSTTY0X0VOVFJZX0NPTU1PTl9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aHJlYWRfaW5mby5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9kYWlmZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbiBcbitlbnVtIHB0cmFjZV9zeXNjYWxsX2RpciB7XG4rXHRQVFJBQ0VfU1lTQ0FMTF9FTlRFUiA9IDAsXG4rXHRQVFJBQ0VfU1lTQ0FMTF9FWElULFxuK307XG4rXG4gI2RlZmluZSBBUkNIX0VYSVRfVE9fVVNFUl9NT0RFX1dPUksgKF9USUZfTVRFX0FTWU5DX0ZBVUxUIHwgX1RJRl9GT1JFSUdOX0ZQU1RBVEUpXG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfZXhpdF90b191c2VyX21vZGVfd29yayhzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbkBAIC01NCw0ICs2MSw3MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCh2b2lkKVxuIFxuICNkZWZpbmUgYXJjaF9pcnFlbnRyeV9leGl0X25lZWRfcmVzY2hlZCBhcmNoX2lycWVudHJ5X2V4aXRfbmVlZF9yZXNjaGVkXG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHB0cmFjZV9zYXZlX3JlZyhzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbitcdFx0XHRcdFx0XHQgICAgIGVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIGRpcixcbitcdFx0XHRcdFx0XHQgICAgIGludCAqcmVnbm8pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWc7XG4rXG4rXHQvKlxuK1x0ICogV2UgaGF2ZSBzb21lIEFCSSB3ZWlyZG5lc3MgaGVyZSBpbiB0aGUgd2F5IHRoYXQgd2UgaGFuZGxlIHN5c2NhbGxcbitcdCAqIGV4aXQgc3RvcHMgYmVjYXVzZSB3ZSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCBoYXMgYmVlblxuK1x0ICogc2lnbmFsbGVkIGZyb20gc3lzY2FsbCBlbnRyeSBvciBzeXNjYWxsIGV4aXQgYnkgY2xvYmJlcmluZyBhIGdlbmVyYWxcbitcdCAqIHB1cnBvc2UgcmVnaXN0ZXIgKGlwL3IxMiBmb3IgQUFyY2gzMiwgeDcgZm9yIEFBcmNoNjQpIGluIHRoZSB0cmFjZWVcbitcdCAqIGFuZCByZXN0b3JpbmcgaXRzIG9sZCB2YWx1ZSBhZnRlciB0aGUgc3RvcC4gVGhpcyBtZWFucyB0aGF0OlxuK1x0ICpcbitcdCAqIC0gQW55IHdyaXRlcyBieSB0aGUgdHJhY2VyIHRvIHRoaXMgcmVnaXN0ZXIgZHVyaW5nIHRoZSBzdG9wIGFyZVxuK1x0ICogICBpZ25vcmVkL2Rpc2NhcmRlZC5cbitcdCAqXG4rXHQgKiAtIFRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGlzIG5vdCBhdmFpbGFibGUgZHVyaW5nIHRoZSBzdG9wLFxuK1x0ICogICBzbyB0aGUgdHJhY2VyIGNhbm5vdCBzYXZlIGl0IGFuZCByZXN0b3JlIGl0IGxhdGVyLlxuK1x0ICpcbitcdCAqIC0gU3lzY2FsbCBzdG9wcyBiZWhhdmUgZGlmZmVyZW50bHkgdG8gc2VjY29tcCBhbmQgcHNldWRvLXN0ZXAgdHJhcHNcbitcdCAqICAgKHRoZSBsYXR0ZXIgZG8gbm90IG5vYmJsZSBhbnkgcmVnaXN0ZXJzKS5cbitcdCAqL1xuK1x0KnJlZ25vID0gKGlzX2NvbXBhdF90YXNrKCkgPyAxMiA6IDcpO1xuK1x0c2F2ZWRfcmVnID0gcmVncy1cdTAwM2VyZWdzWypyZWdub107XG4rXHRyZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXSA9IGRpcjtcbitcbitcdHJldHVybiBzYXZlZF9yZWc7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuK1x0aW50IHJlZ25vLCByZXQ7XG4rXG4rXHRzYXZlZF9yZWcgPSBwdHJhY2Vfc2F2ZV9yZWcocmVncywgUFRSQUNFX1NZU0NBTExfRU5URVIsIFx1MDAyNnJlZ25vKTtcbitcdHJldCA9IHB0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdGZvcmdldF9zeXNjYWxsKHJlZ3MpO1xuK1x0cmVncy1cdTAwM2VyZWdzW3JlZ25vXSA9IHNhdmVkX3JlZztcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKyNkZWZpbmUgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbitcdFx0XHRcdFx0XHRcdCAgICBpbnQgc3RlcClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbitcdGludCByZWdubztcbitcbitcdHNhdmVkX3JlZyA9IHB0cmFjZV9zYXZlX3JlZyhyZWdzLCBQVFJBQ0VfU1lTQ0FMTF9FWElULCBcdTAwMjZyZWdubyk7XG4rXHRpZiAoIXN0ZXApIHtcbitcdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4rXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuK1x0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4rXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4rXHRcdCAqL1xuK1x0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbitcdH1cbit9XG4rXG4rI2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRcbitcbiAjZW5kaWYgLyogX0FTTV9BUk02NF9FTlRSWV9DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDVlNGM3ZmM0NGY3MzE1Li44NGIxYzM2MjMzZDQxZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hdWRpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuIFxuIHR5cGVkZWYgbG9uZyAoKnN5c2NhbGxfZm5fdCkoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuIFxuQEAgLTEyMCw3ICsxMjEsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcdHJldHVybiBBVURJVF9BUkNIX0FBUkNINjQ7XG4gfVxuIFxuLWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi12b2lkIHN5c2NhbGxfdHJhY2VfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tXG4gI2VuZGlmXHQvKiBfX0FTTV9TWVNDQUxMX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDVkN2ZlM2UxNTNjODUwLi4zZjYyMWJhMGY5NjEzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dTY0XHRcdFx0bXBhbV9wYXJ0aWRfcG1nO1xuICNlbmRpZlxuIFx0dTMyXHRcdFx0Y3B1O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRzeXNjYWxsX3dvcms7ICAgLyogU1lTQ0FMTF9XT1JLXyBmbGFncyAqL1xuIH07XG4gXG4gI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModHNrKVx0XFxcbkBAIC02OCwxMSArNjksNiBAQCB2b2lkIGFyY2hfc2V0dXBfbmV3X2V4ZWModm9pZCk7XG4gI2RlZmluZSBUSUZfVVBST0JFXHRcdDVcdC8qIHVwcm9iZSBicmVha3BvaW50IG9yIHNpbmdsZXN0ZXAgKi9cbiAjZGVmaW5lIFRJRl9NVEVfQVNZTkNfRkFVTFRcdDZcdC8qIE1URSBBc3luY2hyb25vdXMgVGFnIENoZWNrIEZhdWx0ICovXG4gI2RlZmluZSBUSUZfTk9USUZZX1NJR05BTFx0N1x0Lyogc2lnbmFsIG5vdGlmaWNhdGlvbnMgZXhpc3QgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFXHQ4XHQvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfQVVESVRcdDlcdC8qIHN5c2NhbGwgYXVkaXRpbmcgKi9cbi0jZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlRcdDEwXHQvKiBzeXNjYWxsIHRyYWNlcG9pbnQgZm9yIGZ0cmFjZSAqL1xuLSNkZWZpbmUgVElGX1NFQ0NPTVBcdFx0MTFcdC8qIHN5c2NhbGwgc2VjdXJlIGNvbXB1dGluZyAqL1xuLSNkZWZpbmUgVElGX1NZU0NBTExfRU1VXHRcdDEyXHQvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi9cbiAjZGVmaW5lIFRJRl9QQVRDSF9QRU5ESU5HXHQxM1x0LyogcGVuZGluZyBsaXZlIHBhdGNoaW5nIHVwZGF0ZSAqL1xuICNkZWZpbmUgVElGX01FTURJRVx0XHQxOFx0LyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi9cbiAjZGVmaW5lIFRJRl9GUkVFWkVcdFx0MTlcbkBAIC05NCwyNCArOTAsMTQgQEAgdm9pZCBhcmNoX3NldHVwX25ld19leGVjKHZvaWQpO1xuICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRURfTEFaWVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9ORUVEX1JFU0NIRURfTEFaWSlcbiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRVx0KDEgXHUwMDNjXHUwMDNjIFRJRl9OT1RJRllfUkVTVU1FKVxuICNkZWZpbmUgX1RJRl9GT1JFSUdOX0ZQU1RBVEVcdCgxIFx1MDAzY1x1MDAzYyBUSUZfRk9SRUlHTl9GUFNUQVRFKVxuLSNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0UpXG4tI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVRcdCgxIFx1MDAzY1x1MDAzYyBUSUZfU1lTQ0FMTF9BVURJVClcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfVFJBQ0VQT0lOVClcbi0jZGVmaW5lIF9USUZfU0VDQ09NUFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NFQ0NPTVApXG4tI2RlZmluZSBfVElGX1NZU0NBTExfRU1VXHQoMSBcdTAwM2NcdTAwM2MgVElGX1NZU0NBTExfRU1VKVxuICNkZWZpbmUgX1RJRl9QQVRDSF9QRU5ESU5HXHQoMSBcdTAwM2NcdTAwM2MgVElGX1BBVENIX1BFTkRJTkcpXG4gI2RlZmluZSBfVElGX1VQUk9CRVx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1VQUk9CRSlcbi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUFx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NJTkdMRVNURVApXG4gI2RlZmluZSBfVElGXzMyQklUXHRcdCgxIFx1MDAzY1x1MDAzYyBUSUZfMzJCSVQpXG4gI2RlZmluZSBfVElGX1NWRVx0XHQoMSBcdTAwM2NcdTAwM2MgVElGX1NWRSlcbiAjZGVmaW5lIF9USUZfTVRFX0FTWU5DX0ZBVUxUXHQoMSBcdTAwM2NcdTAwM2MgVElGX01URV9BU1lOQ19GQVVMVClcbiAjZGVmaW5lIF9USUZfTk9USUZZX1NJR05BTFx0KDEgXHUwMDNjXHUwMDNjIFRJRl9OT1RJRllfU0lHTkFMKVxuICNkZWZpbmUgX1RJRl9UU0NfU0lHU0VHVlx0KDEgXHUwMDNjXHUwMDNjIFRJRl9UU0NfU0lHU0VHVilcbiBcbi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9XT1JLXHQoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgXFxcbi1cdFx0XHRcdCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB8IF9USUZfU0VDQ09NUCB8IFxcXG4tXHRcdFx0XHQgX1RJRl9TWVNDQUxMX0VNVSlcbi1cbiAjaWZkZWYgQ09ORklHX1NIQURPV19DQUxMX1NUQUNLXG4gI2RlZmluZSBJTklUX1NDU1x0XHRcdFx0XHRcdFx0XFxcbiBcdC5zY3NfYmFzZVx0PSBpbml0X3NoYWRvd19jYWxsX3N0YWNrLFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbmluZGV4IDI5MzA3NjQyZjRjOTA0Li5jNTM2ODM4MzkxNTUzNiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmNcbkBAIC0zODUsMTEgKzM4NSwxOSBAQCB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiBcbiBcdGlmICghdGVzdF9hbmRfc2V0X3RpX3RocmVhZF9mbGFnKHRpLCBUSUZfU0lOR0xFU1RFUCkpXG4gXHRcdHNldF9yZWdzX3Nwc3Jfc3ModGFza19wdF9yZWdzKHRhc2spKTtcbitcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIHRyaWdnZXJzIGEgdHJhcCBvbmNlIHN0ZXBwaW5nXG4rXHQgKiBvdXQgb2YgYSBzeXN0ZW0gY2FsbCBwcmlvciB0byBleGVjdXRpbmcgYW55IHVzZXIgaW5zdHJ1Y3Rpb24sXG4rXHQgKiBhcyB0aGUgZ2VuZXJpYyBlbnRyeSBjb2RlIGRvZXMgbm90IG5hdGl2ZWx5IGNoZWNrIGZvciBUSUZfU0lOR0xFU1RFUC5cbitcdCAqL1xuK1x0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfRVhJVF9UUkFQKTtcbiB9XG4gTk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcbiBcbiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4ge1xuIFx0Y2xlYXJfdGlfdGhyZWFkX2ZsYWcodGFza190aHJlYWRfaW5mbyh0YXNrKSwgVElGX1NJTkdMRVNURVApO1xuK1x0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodGFzaywgU1lTQ0FMTF9FWElUX1RSQVApO1xuIH1cbiBOT0tQUk9CRV9TWU1CT0wodXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jXG5pbmRleCA0ZDA4NTk4ZTI4OTFkMy4uNjFhNjY4NjgyOTQ3MTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNcbkBAIC04LDcgKzgsNiBAQFxuICAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTHRkLlxuICAqL1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1ZGl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbkBAIC0xOCw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY2NvbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaWduYWwuaFx1MDAzZVxuQEAgLTI4LDcgKzI2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od19icmVha3BvaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuQEAgLTM4LDEzICszNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BvaW50ZXJfYXV0aC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdHJhcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zeXN0ZW1fbWlzYy5oXHUwMDNlXG4gXG4tI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4tI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmhcdTAwM2Vcbi1cbiBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQge1xuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMjMzOSwxMTQgKzIzMzIsNiBAQCBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCxcbiBcdHJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7XG4gfVxuIFxuLWVudW0gcHRyYWNlX3N5c2NhbGxfZGlyIHtcbi1cdFBUUkFDRV9TWVNDQUxMX0VOVEVSID0gMCxcbi1cdFBUUkFDRV9TWVNDQUxMX0VYSVQsXG4tfTtcbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0XHRcdCAgICAgZW51bSBwdHJhY2Vfc3lzY2FsbF9kaXIgZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgaW50ICpyZWdubylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHNvbWUgQUJJIHdlaXJkbmVzcyBoZXJlIGluIHRoZSB3YXkgdGhhdCB3ZSBoYW5kbGUgc3lzY2FsbFxuLVx0ICogZXhpdCBzdG9wcyBiZWNhdXNlIHdlIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdG9wIGhhcyBiZWVuXG4tXHQgKiBzaWduYWxsZWQgZnJvbSBzeXNjYWxsIGVudHJ5IG9yIHN5c2NhbGwgZXhpdCBieSBjbG9iYmVyaW5nIGEgZ2VuZXJhbFxuLVx0ICogcHVycG9zZSByZWdpc3RlciAoaXAvcjEyIGZvciBBQXJjaDMyLCB4NyBmb3IgQUFyY2g2NCkgaW4gdGhlIHRyYWNlZVxuLVx0ICogYW5kIHJlc3RvcmluZyBpdHMgb2xkIHZhbHVlIGFmdGVyIHRoZSBzdG9wLiBUaGlzIG1lYW5zIHRoYXQ6XG4tXHQgKlxuLVx0ICogLSBBbnkgd3JpdGVzIGJ5IHRoZSB0cmFjZXIgdG8gdGhpcyByZWdpc3RlciBkdXJpbmcgdGhlIHN0b3AgYXJlXG4tXHQgKiAgIGlnbm9yZWQvZGlzY2FyZGVkLlxuLVx0ICpcbi1cdCAqIC0gVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgdGhlIHN0b3AsXG4tXHQgKiAgIHNvIHRoZSB0cmFjZXIgY2Fubm90IHNhdmUgaXQgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuXG4tXHQgKlxuLVx0ICogLSBTeXNjYWxsIHN0b3BzIGJlaGF2ZSBkaWZmZXJlbnRseSB0byBzZWNjb21wIGFuZCBwc2V1ZG8tc3RlcCB0cmFwc1xuLVx0ICogICAodGhlIGxhdHRlciBkbyBub3Qgbm9iYmxlIGFueSByZWdpc3RlcnMpLlxuLVx0ICovXG4tXHQqcmVnbm8gPSAoaXNfY29tcGF0X3Rhc2soKSA/IDEyIDogNyk7XG4tXHRzYXZlZF9yZWcgPSByZWdzLVx1MDAzZXJlZ3NbKnJlZ25vXTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1sqcmVnbm9dID0gZGlyO1xuLVxuLVx0cmV0dXJuIHNhdmVkX3JlZztcbi19XG4tXG4tc3RhdGljIGludCByZXBvcnRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZztcbi1cdGludCByZWdubywgcmV0O1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSLCBcdTAwMjZyZWdubyk7XG4tXHRyZXQgPSBwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRpZiAocmV0KVxuLVx0XHRmb3JnZXRfc3lzY2FsbChyZWdzKTtcbi1cdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZXBvcnRfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVnO1xuLVx0aW50IHJlZ25vO1xuLVxuLVx0c2F2ZWRfcmVnID0gcHRyYWNlX3NhdmVfcmVnKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VYSVQsIFx1MDAyNnJlZ25vKTtcbi1cdGlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpIHtcbi1cdFx0cHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7XG4tXHRcdHJlZ3MtXHUwMDNlcmVnc1tyZWdub10gPSBzYXZlZF9yZWc7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZWdzLVx1MDAzZXJlZ3NbcmVnbm9dID0gc2F2ZWRfcmVnO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBTaWduYWwgYSBwc2V1ZG8tc3RlcCBleGNlcHRpb24gc2luY2Ugd2UgYXJlIHN0ZXBwaW5nIGJ1dFxuLVx0XHQgKiB0cmFjZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaXN0ZXJzIG1heSBoYXZlIHJld291bmQgdGhlXG4tXHRcdCAqIHN0YXRlIG1hY2hpbmUuXG4tXHRcdCAqL1xuLVx0XHRwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAxKTtcbi1cdH1cbi19XG4tXG4taW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkpIHtcbi1cdFx0cmV0ID0gcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7XG4tXHRcdGlmIChyZXQgfHwgKGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfRU1VKSlcbi1cdFx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cdH1cbi1cbi1cdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuLVx0XHRyZXR1cm4gTk9fU1lTQ0FMTDtcbi1cbi1cdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxuLVx0XHR0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy1cdTAwM2VzeXNjYWxsbm8pO1xuLVxuLVx0YXVkaXRfc3lzY2FsbF9lbnRyeShyZWdzLVx1MDAzZXN5c2NhbGxubywgcmVncy1cdTAwM2VvcmlnX3gwLCByZWdzLVx1MDAzZXJlZ3NbMV0sXG4tXHRcdFx0ICAgIHJlZ3MtXHUwMDNlcmVnc1syXSwgcmVncy1cdTAwM2VyZWdzWzNdKTtcbi1cbi1cdHJldHVybiByZWdzLVx1MDAzZXN5c2NhbGxubztcbi19XG4tXG4tdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHJlYWRfdGhyZWFkX2ZsYWdzKCk7XG4tXG4tXHRhdWRpdF9zeXNjYWxsX2V4aXQocmVncyk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKVxuLVx0XHR0cmFjZV9zeXNfZXhpdChyZWdzLCBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncykpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0cmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzKTtcbi1cbi1cdHJzZXFfc3lzY2FsbChyZWdzKTtcbi19XG4tXG4gLypcbiAgKiBTUFNSX0VMeCBiaXRzIHdoaWNoIGFyZSBhbHdheXMgYXJjaGl0ZWN0dXJhbGx5IFJFUzAgcGVyIEFSTSBEREkgMDQ4N0QuYS5cbiAgKiBXZSBwZXJtaXQgdXNlcnNwYWNlIHRvIHNldCBTU0JTIChBQXJjaDY0IGJpdCAxMiwgQUFyY2gzMiBiaXQgMjMpIHdoaWNoIGlzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY1xuaW5kZXggMzhlNmZhMjA0YzE3YjUuLjA5M2VlYmI5ZDc2NGFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jXG5AQCAtOCw4ICs4LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEtZW50cnktY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXG5pbmRleCAzNThkZGZiZjE0MDFhYy4uZTBhOThmYWMzYjg1NjcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRleHRfdHJhY2tpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRyYWNlLmhcdTAwM2VcbkBAIC01NCwxNSArNTUsMTEgQEAgc3RhdGljIHZvaWQgaW52b2tlX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzY25vLFxuIFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIDAsIHJldCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfc3lzY2FsbF93b3JrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4te1xuLVx0cmV0dXJuIHVubGlrZWx5KGZsYWdzIFx1MDAyNiBfVElGX1NZU0NBTExfV09SSyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuLVx0XHRcdCAgIGNvbnN0IHN5c2NhbGxfZm5fdCBzeXNjYWxsX3RhYmxlW10pXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF90YWJsZVtdKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSByZWFkX3RocmVhZF9mbGFncygpO1xuK1x0dW5zaWduZWQgbG9uZyB3b3JrO1xuIFxuIFx0cmVncy1cdTAwM2VvcmlnX3gwID0gcmVncy1cdTAwM2VyZWdzWzBdO1xuIFx0cmVncy1cdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xuQEAgLTk1LDcgKzkyLDggQEAgc3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSkge1xuK1x0d29yayA9IFJFQURfT05DRShjdXJyZW50X3RocmVhZF9pbmZvKCktXHUwMDNlc3lzY2FsbF93b3JrKTtcbitcdGlmICh1bmxpa2VseSh3b3JrIFx1MDAyNiBTWVNDQUxMX1dPUktfRU5URVIpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBkZS1mYWN0byBzdGFuZGFyZCB3YXkgdG8gc2tpcCBhIHN5c3RlbSBjYWxsIHVzaW5nIHB0cmFjZVxuIFx0XHQgKiBpcyB0byBzZXQgdGhlIHN5c3RlbSBjYWxsIHRvIC0xIChOT19TWVNDQUxMKSBhbmQgc2V0IHgwIHRvIGFcbkBAIC0xMTMsMjYgKzExMSwxNCBAQCBzdGF0aWMgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcbiBcdFx0ICovXG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0c3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MsIC1FTk9TWVMsIDApO1xuLVx0XHRzY25vID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzKTtcbitcdFx0c2NubyA9IHN5c2NhbGxfdHJhY2VfZW50ZXIocmVncywgd29yayk7XG4gXHRcdGlmIChzY25vID09IE5PX1NZU0NBTEwpXG4gXHRcdFx0Z290byB0cmFjZV9leGl0O1xuIFx0fVxuIFxuIFx0aW52b2tlX3N5c2NhbGwocmVncywgc2Nubywgc2NfbnIsIHN5c2NhbGxfdGFibGUpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSB0cmFjaW5nIHN0YXR1cyBtYXkgaGF2ZSBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LCBzbyB3ZSBoYXZlIHRvXG4tXHQgKiBjaGVjayBhZ2Fpbi4gSG93ZXZlciwgaWYgd2Ugd2VyZSB0cmFjaW5nIGVudHJ5LCB0aGVuIHdlIGFsd2F5cyB0cmFjZVxuLVx0ICogZXhpdCByZWdhcmRsZXNzLCBhcyB0aGUgb2xkIGVudHJ5IGFzc2VtYmx5IGRpZC5cbi1cdCAqL1xuLVx0aWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1JTRVEpKSB7XG4tXHRcdGZsYWdzID0gcmVhZF90aHJlYWRfZmxhZ3MoKTtcbi1cdFx0aWYgKCFoYXNfc3lzY2FsbF93b3JrKGZsYWdzKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX1RJRl9TSU5HTEVTVEVQKSlcbi1cdFx0XHRyZXR1cm47XG4tXHR9XG4tXG4gdHJhY2VfZXhpdDpcbi1cdHN5c2NhbGxfdHJhY2VfZXhpdChyZWdzKTtcbitcdHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVfd29yayhyZWdzKTtcbiB9XG4gXG4gdm9pZCBkb19lbDBfc3ZjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uYyBiL2FyY2gvYXJtNjQva2VybmVsL3Zkc28uY1xuaW5kZXggNTkyZGQ4NjY4ZGU0NjMuLjVhMDMxNGEzYzI2ZTgyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNcbkBAIC0zNDMsMyArMzQzLDE5IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IHVzZXNfaW50ZXJwKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4rYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzaWd0cmFtcDtcbitcbisjaWZkZWYgQ09ORklHX0NPTVBBVFxuK1x0aWYgKGlzX2NvbXBhdF90YXNrKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzaWdwYWdlID0gKHVuc2lnbmVkIGxvbmcpY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0LnNpZ3BhZ2U7XG4rXG4rXHRcdHJldHVybiByZWdzLVx1MDAzZXBjIFx1MDAzZT0gc2lncGFnZSBcdTAwMjZcdTAwMjYgcmVncy1cdTAwM2VwYyBcdTAwM2MgKHNpZ3BhZ2UgKyBQQUdFX1NJWkUpO1xuK1x0fVxuKyNlbmRpZlxuK1x0c2lndHJhbXAgPSAodW5zaWduZWQgbG9uZylWRFNPX1NZTUJPTChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQudmRzbywgc2lndHJhbXApO1xuK1xuK1x0cmV0dXJuIHJlZ3MtXHUwMDNlcGMgPT0gKHNpZ3RyYW1wICsgOCk7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvY3NreS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5pbmRleCA2YmI2ODVhMjY0NmI1Ni4uMTFjNWVmZjQxZTlkNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL2Nza3kva2VybmVsL3B0cmFjZS5jXG5AQCAtMzIzLDcgKzMyMyw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChwdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0aWYgKHNlY3VyZV9jb21wdXRpbmcoKSA9PSAtMSlcbitcdGlmICghc2VjdXJlX2NvbXB1dGluZygpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IGRmOGVhMjIzYzc3YjFhLi45NDY4ODY3OTRjZWRmMCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG5AQCAtODUsOSArODUsNCBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9hcmNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuICNlbmRpZlx0LyogX19BU01fTE9PTkdBUkNIX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5pbmRleCBjZmEyZGYyNGVjZWQxMi4uZDI0MTE0MDRiOWRmY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG4rKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jXG5AQCAtMjgxLDcgKzI4MSw3IEBAIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIodm9pZClcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSlcbiBcdFx0cmV0ID0gcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHRhc2tfcHRfcmVncyhjdXJyZW50KSk7XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbmluZGV4IDNmNGM5NGM4ODEyNDE3Li4wZDgwOWNkYTc1NDI5MiAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNcbkBAIC0xMzI4LDcgKzEzMjgsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmNcbmluZGV4IDhhMTdhYjdlNmUwYjkzLi41NjViNTFhNDhjOGE4NyAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuY1xuKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jXG5AQCAtMzUxLDcgKzM1MSw3IEBAIGxvbmcgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdH1cbiBcbiBcdC8qIERvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGFmdGVyIHB0cmFjZS4gKi9cbi1cdGlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpXG4rXHRpZiAoIXNlY3VyZV9jb21wdXRpbmcoKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgzNGZjYzRmN2I1NDNiLi40YjNjNTJlZDZlOWQyYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbkBAIC0xMzksOSArMTM5LDQgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHRlbHNlXG4gXHRcdHJldHVybiBBVURJVF9BUkNIX1BQQzY0O1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4gI2VuZGlmXHQvKiBfQVNNX1NZU0NBTExfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zeXNjYWxsLmhcbmluZGV4IDgwNjdlNjY2YTRjYTY4Li45ODdjOWE3ODgwNmY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3lzY2FsbC5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTExMiwxMSArMTEyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdWxvbmcgc3lzY2FsbClcbiBcdHJlZ3MtXHUwMDNlYTAgPSBmbihyZWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfZmx1c2hfaWNhY2hlKHVpbnRwdHJfdCwgdWludHB0cl90LCB1aW50cHRyX3QpO1xuIFxuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmlzY3ZfaHdwcm9iZShzdHJ1Y3QgcmlzY3ZfaHdwcm9iZSAqLCBzaXplX3QsIHNpemVfdCxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuaW5kZXggNDI3MWU0MTY5ZjQ1YjYuLjVmMzEwY2FhZDFmY2VjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaFxuQEAgLTg5LDExICs4OSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c2NhbGxfZ2V0X2FyY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIEFVRElUX0FSQ0hfUzM5MFg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAjZGVmaW5lIFNZU0NBTExfRk1UXzBcbiAjZGVmaW5lIFNZU0NBTExfRk1UXzEgLCBcIjBcIiAocjIpXG4gI2RlZmluZSBTWVNDQUxMX0ZNVF8yICwgXCJkXCIgKHIzKSBTWVNDQUxMX0ZNVF8xXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuY1xuaW5kZXggMDZmNzY1ZDcxYTI5NTEuLjg2ODdmMTdjYmU1YWRjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmNcbisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jXG5AQCAtNDYwLDcgKzQ2MCw3IEBAIGFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSlcbmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jXG5pbmRleCBiYTc0OTRmOWJmZTQxMi4uOTE2Y2Q3YWNjZWFmZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3N5c2NhbGwuY1xuKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9zeXNjYWxsLmNcbkBAIC0yNyw3ICsyNyw3IEBAIHZvaWQgaGFuZGxlX3N5c2NhbGwoc3RydWN0IHVtbF9wdF9yZWdzICpyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIERvIHRoZSBzZWNjb21wIGNoZWNrIGFmdGVyIHB0cmFjZTsgZmFpbHVyZXMgc2hvdWxkIGJlIGZhc3QuICovXG4tXHRpZiAoc2VjdXJlX2NvbXB1dGluZygpID09IC0xKVxuK1x0aWYgKCFzZWN1cmVfY29tcHV0aW5nKCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0c3lzY2FsbCA9IFVQVF9TWVNDQUxMX05SKHIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMgYi9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG5pbmRleCBlYTM2ZGU5ZmE4NjQxZC4uNmFlZDM5ODdiOWY5NjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG4rKysgYi9hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jXG5AQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIF9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIFx0cmVncy1cdTAwM2VvcmlnX2F4ID0gc3lzY2FsbF9ucjtcbiBcdHJlZ3MtXHUwMDNlYXggPSAtRU5PU1lTO1xuIFx0dG1wID0gc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0aWYgKCghdG1wIFx1MDAyNlx1MDAyNiByZWdzLVx1MDAzZW9yaWdfYXggIT0gc3lzY2FsbF9ucikgfHwgcmVncy1cdTAwM2VpcCAhPSBhZGRyZXNzKSB7XG4rXHRpZiAoKHRtcCBcdTAwMjZcdTAwMjYgcmVncy1cdTAwM2VvcmlnX2F4ICE9IHN5c2NhbGxfbnIpIHx8IHJlZ3MtXHUwMDNlaXAgIT0gYWRkcmVzcykge1xuIFx0XHR3YXJuX2JhZF92c3lzY2FsbChLRVJOX0RFQlVHLCByZWdzLFxuIFx0XHRcdFx0ICBcInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXBcIik7XG4gXHRcdGZvcmNlX2V4aXRfc2lnKFNJR1NZUyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jXG5pbmRleCBiODBkNTRiMmVhMzRlNi4uZWY3OGZjZDMxOGZmY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmNcbisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY1xuQEAgLTU1Myw4ICs1NTMsNyBAQCBpbnQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAocmVncy1cdTAwM2VzeXNjYWxsID09IE5PX1NZU0NBTEwgfHxcbi1cdCAgICBzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpIHtcbitcdGlmIChyZWdzLVx1MDAzZXN5c2NhbGwgPT0gTk9fU1lTQ0FMTCB8fCAhc2VjdXJlX2NvbXB1dGluZygpKSB7XG4gXHRcdGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUocmVncyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG5pbmRleCA0MTZhMzM1MjI2MWZlOC4uM2Y2NjMyMGU0NmQzMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXG5AQCAtMTAwLDkgKzEwMCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsXG4gXG4gXHQvKiBEbyBzZWNjb21wIGFmdGVyIHB0cmFjZSwgdG8gY2F0Y2ggYW55IHRyYWNlciBjaGFuZ2VzLiAqL1xuIFx0aWYgKHdvcmsgXHUwMDI2IFNZU0NBTExfV09SS19TRUNDT01QKSB7XG4tXHRcdHJldCA9IF9fc2VjdXJlX2NvbXB1dGluZygpO1xuLVx0XHRpZiAocmV0ID09IC0xTClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoIV9fc2VjdXJlX2NvbXB1dGluZygpKVxuK1x0XHRcdHJldHVybiAtMUw7XG4gXHR9XG4gXG4gXHQvKiBFaXRoZXIgb2YgdGhlIGFib3ZlIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgc3lzY2FsbCBudW1iZXIgKi9cbkBAIC0xMTMsNyArMTEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxcbiBcbiBcdHN5c2NhbGxfZW50ZXJfYXVkaXQocmVncywgc3lzY2FsbCk7XG4gXG4tXHRyZXR1cm4gcmV0ID8gOiBzeXNjYWxsO1xuK1x0cmV0dXJuIHN5c2NhbGw7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmhcbmluZGV4IDliOTU5OTcyYmY0YTIyLi43YWYzMTczZjQwZTk4NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaFxuQEAgLTIyLDE0ICsyMiwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY2NvbXAuaFx1MDAzZVxuIFxuLWV4dGVybiBpbnQgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpO1xuK2V4dGVybiBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZClcbitzdGF0aWMgaW5saW5lIGJvb2wgc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuIHtcbiBcdGlmICh1bmxpa2VseSh0ZXN0X3N5c2NhbGxfd29yayhTRUNDT01QKSkpXG4gXHRcdHJldHVybiAgX19zZWN1cmVfY29tcHV0aW5nKCk7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuIGV4dGVybiB2b2lkIHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KGludCB0aGlzX3N5c2NhbGwpO1xuQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzZWNjb21wX21vZGUoc3RydWN0IHNlY2NvbXAgKnMpXG4gc3RydWN0IHNlY2NvbXBfZGF0YTtcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyZV9jb21wdXRpbmcodm9pZCkgeyByZXR1cm4gMDsgfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN1cmVfY29tcHV0aW5nKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKSB7IHJldHVybjsgfVxuICNlbmRpZlxuLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSBib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4gXG4gc3RhdGljIGlubGluZSBsb25nIHByY3RsX2dldF9zZWNjb21wKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG5pbmRleCAzODU4YTZmZmRkNWM4NC4uNzNkNjllMDI4MDdkODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oXG5AQCAtMTAsNiArMTAsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfR0VORVJJQ19FTlRSWVxuIFxuK2Jvb2wgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbiBpbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBjaGFyIF9fdXNlciAqc2VsZWN0b3IpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYyBiL2tlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1xuaW5kZXggZDg5ZGZmY2MyZDY0MjkuLmFjZjU0NTc3NGQzNzIwIDEwMDY0NFxuLS0tIGEva2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jXG4rKysgYi9rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcbkBAIC0zMiw2ICszMiwxMSBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyX3NpZ3N5cyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGZvcmNlX3NpZ19pbmZvKFx1MDAyNmluZm8pO1xuIH1cbiBcbitib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRzdHJ1Y3Qgc3lzY2FsbF91c2VyX2Rpc3BhdGNoICpzZCA9IFx1MDAyNmN1cnJlbnQtXHUwMDNlc3lzY2FsbF9kaXNwYXRjaDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2VjY29tcC5jIGIva2VybmVsL3NlY2NvbXAuY1xuaW5kZXggMDY2OTA5MzkzYzM4ZjUuLjFmZWM2ZWZlZGFiNjI3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NlY2NvbXAuY1xuKysrIGIva2VybmVsL3NlY2NvbXAuY1xuQEAgLTExMDAsMTIgKzExMDAsMTIgQEAgdm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxuIFx0ZWxzZVxuIFx0XHRCVUcoKTtcbiB9XG4taW50IF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuK2Jvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXG4ge1xuIFx0aW50IHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuIFxuQEAgLTEyNTYsNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQgc2VjY29tcF9kb191c2VyX25vdGlmaWNhdGlvbihpbnQgdGhpc19zeXNjYWxsLFxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuK3N0YXRpYyBib29sIF9fc2VjY29tcF9maWx0ZXIoaW50IHRoaXNfc3lzY2FsbCwgY29uc3QgYm9vbCByZWNoZWNrX2FmdGVyX3RyYWNlKVxuIHtcbiBcdHUzMiBmaWx0ZXJfcmV0LCBhY3Rpb247XG4gXHRzdHJ1Y3Qgc2VjY29tcF9kYXRhIHNkO1xuQEAgLTEyOTQsNyArMTI5NCw3IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1RSQUNFOlxuIFx0XHQvKiBXZSd2ZSBiZWVuIHB1dCBpbiB0aGlzIHN0YXRlIGJ5IHRoZSBwdHJhY2VyIGFscmVhZHkuICovXG4gXHRcdGlmIChyZWNoZWNrX2FmdGVyX3RyYWNlKVxuLVx0XHRcdHJldHVybiAwO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHQvKiBFTk9TWVMgdGhlc2UgY2FsbHMgaWYgdGhlcmUgaXMgbm8gdHJhY2VyIGF0dGFjaGVkLiAqL1xuIFx0XHRpZiAoIXB0cmFjZV9ldmVudF9lbmFibGVkKGN1cnJlbnQsIFBUUkFDRV9FVkVOVF9TRUNDT01QKSkge1xuQEAgLTEzMzAsMTkgKzEzMzAsMTkgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogYSBza2lwIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLlxuIFx0XHQgKi9cbiBcdFx0aWYgKF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUY6XG4gXHRcdGlmIChzZWNjb21wX2RvX3VzZXJfbm90aWZpY2F0aW9uKHRoaXNfc3lzY2FsbCwgbWF0Y2gsIFx1MDAyNnNkKSlcbiBcdFx0XHRnb3RvIHNraXA7XG4gXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfTE9HOlxuIFx0XHRzZWNjb21wX2xvZyh0aGlzX3N5c2NhbGwsIDAsIGFjdGlvbiwgdHJ1ZSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfQUxMT1c6XG4gXHRcdC8qXG5AQCAtMTM1MCw3ICsxMzUwLDcgQEAgc3RhdGljIGludCBfX3NlY2NvbXBfZmlsdGVyKGludCB0aGlzX3N5c2NhbGwsIGNvbnN0IGJvb2wgcmVjaGVja19hZnRlcl90cmFjZSlcbiBcdFx0ICogdGhpcyBhY3Rpb24gc2luY2UgU0VDQ09NUF9SRVRfQUxMT1cgaXMgdGhlIHN0YXJ0aW5nXG4gXHRcdCAqIHN0YXRlIGluIHNlY2NvbXBfcnVuX2ZpbHRlcnMoKS5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgU0VDQ09NUF9SRVRfS0lMTF9USFJFQUQ6XG4gXHRjYXNlIFNFQ0NPTVBfUkVUX0tJTExfUFJPQ0VTUzpcbkBAIC0xMzY3LDQ2ICsxMzY3LDQ2IEBAIHN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZG9fZXhpdChTSUdTWVMpO1xuIFx0XHR9XG4tXHRcdHJldHVybiAtMTsgLyogc2tpcCB0aGUgc3lzY2FsbCBnbyBkaXJlY3RseSB0byBzaWduYWwgaGFuZGxpbmcgKi9cbitcdFx0cmV0dXJuIGZhbHNlOyAvKiBza2lwIHRoZSBzeXNjYWxsIGdvIGRpcmVjdGx5IHRvIHNpZ25hbCBoYW5kbGluZyAqL1xuIFx0fVxuIFxuIFx0dW5yZWFjaGFibGUoKTtcbiBcbiBza2lwOlxuIFx0c2VjY29tcF9sb2codGhpc19zeXNjYWxsLCAwLCBhY3Rpb24sIG1hdGNoID8gbWF0Y2gtXHUwMDNlbG9nIDogZmFsc2UpO1xuLVx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbnQgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4rc3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXG4ge1xuIFx0QlVHKCk7XG4gXG4tXHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuLWludCBfX3NlY3VyZV9jb21wdXRpbmcodm9pZClcbitib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxuIHtcbiBcdGludCBtb2RlID0gY3VycmVudC1cdTAwM2VzZWNjb21wLm1vZGU7XG4gXHRpbnQgdGhpc19zeXNjYWxsO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoY3VycmVudC1cdTAwM2VwdHJhY2UgXHUwMDI2IFBUX1NVU1BFTkRfU0VDQ09NUCkpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHRoaXNfc3lzY2FsbCA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIGN1cnJlbnRfcHRfcmVncygpKTtcbiBcbiBcdHN3aXRjaCAobW9kZSkge1xuIFx0Y2FzZSBTRUNDT01QX01PREVfU1RSSUNUOlxuIFx0XHRfX3NlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHRoaXNfc3lzY2FsbCk7ICAvKiBtYXkgY2FsbCBkb19leGl0ICovXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0ZJTFRFUjpcbiBcdFx0cmV0dXJuIF9fc2VjY29tcF9maWx0ZXIodGhpc19zeXNjYWxsLCBmYWxzZSk7XG4gXHQvKiBTdXJ2aXZpbmcgU0VDQ09NUF9SRVRfS0lMTF8qIG11c3QgYmUgcHJvYWN0aXZlbHkgaW1wb3NzaWJsZS4gKi9cbiBcdGNhc2UgU0VDQ09NUF9NT0RFX0RFQUQ6XG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0ZG9fZXhpdChTSUdLSUxMKTtcbi1cdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjQ4LjE4NzQyOTM2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNjA1ODk2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2lnbmlmaWNhbnQgQXJtNjQgU3lzY2FsbCBFbnRyeSBBcmNoaXRlY3R1cmFsIFNoaWZ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBiaWcgY2hhbmdlcyB0byBob3cgYHNlY3VyZV9jb21wdXRpbmcoKWAgaGFuZGxlcyBzeXNjYWxscyBhbmQgdHJhY2luZyBvbiBhcm02NC4gRmlyc3Qgb2ZmLCBpdCBsb29rcyBsaWtlIGBzZWN1cmVfY29tcHV0aW5nKClgIGlzIG5vdyByZXR1cm5pbmcgYSBgYm9vbGAgaW5zdGVhZCBvZiBhbiBgaW50YC4gQSBgdHJ1ZWAgbWVhbnMgdGhlIHN5c2NhbGwgc2hvdWxkIHByb2NlZWQsIGBmYWxzZWAgbWVhbnMgaXQgZ2V0cyBza2lwcGVkLiBJbnRlcmVzdGluZywgdGhlIG9sZCB3YXkgdXNlZCBgMGAgZm9yIHN1Y2Nlc3MgYW5kIGAtMWAgZm9yIHNraXAuIFNlZW1zIGNsZWFuZXIsIG1vcmUgc2VtYW50aWMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGFuZCBgYXJjaC9hcm02NC9LY29uZmlnYCBhcmUgdGhlIGtleSBoZXJlLCBpdCBsb29rcyBsaWtlIGFybTY0IGlzIG1vdmluZyBvdmVyIHRvIHRoZSBgR0VORVJJQ19FTlRSWWAgY29kZS4gQW5kIHl1cCwgdGhlIGBLY29uZmlnYCBjb25maXJtcyBpdCBzZWxlY3RzIGBHRU5FUklDX0VOVFJZYC4gIFRoZSBgc3lzY2FsbC5jYCBmaWxlIGlzIG5vdyB1c2luZyBgc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzLCB3b3JrKWAgYW5kIGBzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2RlX3dvcmsocmVncylgLiBUaGlzIGlzIGEgYmlnIGFyY2hpdGVjdHVyYWwgc2hpZnQgZm9yIGFybTY0LCBtb3ZpbmcgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBkaWcgZGVlcGVyLiBUaGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBhbmQgYHN5c2NhbGxfdHJhY2VfZXhpdGAgZnJvbSBgYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmNgLCBhbmQgYSBidW5jaCBvZiBgVElGX1NZU0NBTExfVFJBQ0VgIGZsYWdzIGZyb20gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaGAgYXJlIGdvbmUsIHJlcGxhY2VkIHdpdGggYHN5c2NhbGxfd29ya2AuICBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AgaXMgc2V0dGluZyBgU1lTQ0FMTF9FWElUX1RSQVBgLiBBbmQsIGBhcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuY2Agbm93IGluY2x1ZGVzIGBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZWAuICBQbHVzLCBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCBhZGRzIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gLlxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbWlncmF0aW9uIHRvIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzY2FsbHMgb24gYXJtNjQgaXMgc3Vic3RhbnRpYWwuICBUaGUgd2hvbGUgc3lzY2FsbCBwYXRoIGlzIGJlaW5nIHJld3JpdHRlbi5cblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyB0aGUgdmVyeSBjb3JlIG9mIHN5c2NhbGwgZW50cnkgYW5kIGV4aXQgZm9yIGFybTY0LiBUaGlzIHdhcnJhbnRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSBjcml0aWNhbCB0byBmb2N1cyBvbiBmb3IgZnV6emluZz8gRnJvbSBhIHF1aWNrIGdsYW5jZSwgSSdkIHNheSBgZWwwX3N2Y19jb21tb25gIGluIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGlzIGZyb250IGFuZCBjZW50ZXIuIEnigJlsbCBhbHNvIGxvb2sgYXQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaW4gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2Agc2luY2UgdGhlIHZEU08gaXMgYWx3YXlzIGEgc2Vuc2l0aXZlIGFyZWEuIEFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHB0cmFjZSwgbmFtZWx5IGBwdHJhY2Vfc2F2ZV9yZWdgLCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgIGlzIGNyaXRpY2FsLiBUaGVzZSB3aWxsIG5lZWQgYSBjbG9zZSBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI3OjU3LjU0ODAyMzE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzODc1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWwwX3N2Y19jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0zOT1zdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTctXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjU4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbDBfc3ZjX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNjbm8sIGludCBzY19ucixcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTktXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3lzY2FsbF9mbl90IHN5c2NhbGxfdGFibGVbXSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz0xMjQ9dm9pZCBkb19lbDBfc3ZjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjUte1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMjY6XFx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cXHUwMDNlcmVnc1s4XSwgX19OUl9zeXNjYWxscywgc3lzX2NhbGxfdGFibGUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjctfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTEzMD12b2lkIGRvX2VsMF9zdmNfY29tcGF0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMzEte1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMzI6XFx0ZWwwX3N2Y19jb21tb24ocmVncywgcmVncy1cXHUwMDNlcmVnc1s3XSwgX19OUl9jb21wYXQzMl9zeXNjYWxscyxcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTMzLVxcdFxcdCAgICAgICBjb21wYXRfc3lzX2NhbGxfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyNzo1Ny44Mzk0MTg2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjEyMTIwNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVJNNjQgU3lzdGVtIENhbGwgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBzeXN0ZW0gY2FsbCBwYXRoIG9uIEFSTTY0LiBTaW5jZSBgZWwwX3N2Y19jb21tb25gIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBJJ20gZ29pbmcgdG8gYnlwYXNzIHRoYXQgYW5kIGZvY3VzIGRpcmVjdGx5IG9uIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHM6IGBkb19lbDBfc3ZjYCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgYWxvbmcgd2l0aCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jYCwgc2luY2UgdGhhdCdzIGFub3RoZXIgYXJlYSB3aGVyZSBzeXNjYWxscyB3b3VsZCBiZSBoYW5kbGVkLlxuXG5Jbml0aWFsbHksIEkgYWxzbyBjb25zaWRlcmVkIGBzeXNjYWxsX3RyYWNlX2VudGVyYCBpbiBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgdGhhdCdzIGFsc28gYW4gYF9fYWx3YXlzX2lubGluZWAgZnVuY3Rpb24uIFRoZSBnZW5lcmljIGVudHJ5IGZ1bmN0aW9ucyBhcmUgYHN5c2NhbGxfZW50ZXJfZnJvbV91c2VyX21vZGVgLCBhbmQgYHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVgLlxuXG5HaXZlbiB0aGF0IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHRoaW5rIHRoZSBnZW5lcmljIG9uZXMgYXJlIG5vdCB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHNlZSB3aGF0IHRob3NlIGlubGluZXMgZXhwYW5kIHRvLiBTbywgYmFjayB0byBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuXG5cblJpZ2h0LCBsZXQncyBoZWFkIG92ZXIgdG8gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0IHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZG9fZWwwX3N2Y2AgYW5kIGBkb19lbDBfc3ZjX2NvbXBhdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjEyLjA1MTU0MjMzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMyOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lbDBfc3ZjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEyMy1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTI0OnZvaWQgZG9fZWwwX3N2YyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTI1LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjktI2lmZGVmIENPTkZJR19DT01QQVRcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTMwOnZvaWQgZG9fZWwwX3N2Y19jb21wYXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTEzMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjEyLjExMDg3OTY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzODYwNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEFSTTY0IFZEU08gZm9yIFNpZ3JldHVybiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBoYW5kbGVzIGBzaWdyZXR1cm5gIGNhbGxzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFZEU08gb24gQVJNNjQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGludG8gYGFyY2gvYXJtNjQva2VybmVsL3Zkc28uY2AuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBjb2RlIHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgRHluYW1pYyBTaGFyZWQgT2JqZWN0IGFuZCB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGZvciBzeXNjYWxscyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gbmFtZWQgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgbmFtZSBzdWdnZXN0cyBpdCdzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUga2VybmVsIGRldGVybWluZXMgaWYgYSBzeXNjYWxsIGlzIGEgVkRTTy1wcm92aWRlZCBgc2lncmV0dXJuYCByYXRoZXIgdGhhbiBhIHN0YW5kYXJkIG9uZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgY29udGV4dCBpcyByZXN0b3JlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBWRFNPIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjE2LjY0OTQ4ODk4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3MzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz0zMzM9aW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgdXNlc19pbnRlcnApXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtMzQ2LVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzozNDc6Ym9vbCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTM0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjE2LjcxMzA3MDUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODcyNjM0MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcm02NCBTaW5nbGUtU3RlcHBpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1tb2RlIHNpbmdsZS1zdGVwcGluZyBpcyBlbmFibGVkIGFuZCBkaXNhYmxlZCBvbiBBcm02NC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBkZWFscyB3aXRoIHRoZSBkZWJ1ZyBtb25pdG9ycywgYXMgdGhhdCdzIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBsaWtlbHkgaGFuZGxlZC4gU28sIGxldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBleHBlY3RpbmcgdG8gZmluZCBhcmUgcHJvYmFibHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBhbmQgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGAuIFRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhpcyBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjM2LjU4NTcwODE5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDA4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jPTM3Nj12b2lkIGtlcm5lbF9mYXN0Zm9yd2FyZF9zaW5nbGVfc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2RlYnVnLW1vbml0b3JzLmMtMzgxLS8qIHB0cmFjZSBBUEkgKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jOjM4Mjp2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM4My17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5NS19XFxuYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuYzozOTY6Tk9LUFJPQkVfU1lNQk9MKHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jLTM5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjg6MzYuNjQ1NzE1MDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDkxMjk2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHNlY2NvbXAuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIHN0cmFpZ2h0IHRvIGBrZXJuZWwvc2VjY29tcC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHBpZWNlczogYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhvc2UgaW50ZXJhY3QuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb3JlIG1hY2hpbmVyeSBoZXJlLCBzZWVpbmcgaG93IHRoZSBrZXJuZWwgYWN0dWFsbHkgKmRvZXMqIHNlY3VyZSBjb21wdXRpbmcuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBjaGVja3MgYXJlIGVuZm9yY2VkLCB3aGVyZSB0aGUgZmlsdGVycyBhcmUgaW5zdGFsbGVkLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyZmFjZSBpcyBtb2RpZmllZCwgaWYgYXQgYWxsLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgc2VjdXJpdHkgcG9zdHVyZSwgc28gSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgc29saWQgZ3JpcCBvbiB0aGUgc3BlY2lmaWNzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQwLjE1NDg0ODA4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MzYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zZWN1cmVfY29tcHV0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zZWNjb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NlY2NvbXAuYz0xMDU2PXN0YXRpYyBjb25zdCBpbnQgbW9kZTFfc3lzY2FsbHNbXSA9IHtcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMTA2Ni1cXG5rZXJuZWwvc2VjY29tcC5jOjEwNjc6c3RhdGljIHZvaWQgX19zZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxcbmtlcm5lbC9zZWNjb21wLmMtMTA2OC17XFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTEwODg9dm9pZCBzZWN1cmVfY29tcHV0aW5nX3N0cmljdChpbnQgdGhpc19zeXNjYWxsKVxcbi0tXFxua2VybmVsL3NlY2NvbXAuYy0xMDk4LVxcdGVsc2UgaWYgKG1vZGUgPT0gU0VDQ09NUF9NT0RFX1NUUklDVClcXG5rZXJuZWwvc2VjY29tcC5jOjEwOTk6XFx0XFx0X19zZWN1cmVfY29tcHV0aW5nX3N0cmljdCh0aGlzX3N5c2NhbGwpO1xcbmtlcm5lbC9zZWNjb21wLmMtMTEwMC1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTExMDItfVxcbmtlcm5lbC9zZWNjb21wLmM6MTEwMzpib29sIF9fc2VjdXJlX2NvbXB1dGluZyh2b2lkKVxcbmtlcm5lbC9zZWNjb21wLmMtMTEwNC17XFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jPTEzODA9c3RhdGljIGJvb2wgX19zZWNjb21wX2ZpbHRlcihpbnQgdGhpc19zeXNjYWxsLCBjb25zdCBib29sIHJlY2hlY2tfYWZ0ZXJfdHJhY2UpXFxuLS1cXG5rZXJuZWwvc2VjY29tcC5jLTEzODctXFxua2VybmVsL3NlY2NvbXAuYzoxMzg4OmJvb2wgX19zZWN1cmVfY29tcHV0aW5nKHZvaWQpXFxua2VybmVsL3NlY2NvbXAuYy0xMzg5LXtcXG4tLVxcbmtlcm5lbC9zZWNjb21wLmMtMTQwMC1cXHRjYXNlIFNFQ0NPTVBfTU9ERV9TVFJJQ1Q6XFxua2VybmVsL3NlY2NvbXAuYzoxNDAxOlxcdFxcdF9fc2VjdXJlX2NvbXB1dGluZ19zdHJpY3QodGhpc19zeXNjYWxsKTsgIC8qIG1heSBjYWxsIGRvX2V4aXQgKi9cXG5rZXJuZWwvc2VjY29tcC5jLTE0MDItXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQwLjIxNTY4OTc0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NjIwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU3lzY2FsbCBEaXNwYXRjaCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGNhbGwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgd29ya3MuIEkga25vdyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBkYXRhIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhlIGtlcm5lbCBpbnRlcmNlcHRzIGEgc3lzdGVtIGNhbGwgZnJvbSB1c2VyIHNwYWNlIGFuZCBob3cgdGhlIHJpZ2h0IGhhbmRsZXIgaXMgc2VsZWN0ZWQgYW5kIGNhbGxlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVnaXN0ZXIgcGFzc2luZywgcHJpdmlsZWdlIGxldmVsIGNoZWNrcywgYW5kIGFueSBjb250ZXh0IHN3aXRjaGluZyB0aGF0IG9jY3VycyBhdCB0aGF0IHBvaW50LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIHRoZXJlLCBhbmQgZW5zdXJlIEknbSB1cCB0byBzcGVlZCBvbiB0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI4OjQ0LjQyMzMxMzE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMTQ3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY2FsbF91c2VyX2Rpc3BhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFxcdTAwM2VcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0zNT1ib29sIF9fd2VhayBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMzktXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQwOmJvb2wgc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy00MS17XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjQyOlxcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQzLVxcdGNoYXIgc3RhdGU7XFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjc3OnN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy05OS1cXHRcXHQvKlxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMDA6XFx0XFx0ICogSW52ZXJ0IHRoZSByYW5nZSwgdGhlIGNoZWNrIGluIHN5c2NhbGxfdXNlcl9kaXNwYXRjaCgpXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEwMS1cXHRcXHQgKiBzdXBwb3J0cyB3cmFwLWFyb3VuZC5cXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzUtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzNjppbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3RvcilcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTM4LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTM5OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQwLX1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQxLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNDI6aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNDMtXFx0XFx0XFx0XFx0ICAgICB2b2lkIF9fdXNlciAqZGF0YSlcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQ0LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTQ1OlxcdHN0cnVjdCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2ggKnNkID0gXFx1MDAyNnRhc2stXFx1MDAzZXN5c2NhbGxfZGlzcGF0Y2g7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE0Ni1cXHRzdHJ1Y3QgcHRyYWNlX3N1ZF9jb25maWcgY2ZnO1xcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE2NS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTY2OmludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfc2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTY3LVxcdFxcdFxcdFxcdCAgICAgdm9pZCBfX3VzZXIgKmRhdGEpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTc2LVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxNzc6XFx0cmV0dXJuIHRhc2tfc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh0YXNrLCBjZmcubW9kZSwgY2ZnLm9mZnNldCwgY2ZnLmxlbixcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpY2ZnLnNlbGVjdG9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjg6NDQuNDgyMzMxNzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDY0NTk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFRyYWNlIEVudHJ5IFBvaW50IE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHN5c2NhbGxfdHJhY2VfZW50ZXJgLCBzcGVjaWZpY2FsbHkgaW4gYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQW55IG1vZGlmaWNhdGlvbiB0byB0aGlzIGFyZWEgaXMgZ29pbmcgdG8gaGF2ZSBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGltcGFjdCBvbiB0cmFjaW5nLCBkZWJ1Z2dpbmcsIGFuZCBwb3RlbnRpYWxseSBldmVuIHBlcmZvcm1hbmNlLCBnaXZlbiB0aGUgZnJlcXVlbmN5IHdpdGggd2hpY2ggaXQncyBsaWtlbHkgY2FsbGVkLiBCZWZvcmUgZGl2aW5nIGRlZXAgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBhbHJlYWR5IHRoZXJlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmhgIGluIG15IGhlYWQgYW5kIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdC4gSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB1c3VhbCBwcm9sb2d1ZSBzdHJ1Y3R1cmUsIHRoZSByZWdpc3RlciBzYXZpbmcvcmVzdG9yYXRpb24gY29udmVudGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdGhhdCBtaWdodCBiZSBpbiBvciBhcm91bmQgYHN5c2NhbGxfdHJhY2VfZW50ZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgYSBkaXJlY3QgZW50cnkgcG9pbnQsIG9yIGlmIHRoZXJlIGlzIGFub3RoZXIgbGF5ZXIgb2YgYWJzdHJhY3Rpb24gb3Igd3JhcHBlciBmdW5jdGlvbiwgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBjcml0aWNhbCB0byBmdWxseSBncmFzcCB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyODo1MC42Mjg3OTU4MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzEwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxfdHJhY2VfZW50ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTQyLSAqXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo0MzogKiBJbnZva2VkIGZyb20gc3lzY2FsbF90cmFjZV9lbnRlcigpIHRvIHdyYXAgcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KCkuXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC00NC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9lbnRlcl9hdWRpdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBzeXNjYWxsKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03MS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjcyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHdvcmspXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC03My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTE0MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF9lbnRlcl9mcm9tX3VzZXJfbW9kZV93b3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0NS1cXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19FTlRFUilcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjE0NjpcXHRcXHRzeXNjYWxsID0gc3lzY2FsbF90cmFjZV9lbnRlcihyZWdzLCB3b3JrKTtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTE0Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9MjIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzeXNjYWxsX2V4aXRfd29yayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yMjktXFx0ICogdGhlbiB0aGUgdHJhY2VycyBiZWxvdyBhcmUgbm90IGludm9rZWQgZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMwOlxcdCAqIHRoZSBlbnRyeSBzaWRlIHdhcyBub3QgaW52b2tlZCBpbiBzeXNjYWxsX3RyYWNlX2VudGVyKCk6IFRoZSBBQklcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTIzMS1cXHQgKiBvZiB0aGVzZSBzeXNjYWxscyBpcyB1bmtub3duLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyODo1MC42OTk1MTI1NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5OTcwMzMzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3lzY2FsbF90cmFjZV9lbnRlcmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgc3lzY2FsbF90cmFjZV9lbnRlcmAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYF9fc2VjdXJlX2NvbXB1dGluZygpYC4gUHJldmlvdXNseSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgc3RvcmVkIGluIGByZXRgLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBhbiBlcnJvci4gTm93LCB0aGUgbG9naWMgaXMgc2ltcGxpZmllZDogaWYgYF9fc2VjdXJlX2NvbXB1dGluZygpYCByZXR1cm5zIGBmYWxzZWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC0xTGAuIE1ha2VzIHNlbnNlLiBUaGUgaW50ZW50IGlzIHRvIGNhdGNoIHRyYWNlciBjaGFuZ2VzLCB3aGljaCB3ZXJlIHBvc3NpYmx5IGEgcHJlLWV4aXN0aW5nIGlzc3VlLlxuXG5JIHNlZSB0aGF0IHRoaXMgY2hhbmdlIGlzIGdlbmVyaWMsIG5vdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEludGVyZXN0aW5nLiBHaXZlbiB0aGF0IGZhY3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGFyY2hpdGVjdHVyZXMgYXJlIGFmZmVjdGVkLiBJIG5vdGljZSB0aGF0IHRoZSBgYXJjaC9hcm02NC9LY29uZmlnYCBmaWxlIHNlbGVjdHMgYEdFTkVSSUNfRU5UUllgLiBUaGlzIHRlbGxzIG1lIHRoYXQgQVJNNjQgaXMgbm93IHVzaW5nIHRoaXMgZ2VuZXJpYyBjb2RlLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBleHBsYWlucyB3aHkgdGhlIGNoYW5nZSBpcyBnZW5lcmljLlxuXG5Ob3csIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQuIEl0IGFwcGVhcnMgdGhhdCBgR0VORVJJQ19FTlRSWWAgaXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cC4gVG8gdGVzdCB0aGUgYF9fc2VjdXJlX2NvbXB1dGluZygpYCBmdW5jdGlvbmFsaXR5LCBJJ2xsIG5lZWQgYFNFQ0NPTVBgLiBJJ2xsIGFsc28gbmVlZCBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBmb3IgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIHRlc3RpbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIHRvIGNvbmZpcm0gdGhhdCBgU0VDQ09NUGAgYW5kIGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGFyZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzM0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjAyLjY5NjU0OTg0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjU2MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTYyOD1jb25maWcgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLS1cXG5hcmNoL0tjb25maWctNjQ2LVxcbmFyY2gvS2NvbmZpZzo2NDc6Y29uZmlnIFNFQ0NPTVBcXG5hcmNoL0tjb25maWctNjQ4LVxcdHByb21wdCBcXFwiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGV4ZWN1dGUgdW50cnVzdGVkIGJ5dGVjb2RlXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnLTY2My1cXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxcbmFyY2gvS2NvbmZpZy02NjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9LY29uZmlnLTY3My1cXG5hcmNoL0tjb25maWc6Njc0OmNvbmZpZyBTRUNDT01QX0NBQ0hFX0RFQlVHXFxuYXJjaC9LY29uZmlnLTY3NS1cXHRib29sIFxcXCJTaG93IHNlY2NvbXAgZmlsdGVyIGNhY2hlIHN0YXR1cyBpbiAvcHJvYy9waWQvc2VjY29tcF9jYWNoZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MDUuMDAzMTIzNTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Mjc3NTg3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIENhbGwgRGlzcGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbid0IGl0PyBUaGUgY29yZSBvZiB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtLCB3aGVyZSB0aGUgdXNlci1zcGFjZSByZXF1ZXN0cyBhcmUgZmluYWxseSBzb3J0ZWQgYW5kIGRpcmVjdGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgaGFuZGxlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZGlzcGF0Y2ggaXMgYmVpbmcgaGFuZGxlZCDigJMgaG93IHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgZ2V0cyB0cmFuc2xhdGVkIGludG8gdGhlIGNvcnJlY3Qga2VybmVsIGZ1bmN0aW9uLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgbWlzZGlyZWN0aW9uIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgd29ya3MuIEdvdHRhIGNoZWNrIGhvdyB0aGlzIG1lY2hhbmlzbSB3b3Jrcy4gSSdtIGdvaW5nIHRvIGxvb2sgdGhyb3VnaCB0aGUgZG9jdW1lbnRhdGlvbiB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBhIGxvdCB0byBkbywgYnV0IHRoYXQgaXMgdGhlIG9ubHkgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MDguNzMwODg3MDc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyNDE5OTAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1lTQ0FMTF9VU0VSX0RJU1BBVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTAuODgzMzE5ODYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NTQwNDUzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIExvY2F0aW9uIEh1bnQgZm9yIFNZU0NBTExfVVNFUl9ESVNQQVRDSCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGNsYXNzaWMgcGxhY2VzIHdoZXJlIHlvdSdkIGZpbmQgY29yZSBrZXJuZWwgZmVhdHVyZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQgb3B0aW9ucyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgZmlsZXMgY2xvc2VseSB0byB2ZXJpZnkuIEknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAgb3IgZmluZCBpbiB0aG9zZSBkaXJlY3RvcmllcyBhbmQgc2VlIHdoYXQgdHVybnMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTIyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTYuNzM3MzY5NzkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4NTY4MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0PTUyPWZvbGxvd2luZyBwcmN0bDpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2NhbGwtdXNlci1kaXNwYXRjaC5yc3QtNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0OjU0OiAgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgXFx1MDAzY29wXFx1MDAzZSwgXFx1MDAzY29mZnNldFxcdTAwM2UsIFxcdTAwM2NsZW5ndGhcXHUwMDNlLCBbc2VsZWN0b3JdKVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdC01NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdD04MT1BZGRpdGlvbmFsbHksIGEgdGFza3Mgc3lzY2FsbCB1c2VyIGRpc3BhdGNoIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHBlZWtlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY2FsbC11c2VyLWRpc3BhdGNoLnJzdDo4MjphbmQgcG9rZWQgdmlhIHRoZSBQVFJBQ0VfKEdFVHxTRVQpX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgcHRyYWNlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjYWxsLXVzZXItZGlzcGF0Y2gucnN0LTgzLXJlcXVlc3RzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2hlY2twb2ludC9yZXN0YXJ0IHNvZnR3YXJlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yNy1cXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfQVVESVQgfFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjI4OlxcdFxcdFxcdFxcdCBTWVNDQUxMX1dPUktfU1lTQ0FMTF9VU0VSX0RJU1BBVENIIHxcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC0yOS1cXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfUlNFUV9TTElDRSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMzUtXFx0XFx0XFx0XFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0FVRElUIHxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDozNjpcXHRcXHRcXHRcXHQgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCB8XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMzctXFx0XFx0XFx0XFx0IFNZU0NBTExfV09SS19TWVNDQUxMX0VYSVRfVFJBUClcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtODAtXFx0ICovXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaDo4MTpcXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0gpIHtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTgyLVxcdFxcdGlmIChzeXNjYWxsX3VzZXJfZGlzcGF0Y2gocmVncykpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oPTIyMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3lzY2FsbF9leGl0X3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgd29yaylcXG4tLVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjMyLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6MjMzOlxcdGlmICh3b3JrIFxcdTAwMjYgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSCkge1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtMjM0LVxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VzeXNjYWxsX2Rpc3BhdGNoLm9uX2Rpc3BhdGNoKSkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC00LSAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6NTojaWZuZGVmIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6NjojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg9MTQ9aW50IHNldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgtMTctI2RlZmluZSBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHRzaykgXFxcXFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg6MTg6XFx0Y2xlYXJfdGFza19zeXNjYWxsX3dvcmsodHNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC0xOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmg9NDQ9c3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaC01MS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5oOjUyOiNlbmRpZiAvKiBfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0ggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MjojaWZuZGVmIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg6MzojZGVmaW5lIF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hfVFlQRVNfSFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmg9MTg9c3RydWN0IHN5c2NhbGxfdXNlcl9kaXNwYXRjaCB7fTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3R5cGVzLmgtMjEtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hfdHlwZXMuaDoyMjojZW5kaWYgLyogX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9UWVBFU19IICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg9NDE9ZW51bSBzeXNjYWxsX3dvcmtfYml0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC00Ni1cXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfQVVESVQsXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oOjQ3OlxcdFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENILFxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC00OC1cXHRTWVNDQUxMX1dPUktfQklUX1NZU0NBTExfRVhJVF9UUkFQLFxcbi0tXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTU2LSNkZWZpbmUgU1lTQ0FMTF9XT1JLX1NZU0NBTExfQVVESVRcXHRcXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX0FVRElUKVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaDo1NzojZGVmaW5lIFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHRCSVQoU1lTQ0FMTF9XT1JLX0JJVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gpXFxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oLTU4LSNkZWZpbmUgU1lTQ0FMTF9XT1JLX1NZU0NBTExfRVhJVF9UUkFQXFx0XFx0QklUKFNZU0NBTExfV09SS19CSVRfU1lTQ0FMTF9FWElUX1RSQVApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjctLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjI2ODojZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI2OS0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXFx0XFx0MFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oPTExMD1zdHJ1Y3QgcHRyYWNlX3JzZXFfY29uZmlndXJhdGlvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmgtMTE3LVxcbmluY2x1ZGUvdWFwaS9saW51eC9wdHJhY2UuaDoxMTg6I2RlZmluZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcgMHg0MjEwXFxuaW5jbHVkZS91YXBpL2xpbnV4L3B0cmFjZS5oOjExOTojZGVmaW5lIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRyAweDQyMTFcXG5pbmNsdWRlL3VhcGkvbGludXgvcHRyYWNlLmgtMTIwLVxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTc3PXN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEyOC1cXHRpZiAobW9kZSAhPSBQUl9TWVNfRElTUEFUQ0hfT0ZGKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYzoxMjk6XFx0XFx0c2V0X3Rhc2tfc3lzY2FsbF93b3JrKHRhc2ssIFNZU0NBTExfVVNFUl9ESVNQQVRDSCk7XFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTEzMC1cXHRlbHNlXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzMTpcXHRcXHRjbGVhcl90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpO1xcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzItXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM9MTQyPWludCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNTAtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjE1MTpcXHRpZiAodGVzdF90YXNrX3N5c2NhbGxfd29yayh0YXNrLCBTWVNDQUxMX1VTRVJfRElTUEFUQ0gpKVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xNTItXFx0XFx0Y2ZnLm1vZGUgPSBQUl9TWVNfRElTUEFUQ0hfT047XFxuLS1cXG5rZXJuZWwvcHRyYWNlLmM9MTE2Mj1pbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LFxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTEzOTctXFxua2VybmVsL3B0cmFjZS5jOjEzOTg6XFx0Y2FzZSBQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUc6XFxua2VybmVsL3B0cmFjZS5jLTEzOTktXFx0XFx0cmV0ID0gc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWcoY2hpbGQsIGFkZHIsIGRhdGF2cCk7XFxuLS1cXG5rZXJuZWwvcHRyYWNlLmMtMTQwMS1cXG5rZXJuZWwvcHRyYWNlLmM6MTQwMjpcXHRjYXNlIFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRzpcXG5rZXJuZWwvcHRyYWNlLmMtMTQwMy1cXHRcXHRyZXQgPSBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZyhjaGlsZCwgYWRkciwgZGF0YXZwKTtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjgwMS1cXHRcXHRicmVhaztcXG5rZXJuZWwvc3lzLmM6MjgwMjpcXHRjYXNlIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0g6XFxua2VybmVsL3N5cy5jLTI4MDMtXFx0XFx0ZXJyb3IgPSBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKGFyZzIsIGFyZzMsIGFyZzQsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNTUtLyogRGlzcGF0Y2ggc3lzY2FsbHMgdG8gYSB1c2Vyc3BhY2UgaGFuZGxlciAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjI1NjojZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTI1Ny0jIGRlZmluZSBQUl9TWVNfRElTUEFUQ0hfT0ZGXFx0XFx0MFxcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMjY3LS8qIERpc3BhdGNoIHN5c2NhbGxzIHRvIGEgdXNlcnNwYWNlIGhhbmRsZXIgKi9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoyNjg6I2RlZmluZSBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFx0NTlcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0yNjktIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdFxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jPTE4PVRFU1QoZ2V0X3NldF9zdWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYy0zOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wdHJhY2UvZ2V0X3NldF9zdWQuYzo0MDpcXHRyZXQgPSBzeXNfcHRyYWNlKFBUUkFDRV9HRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIX0NPTkZJRywgY2hpbGQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNDEtXFx0XFx0XFx0ICh2b2lkICopc2l6ZW9mKGNvbmZpZyksIFxcdTAwMjZjb25maWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmMtNTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NTQ6XFx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTU1LVxcdFxcdFxcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcXHUwMDI2Y29uZmlnKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTU5LVxcdG1lbXNldChcXHUwMDI2Y29uZmlnLCAxLCBzaXplb2YoY29uZmlnKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHRyYWNlL2dldF9zZXRfc3VkLmM6NjA6XFx0cmV0ID0gc3lzX3B0cmFjZShQVFJBQ0VfR0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSF9DT05GSUcsIGNoaWxkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3B0cmFjZS9nZXRfc2V0X3N1ZC5jLTYxLVxcdFxcdFxcdCAodm9pZCAqKXNpemVvZihjb25maWcpLCBcXHUwMDI2Y29uZmlnKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF9iZW5jaG1hcmsuYzoyMTojaWZuZGVmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjIyOiMgZGVmaW5lIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXHQ1OVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMjMtIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmM9MTM2PWludCBtYWluKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jLTE2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX2JlbmNobWFyay5jOjE2MzpcXHRpZiAocHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09OLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfYmVuY2htYXJrLmMtMTY0LVxcdFxcdCAgc3lzY2FsbF9kaXNwYXRjaGVyX3N0YXJ0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MTk6I2lmbmRlZiBQUl9TRVRfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjA6IyBkZWZpbmUgUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSFxcdDU5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjEtIyBkZWZpbmUgUFJfU1lTX0RJU1BBVENIX09GRlxcdDBcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTQ1LSAqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6NDY6ICogLSBkaXNwYXRjaF90cmlnZ2VyX3NpZ3N5czogVmVyaWZ5IGlmIFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0ggaXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy00Ny0gKiAgIGFibGUgdG8gdHJpZ2dlciBTSUdTWVMgb24gYSBzeXNjYWxsLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9NjU9VEVTVF9TSUdOQUwoZGlzcGF0Y2hfdHJpZ2dlcl9zaWdzeXMsIFNJR1NZUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTczLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjc0OlxcdHJldCA9IHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9FWENMVVNJVkVfT04sIDAsIDAsIFxcdTAwMjZzZWwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTc1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzo3NjpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy03Ny1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYz04OD1zdGF0aWMgdm9pZCBwcmN0bF92YWxpZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy05MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6OTI6XFx0RVhQRUNUX0VRKDAsIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIG9wLCBvZmYsIHNpemUsIHNlbCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTkzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTk1PXN0YXRpYyB2b2lkIHByY3RsX2ludmFsaWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtOTgte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjk5OlxcdEVYUEVDVF9FUSgtMSwgcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgb3AsIG9mZiwgc2l6ZSwgc2VsKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMTAwLVxcdEVYUEVDVF9FUShlcnIsIGVycm5vKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTIxMD1URVNUKGRpc3BhdGNoX2FuZF9yZXR1cm4pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yMjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM6MjI0OlxcdHJldCA9IHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIFBSX1NZU19ESVNQQVRDSF9FWENMVVNJVkVfT04sIDAsIDAsIFxcdTAwMjZnbG9iX3NlbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjI1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyMjY6XFx0XFx0VEhfTE9HKFxcXCJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMjI3LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTI1NT1URVNUX1NJR05BTChiYWRfc2VsZWN0b3IsIFNJR1NZUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTI3OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzoyODA6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXFx1MDAyNmdsb2Jfc2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODEtXFx0QVNTRVJUX0VRKDAsIHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjI4MjpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0yODMtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9Mjk4PVRFU1QoZGlzYWJsZV9kaXNwYXRjaClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMwMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDQ6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgMCwgXFx1MDAyNnNlbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA1LVxcdEFTU0VSVF9FUSgwLCByZXQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMDY6XFx0XFx0VEhfTE9HKFxcXCJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfU1lTQ0FMTF9VU0VSX0RJU1BBVENIXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzA3LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMxMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMTI6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX09GRiwgMCwgMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzEzLVxcdEVYUEVDVF9FUSgwLCByZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jPTMyNj1URVNUKGRpcmVjdF9kaXNwYXRjaF9yYW5nZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTMzNS1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozMzY6XFx0cmV0ID0gcHJjdGwoUFJfU0VUX1NZU0NBTExfVVNFUl9ESVNQQVRDSCwgUFJfU1lTX0RJU1BBVENIX0VYQ0xVU0lWRV9PTiwgMCwgLTFMLCBcXHUwMDI2c2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzctXFx0QVNTRVJUX0VRKDAsIHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jOjMzODpcXHRcXHRUSF9MT0coXFxcIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYy0zMzktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmM9MzQ5PXN0YXRpYyB2b2lkIHRlc3RfcmFuZ2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY2FsbF91c2VyX2Rpc3BhdGNoL3N1ZF90ZXN0LmMtMzU0LVxcdFNZU0NBTExfRElTUEFUQ0hfT0ZGKGdsb2Jfc2VsKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjYWxsX3VzZXJfZGlzcGF0Y2gvc3VkX3Rlc3QuYzozNTU6XFx0RVhQRUNUX0VRKDAsIHByY3RsKFBSX1NFVF9TWVNDQUxMX1VTRVJfRElTUEFUQ0gsIG9wLCBvZmYsIHNpemUsIFxcdTAwMjZnbG9iX3NlbCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2NhbGxfdXNlcl9kaXNwYXRjaC9zdWRfdGVzdC5jLTM1Ni1cXHRTWVNDQUxMX0RJU1BBVENIX09OKGdsb2Jfc2VsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MTguNzE1OTY0NzczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDgyNTQzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIE1hemUqKlxuXG5SaWdodCwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgLCBidXQgdGhhdCBuYW1lIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdGlja2luZy4gSG1tLCBjb3VsZCBpdCBiZSBqdXN0IGBTWVNDQUxMX1VTRVJfRElTUEFUQ0hgIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg/IE5vLCB3YWl0IGEgbWludXRlLi4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgZ2VuZXJpYyBlbnRyeSBwb2ludCBzdHVmZiBpcyB3aGF0IGVuYWJsZXMgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjay4gWWVhaCwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCB3aGF0IGVuYWJsZXMgaXQuIE5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgY2hhc2luZyBhIGdob3N0IGhlcmUsIG9yLCB3b3JzZSwgbWlzdW5kZXJzdGFuZGluZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MjIuODY0MjIyODM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzMxNzUwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjIyLjkzMTU0OTgyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA0MjQwNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgd291bGQgYmUgdGhlIEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBpdCdzIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBrZXJuZWwvZW50cnkvS2NvbmZpZ2AgZmlsZSBmaXJzdC4gSWYgaXQncyBub3QgbG9jYXRlZCB0aGVyZSwgdGhlbiBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCBhbmQgZ28gdG8gdGhlIG1vcmUgZ2VuZXJhbCBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBhcmUgY29tbW9ubHkgdXNlZC4gVGhhdCBzaG91bGQgcGlucG9pbnQgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgdXNlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOToyNy4yMzU3OTU2NjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODY4MDU2MDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOToyOS4yMjI2MTI1NzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzMTk5NTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCoqXG5cbkhtbSwgc28gYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBrZXJuZWwgY29uZmlnIG9wdGlvbiwgaXMgaXQ/IEludGVyZXN0aW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgd2FudCB0byBjaGVjayBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0gY2FsbHMgcGF0aC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaXNwYXRjaCBiYXNlZCBvbiB0aGlzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb25kaXRpb25hbCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uIEl0IHdpbGwgYWxzbyBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZCB2cyB3aGVuIGl0J3Mgbm90LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBpbmNsdXNpb24/IEEgY29uZGl0aW9uYWwgYnJhbmNoIHdpdGhpbiB0aGUgbWFpbiBzeXNjYWxsIGhhbmRsaW5nIHBhdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9wdGlvbiBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBwcm9maWxpbmcgdGhlIHN5c2NhbGwgcGF0aCBhbmQgZGV0ZXJtaW5pbmcgaWYgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlIGluIGFueSB3YXkuIEknbGwgbmVlZCB0byBsb29rIGZvciBgI2lmZGVmYCBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgZ3VhcmQgYmxvY2tzIG9mIGNvZGUgcmVsYXRlZCB0byB1c2VyIGRpc3BhdGNoLiBBbmQgaWYgaXQncyB0aGVyZSwgdGhlbiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRpZmZlcmVuY2VzIGFyZSB3aGVuIGl0J3Mgbm90IHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjM1LjA1NDYxMjY0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTkyMTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfVVNFUl9ESVNQQVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjM1LjEyMDgyNDUwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUzMDA0OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgUG9pbnQgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGluaXRpYWxpemVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGVudHJ5IHBvaW50IGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gYGtlcm5lbC9lbnRyeS9NYWtlZmlsZWAuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5cyB0byBob3cgdGhlIGtlcm5lbCdzIGluaXRpYWwgc2V0dXAgaXMgb3JjaGVzdHJhdGVkIOKAkyB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MsIHRoZSBlYXJseSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uLCBhbmQgd2hhdCBjYWxscyB0aGUgYHN0YXJ0YCByb3V0aW5lLiBHb3R0YSBzZWUgaG93IHRoZSBsaW5rZXIgc2NyaXB0cyBhcmUgdXNlZCwgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJseSBmaWxlcyB0aGF0IGFyZSBsaW5rZWQgZWFybHksIGFueSBwcmUtbWFpbiBzZXR1cCBzdGVwcy4uLiBJdCdzIHRoZSBzdGFydGluZyBndW4gb2YgdGhlIHdob2xlIGRhbW4gdGhpbmcsIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQncyB3cml0dGVuIG9uIHRoZSBiYXJyZWwuIFRoZSBNYWtlZmlsZSBpdHNlbGYgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6MzguODczODMxODYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzOTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjYWxsX3VzZXJfZGlzcGF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2VudHJ5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9lbnRyeS9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfR0VORVJJQ19JUlFfRU5UUlkpIFxcdCs9IGNvbW1vbi5vXFxua2VybmVsL2VudHJ5L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19HRU5FUklDX1NZU0NBTEwpIFxcdFxcdCs9IHN5c2NhbGwtY29tbW9uLm8gc3lzY2FsbF91c2VyX2Rpc3BhdGNoLm9cXG5rZXJuZWwvZW50cnkvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX1ZJUlRfWEZFUl9UT19HVUVTVF9XT1JLKVxcdCs9IHZpcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTozOC45MzU4ODQwNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNDk1MTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIHN5c3RlbSBjYWxscy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlJ3JlIHVzaW5nIGBDT05GSUdfR0VORVJJQ19TWVNDQUxMYCBvciBgQ09ORklHX0dFTkVSSUNfRU5UUllgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHN5c3RlbSBjYWxsIHN1cHBvcnQuIExldCdzIGRpZyBpbi4gT2theSwgdGhlIE1ha2VmaWxlIGlzIHJldmVhbGluZyBhIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfR0VORVJJQ19TWVNDQUxMKSArPSBzeXNjYWxsLWNvbW1vbi5vIHN5c2NhbGxfdXNlcl9kaXNwYXRjaC5vYC4gVGhhdCBjb25maXJtcyBpdCDigJMgYENPTkZJR19HRU5FUklDX1NZU0NBTExgIGlzIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb2YgdGhvc2UgY3J1Y2lhbCBvYmplY3QgZmlsZXMuIEJ1dCBpdCBtYWtlcyBtZSB3b25kZXIsIHByZWNpc2VseSB3aGF0IGRvZXMgdGhpcyBvcHRpb24gZW50YWlsPyBNeSBrbmVlLWplcmsgcmVhY3Rpb24gaXMgdG8gdmVyaWZ5IHRoZSBkZWZpbml0aW9uIG9mIGBHRU5FUklDX1NZU0NBTExgIChzaW5jZSBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgaXRzIGNvbmZpZ3VyYXRpb24gY291bnRlcnBhcnQpIGFuZCBob3cgaXTigJlzIHVzZWQgd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmU7IHNvLCBJJ20gaGVhZGluZyBvdmVyIHRvIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50cyBhcmUgaGFuZGxlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ0LjA2MDgzNzk0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NTU1MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkdFTkVSSUNfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ0LjEyMzM5OTgxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwNTY5NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBFbnRyeSBQb2ludCBDb25maWd1cmF0aW9uKipcblxuSG1tLCBzbyBgYXJjaC9hcm02NC9LY29uZmlnYCBpcyBhY3R1YWxseSBzZWxlY3RpbmcgYEdFTkVSSUNfRU5UUllgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgdGhvdWdodCBJIGhhZCB0aGUgcmVsYXRpb25zaGlwIG9mIGBHRU5FUklDX0VOVFJZYCBwaW5uZWQgZG93biwgYnV0IGl0IHdvdWxkbid0IGh1cnQgdG8gZG91YmxlIGNoZWNrIGl0IGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCBga2VybmVsL2VudHJ5L01ha2VmaWxlYC4gTWF5YmUgSSBtaXNyZW1lbWJlcmVkIHNvbWUgb2YgaXRzIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgS2NvbmZpZ3MgYW5kIE1ha2VmaWxlcy4gVGltZSB0byBkaXZlIGJhY2sgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6NDYuOTkzOTcyODY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3ODgxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiR0VORVJJQ19FTlRSWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjQ3LjA1NTY2NDY1OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDA4NDQ1MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGVudHJ5IE1ha2VmaWxlLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgRW50cnkgTWFrZWZpbGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBrZXJuZWwvZW50cnkvTWFrZWZpbGVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaWxlLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwncyBlbnRyeSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIGluaXRpYWwgc2V0dXAgaXMgaGFuZGxlZCwgdGhpbmdzIGxpa2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUsIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBsaW5raW5nIG9mIHRoZSBlbnRyeSBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGJlaW5nIGluY2x1ZGVkLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJseSBjb2RlIHRoYXQncyBpbnZvbHZlZC4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYm9vdCBwcm9jZXNzIGl0c2VsZjsgdGhpbmdzIGxpa2UgdGhlIGVhcmx5IGludGVycnVwdCBoYW5kbGluZyBzZXQtdXAgYW5kIHdoZXJlIHRoZSBpbml0aWFsIHN0YWNrcyBhcmUgZXN0YWJsaXNoZWQgYXJlIGdvaW5nIHRvIGJlIGtleS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBib290bG9hZGVyIGhhbmRzIG9mZiBjb250cm9sIHRvIHRoZSBrZXJuZWwgcHJvcGVyLiBJJ20ga2VlbiB0byBzcG90IGFueSB1bnVzdWFsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG9mZmVyIGluc2lnaHQgaW50byBzcGVjaWZpYyBkZXNpZ24gY2hvaWNlcy4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCBnZW1zIGFyZSBpbnNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6Mjk6NTMuMDY0MTEzNzczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9lbnRyeS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0IyBQcmV2ZW50IHRoZSBub2luc3RyIHNlY3Rpb24gZnJvbSBiZWluZyBwZXN0ZXJlZCBieSBzYW5pdGl6ZXIgYW5kIG90aGVyIGdvb2RpZXNcXG4gICA0OlxcdCMgYXMgbG9uZyBhcyB0aGVzZSB0aGluZ3MgY2Fubm90IGJlIGRpc2FibGVkIHBlciBmdW5jdGlvbi5cXG4gICA1OlxcdEtBU0FOX1NBTklUSVpFIDo9IG5cXG4gICA2OlxcdFVCU0FOX1NBTklUSVpFIDo9IG5cXG4gICA3OlxcdEtDT1ZfSU5TVFJVTUVOVCA6PSBuXFxuICAgODpcXHRcXG4gICA5OlxcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24ndCBub2luc3RyLXNhZmVcXG4gIDEwOlxcdGNjZmxhZ3MtJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDExOlxcdFxcbiAgMTI6XFx0Q0ZMQUdTX1JFTU9WRV9jb21tb24ub1xcdCA9IC1mc3RhY2stcHJvdGVjdG9yIC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZ1xcbiAgMTM6XFx0Q0ZMQUdTX2NvbW1vbi5vXFx0XFx0Kz0gLWZuby1zdGFjay1wcm90ZWN0b3JcXG4gIDE0OlxcdFxcbiAgMTU6XFx0b2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0VOVFJZKSBcXHQrPSBjb21tb24ub1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX0dFTkVSSUNfU1lTQ0FMTCkgXFx0XFx0Kz0gc3lzY2FsbC1jb21tb24ubyBzeXNjYWxsX3VzZXJfZGlzcGF0Y2gub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX1ZJUlRfWEZFUl9UT19HVUVTVF9XT1JLKVxcdCs9IHZpcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTo1My4wNjQxOTA3ODNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxODQ3ODQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gYENPTkZJR19HRU5FUklDX1NZU0NBTExgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBkcmlsbCBkb3duLiBXaGVyZSBleGFjdGx5ICppcyogdGhpcyBvcHRpb24gZGVmaW5lZD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb250ZXh0LiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJlY2F1c2UgdGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNToyOTo1Ni4yODI2NzM0NDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTkzNjI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdFTkVSSUNfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwNT1jb25maWcgR0VORVJJQ19JUlFfRU5UUllcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMDctXFxuYXJjaC9LY29uZmlnOjEwODpjb25maWcgR0VORVJJQ19TWVNDQUxMXFxuYXJjaC9LY29uZmlnLTEwOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjI5OjU4LjMwMjA0ODUxMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyNjY0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBHRU5FUklDX1NZU0NBTEwgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mga2lja3Mgb2ZmIHdpdGggYSBkaXJlY3RlZCBmb2N1czogKkxldCdzIHNlZSB3aGF0IHNlbGVjdHMgYEdFTkVSSUNfU1lTQ0FMTGAuKiBUaGlzIGlzIHdoZXJlIEkgYmVnaW4gdGhlIGludmVzdGlnYXRpdmUgcHJvY2VzcywgdGhlIGFuYWx5c2lzLiBJJ20gbm90IGp1c3QgaWRseSBwb25kZXJpbmc7IEknbSBhY3RpdmVseSBmb3JtdWxhdGluZyBhIHBsYW4gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgc3BlY2lmaWMgc3lzdGVtIGNhbGwgZGVmaW5pdGlvbi4gVGhlIHNlbGVjdGlvbiBvZiBgR0VORVJJQ19TWVNDQUxMYCBpcyB0aGUgZm9jYWwgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBrZXJuZWwgYXJlIHR5aW5nIGludG8gdGhpcy4gTXkgbmV4dCBzdGVwcyBhcmUgcHJvYmFibHksIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgdHJlZSBhbmQgdHJhY2Ugd2hlcmUgdGhpcyBzeW1ib2wgaXMgdXNlZC4gSXMgaXQgYSBsZWdhY3kgdGhpbmc/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBTb21lIHNvcnQgb2YgYWJzdHJhY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdFwiIGFuZCB0aGUgXCJ3aHlcIiBvZiB0aGUgc2VsZWN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlZXBlciBhcmNoaXRlY3R1cmFsIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBhdCBwbGF5LiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvczogSXMgaXQgYSBjb21tb24gZmFsbGJhY2s/IFBhcnQgb2YgYSBtb2R1bGFyIHN5c3RlbT8gRG9lcyBpdHMgc2VsZWN0aW9uIGNvcnJlbGF0ZSB0byBvdGhlciBrZXJuZWwgZmVhdHVyZXM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjAyLjI2NDcxNjc1MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjM5MzQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR0VORVJJQ19TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTEyPWNvbmZpZyBHRU5FUklDX0VOVFJZXFxuLS1cXG5hcmNoL0tjb25maWctMTE0LVxcdHNlbGVjdCBHRU5FUklDX0lSUV9FTlRSWVxcbmFyY2gvS2NvbmZpZzoxMTU6XFx0c2VsZWN0IEdFTkVSSUNfU1lTQ0FMTFxcbmFyY2gvS2NvbmZpZy0xMTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjA0LjIyNzExNzY2NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY5Mzk3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVJNNjQgR2VuZXJpYyBTeXNjYWxsIEVudHJ5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgZ2VuZXJpYyBlbnRyeSBwb2ludCAoYEdFTkVSSUNfRU5UUllgKSBpcyB0aGUgb25lIGJlaW5nIHVzZWQgdG8gZGlzcGF0Y2ggYEdFTkVSSUNfU1lTQ0FMTGAsIGFuZCBJIHJlbWVtYmVyIHRoYXQgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agc2VsZWN0cyBpdC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG11c3QgYmUgc2VsZWN0aW5nIGl0Li4uIHdhaXQsIGxldCdzIGRvdWJsZS1jaGVjay4gKkV4YW1pbmVzIHRoZSBkaWZmKiBBaCwgdGhlIGRpZmYgY29uZmlybXMgaXQ6IHRoZSBwYXRjaCBleHBsaWNpdGx5ICphZGRzKiBgc2VsZWN0IEdFTkVSSUNfRU5UUllgIGluIGBhcmNoL2FybTY0L0tjb25maWdgLCB3aGlsZSByZW1vdmluZyBgR0VORVJJQ19JUlFfRU5UUllgLiBTbywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB3aGF0IGFib3V0IHRlc3RpbmcgdGhpcz8gV2hpY2ggY29uZmlndXJhdGlvbnMgd2lsbCBiZSBpbXBvcnRhbnQ/IEhtbSwgYFNFQ0NPTVBgIGlzIGEgbm8tYnJhaW5lciBiZWNhdXNlIGBzZWN1cmVfY29tcHV0aW5nYCBnZXRzIG1vZGlmaWVkIGFuZCBpcyB1c2VkIGJ5IHRoZSBwYXRjaC4gT2YgY291cnNlLCBgU0VDQ09NUF9GSUxURVJgIHNob3VsZCBhbHNvIGJlIGVuYWJsZWQuIFRoZW4sIGBDT01QQVRgIGxvb2tzIHRvIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCwgd2hpY2ggYXJlIGJlaW5nIG1vZGlmaWVkLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBBcyBmb3IgYERFQlVHX1JTRVFgLCB0aGF0IGxvb2tzIGxpa2UgaXQncyBiZWluZyByZW1vdmVkIGZyb20gYGFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuY2AsIGJ1dCB0aGUgYHJzZXFfc3lzY2FsbGAgaXMgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyBlbnRyeSwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IGltcGFjdHMgdGhlIHRlc3QgY29uZmlndXJhdGlvbi4gTGV0IG1lIGNvbmZpcm0gaWYgYFNZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2luY2UgaXQncyBqdXN0IGVuYWJsZWQgaWYgYEdFTkVSSUNfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gT2theSwgSSdsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoYXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoxMC42OTY1MTc5MDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTg3NzQxODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNDQUxMX1VTRVJfRElTUEFUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoxMi44OTUzMDM5NzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2MTI4OTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gQXJtNjQgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19TWVNDQUxMX1VTRVJfRElTUEFUQ0hgIGlzbid0IGEgc3RhbmRhbG9uZSBvcHRpb24uIEl0J3MgYXV0b21hdGljYWxseSBpbmNsdWRlZCB3aGVuIGBHRU5FUklDX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJbiBgYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jYCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5IHBvaW50cy4gQWgsIHllcywgYGRvX2VsMF9zdmNgIGlzIHRoZSBtYWluIGhhbmRsZXIgZm9yIHN5c2NhbGxzLCBhbmQgYGRvX2VsMF9zdmNfY29tcGF0YCBoYW5kbGVzIHRoZSBjb21wYXRpYmlsaXR5IGNhbGxzLiBFeGNlbGxlbnQuIEFuZCwgYXMgZXhwZWN0ZWQsIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gIGlzIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZGVidWctbW9uaXRvcnMuY2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHNlY3VyaXR5IGFzcGVjdHMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggc2VjY29tcC4gSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZWN1cmVfY29tcHV0aW5nYCBmdW5jdGlvbiBpcywgYXMgZXhwZWN0ZWQsIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX1NFQ0NPTVBgLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHRoZSByb2xlIG9mIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLCB3aGljaCBzaG91bGQgYmUgaW4gYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIFllcCwgaXQncyB0aGVyZSBhbmQgYnVpbHQgd2hlbiBgQ09ORklHX0dFTkVSSUNfU1lTQ0FMTGAgaXMgYWN0aXZlLlxuXG5TbywgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBTRUNDT01QYFxuKiAgIGBTRUNDT01QX0ZJTFRFUmBcbiogICBgQ09NUEFUYCAodG8gdGVzdCB0aG9zZSBjb21wYXRpYmlsaXR5IHN5c2NhbGxzKVxuXG5JIGtub3cgYFNFQ0NPTVBgIGFuZCBgU0VDQ09NUF9GSUxURVJgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSBjZXJ0YWluLCBzbyBJIHdpbGwgbGlzdCB0aGVtIGhlcmUuXG5cbk9oLCB3YWl0LCB0aGVyZSdzIGBHRU5FUklDX0VOVFJZYC4gSSByZWNhbGwgaXQncyBzZWxlY3RlZCBieSBgQVJNNjRgLCB3aGljaCBtZWFucyBpdCdzIGFsd2F5cyBhY3RpdmUgb24gYXJtNjQgYXJjaGl0ZWN0dXJlcy4gR29vZCB0byBrZWVwIGluIG1pbmQuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IExldCdzIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuY2AuIEhtbSwgYHB0cmFjZV9zYXZlX3JlZ2AgaGFzIG1vdmVkIGZyb20gYHB0cmFjZS5jYCB0byBgZW50cnktY29tbW9uLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeWAgYW5kIGBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9leGl0YCBoYXZlIGJlZW4gYWRkZWQgdG8gYGVudHJ5LWNvbW1vbi5oYC4gU28gdGhlc2UgYXJlIGNvbXBpbGVkIGluIGFsbCB0aGUgdGltZS4gTm93IEkgc2hvdWxkIGNoZWNrIHdoYXQgaXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoyMC45NTY1OTY1MzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTk4NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD02ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRyYWNlX3NhdmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC05Mi1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjkzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtOTQte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0xMDYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDoxMDc6I2RlZmluZSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeSBhcmNoX3B0cmFjZV9yZXBvcnRfc3lzY2FsbF9lbnRyeVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMTA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDoyMS4wMjc4MDI3OTVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxNTQwMjY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gSG90bmVzcyBmb3IgVGVzdCBEaXN0cmlidXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb2luZyB0byBza2V3IG15IHRlc3QgZGlzdHJpYnV0aW9ucywgYW5kIHRoZXNlIG9uZXMganVtcGVkIG91dDogYGRvX2VsMF9zdmNgLCBgZG9fZWwwX3N2Y19jb21wYXRgLCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAsIGBfX3NlY3VyZV9jb21wdXRpbmdgLCBgX19zZWNjb21wX2ZpbHRlcmAsIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAsIGFuZCBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYC5cblxuVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kLCBoYW5nIG9uLi4uIGBkb19lbDBfc3ZjYCBpcyBhICpodWdlKiBvZmZlbmRlciBoZXJlLiBJdOKAmXMgdGhlIGVudHJ5IHBvaW50IGZvciAqZXZlcnkqIEVMMCBzeXN0ZW0gY2FsbCEgVGhhdCdzIGdvaW5nIHRvIGRvbWluYXRlIGFueSB0ZXN0IGFuZCBpbnZhbGlkYXRlIHRoZSByZXN1bHRzLiBEZWZpbml0ZWx5IGF2b2lkaW5nIHRoYXQuXG5cblRoZW4sIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAg4oCTIHRoZXkncmUgb24gdGhlIGZhc3QgcGF0aCB0b28gaWYgc2VjY29tcCBpcyBlbmFibGVkLCBzbywgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gY29uZmlnLCB3ZSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoZW0uXG5cbmBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGlzIHRoZSBuZXh0IG9uZS4gSXQncyBleGVjdXRlZCBmb3IgZXZlcnkgc3lzY2FsbCBpZiBgU1lTQ0FMTF9VU0VSX0RJU1BBVENIYCBpcyBlbmFibGVkLCBidXQgaXQgbG9va3MgbGlrZSB0aGF0J3MgY29udHJvbGxlZCBieSBhIGZsYWcsIHNvIG1heWJlIG5vdCAqYXMqIGhvdCBhcyB0aGUgb3RoZXJzLCBidXQgc3RpbGwgb24gdGhlIHN5c2NhbGwgcGF0aCwgc28gcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbkFuZCBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYCBpcyBjYWxsZWQgZnJvbSBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCwgc28gdGhhdCdzIGluZGlyZWN0bHkgaG90LlxuXG5CdXQgd2FpdCwgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBhY3R1YWxseSAqY2FsbGVkKiBpZiBgU1lTQ0FMTF9XT1JLX1NZU0NBTExfVVNFUl9ESVNQQVRDSGAgaXMgc2V0ISBHb29kIHRvIGtub3csIEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaGAgdG8gc2VlIGhvdyB0aGlzIGZsYWcgaXMgc2V0IGFuZCBob3cgY29tbW9uIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDozOS4xODE4MzM1MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTYxNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxfdXNlcl9kaXNwYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oLTU3LVxcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmg6NTg6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmluY2x1ZGUvbGludXgvZW50cnktY29tbW9uLmgtNTktbG9uZyB0cmFjZV9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIHN5c2NhbGwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaD03Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3b3JrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04MS1cXHRpZiAod29yayBcXHUwMDI2IFNZU0NBTExfV09SS19TWVNDQUxMX1VTRVJfRElTUEFUQ0gpIHtcXG5pbmNsdWRlL2xpbnV4L2VudHJ5LWNvbW1vbi5oOjgyOlxcdFxcdGlmIChzeXNjYWxsX3VzZXJfZGlzcGF0Y2gocmVncykpXFxuaW5jbHVkZS9saW51eC9lbnRyeS1jb21tb24uaC04My1cXHRcXHRcXHRyZXR1cm4gLTFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMDozOS4yNjk0MDI2MjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4Njc1OTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBzY2FuIGhhcyBwb2ludGVkIG1lIHRvd2FyZHMgc29tZSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBsb2dpYyBmbG93IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhhdCBzcGVjaWZpYyBmbGFnIGlzIHNldCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIHRvIGV4cGxvcmUuXG5cblRoZW4sIHRoZXJlJ3MgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAuIFRoaXMgZnVuY3Rpb24gaXMgYW5vdGhlciBjb21wZWxsaW5nIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgYXR0ZW50aW9uLlxuXG5GdXJ0aGVybW9yZSwgdGhlIHBhaXIgb2YgZnVuY3Rpb25zIGB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcGAgYW5kIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgIGxvb2sgcGFydGljdWxhcmx5IHJlbGV2YW50LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHB0cmFjZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHNpbmdsZS1zdGVwcGluZywgc3VnZ2VzdHMgdGhleSdyZSBoYW5kbGluZyBsb3ctbGV2ZWwgY29udHJvbCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBkaWcgaW50byB0aGVzZSwgYXMgcHRyYWNlIGlzIG5vdG9yaW91c2x5IGNvbXBsZXguXG5cbkZpbmFsbHksIGBzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBpbnRyaWd1aW5nLiBJdCdzIHRoZSBwcmN0bCBoYW5kbGVyLCBzbyBpdCBvZmZlcnMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gY2FsbCBkaXNwYXRjaC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzA6NDcuNzU2MTY2NDE1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA4MTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM9NDA9Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtNzYtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjc3OnN0YXRpYyBpbnQgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBtb2RlLFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy03OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzUtXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jOjEzNjppbnQgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaCh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0xMzctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgX191c2VyICpzZWxlY3RvcilcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTM4LXtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTM5OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2goY3VycmVudCwgbW9kZSwgb2Zmc2V0LCBsZW4sIHNlbGVjdG9yKTtcXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmMtMTQwLX1cXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYz0xNjY9aW50IHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE3Ni1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6MTc3OlxcdHJldHVybiB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2godGFzaywgY2ZnLm1vZGUsIGNmZy5vZmZzZXQsIGNmZy5sZW4sXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTE3OC1cXHRcXHRcXHRcXHRcXHQgICAgICAoY2hhciBfX3VzZXIgKikodWludHB0cl90KWNmZy5zZWxlY3Rvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMwOjQ3LjgyNTI1NTQxOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM0NTA4MTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEZ1enppbmcgVGFyZ2V0IENhbmRpZGF0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgd2l0aCBmdXp6aW5nIHRhcmdldHMuICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAgYW5kIGB0YXNrX3NldF9zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgIGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvc3NpYmlsaXRpZXMsIGFsb25nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZ2V0dGVycyBhbmQgc2V0dGVyczogYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9nZXRfY29uZmlnYCBhbmQgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaF9zZXRfY29uZmlnYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLlxuXG5MZXQncyBkbyBzb21lIGRpZ2dpbmcuIEknbGwgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jYC4gQWgsIHJpZ2h0LCB0aGUgcGF0Y2ggcmVtb3ZlZCB0aGUgYHN5c2NhbGxfdHJhY2VfZW50ZXJgIGFuZCBgc3lzY2FsbF90cmFjZV9leGl0YCBmdW5jdGlvbnMuIFRoZXkndmUgYmVlbiByZXBsYWNlZCBieSBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZW50cnlgIGFuZCBgYXJjaF9wdHJhY2VfcmVwb3J0X3N5c2NhbGxfZXhpdGAsIHdoaWNoIGFyZSBub3cgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmhgLiAgSG1tLCBidXQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBpcyBkZWNsYXJlZCBhcyBgX19hbHdheXNfaW5saW5lYC4gIFRoYXQncyBhIG5vLWdvIGZvciBkaXJlY3QgZnV6emluZy4gV2hhdCBhYm91dCB0aGUgZ2VuZXJpYyBgcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YD8gSXQncyBhIHBvc3NpYmlsaXR5LCBidXQgcG90ZW50aWFsbHkgbm90IGFzIGludGVyZXN0aW5nIGFzIG90aGVycy5cblxuTm93LCBsZXQncyBsb29rIGF0IGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gIEFoLCBoZXJlIHdlIGdvLCBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgIGFuZCBgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwYCBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gc2V0IG9yIGNsZWFyIHRoZSBgU1lTQ0FMTF9FWElUX1RSQVBgIGZsYWcuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyFcblxuVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIGBrZXJuZWwvc2VjY29tcC5jYC4gSSBzZWUgYF9fc2VjdXJlX2NvbXB1dGluZ2AgYW5kIGBfX3NlY2NvbXBfZmlsdGVyYCBub3cgcmV0dXJuIGEgYGJvb2xgLiAgVGhleSBhcmUgYm90aCBjYWxsZWQgb24gc3lzY2FsbCBlbnRyeSBpZiBzZWNjb21wIGlzIGVuYWJsZWQuICBUaGUgcXVlc3Rpb24gaXM6IGFyZSB0aGV5IHRvbyBob3Q/ICBHZW5lcmFsbHksIGluIGEgZnV6emluZyBzZXR1cCwgc2VjY29tcCBpcyB1c3VhbGx5IG9ubHkgZW5hYmxlZCBmb3Igc3BlY2lmaWMgdGVzdHMsIGJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgU3l6a2FsbGVyIGhlYXZpbHkgbGV2ZXJhZ2VzIHNlY2NvbXAgdG8gaXNvbGF0ZSBwcm9jZXNzZXMuICpXYWl0LCBpdCBkb2Vzbid0IHVzZSBzZWNjb21wIGZvciBpdHMgb3duIHByb2Nlc3NlcywgYnV0IGl0IG1pZ2h0IGZ1enogaXQuKiBBY3R1YWxseSwgYF9fc2VjY29tcF9maWx0ZXJgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlIGJlY2F1c2UgaXQncyB0aGUgY29yZSBvZiBzZWNjb21wIGZpbHRlcmluZy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIFwiZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsXCIgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gSSBrbm93IGBfX3NlY3VyZV9jb21wdXRpbmdgIGlzIHByb2JhYmx5IGEgaG90IHBhdGggaWYgc2VjY29tcCBpcyBlbmFibGVkLiBJIHNob3VsZCBzdGljayB0byB0aGUgbGVzcyBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4gU28sIGxldCBtZSBuYXJyb3cgaXQgZG93biB0bzpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaGBcbiogICBgc2V0X3N5c2NhbGxfdXNlcl9kaXNwYXRjaGBcbiogICBgdGFza19zZXRfc3lzY2FsbF91c2VyX2Rpc3BhdGNoYFxuKiAgIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hfZ2V0X2NvbmZpZ2BcbiogICBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoX3NldF9jb25maWdgXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbk9rYXksIGhvbGQgb24uLi5JIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGV4aGF1c3RlZCBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlcmU/IFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIHN0YXJ0IGxvb2tpbmcgYXQgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMTowMi4xNzAzNDA0NDVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTk0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIHN5c2NhbGxfdXNlcl9kaXNwYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jPTM1PWJvb2wgX193ZWFrIGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guYy0zOS1cXG5rZXJuZWwvZW50cnkvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmM6NDA6Ym9vbCBzeXNjYWxsX3VzZXJfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxua2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jLTQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MDIuMjUxMzQyNzI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQ3MDAzODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBBcm02NCBhbmQgR2VuZXJpYyBTeXNjYWxsIEVudHJ5KipcblxuT2theSwgc28gaW5pdGlhbGx5IEkgd2FzIGEgYml0IGNvbmZ1c2VkLiBgc3lzY2FsbF91c2VyX2Rpc3BhdGNoYCBpcyBhIGdlbmVyYWwgbWVjaGFuaXNtLCBidXQgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBpdCBzcGVjaWZpY2FsbHkgZm9yIGFybTY0IGJ5IHNlbGVjdGluZyBgR0VORVJJQ19FTlRSWWAuIFRoZSBwYXRjaCBkb2Vzbid0IGFjdHVhbGx5ICphZGQqIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AgZGlyZWN0bHksIGl0J3MgbW9kaWZ5aW5nIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNldCBgR0VORVJJQ19FTlRSWWAsIHdoaWNoIGNvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYHN5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYCBpZiBgR0VORVJJQ19TWVNDQUxMYCBpcyBhbHNvIGNob3Nlbi4gUmlnaHQsIGdvdCBpdC5cblxuQnV0IGhvbGQgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRpZmYgaXRzZWxmLi4uICpBaGEhKiBUaGUgZGlmZiAqZG9lcyogdG91Y2ggYGtlcm5lbC9lbnRyeS9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guY2AuIE5vdyBJIHNlZSBpdC4gVGhlIHBhdGNoIGFkZHMgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYXMgYSB3ZWFrIGZ1bmN0aW9uIHRoZXJlLiBPa2F5LCBzbyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHRoaXMgY2hhbmdlLiBOb3cgSSB1bmRlcnN0YW5kLiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluIGBhcmNoL2FybTY0L2tlcm5lbC92ZHNvLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZS5cblxuTGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgYWZmZWN0ZWQgZmlsZXMgd2l0aGluIHRoZSBwYXRjaC4gSSdtIHNlZWluZyBjaGFuZ2VzIHRvIGBhcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL2FybS9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9jc2t5L2tlcm5lbC9wdHJhY2UuY2AsIGBhcmNoL202OGsva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmNgLCBgYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jYCwgYGFyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jYCwgYGFyY2gvdW0va2VybmVsL3NrYXMvc3lzY2FsbC5jYCwgYGFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmNgLCBhbmQgYGFyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuY2AuIFRoZXkncmUgYWxsIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgIXNlY3VyZV9jb21wdXRpbmcoKWAgaW5zdGVhZCBvZiBgc2VjdXJlX2NvbXB1dGluZygpID09IC0xYC4gVGhpcyBtZWFucyB0aGVyZSdzIGEgd2lkZXIsIGZ1bmRhbWVudGFsIGNoYW5nZSBhY3Jvc3MgdGhlIGtlcm5lbCB3aGVyZSBgc2VjdXJlX2NvbXB1dGluZygpYCBpcyBub3cgcmV0dXJuaW5nIGEgYm9vbGVhbi5cblxuU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgdHdvLWZvbGQ6IEZpcnN0LCBpdCdzIGEgdHJlZS13aWRlIGNoYW5nZSB0byBjb252ZXJ0IGBzZWN1cmVfY29tcHV0aW5nKClgIHRvIGEgYm9vbGVhbiByZXR1cm4uIEJ1dCB0aGUgYmlnZ2VyLCBhcmNoaXRlY3R1cmFsIGNoYW5nZSBpcyBtaWdyYXRpbmcgYXJtNjQgdG8gdGhpcyBnZW5lcmljIGVudHJ5IHBvaW50IG1lY2hhbmlzbS4gVGhhdCdzIHRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIEkgYmVsaWV2ZS5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgbGV0J3MgbGlzdCB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlOlxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbldhaXQsIGhhbmcgb24uLi4gYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGBhcmNoL2FybTY0L2tlcm5lbC9kZWJ1Zy1tb25pdG9ycy5jYC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIHRvby4gV2hpbGUgaXQgd29uJ3QgYmUgYXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmRpbmcgdGhlICppbXBhY3QqIG9mIHRoZSBjaGFuZ2UsIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGFybTY0IHNwZWNpZmljIGNvZGUuIExvb2tzIGxpa2UgYGRvX2VsMF9zdmNgIGFuZCBgZG9fZWwwX3N2Y19jb21wYXRgIGFyZSBob3QgcGF0aHMsIGFuZCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYGludm9rZV9zeXNjYWxsYCwgYWx0aG91Z2ggSSdtIHByZXR0eSBzdXJlIHRoYXQgaXQncyBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGNvbnRleHQgd2hlbiByZXZpZXdpbmcgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGBhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNgIGZpbGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMToxMy4xOTgzNDk2MTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjc1MDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnZva2Vfc3lzY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTIzPXN0YXRpYyBsb25nIGRvX25pX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTMzLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozNDpzdGF0aWMgbG9uZyBfX2ludm9rZV9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzeXNjYWxsX2ZuX3Qgc3lzY2FsbF9mbilcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMzUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTM4LVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzozOTpzdGF0aWMgdm9pZCBpbnZva2Vfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNjbm8sXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTQwLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzY19ucixcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy00OS1cXHRcXHRzeXNjYWxsX2ZuID0gc3lzY2FsbF90YWJsZVthcnJheV9pbmRleF9ub3NwZWMoc2Nubywgc2NfbnIpXTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6NTA6XFx0XFx0cmV0ID0gX19pbnZva2Vfc3lzY2FsbChyZWdzLCBzeXNjYWxsX2ZuKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtNTEtXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYz01OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmMtMTE4LVxcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxMTk6XFx0aW52b2tlX3N5c2NhbGwocmVncywgc2Nubywgc2NfbnIsIHN5c2NhbGxfdGFibGUpO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy0xMjAtdHJhY2VfZXhpdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MTMuNDIxMTA2OTg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MTM5ODQzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTeXN0ZW0gQ2FsbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBpZGVudGlmeWluZyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGlzIHN5c3RlbSBjYWxsIHBhdGNoLiBJIHF1aWNrbHkgaG9uZWQgaW4gb24gdGhlIGhvdCBwYXRocywgbGlrZSBgaW52b2tlX3N5c2NhbGxgIGFuZCBgX19pbnZva2Vfc3lzY2FsbGAsIHdoaWNoIEkgZmlsdGVyZWQgb3V0IHRvIGZvY3VzIG9uIHRoZSBrZXkgbW9kaWZpY2F0aW9ucy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgaW50byBgc3lzY2FsbF90cmFjZV9lbnRlcmAsIHdoaWNoIGxlZCBtZSB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb25zLlxuXG5NeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBsZXNzIGZyZXF1ZW50bHkgZXhlY3V0ZWQgZnVuY3Rpb25zIHRoYXQgd2VyZSBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIEkgbm90aWNlZCBtb2RpZmljYXRpb25zIHRvOlxuXG4qICAgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmBcbiogICBgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXBgXG4qICAgYHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcGBcblxuSSB0aGVuIGRvdWJsZS1jaGVja2VkIGBzeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLiBJdCB3YXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQgYnV0IHNhdyB0aGUgYWRkaXRpb24gb2YgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgYW5kIHRoZXJlZm9yZSBiZWFycyByZWxldmFuY2UuIEkgbW92ZWQgb24gdG8gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgaW1wbGVtZW50ZWQgZm9yIEFSTTY0LiBUaGUgZGlmZmVyZW5jZXMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBWRFNPIHNpZ3JldHVybiBtZWNoYW5pc20sIHNlZW0gY3JpdGljYWwuXG5cbkkgdGhlbiBjb25zaWRlcmVkIGBfX3NlY3VyZV9jb21wdXRpbmdgIGFuZCBgX19zZWNjb21wX2ZpbHRlcmAuIFdoaWxlIHRob3NlIGFyZSBjb3JlIHNlY2NvbXAgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIG15IGZvY3VzIGlzIG9uIGxlc3MtZnJlcXVlbnRseSBjYWxsZWQgZnVuY3Rpb25zLiBTaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzZWNjb21wLCBidXQgdGhlIGhvdCBwYXRoIGZ1bmN0aW9ucyBhcmUgbm90IHRoZSBmb2N1cywgSSBkaXNjYXJkZWQgdGhlc2UuXG5cbkkgcmV2aXNpdGVkIHRoZSBxdWVzdGlvbiBvZiBnZW5lcmljIGhvdCBwYXRocywgbWFraW5nIHN1cmUgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZW0gaW4gbXkgc2VsZWN0aW9uLCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFRoZXJlZm9yZSwgSSBzZXR0bGVkIG9uIGxpc3RpbmcgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cblRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMgd2l0aG91dCBiZWluZyBvdmVybHkgZ2VuZXJpYy5cblxuRmluYWxseSwgSSBjaGVja2VkIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgcHJvcGVyIHRlc3RhYmlsaXR5LlxuKiAgIGBTRUNDT01QYFxuKiAgIGBTRUNDT01QX0ZJTFRFUmBcbiogICBgQ09NUEFUYCAobmVlZGVkIGJlY2F1c2Ugb2YgY29tcGF0LXJlbGF0ZWQgbG9naWMgaW4gYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmApXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNTozMTozNy41NjA5NTQ2MDZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODU0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzU0LVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTYtXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTc3NT1jb25maWcgS1VTRVJfSEVMUEVSU1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE4MDEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE4MDI6Y29uZmlnIENPTVBBVF9WRFNPXFxuYXJjaC9hcm02NC9LY29uZmlnLTE4MDMtXFx0Ym9vbCBcXFwiRW5hYmxlIHZEU08gZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTgxNT1jb25maWcgVEhVTUIyX0NPTVBBVF9WRFNPXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTgyMi1cXG5hcmNoL2FybTY0L0tjb25maWc6MTgyMzpjb25maWcgQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFNcXG5hcmNoL2FybTY0L0tjb25maWctMTgyNC1cXHRib29sIFxcXCJGaXggdXAgbWlzYWxpZ25lZCBtdWx0aS13b3JkIGxvYWRzIGFuZCBzdG9yZXMgaW4gdXNlciBzcGFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6MzcuNjQxODIwMjk4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzkwMzk1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBjb25maWcgaGVyZS4gR29vZCwgYENPTVBBVGAgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbjsgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggdGhpcyBgU0VDQ09NUGAgYW5kIGBTRUNDT01QX0ZJTFRFUmAgY29tYm8uIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZWlyIHNldHRpbmdzLiBHb3R0YSBlbnN1cmUgbm8gb3ZlcnNpZ2h0cyBoZXJlLiBHb3R0YSBjb25maXJtIHRoZSBTRUNDT01QIHBvbGljaWVzIGFyZSB3ZWxsLWRlZmluZWQuIEFscmlnaHQsIGxldCdzIGRlbHZlIGRlZXBlciB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6NDEuMTIwODYzNTE1WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTg2MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTYyOD1jb25maWcgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXFxuLS1cXG5hcmNoL0tjb25maWctNjQ2LVxcbmFyY2gvS2NvbmZpZzo2NDc6Y29uZmlnIFNFQ0NPTVBcXG5hcmNoL0tjb25maWctNjQ4LVxcdHByb21wdCBcXFwiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGV4ZWN1dGUgdW50cnVzdGVkIGJ5dGVjb2RlXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnLTY2My1cXG5hcmNoL0tjb25maWc6NjY0OmNvbmZpZyBTRUNDT01QX0ZJTFRFUlxcbmFyY2gvS2NvbmZpZy02NjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9LY29uZmlnLTY3My1cXG5hcmNoL0tjb25maWc6Njc0OmNvbmZpZyBTRUNDT01QX0NBQ0hFX0RFQlVHXFxuYXJjaC9LY29uZmlnLTY3NS1cXHRib29sIFxcXCJTaG93IHNlY2NvbXAgZmlsdGVyIGNhY2hlIHN0YXR1cyBpbiAvcHJvYy9waWQvc2VjY29tcF9jYWNoZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTU6MzE6NDEuMjE2NzMzNjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODU5ODI4MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFybTY0IFN5c3RlbSBDYWxsIE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgdmFsaWQuIExldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMgcGF0Y2gncyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzIEkgbmVlZCB0byBjb25zaWRlcj8gUmlnaHQsIGl0IG1vZGlmaWVzIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlbGVjdCBgR0VORVJJQ19FTlRSWWAuIGBHRU5FUklDX0VOVFJZYCBpcyAqc2VsZWN0ZWQqLCBzbyBJIGRvbid0IG5lZWQgdG8gZW5hYmxlIGl0IGV4cGxpY2l0bHkuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNvcmUgb2YgdGhpczogdGhlIHBhdGNoIG1vdmVzIGFybTY0IHRvIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscy4gVGhpcyBtZWFucyBpdCdzIGRpdGNoaW5nIHRoZSBjdXN0b20gYXJtNjQgc3lzY2FsbCBlbnRyeS9leGl0IHRyYWNpbmcgYW5kIHN3aXRjaGluZyB0byB0aGUgZ2VuZXJpYyBgc3lzY2FsbF90cmFjZV9lbnRlcigpYCBhbmQgYHN5c2NhbGxfZXhpdF90b191c2VyX21vZGVfd29yaygpYCBmdW5jdGlvbnMuIEl0IGFsc28gbW9kaWZpZXMgYHNlY3VyZV9jb21wdXRpbmcoKWAgYWNyb3NzIHRoZSB0cmVlIHRvIHJldHVybiBhIGJvb2xlYW4gaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLiBUaGF0J3MgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBzeXNjYWxscyB3b3JrIG9uIGFybTY0LCBhbmQgaXQgcmlwcGxlcyBvdXQgdG8gc2VjY29tcCBoYW5kbGluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy5cblxuVGhlcmVmb3JlLCBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHRhcmdldCB0aGUgc3BlY2lmaWMgbmV3IGVudHJ5IHBvaW50cyBvbiBhcm02NCBpbnRyb2R1Y2VkIGJ5IHRoZSBnZW5lcmljIGVudHJ5IG1lY2hhbmlzbS4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGluZ3MgbGlrZSBgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuYC4gQW5kLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHNpbmdsZS1zdGVwIHB0cmFjZSBpbnRlcmFjdGlvbiwgc2luY2UgdGhhdCB3YXMgbW9kaWZpZWQgdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIGVudHJ5LlxuXG5UbyBleGVyY2lzZSB0aGUgc2VjY29tcCBjaGFuZ2VzIGFuZCB0aGUgY29tcGF0IGJyYW5jaCBvZiB0aGUgdmRzbyBzaWdyZXR1cm4gY2hlY2ssIEkgc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGBTRUNDT01QYCwgYFNFQ0NPTVBfRklMVEVSYCwgYW5kIGBDT01QQVRgLlxuXG5NeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZTpcblxuKiAgIGBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5gXG4qICAgYHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwYFxuKiAgIGB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBgXG5cbldhaXQuLi4gSSBzZWUgYGFyY2hfc3lzY2FsbF9pc192ZHNvX3NpZ3JldHVybmAgaXMgKmFsc28qIGFkZGVkIGFzIGEgd2VhayBmdW5jdGlvbiBpbiBga2VybmVsL2VudHJ5L3N5c2NhbGxfdXNlcl9kaXNwYXRjaC5jYC4gQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gbW9yZSB0aGFuIG9uZSBwbGFjZS5cblxuSG1tLCB3aGF0IGFib3V0IGZ1enppbmcgYF9fc2VjdXJlX2NvbXB1dGluZ2AgZGlyZWN0bHk/IEl0J3MgYSBob3QgcGF0aCwgYW5kIGl0J3MgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEhvd2V2ZXIsIGl0J3MgdG9vIHJpc2t5IHRvIGluY2x1ZGUgaW4gdGhpcyBjdXJyZW50IGZvY3VzLiBJIGRvbid0IHdhbnQgdG8gc2tldyB0aGUgcmVzdWx0cyBieSBpbmNsdWRpbmcgY29kZSB0aGF0IGlzIHRvbyBicm9hZGx5IGNoYW5nZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLi4uIE9rYXksIGBwdHJhY2Vfc2F2ZV9yZWdgIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oYCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2VudHJ5YCBhbmQgYGFyY2hfcHRyYWNlX3JlcG9ydF9zeXNjYWxsX2V4aXRgIGFyZSBhbGwgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgbWVhbnMgSSBjYW4ndCB0YXJnZXQgdGhlbSBkaXJlY3RseSBmb3IgZnV6emluZy5cblxuT2theSwgSSdtIGNvbmZpZGVudCB3aXRoIHRoZXNlIHRocmVlIGZvY3VzIHN5bWJvbHMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMTIsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE1OjMxOjU2LjA3NjU2NDUwM1oiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDc4OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNDT01QXCIsXG4gICAgXCJTRUNDT01QX0ZJTFRFUlwiLFxuICAgIFwiQ09NUEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuXCIsXG4gICAgXCJ1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcFwiLFxuICAgIFwidXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgYXJtNjQgdG8gdXNlIHRoZSBnZW5lcmljIGVudHJ5IGNvZGUgZm9yIHN5c3RlbSBjYWxscywgcmVwbGFjaW5nIGN1c3RvbSBhcm02NCBzeXNjYWxsIGVudHJ5L2V4aXQgdHJhY2luZyB3aXRoIGdlbmVyaWMgaG9va3MuIEl0IGFsc28gbW9kaWZpZXMgc2VjdXJlX2NvbXB1dGluZygpIHRyZWUtd2lkZSB0byByZXR1cm4gYSBib29sZWFuLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzY2FsbCBwYXRoIG9uIGFybTY0IGFuZCBzZWNjb21wIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgYXJtNjQtc3BlY2lmaWMgZ2VuZXJpYyBlbnRyeSBob29rcyAoZS5nLiwgYXJjaF9zeXNjYWxsX2lzX3Zkc29fc2lncmV0dXJuKSBhbmQgcHRyYWNlIHNpbmdsZS1zdGVwIHRvZ2dsaW5nIHdoaWNoIHdhcyBtb2RpZmllZCB0byBpbnRlcmFjdCB3aXRoIGdlbmVyaWMgZW50cnkuIFNFQ0NPTVAgYW5kIENPTVBBVCBjb25maWdzIGFyZSByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgc2VjY29tcCBsb2dpYyBhbmQgY29tcGF0IHZkc28gY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ0NPTVBcIixcbiAgICBcIlNFQ0NPTVBfRklMVEVSXCIsXG4gICAgXCJDT01QQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm5cIixcbiAgICBcInVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwXCIsXG4gICAgXCJ1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyBhcm02NCB0byB1c2UgdGhlIGdlbmVyaWMgZW50cnkgY29kZSBmb3Igc3lzdGVtIGNhbGxzLCByZXBsYWNpbmcgY3VzdG9tIGFybTY0IHN5c2NhbGwgZW50cnkvZXhpdCB0cmFjaW5nIHdpdGggZ2VuZXJpYyBob29rcy4gSXQgYWxzbyBtb2RpZmllcyBzZWN1cmVfY29tcHV0aW5nKCkgdHJlZS13aWRlIHRvIHJldHVybiBhIGJvb2xlYW4uIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBzeXNjYWxsIHBhdGggb24gYXJtNjQgYW5kIHNlY2NvbXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBhcm02NC1zcGVjaWZpYyBnZW5lcmljIGVudHJ5IGhvb2tzIChlLmcuLCBhcmNoX3N5c2NhbGxfaXNfdmRzb19zaWdyZXR1cm4pIGFuZCBwdHJhY2Ugc2luZ2xlLXN0ZXAgdG9nZ2xpbmcgd2hpY2ggd2FzIG1vZGlmaWVkIHRvIGludGVyYWN0IHdpdGggZ2VuZXJpYyBlbnRyeS4gU0VDQ09NUCBhbmQgQ09NUEFUIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBzZWNjb21wIGxvZ2ljIGFuZCBjb21wYXQgdmRzbyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[1] Phase: Succeeded StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 15:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 15:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2] Phase: Succeeded StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 15:32:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 15:32:07 +0000 UTC FinishedAt: 2026-06-29 15:32:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfg4n/series-workflowhfg4n-convert-artifact-933844935/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 15:32:18 +0000 UTC FinishedAt: 2026-06-29 15:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 15:32:18 +0000 UTC FinishedAt: 2026-06-29 15:59:41 +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:*55fd8593-deeb-412a-aea2-64c92f0d6d41,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-workflowhfg4n/series-workflowhfg4n-convert-artifact-933844935/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": "50cf7bfc-1786-4617-93cc-40dd99f40993", "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-workflowhfg4n/series-workflowhfg4n-build-action-122970205/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 15:32:18 +0000 UTC FinishedAt: 2026-06-29 15:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*55fd8593-deeb-412a-aea2-64c92f0d6d41,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-workflowhfg4n/series-workflowhfg4n-convert-artifact-933844935/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": "50cf7bfc-1786-4617-93cc-40dd99f40993", "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-workflowhfg4n/series-workflowhfg4n-build-action-122970205/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 15:59:41 +0000 UTC FinishedAt: 2026-06-29 15:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 15:59:41 +0000 UTC FinishedAt: 2026-06-29 15:59:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 15:59:41 +0000 UTC FinishedAt: 2026-06-29 15:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 15:59:41 +0000 UTC FinishedAt: 2026-06-29 15:59:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfg4n/series-workflowhfg4n-convert-artifact-12989686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 15:59:51 +0000 UTC FinishedAt: 2026-06-29 16:02:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 15:59:51 +0000 UTC FinishedAt: 2026-06-29 16:01:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*50cf7bfc-1786-4617-93cc-40dd99f40993,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-workflowhfg4n/series-workflowhfg4n-build-action-122970205/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-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 16:02:03 +0000 UTC FinishedAt: 2026-06-29 16:02:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 16:02:03 +0000 UTC FinishedAt: 2026-06-29 16:02:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 16:02:03 +0000 UTC FinishedAt: 2026-06-29 16:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 16:02:03 +0000 UTC FinishedAt: 2026-06-29 16:36:31 +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:*55fd8593-deeb-412a-aea2-64c92f0d6d41,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-workflowhfg4n/series-workflowhfg4n-convert-artifact-12989686/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": "cebe96fb-a8da-475e-8fda-017a1b5b217b", "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-workflowhfg4n/series-workflowhfg4n-build-action-894756023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Failed StartedAt: 2026-06-29 16:02:03 +0000 UTC FinishedAt: 2026-06-29 16:04:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*55fd8593-deeb-412a-aea2-64c92f0d6d41,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-workflowhfg4n/series-workflowhfg4n-convert-artifact-12989686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-06-29 16:11:54 +0000 UTC FinishedAt: 2026-06-29 16:36:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*55fd8593-deeb-412a-aea2-64c92f0d6d41,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-workflowhfg4n/series-workflowhfg4n-convert-artifact-12989686/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": "cebe96fb-a8da-475e-8fda-017a1b5b217b", "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-workflowhfg4n/series-workflowhfg4n-build-action-894756023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 16:36:31 +0000 UTC FinishedAt: 2026-06-29 16:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 16:36:31 +0000 UTC FinishedAt: 2026-06-29 16:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 16:36:31 +0000 UTC FinishedAt: 2026-06-29 16:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 16:36:31 +0000 UTC FinishedAt: 2026-06-29 16:38:35 +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:*cebe96fb-a8da-475e-8fda-017a1b5b217b,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-workflowhfg4n/series-workflowhfg4n-build-action-894756023/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-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"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:*50cf7bfc-1786-4617-93cc-40dd99f40993,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cebe96fb-a8da-475e-8fda-017a1b5b217b,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-workflowhfg4n/series-workflowhfg4n-build-action-122970205/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-workflowhfg4n/series-workflowhfg4n-build-action-894756023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 16:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 16:39:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"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-workflowhfg4n/series-workflowhfg4n-convert-artifact-1403219483/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 16:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 16:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 16:38:45 +0000 UTC FinishedAt: 2026-06-29 16:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 16:40:01 +0000 UTC FinishedAt: 2026-06-29 19:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfg4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["arch_syscall_is_vdso_sigreturn","user_enable_single_step","user_disable_single_step"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECCOMP","SECCOMP_FILTER","COMPAT"],"series_id":"a39c9165-716a-4c61-a21f-ce0bc84e5b6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 16:40:01 +0000 UTC FinishedAt: 2026-06-29 19:41:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*50cf7bfc-1786-4617-93cc-40dd99f40993,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cebe96fb-a8da-475e-8fda-017a1b5b217b,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-workflowhfg4n/series-workflowhfg4n-build-action-122970205/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-workflowhfg4n/series-workflowhfg4n-build-action-894756023/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-workflowhfg4n/series-workflowhfg4n-convert-artifact-1403219483/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,}