Name: series-workflowsv9dl Phase: Succeeded StartedAt: 2026-09-10 08:26:11 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[0] Phase: Succeeded StartedAt: 2026-09-10 08:26:11 +0000 UTC FinishedAt: 2026-09-10 08:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 08:26:11 +0000 UTC FinishedAt: 2026-09-10 08:43:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "ZSWAP" ], "series_id": "e96efa22-223c-45ed-9dc5-4cfe7ccebc58" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memcg_reparent_list_lrus", "__memcg_list_lru_alloc", "memcg_list_lru_alloc", "folio_memcg_list_lru_alloc", "list_lru_count_one", "mem_cgroup_css_online", "mem_cgroup_css_offline" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6NDE6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZiBCSVRTX1BFUl9MT05HIFx1MDAzYyA2NFxuIFx0c2VxbG9ja190XHRcdHNvY2tldF9wcmVzc3VyZV9zZXFsb2NrO1xuICNlbmRpZlxuLVx0aW50IGttZW1jZ19pZDtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuIFx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLS8qXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZyYjMzk7cyBrbWVtX2lkLCB1c2VkIGZvciBnZXR0aW5nXG4tICogY29ycmVzcG9uZGluZyBMUlUgbGlzdHMuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIG1lbWNnID8gbWVtY2ctXHUwMDNla21lbWNnX2lkIDogLTE7XG4tfVxuLVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gLTE7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTA2NCw3ICYjNDM7MTA2NCw4IEBAIGludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4ge1xuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbi1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4mIzQzO1x0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4mIzQzO1x0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxuIFx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuIFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jXG5AQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbiYjNDM7bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBpZHggXHUwMDNlPSAwKSB7XG4tXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBpZHgpO1xuJiM0MztcdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbiYjNDM7XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XG4mIzQzO1x0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuIFx0fVxuQEAgLTkxLDcgJiM0Mzs5Miw3IEBAIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gYWdhaW46XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XG4mIzQzO1x0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsICptZW1jZyk7XG4gXHRpZiAobGlrZWx5KGwpKSB7XG4gXHRcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbiYjNDM7bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBcdTAwMjZscnUtXHUwMDNlbm9kZVtuaWRdLmxydTtcbiB9XG5AQCAtMzEzLDcgJiM0MzszMTQsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdGxvbmcgY291bnQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcbiYjNDM7XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgbWVtY2cpO1xuIFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpIDogMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcbiBcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZylcbiB7XG4tXHRpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy1cdTAwM2VrbWVtY2dfaWQ7XG4gXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNyYy1cdTAwM2Vsb2NrKTtcbi1cdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTtcbiYjNDM7XHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuQEAgLTUzNiw3ICYjNDM7NTM2LDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIFx0XHQgKi9cbi1cdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuJiM0MztcdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXHRcdGlmICghbWxydSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01NTEsNyAmIzQzOzU1MSw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gXHRcdGZvcl9lYWNoX25vZGUoaSlcbiBcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG4gXG4tXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4mIzQzO1x0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWRcbkBAIC01NjYsOSAmIzQzOzU2NiwxMCBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4ge1xuLVx0aW50IGlkeCA9IG1lbWNnLVx1MDAzZWttZW1jZ19pZDtcbiYjNDM7XHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiBpZHggXHUwMDNjIDAgfHwgeGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4mIzQzO1x0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5AQCAtNjAyLDcgJiM0Mzs2MDMsNyBAQCBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGlmICghbWxydSlcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBwb3MtXHUwMDNla21lbWNnX2lkKTtcbiYjNDM7XHRcdHhhc19zZXQoXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xuIFx0XHRkbyB7XG4gXHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiBcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbkBAIC02NzYsNyAmIzQzOzY3Nyw5IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XG4mIzQzO1x0ICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcbiBcdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRjYjJkYjhjMDkyM2EuLmFlMmQ2ZDljZmE3NDIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NjMsMzMgJiM0MzszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbiBcdG9ial9jZ3JvdXBfZ2V0X21hbnkoZm9saW9fb2JqY2coZm9saW8pLCBuZXdfcmVmcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbi1cbi1cdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkLmlkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7XG4tXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnQpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcdTAwM2VcbkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRzZXFsb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xuICNlbmRpZlxuIFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbkBAIC00MjkwLDcgJiM0Mzs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdGludCBuaWQ7XG4gXG4tXHRtZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgbGlrZWx5KCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbiYjNDM7XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4gXHQvKlxuIFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcbkBAIC00Mjk4LDcgJiM0Mzs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIGhlcmUsIHdoZW4gbWVtX2Nncm91cF9pdGVyKCkgY2FuJiMzOTt0IHNraXAgaXQuXG4gXHQgKi9cbiBcdGlmIChhbGxvY19zaHJpbmtlcl9pbmZvKG1lbWNnKSlcbi1cdFx0Z290byBvZmZsaW5lX2ttZW07XG4mIzQzO1x0XHRnb3RvIHJlcGFyZW50X2xydXM7XG4gXG4gXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIFx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0fVxuIFx0fVxuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbi1vZmZsaW5lX2ttZW06XG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuJiM0MztyZXBhcmVudF9scnVzOlxuJiM0MztcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuQEAgLTQzNzIsMTEgJiM0Mzs0MzQ1LDExIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChtZW1jZyk7XG4gXG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuJiM0MztcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdC8qXG4gXHQgKiBUaGUgcmVwYXJlbnRpbmcgb2Ygb2JqY2cgbXVzdCBiZSBhZnRlciB0aGUgcmVwYXJlbnRpbmcgb2Zcbi1cdCAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0XG4tXHQgKiB0aGV5IHdpbGwgbm90IG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4mIzQzO1x0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxuJiM0MztcdCAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4gXHQgKi9cbiBcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XG4gXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTI1NSw4ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcbiBcbi1cdHNocmlua2VyID1cbi1cdFx0c2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFLCBcJiMzNDttbS16c3dhcFwmIzM0Oyk7XG4mIzQzO1x0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxuJiM0MztcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xuIFx0aWYgKCFzaHJpbmtlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1jZ19yZXBhcmVudF9saXN0X2xydXMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDttZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDtmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV9jb3VudF9vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jc3Nfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2lmIEJJVFNfUEVSX0xPTkcgJmx0OyA2NAogCXNlcWxvY2tfdAkJc29ja2V0X3ByZXNzdXJlX3NlcWxvY2s7CiAjZW5kaWYKLQlpbnQga21lbWNnX2lkOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDsKQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogCQlfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLS8qCi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJiMzOTtzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmcKLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlyZXR1cm4gbWVtY2cgPyBtZW1jZy0mZ3Q7a21lbWNnX2lkIDogLTE7Ci19Ci0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZDFjZTA2MTYwMWJjZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMDY0LDcgJiM0MzsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogewogCWRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8Ci0JCQkJCQkgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsCiYjNDM7CQkJCQkJIFNIUklOS0VSX01FTUNHX0FXQVJFIHwKJiM0MzsJCQkJCQkgU0hSSU5LRVJfTk9OU0xBQiwKIAkJCQkJCSAmIzM0O3RocC1kZWZlcnJlZF9zcGxpdCYjMzQ7KTsKIAlpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSAwKSB7Ci0JCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9CiYjNDM7CQkJeGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAogCQlyZXR1cm4gbWxydSA/ICZhbXA7bWxydS0mZ3Q7bm9kZVtuaWRdIDogTlVMTDsKIAl9CkBAIC05MSw3ICYjNDM7OTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCiAJcmN1X3JlYWRfbG9jaygpOwogYWdhaW46Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpOwomIzQzOwlsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTsKIAlpZiAobGlrZWx5KGwpKSB7CiAJCWxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpOwogCQlpZiAobGlrZWx5KFJFQURfT05DRShsLSZndDtucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7CkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gJmFtcDtscnUtJmd0O25vZGVbbmlkXS5scnU7CiB9CkBAIC0zMTMsNyAmIzQzOzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCWxvbmcgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7CiYjNDM7CWwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7CiAJY291bnQgPSBsID8gUkVBRF9PTkNFKGwtJmd0O25yX2l0ZW1zKSA6IDA7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCQkJCXN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYywKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZykKIHsKLQlpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy0mZ3Q7a21lbWNnX2lkOwogCXN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcmMtJmd0O2xvY2spOwotCWRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTsKJiM0MzsJZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZhbXA7ZHN0LSZndDtsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlsaXN0X3NwbGljZV9pbml0KCZhbXA7c3JjLSZndDtsaXN0LCAmYW1wO2RzdC0mZ3Q7bGlzdCk7CkBAIC01MzYsNyAmIzQzOzUzNiw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiAJCSAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXMKIAkJICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby4KIAkJICovCi0JCW1scnUgPSB4YV9sb2FkKCZhbXA7bHJ1LSZndDt4YSwgbWVtY2ctJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQltbHJ1ID0geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAkJaWYgKCFtbHJ1KQogCQkJY29udGludWU7CiAKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW4KIAkJZm9yX2VhY2hfbm9kZShpKQogCQkJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgJmFtcDttbHJ1LSZndDtub2RlW2ldLCBwYXJlbnQpOwogCi0JCXhhX2VyYXNlX2lycSgmYW1wO2xydS0mZ3Q7eGEsIG1lbWNnLSZndDtrbWVtY2dfaWQpOwomIzQzOwkJeGFfZXJhc2VfaXJxKCZhbXA7bHJ1LSZndDt4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpOwogCiAJCS8qCiAJCSAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWQKQEAgLTU2Niw5ICYjNDM7NTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KQogewotCWludCBpZHggPSBtZW1jZy0mZ3Q7a21lbWNnX2lkOwomIzQzOwlpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBpZHggJmx0OyAwIHx8IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIH0KIAogc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKQEAgLTYwMiw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWlmICghbWxydSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl4YXNfc2V0KCZhbXA7eGFzLCBwb3MtJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQl4YXNfc2V0KCZhbXA7eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpOwogCQlkbyB7CiAJCQl4YXNfbG9ja19pcnFzYXZlKCZhbXA7eGFzLCBmbGFncyk7CiAJCQlpZiAoIXhhc19sb2FkKCZhbXA7eGFzKSAmYW1wOyZhbXA7ICFjc3NfaXNfZHlpbmcoJmFtcDtwb3MtJmd0O2NzcykpIHsKQEAgLTY3Niw3ICYjNDM7Njc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwKJiM0MzsJICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9OT05TTEFCKSkpKQogCQltZW1jZ19hd2FyZSA9IGZhbHNlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzYzLDMzICYjNDM7Mzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsCiAJb2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQotCQlyZXR1cm47Ci0KLQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7Ci0KLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwotfQotCi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0KLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkKLQkJcmV0dXJuOwotCi0JcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwotCW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTsKLX0KLQogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvd3JpdGViYWNrLmgmZ3Q7CkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJc2VxbG9ja19pbml0KCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTsKICNlbmRpZgogCW1lbWNnMV9tZW1jZ19pbml0KG1lbWNnKTsKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQpAQCAtNDI5MCw3ICYjNDM7NDI2Miw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCWludCBuaWQ7CiAKLQltZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCiAJLyoKIAkgKiBBIG1lbWNnIG11c3QgYmUgdmlzaWJsZSBmb3IgZXhwYW5kX3Nocmlua2VyX2luZm8oKQpAQCAtNDI5OCw3ICYjNDM7NDI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4mIzM5O3Qgc2tpcCBpdC4KIAkgKi8KIAlpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpCi0JCWdvdG8gb2ZmbGluZV9rbWVtOwomIzQzOwkJZ290byByZXBhcmVudF9scnVzOwogCiAJZm9yX2VhY2hfbm9kZShuaWQpIHsKIAkJb2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7CkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJfQogCX0KIAlmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpOwotb2ZmbGluZV9rbWVtOgotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7cmVwYXJlbnRfbHJ1czoKJiM0MzsJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpOwogCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDM3MiwxMSAmIzQzOzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTsKIAotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTsKIAkvKgogCSAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZgotCSAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0Ci0JICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LgomIzQzOwkgKiB0aGUgbGlzdF9scnUgYWJvdmUsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGV5IHdpbGwgbm90CiYjNDM7CSAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuCiAJICovCiAJbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTsKIAlyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBjZDdiMGI2MjFiZGE4Li5hZmM2YzhkMDNkMjMxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEyNTUsOCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogewogCXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7CiAKLQlzaHJpbmtlciA9Ci0JCXNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgJiMzNDttbS16c3dhcCYjMzQ7KTsKJiM0MzsJc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfAomIzQzOwkJCQkgIFNIUklOS0VSX05PTlNMQUIsICYjMzQ7bW0tenN3YXAmIzM0Oyk7CiAJaWYgKCFzaHJpbmtlcikKIAkJcmV0dXJuIE5VTEw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDb250cm9sbGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlciwgc2luY2UgdGhhdCYjMzk7cyBteSBhcmVhIG9mIGV4cGVydGlzZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc3RyZWFtbGluaW5nIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykga21lbSB0cmFja2luZyBhbmQgbGlzdF9scnUgbWFuYWdlbWVudC4KClRoZSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNvcmUgY2hhbmdlczogYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBpcyBzaGVkZGluZyB0aGUgYGttZW1jZ19pZGAgZmllbGQgYW5kIHRoZSBhc3NvY2lhdGVkIGBtZW1jZ19rbWVtX2lkKClgIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBtZWFucyB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgaW50ZWdlci1iYXNlZCBJRCBhbmQgYWRvcHRpbmcgYSBkaXJlY3QgcG9pbnRlciBhcHByb2FjaCB0byByZWZlcmVuY2UgdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3QgaXRzZWxmLiBHb29kLCBwb3RlbnRpYWxseSBsZXNzIG92ZXJoZWFkIGFuZCBhIG1vcmUgZGlyZWN0IGRhdGEgYWNjZXNzLgoKVGhlIGBtbS9odWdlX21lbW9yeS5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYGRlZmVycmVkX3NwbGl0X3Nocmlua2VyYCBpbiBgdGhwX3Nocmlua2VyX2luaXQoKWAgaXMgaW50ZXJlc3RpbmcuICBUaGlzIHBvaW50cyB0b3dhcmRzIGltcHJvdmVkIGludGVyYWN0aW9uIHdpdGggdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc2hyaW5rZXIgYW5kIGxpa2VseSBvcHRpbWl6YXRpb24gYXJvdW5kIG5vbi1zbGFiIG1lbW9yeSByZWNsYWltLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2hyaW5rZXIgZmxhZ3MgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGhlcmUuCgpUaGUgY2hhbmdlcyBpbiBgbW0vbGlzdF9scnUuY2AgYXJlIG1vcmUgc3Vic3RhbnRpYWwuIFdlJiMzOTtyZSBjbGVhcmx5IHNoaWZ0aW5nIGZyb20gYW4gaW5kZXhlZCBhcHByb2FjaCAoYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCkgdG8gYSBkaXJlY3QgYG1lbV9jZ3JvdXBgIHBvaW50ZXIgKGBsaXN0X2xydV9mcm9tX21lbWNnYCkuICBSZXBsYWNpbmcgdXNlcyBvZiBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgc29saWRpZmllcyB0aGlzIHBvaW50ZXItYmFzZWQgYXBwcm9hY2guIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhlIG1lbWNnIHJlcGFyZW50aW5nIGxvZ2ljIGZvciBsaXN0X2xydXMuIFRoaXMgaXMga2V5LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmVzdGVkIGNncm91cHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBsb2dpYyBoYW5kbGVzIHJlYmFsYW5jaW5nIG9mIHJlc291cmNlcy4gVGhlIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YCB3aXRoIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBzZWVtcyBpbXBvcnRhbnQuIElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGl0IGlzIHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtY2ctYXdhcmUgbGlzdF9scnVzLgoKVGhlIHJlbW92YWwgb2YgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRoZSBpbmxpbmluZyBvZiBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzYCB3aXRoaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBzdWdnZXN0cyB0aGF0IHRoZXNlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHNpbXBsaWZpZWQuICBUaGlzIGlubGluaW5nIGFuZCBkaXJlY3QgcmVwYXJlbnRpbmcgd2lsbCBiZSBnb29kIGZvciBwZXJmb3JtYW5jZS4gVGhlIGZhY3QgaXQmIzM5O3MgaGFuZGxlZCBkaXJlY3RseSBpbiBvbmxpbmUgYW5kIG9mZmxpbmUgaW1wbGllcyBhbiBpbnRlbnRpb24gdG8gb3B0aW1pemUgdGhlIGNvbW1vbiBwYXRoIGFuZCBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLgoKRmluYWxseSwgdGhlIGBtbS96c3dhcC5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYHpzd2FwX2FsbG9jX3Nocmlua2VyKClgIG1lYW5zIHpzd2FwIGlzIGFsc28gYmVpbmcgY29uZmlndXJlZCB0byBpbnRlcmFjdCBkaWZmZXJlbnRseSB3aXRoIHRoZSBzaHJpbmtlci4gIFRoaXMgZnVydGhlciBwb2ludHMgdG8gaW1wcm92ZW1lbnRzIGluIGhvdyB3ZSBoYW5kbGUgbm9uLXNsYWIgbWVtb3J5IHByZXNzdXJlIGFuZCByZWNsYWltIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBmcmFtZXdvcmsuCgpJJiMzOTtsbCBuZWVkIHRvIHVzZSBncmVwcGVyIGFuZCByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgcmVjbGFpbSwgTlVNQSBpbnRlcmFjdGlvbnMsIGFuZCBvdmVyYWxsIGNncm91cCBwZXJmb3JtYW5jZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVzZSBjaGFuZ2VzIGJyZWFrIGFueSBhc3N1bXB0aW9ucyBJJiMzOTt2ZSByZWxpZWQgb24gaW4gbXkgb3duIHdvcmsgb24gdGhlIHN1YmplY3QsIG9yIHdoZXRoZXIgdGhlIG5ldyBhcHByb2FjaCBpbnRyb2R1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NIUklOS0VSX05PTlNMQUImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxuLS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtMTEzNS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcdGNvbXByX3Bvb2wuc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLCBcJiMzNDtidHJmcy1jb21wci1wYWdlc1wmIzM0Oyk7XG5mcy9idHJmcy9jb21wcmVzc2lvbi5jLTExMzctXHRpZiAoIWNvbXByX3Bvb2wuc2hyaW5rZXIpXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYz0yMzM1PXhmc19pbm9kZWdjX3JlZ2lzdGVyX3Nocmlua2VyKFxuLS1cbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XG5mcy94ZnMveGZzX2ljYWNoZS5jOjIzMzg6XHRtcC1cdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxuZnMveGZzL3hmc19pY2FjaGUuYy0yMzM5LVx0XHRcdFx0XHRcdFwmIzM0O3hmcy1pbm9kZWdjOiVzXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaD04Mj1zdHJ1Y3Qgc2hyaW5rZXIge1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMzEtICovXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTMyOiNkZWZpbmUgU0hSSU5LRVJfTk9OU0xBQlx0QklUKDQpXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMzLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4Olx0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY1PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02ODEtXHQgICAgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxubW0vbGlzdF9scnUuYzo2ODI6XHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcbm1tL2xpc3RfbHJ1LmMtNjgzLVx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuLS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzMy1cdFx0cmV0dXJuIC1FTk9TWVM7XG5tbS9zaHJpbmtlci5jOjIzNDpcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpXG5tbS9zaHJpbmtlci5jLTIzNS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxubW0vc2hyaW5rZXIuYz00Nzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01NTUtXHRcdFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFx1MDAyNlx1MDAyNlxubW0vc2hyaW5rZXIuYzo1NTY6XHRcdFx0ICAgICEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKSB7XG5tbS9zaHJpbmtlci5jLTU1Ny1cdFx0XHRcdGNsZWFyX2JpdChvZmZzZXQsIHVuaXQtXHUwMDNlbWFwKTtcbi0tXG5tbS96c3dhcC5jPTEyNTQ9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyNTgtXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG5tbS96c3dhcC5jOjEyNTk6XHRcdFx0XHQgIFNIUklOS0VSX05PTlNMQUIsIFwmIzM0O21tLXpzd2FwXCYjMzQ7KTtcbm1tL3pzd2FwLmMtMTI2MC1cdGlmICghc2hyaW5rZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNvZGUgY2hhbmdlcywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgcmVjZW50IGNvbW1pdHMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgbW0vbGlzdF9scnUuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYXJlYXM7IGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byByaXBwbGUgdGhyb3VnaCB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBhbHRlcmF0aW9ucywgbm90IGp1c3QgdGhlICp3aGF0Ki4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBpbXBhY3QgdG8gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueSBsb2NrIG9yZGVyaW5nIGlzc3VlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgY2hhbmdlcyB0byBMUlUgYmVoYXZpb3IgdGhhdCBtaWdodCBuZWdhdGl2ZWx5IGltcGFjdCBjYWNoaW5nIG9yIHN3YXBwaW5nLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSBpZiBhbnkgbmV3IGZlYXR1cmVzIGFyZSBleHBvc2VkLCBvciBpZiBhbnkgZXhpc3RpbmcgY2FwYWJpbGl0aWVzIGFyZSBkZXByZWNhdGVkLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIG9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0e1xuICA2MTpcdFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxuICA2MjpcdFx0XHRyZXR1cm47XG4gIDYzOlx0XG4gIDY0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG4gIDY1Olx0XHRsaXN0X2RlbChcdTAwMjZscnUtXHUwMDNlbGlzdCk7XG4gIDY2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gIDcwOlx0e1xuICA3MTpcdFx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbiAgNzU6XHRsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc2Olx0e1xuICA3NzpcdFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuICA3ODpcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPVxuICA3OTpcdFx0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gIDgwOlx0XG4gIDgxOlx0XHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuICA4MjpcdFx0fVxuICA4MzpcdFx0cmV0dXJuIFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxuICA4NzpcdGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gIDg4Olx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnLCBib29sIGlycSxcbiAgODk6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncywgYm9vbCBza2lwX2VtcHR5KVxuICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG4gIDkyOlx0XG4gIDkzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDk0Olx0YWdhaW46XG4gIDk1Olx0XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTtcbiAgOTY6XHRcdGlmIChsaWtlbHkobCkpIHtcbiAgOTc6XHRcdFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG4gIDk4Olx0XHRcdGlmIChsaWtlbHkoUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpICE9IExPTkdfTUlOKSkge1xuICA5OTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEwMDpcdFx0XHRcdHJldHVybiBsO1xuIDEwMTpcdFx0XHR9XG4gMTAyOlx0XHRcdHVubG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG4gMTAzOlx0XHR9XG4gMTA0Olx0XHQvKlxuIDEwNTpcdFx0ICogQ2FsbGVyIG1heSBzaW1wbHkgYmFpbCBvdXQgaWYgcmFjZWQgd2l0aCByZXBhcmVudGluZyBvclxuIDEwNjpcdFx0ICogbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdF9scnUgYW5kIGV4cGVjdCBlbXB0eSBzbG90cy5cbiAxMDc6XHRcdCAqL1xuIDEwODpcdFx0aWYgKHNraXBfZW1wdHkpIHtcbiAxMDk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTEwOlx0XHRcdHJldHVybiBOVUxMO1xuIDExMTpcdFx0fVxuIDExMjpcdFx0Vk1fV0FSTl9PTighY3NzX2lzX2R5aW5nKFx1MDAyNigqbWVtY2cpLVx1MDAzZWNzcykpO1xuIDExMzpcdFx0Km1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAoKm1lbWNnKTtcbiAxMTQ6XHRcdGdvdG8gYWdhaW47XG4gMTE1Olx0fVxuIDExNjpcdCNlbHNlXG4gMTE3Olx0c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gMTE4Olx0e1xuIDExOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYGxpc3RfbHJ1X2Zyb21fbWVtY2dgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBsaXN0X2xydV9mcm9tX21lbWNnYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCYjMzk7cyBpbnZva2VkLiBNb3JlIGJyb2FkbHksIEkgd2FudCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3Vic3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBMUlUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3dobywmIzM0OyAmIzM0O3doYXQsJiMzNDsgYW5kICYjMzQ7d2hlcmUmIzM0OyB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHR9XG4gNTAxOlx0XG4gNTAyOlx0c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIDUwMzpcdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXG4gNTA0Olx0XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXG4gNTA1Olx0e1xuIDUwNjpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xuIDUwNzpcdFxuIDUwODpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG4gNTA5Olx0XHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIDUxMDpcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIDUxMTpcdFxuIDUxMjpcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuIDUxMzpcdFx0aWYgKHNyYy1cdTAwM2Vucl9pdGVtcykge1xuIDUxNDpcdFx0XHRXQVJOX09OKHNyYy1cdTAwM2Vucl9pdGVtcyBcdTAwM2MgMCk7XG4gNTE1Olx0XHRcdGRzdC1cdTAwM2Vucl9pdGVtcyAmIzQzOz0gc3JjLVx1MDAzZW5yX2l0ZW1zO1xuIDUxNjpcdFx0XHRzZXRfc2hyaW5rZXJfYml0KGRzdF9tZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG4gNTE3Olx0XHR9XG4gNTE4Olx0XHQvKiBNYXJrIHRoZSBsaXN0X2xydV9vbmUgZGVhZCAqL1xuIDUxOTpcdFx0c3JjLVx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XG4gNTIwOlx0XG4gNTIxOlx0XHRzcGluX3VubG9jayhcdTAwMjZkc3QtXHUwMDNlbG9jayk7XG4gNTIyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3JjLVx1MDAzZWxvY2spO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHR2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gNTI2Olx0e1xuIDUyNzpcdFx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XG4gNTI4Olx0XHRpbnQgaTtcbiA1Mjk6XHRcbiA1MzA6XHRcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1MzE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkobHJ1LCBcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcbiA1MzI6XHRcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1O1xuIDUzMzpcdFxuIDUzNDpcdFx0XHQvKlxuIDUzNTpcdFx0XHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xuIDUzNjpcdFx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4gNTM3Olx0XHRcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXG4gNTM4Olx0XHRcdCAqL1xuIDUzOTpcdFx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiA1NDA6XHRcdFx0aWYgKCFtbHJ1KVxuIDU0MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDU0MjpcdFxuIDU0MzpcdFx0XHQvKlxuIDU0NDpcdFx0XHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcbiA1NDU6XHRcdFx0ICogKExPTkdfTUlOKSBiZWZvcmUgY2xlYXJpbmcgeGFycmF5IGVudHJ5IG90aGVyd2lzZSBhXG4gNTQ2Olx0XHRcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xuIDU0NzpcdFx0XHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xuIDU0ODpcdFx0XHQgKiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnIHdpbGwgYWNxdWlyZSBwYXJlbnQmIzM5O3MgbG9jayB3aGlsZSB0aGVcbiA1NDk6XHRcdFx0ICogaXRlbSBpcyBzdGlsbCBvbiBjaGlsZCYjMzk7cyBsaXN0LlxuIDU1MDpcdFx0XHQgKi9cbiA1NTE6XHRcdFx0Zm9yX2VhY2hfbm9kZShpKVxuIDU1MjpcdFx0XHRcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShscnUsIGksIFx1MDAyNm1scnUtXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcbiA1NTM6XHRcbiA1NTQ6XHRcdFx0eGFfZXJhc2VfaXJxKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIDU1NTpcdFxuIDU1NjpcdFx0XHQvKlxuIDU1NzpcdFx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG4gNTU4Olx0XHRcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxuIDU1OTpcdFx0XHQgKiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGNhbGwgd2lsbCBzaW1wbHkgYmFpbCBvdXQuXG4gNTYwOlx0XHRcdCAqL1xuIDU2MTpcdFx0XHRrdmZyZWVfcmN1KG1scnUsIHJjdSk7XG4gNTYyOlx0XHR9XG4gNTYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1NjQ6XHR9XG4gNTY1Olx0XG4gNTY2Olx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTY3Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA1Njg6XHR7XG4gNTY5Olx0XHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4gNTcwOlx0XHRcdHJldHVybiB0cnVlO1xuIDU3MTpcdFxuIDU3MjpcdFx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gNTczOlx0fVxuIDU3NDpcdFxuIDU3NTpcdHN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTc2Olx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4gNTc3Olx0e1xuIDU3ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1Nzk6XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXAgaW50byBgX19tZW1jZ19saXN0X2xydV9hbGxvY2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgX19tZW1jZ19saXN0X2xydV9hbGxvY2Agd29ya3MgYW5kLCBjcnVjaWFsbHksIGhvdyBldmVyeXRoaW5nICp1c2VzKiBpdC4gTXkgbmV4dCBtb3ZlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYnV0IGFsc28gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1YnNlcXVlbnRseSB1c2Ugd2hhdCBpdCBhbGxvY2F0ZXMuIEkmIzM5O20gdGFsa2luZyBhYm91dCBhbnkgZnVuY3Rpb24gdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGF0IHJldHVybmVkIGRhdGEgaW4gYSBtZWFuaW5nZnVsIHdheS4KClRoaXMgbWVhbnMgYSBtZXRob2RpY2FsIHNlYXJjaCBmb3IgYW55dGhpbmcgY2FsbGluZyBgbWVtY2dfbGlzdF9scnVfYWxsb2NgIG9yIGFueSBvZiB0aGUgZnVuZGFtZW50YWwgbGlzdF9scnUgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxpc3QgbWFuaXB1bGF0aW9uOiBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBhbmQgYGxpc3RfbHJ1X3dhbGtfb25lYC4gQnkgZXhhbWluaW5nIHRoZXNlLCBJIGNhbiBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uJiMzOTtzIGxpZmV0aW1lLCBpdHMgcHVycG9zZSwgYW5kIGhvdyBpdCBpcyB1bHRpbWF0ZWx5IGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgdXNhZ2UgcGF0dGVybnMgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGluZm9ybWVkIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwb3MsICpwYXJlbnQ7XG4gNTgxOlx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNTgyOlx0XG4gNTgzOlx0XHRnZnAgXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xuIDU4NDpcdFx0LypcbiA1ODU6XHRcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJiMzOTtzXG4gNTg2Olx0XHQgKiBsaXN0X2xydSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2dyb3VwIGFuZCBhbGwgaXRzXG4gNTg3Olx0XHQgKiBhbmNlc3RvcnMgaGF2ZSBhbGxvY2F0ZWQgbGlzdF9scnVfbWVtY2cuXG4gNTg4Olx0XHQgKi9cbiA1ODk6XHRcdGRvIHtcbiA1OTA6XHRcdFx0LypcbiA1OTE6XHRcdFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2FzbiYjMzk7dCBwb3B1bGF0ZWRcbiA1OTI6XHRcdFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxuIDU5MzpcdFx0XHQgKi9cbiA1OTQ6XHRcdFx0cG9zID0gbWVtY2c7XG4gNTk1Olx0XHRcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XG4gNTk2Olx0XHRcdHdoaWxlICghbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHBhcmVudCwgbHJ1KSkge1xuIDU5NzpcdFx0XHRcdHBvcyA9IHBhcmVudDtcbiA1OTg6XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xuIDU5OTpcdFx0XHR9XG4gNjAwOlx0XG4gNjAxOlx0XHRcdGlmICghbWxydSkge1xuIDYwMjpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAzOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwNDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA1Olx0XHRcdH1cbiA2MDY6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIG1lbV9jZ3JvdXBfaWQocG9zKSk7XG4gNjA3Olx0XHRcdGRvIHtcbiA2MDg6XHRcdFx0XHR4YXNfbG9ja19pcnFzYXZlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIDYwOTpcdFx0XHRcdGlmICgheGFzX2xvYWQoXHUwMDI2eGFzKSBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSkge1xuIDYxMDpcdFx0XHRcdFx0eGFzX3N0b3JlKFx1MDAyNnhhcywgbWxydSk7XG4gNjExOlx0XHRcdFx0XHRpZiAoIXhhc19lcnJvcihcdTAwMjZ4YXMpKVxuIDYxMjpcdFx0XHRcdFx0XHRtbHJ1ID0gTlVMTDtcbiA2MTM6XHRcdFx0XHR9XG4gNjE0Olx0XHRcdFx0eGFzX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIDYxNTpcdFx0XHR9IHdoaWxlICh4YXNfbm9tZW0oXHUwMDI2eGFzLCBnZnApKTtcbiA2MTY6XHRcdH0gd2hpbGUgKHBvcyAhPSBtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodW5saWtlbHkobWxydSkpXG4gNjE5Olx0XHRcdGtmcmVlKG1scnUpO1xuIDYyMDpcdFxuIDYyMTpcdFx0cmV0dXJuIHhhc19lcnJvcihcdTAwMjZ4YXMpO1xuIDYyMjpcdH1cbiA2MjM6XHRcbiA2MjQ6XHRpbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MjU6XHRcdFx0XHQgZ2ZwX3QgZ2ZwKVxuIDYyNjpcdHtcbiA2Mjc6XHRcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSB8fCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSkpXG4gNjI4Olx0XHRcdHJldHVybiAwO1xuIDYyOTpcdFx0cmV0dXJuIF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2MzA6XHR9XG4gNjMxOlx0XG4gNjMyOlx0aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIDYzMzpcdFx0XHRcdCAgICAgICBnZnBfdCBnZnApXG4gNjM0Olx0e1xuIDYzNTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDYzNjpcdFx0aW50IHJlcztcbiA2Mzc6XHRcbiA2Mzg6XHRcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcbiA2Mzk6XHRcdFx0cmV0dXJuIDA7XG4gNjQwOlx0XG4gNjQxOlx0XHQvKiBGYXN0IHBhdGggd2hlbiBsaXN0X2xydSBoZWFkcyBhbHJlYWR5IGV4aXN0ICovXG4gNjQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNjQzOlx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiA2NDQ6XHRcdHJlcyA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KTtcbiA2NDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDY0NjpcdFx0aWYgKGxpa2VseShyZXMpKVxuIDY0NzpcdFx0XHRyZXR1cm4gMDtcbiA2NDg6XHRcbiA2NDk6XHRcdC8qIEFsbG9jYXRpb24gbWF5IGJsb2NrLCBwaW4gdGhlIG1lbWNnICovXG4gNjUwOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIDY1MTpcdFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xuIDY1MjpcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDY1MzpcdFx0cmV0dXJuIHJlcztcbiA2NTQ6XHR9XG4gNjU1Olx0I2Vsc2VcbiA2NTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA2NTc6XHR7XG4gNjU4Olx0fVxuIDY1OTpcdFxuIDY2MDpcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjYxOlx0e1xuIDY2MjpcdH1cbiA2NjM6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gNjY0Olx0XG4gNjY1Olx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbiA2NjY6XHR7XG4gNjY3Olx0XHRpbnQgaTtcbiA2Njg6XHRcbiA2Njk6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgZGVlcCBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS96c3dhcC5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGltcG9ydGFudCEKClRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGBsaXN0X2xydWAgaW5kZXhlcyB0aG9zZSBwZXItbWVtY2cgTFJVIGxpc3RzLiBCZWZvcmUsIGl0IHdhcyB1c2luZyBga21lbWNnX2lkYCwgYnV0IG5vdyBpdCYjMzk7cyBzd2l0Y2hpbmcgdG8gZGlyZWN0bHkgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gT2theSwgc28gdGhleSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24tYmFzZWQgYGttZW1jZ19pZGAgYW5kIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBgbWVtY2ctJmd0O2lkLmlkYCBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBjc3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudCBpbiBob3cgdGhlc2UgTFJVIGxpc3RzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnJhbWV3b3JrLgoKSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRIUCBkZWZlcnJlZCBzcGxpdCBzaHJpbmtlciBhbmQgdGhlIHpzd2FwIHNocmlua2VyLCB3aXRoIGBTSFJJTktFUl9OT05TTEFCYCBiZWluZyBhZGRlZC4gIEFuZCBhIHR3ZWFrIHRvIGBfX2xpc3RfbHJ1X2luaXRgIHRvIGtlZXAgaXQgYG1lbWNnX2F3YXJlYCBldmVuIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2hlbiBgc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX05PTlNMQUJgLiBUaGlzIHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgc2ltcGxpZnlpbmcgc29tZSBsb2dpYyBhbmQgbGlrZWx5IGVuc3VyaW5nIG1vcmUgcm9idXN0IG1lbWNnIGludGVncmF0aW9uIGluIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gcmVtb3ZlIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gIGJ5IGRpcmVjdGx5IHJlcGFyZW50aW5nIGxpc3RfbHJ1cyBmdXJ0aGVyIGNvcnJvYm9yYXRlcyB0aGlzLgoKSXMgdGhpcyBjb2RlIHBhdGggYWN0dWFsbHkgKnJlYWNoYWJsZSo/IEFic29sdXRlbHkuIENvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGNncm91cHMvbWVtY2csIGxpc3RfbHJ1LCBUSFAgc2hyaW5rZXIsIGFuZCB6c3dhcCBzaHJpbmtlciBhcmUgYWxsIGludGVydHdpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gdGhpcyBjb2RlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBXaGF0IENPTkZJRyBvcHRpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBwbHVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19aU1dBUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYENPTkZJR19NRU1DR19LTUVNYCBzaXR1YXRpb24uLi4gaXMgdGhhdCBzdGlsbCBhcm91bmQsIG9yIGhhcyBpdCBiZWVuIG1lcmdlZCBpbnRvIGp1c3QgYENPTkZJR19NRU1DR2A/IEkmIzM5O2xsIHJ1biBhIHF1aWNrIGdyZXBwZXIgc2VhcmNoIHRvIGNvbmZpcm0uIEdvdHRhIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBidWlsZHMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTUxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgS2NvbmZpZyBmaWxlczoKCioqRmluZGluZyB0aGUgUmlnaHQgQ29uZmlndXJhdGlvbiBMb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBjb21tb24gcGxhY2VzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2QgaW1tZWRpYXRlbHkgbGVhbiB0b3dhcmRzIGxvb2tpbmcgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2AgaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmFsIHN5c3RlbSBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBhbmQgYG1tL0tjb25maWdgIGlzLCBvZiBjb3Vyc2UsIHRoZSBvYnZpb3VzIGNob2ljZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQhIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgbW9zdCByZWxldmFudCBhbmQgZWZmaWNpZW50IHBsYWNlcyB0byBiZWdpbiBteSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTQtXG5pbml0L0tjb25maWc6MTA5NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDEtXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA4LVxuaW5pdC9LY29uZmlnOjExMDk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTExMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGNvdXBsZSBvZiBjcml0aWNhbCBtZW1vcnktcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBzZXR0aW5ncyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFpTV0FQYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgZm9yIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5LiBUaGUgaW1wYWN0IG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJldHR5IGRpcmVjdCBvbiBtZW1vcnkgZnJhZ21lbnRhdGlvbiBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB1bmRlciBoZWF2aWVyIHdvcmtsb2FkcywgYW5kIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYXBwbGljYXRpb24gcHJvZmlsZSBpbiBtaW5kLiBUaGVuIEkgbmVlZCB0byBjb25maXJtIGBaU1dBUGAuIFRoaXMgaXMgZm9yIHN3YXAgc3BhY2UgY29tcHJlc3Npb24uIEkgc2hvdWxkIGNvbnNpZGVyIHdoZXRoZXIgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGNvbXByZXNzaW9uIG91dHdlaWdoIHRoZSBDUFUgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIHN1ZmZpY2llbnQgcGh5c2ljYWwgUkFNLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIHRoZSBzeXN0ZW3igJlzIHJlc291cmNlIGNvbnN0cmFpbnRzLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI3PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODI5LVxubW0vS2NvbmZpZzo4MzA6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzEtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg0OD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1My1cbm1tL0tjb25maWc6ODU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTUtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjAtXG5tbS9LY29uZmlnOjg2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Mi1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4Ni1cbm1tL0tjb25maWc6ODg3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODg4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTYtXG5tbS9LY29uZmlnOjg5NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy04OTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwNi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTIyPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMxLVxubW0vS2NvbmZpZzo5MzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0MC1cbm1tL0tjb25maWc6OTQxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Mi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkxldCYjMzk7cyBEaXZlIGludG8gYFpTV0FQYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBaU1dBUGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGlrZWx5IHRvIGJlIGRyaXZlbiBieSBhIGZldyBrZXkgcXVlc3Rpb25zOiBXaGF0IHRyaWdnZXJlZCB0aGlzIHJldmlldz8gSXMgaXQgcGVyZm9ybWFuY2UtcmVsYXRlZCwgYSBidWcgcmVwb3J0LCBvciBwZXJoYXBzIGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb24/CgpNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDogV2hhdCYjMzk7cyB0aGUgaW1wbGVtZW50YXRpb24/IEhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzd2FwIHN1YnN5c3RlbT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgTFJVLWJhc2VkIHN3YXBwaW5nIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGRlbWFuZCBwYWdpbmcgd2l0aCBjb21wcmVzc2lvbiBvciBlbmNyeXB0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVjZW50IHBhdGNoZXMgcmVsYXRlZCB0byBgWlNXQVBgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaW5jcmVhc2VkIHVzYWdlLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgbmVlZCBteSBhdHRlbnRpb24uCgpJJiMzOTtsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBkYXRhIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JlICh0eXBpY2FsbHkgZGlzayBvciBhIGRlZGljYXRlZCBzd2FwIHBhcnRpdGlvbikuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgdGhlIG92ZXJhbGwgc3dhcHBpbmcgYWxnb3JpdGhtLCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IGl0IGNhbiBhZmZlY3QgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoZSBtYWluIHRoaW5nIGlzIHRvIGZpbmQgaWYgdGhlcmUgYXJlIGFueSBjdXJyZW50IGFyZWFzIG9mIGNvbmNlcm4sIG9yIGlmIGFueXRoaW5nIGxvb2tzIHBhcnRpY3VsYXJseSB1bnVzdWFsIGF0IHRoZSBtb21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX1pTV0FQYC4gVGhlc2UgYXJlIHRoZSBrZXkgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHRoZSBwbGF5aW5nIGZpZWxkIGZvciB0aGUgY29kZSBJJiMzOTttIGFuYWx5emluZy4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBNeSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBtb3N0IHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgdGhhdCBkaXJlY3RseSBjYWxsIHRoZSBjaGFuZ2VkIGxvZ2ljLiBJIHdhbnQgdG8gYXZvaWQgYW55dGhpbmcgb3Zlcmx5IGdlbmVyYWwuCgpJIHNlZSBhIGNvbmNlbnRyYXRlZCBzZXQgb2YgdGhlc2UgaW4gYG1tL2xpc3RfbHJ1LmNgLiBMb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgbGlzdGVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmU6CgoqICAgYGxpc3RfbHJ1X2NvdW50X29uZWAKKiAgIGBsaXN0X2xydV9hZGRgCiogICBgbGlzdF9scnVfZGVsYAoqICAgYGxvY2tfbGlzdF9scnVfb2ZfbWVtY2dgICh0aGlzIG9uZSYjMzk7cyBzdGF0aWMgaW5saW5lLCBzbyB0aGVyZSBtYXkgYmUgYSBzeW1ib2wgY2hlY2spIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYy9leHBvcnRlZCBvciBzdGF0aWMgdXNpbmcgcmVhZC1maWxlIG9yIGdyZXBwZXIuCiogICBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzYAoqICAgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZWAKKiAgIGBtZW1jZ19saXN0X2xydV9hbGxvY2AKKiAgIGBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY2AKKiAgIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYAoqICAgYF9fbGlzdF9scnVfaW5pdGAKClRoZW4sIG1vdmluZyB0byBgbW0vbWVtY29udHJvbC5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6CgoqICAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAKKiAgIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYAoKQW5kLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBsaXN0IGluY2x1ZGVzOgoKKiAgIGB0aHBfc2hyaW5rZXJfaW5pdGAgKHRoaXMgaXMgYW4gaW5pdCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb25seSBydW4gYXQgYm9vdCwgcmlnaHQ/KQoqICAgYGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkYCBvciBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgLyBgZGVmZXJyZWRfc3BsaXRfY291bnRgIC8gYGRlZmVycmVkX3NwbGl0X2ZvbGlvYAoKRmluYWxseSwgZnJvbSBgbW0venN3YXAuY2A6CgoqICAgYHpzd2FwX2FsbG9jX3Nocmlua2VyYCAvIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCAvIGB6c3dhcF9zaHJpbmtlcl9jb3VudGAKCk5vdywgdG8gcmVmaW5lIHRoaXMgZnVydGhlciwgSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBtbS9saXN0X2xydS5jYCB0byBsb29rIGF0IHRob3NlIHN5bWJvbCBuYW1lcyBhbmQgbWFrZSBzdXJlIEkga25vdyBob3cgdGhleSYjMzk7cmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfMC05XSYjNDM7IC4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9saXN0X2xydS5jLTE3LVxubW0vbGlzdF9scnUuYzoxODpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycSxcbm1tL2xpc3RfbHJ1LmMtMTktXHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMjgtXG5tbS9saXN0X2xydS5jOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxubW0vbGlzdF9scnUuYy0zMC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncylcbi0tXG5tbS9saXN0X2xydS5jLTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDE6c3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xubW0vbGlzdF9scnUuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTQzLVxubW0vbGlzdF9scnUuYzo0NDpzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTQ1LXtcbi0tXG5tbS9saXN0X2xydS5jLTQ4LVxubW0vbGlzdF9scnUuYzo0OTpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNTAte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTgtXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTYwLXtcbi0tXG5tbS9saXN0X2xydS5jLTY4LVxubW0vbGlzdF9scnUuYzo2OTpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNzAte1xuLS1cbm1tL2xpc3RfbHJ1LmM9ODc9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTExNi0jZWxzZVxubW0vbGlzdF9scnUuYzoxMTc6c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTExOC17XG4tLVxubW0vbGlzdF9scnUuYy0xMjAtXG5tbS9saXN0X2xydS5jOjEyMTpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMjIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTI0LVxubW0vbGlzdF9scnUuYzoxMjU6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTEyNi17XG4tLVxubW0vbGlzdF9scnUuYy0xMjktXG5tbS9saXN0X2xydS5jOjEzMDpzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTEzMS17XG4tLVxubW0vbGlzdF9scnUuYz0xNDI9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTE1My1cbm1tL2xpc3RfbHJ1LmM6MTU0OnN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3RfbHJ1X2xvY2soc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE1NS1cdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy0xNjAtXG5tbS9saXN0X2xydS5jOjE2MTp2b2lkIGxpc3RfbHJ1X3VubG9jayhzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy0xNjIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTY1LVxubW0vbGlzdF9scnUuYzoxNjY6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE2Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMTcyLVxubW0vbGlzdF9scnUuYzoxNzM6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG5tbS9saXN0X2xydS5jLTE3NC17XG4tLVxubW0vbGlzdF9scnUuYy0xNzctXG5tbS9saXN0X2xydS5jOjE3ODpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycXNhdmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE3OS1cdFx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTE4NS1cbm1tL2xpc3RfbHJ1LmM6MTg2OnZvaWQgbGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG5tbS9saXN0X2xydS5jLTE4Ny17XG4tLVxubW0vbGlzdF9scnUuYy0xOTAtXG5tbS9saXN0X2xydS5jOjE5MTpib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0xOTItXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmM9MjA5PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2FkZCk7XG5tbS9saXN0X2xydS5jLTIxMC1cbm1tL2xpc3RfbHJ1LmM6MjExOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG5tbS9saXN0X2xydS5jLTIxMi1cdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXG4tLVxubW0vbGlzdF9scnUuYy0yMjMtLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXG5tbS9saXN0X2xydS5jOjIyNDpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMjI1LVx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9saXN0X2xydS5jLTIzNS1cbm1tL2xpc3RfbHJ1LmM6MjM2OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2xpc3RfbHJ1LmMtMjM3LVx0XHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy0yNDctXG5tbS9saXN0X2xydS5jOjI0ODpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG5tbS9saXN0X2xydS5jLTI0OS17XG4tLVxubW0vbGlzdF9scnUuYz0yNjM9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XG4tLVxubW0vbGlzdF9scnUuYy0yNjUtLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXG5tbS9saXN0X2xydS5jOjI2Njpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMjY3LVx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9saXN0X2xydS5jLTI3Ny1cbm1tL2xpc3RfbHJ1LmM6Mjc4OmJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbm1tL2xpc3RfbHJ1LmMtMjc5LXtcbi0tXG5tbS9saXN0X2xydS5jPTI5Mz1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjk0LVxubW0vbGlzdF9scnUuYzoyOTU6dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG5tbS9saXN0X2xydS5jLTI5Ni17XG4tLVxubW0vbGlzdF9scnUuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XG5tbS9saXN0X2xydS5jLTMwMS1cbm1tL2xpc3RfbHJ1LmM6MzAyOnZvaWQgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG5tbS9saXN0X2xydS5jLTMwMy1cdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm1tL2xpc3RfbHJ1LmM9MzA4PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGVfbW92ZSk7XG5tbS9saXN0X2xydS5jLTMwOS1cbm1tL2xpc3RfbHJ1LmM6MzEwOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbGlzdF9scnUuYy0zMTEtXHRcdFx0XHQgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmM9MzI2PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XG5tbS9saXN0X2xydS5jLTMyNy1cbm1tL2xpc3RfbHJ1LmM6MzI4OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZClcbm1tL2xpc3RfbHJ1LmMtMzI5LXtcbi0tXG5tbS9saXN0X2xydS5jPTQwNj1saXN0X2xydV93YWxrX29uZV9pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTQxMy1cbm1tL2xpc3RfbHJ1LmM6NDE0OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy00MTUtXHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG4tLVxubW0vbGlzdF9scnUuYz00NTA9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUxLVxubW0vbGlzdF9scnUuYzo0NTI6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy00NTMte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDYzLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDY0OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG5tbS9saXN0X2xydS5jLTQ2NS17XG4tLVxubW0vbGlzdF9scnUuYy00NzgtXG5tbS9saXN0X2xydS5jOjQ3OTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbm1tL2xpc3RfbHJ1LmMtNDgwLXtcbi0tXG5tbS9saXN0X2xydS5jLTQ4NS1cbm1tL2xpc3RfbHJ1LmM6NDg2OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTQ4Ny17XG4tLVxubW0vbGlzdF9scnUuYy01MDEtXG5tbS9saXN0X2xydS5jOjUwMjpzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTUwMy1cdFx0XHRcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxuLS1cbm1tL2xpc3RfbHJ1LmMtNTI0LVxubW0vbGlzdF9scnUuYzo1MjU6dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbGlzdF9scnUuYy01MjYte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTY1LVxubW0vbGlzdF9scnUuYzo1NjY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jLTU2Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTc0LVxubW0vbGlzdF9scnUuYzo1NzU6c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2xpc3RfbHJ1LmMtNTc2LVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjIzLVxubW0vbGlzdF9scnUuYzo2MjQ6aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9saXN0X2xydS5jLTYyNS1cdFx0XHQgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjMxLVxubW0vbGlzdF9scnUuYzo2MzI6aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbGlzdF9scnUuYy02MzMtXHRcdFx0ICAgICAgIGdmcF90IGdmcClcbi0tXG5tbS9saXN0X2xydS5jLTY1NS0jZWxzZVxubW0vbGlzdF9scnUuYzo2NTY6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG5tbS9saXN0X2xydS5jLTY1Ny17XG4tLVxubW0vbGlzdF9scnUuYy02NTktXG5tbS9saXN0X2xydS5jOjY2MDpzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy02NjEte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNjY0LVxubW0vbGlzdF9scnUuYzo2NjU6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbm1tL2xpc3RfbHJ1LmMtNjY2LXtcbi0tXG5tbS9saXN0X2xydS5jPTY5OD1FWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTktXG5tbS9saXN0X2xydS5jOjcwMDp2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgwCgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgQ2dyb3VwIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYG1lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYGxpc3RfbHJ1X2NvdW50X29uZWAsIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIG9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlYXNvbmluZyBhbmQgaW1wYWN0LiBUaGUgcGF0Y2ggc2VyaWVzIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgcmVmYWN0b3JpbmcgaG93IG1lbW9yeSBjZ3JvdXBzIGhhbmRsZSBgbGlzdF9scnVgIGluc3RhbmNlcy4gSXQmIzM5O3MgbW92aW5nIGZyb20gYGttZW1jZ19pZGAgdG8gYG1lbV9jZ3JvdXBfaWRgIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gSXQgYWxzbyByZW1vdmVzIHRob3NlIGxpZmVjeWNsZSBob29rcywgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAsIHNpbXBsaWZ5aW5nIHRoaW5ncy4gQW5kIHRoZSBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgaXMgaW1wb3J0YW50LCBtYWtpbmcgc3VyZSBtZW1jZyBhd2FyZW5lc3MgaXMgcHJlc2VudCBldmVuIHdoZW4ga21lbSBhY2NvdW50aW5nIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgcHJldHR5IGNvcmUgY2hhbmdlIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHJlcGFyZW50aW5nLCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGxpa2UgY2dyb3VwIGNyZWF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHJlY2xhaW0gcHJlc3N1cmUuIERlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhLgoKRmluYWxseSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBaU1dBUGAuIE1ha2VzIHNlbnNlLCBhcyB0aGVzZSBmZWF0dXJlcyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb24gYmVpbmcgcmVmYWN0b3JlZC4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCYjMzk7cyB0aW1lIHRvICYjMzk7c2V0LXJlc3VsdHMmIzM5OyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2lmIEJJVFNfUEVSX0xPTkcgJmx0OyA2NAogCXNlcWxvY2tfdAkJc29ja2V0X3ByZXNzdXJlX3NlcWxvY2s7CiAjZW5kaWYKLQlpbnQga21lbWNnX2lkOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDsKQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogCQlfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLS8qCi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJiMzOTtzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmcKLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlyZXR1cm4gbWVtY2cgPyBtZW1jZy0mZ3Q7a21lbWNnX2lkIDogLTE7Ci19Ci0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZDFjZTA2MTYwMWJjZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMDY0LDcgJiM0MzsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogewogCWRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8Ci0JCQkJCQkgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsCiYjNDM7CQkJCQkJIFNIUklOS0VSX01FTUNHX0FXQVJFIHwKJiM0MzsJCQkJCQkgU0hSSU5LRVJfTk9OU0xBQiwKIAkJCQkJCSAmIzM0O3RocC1kZWZlcnJlZF9zcGxpdCYjMzQ7KTsKIAlpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSAwKSB7Ci0JCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9CiYjNDM7CQkJeGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAogCQlyZXR1cm4gbWxydSA/ICZhbXA7bWxydS0mZ3Q7bm9kZVtuaWRdIDogTlVMTDsKIAl9CkBAIC05MSw3ICYjNDM7OTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCiAJcmN1X3JlYWRfbG9jaygpOwogYWdhaW46Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpOwomIzQzOwlsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTsKIAlpZiAobGlrZWx5KGwpKSB7CiAJCWxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpOwogCQlpZiAobGlrZWx5KFJFQURfT05DRShsLSZndDtucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7CkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gJmFtcDtscnUtJmd0O25vZGVbbmlkXS5scnU7CiB9CkBAIC0zMTMsNyAmIzQzOzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCWxvbmcgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7CiYjNDM7CWwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7CiAJY291bnQgPSBsID8gUkVBRF9PTkNFKGwtJmd0O25yX2l0ZW1zKSA6IDA7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCQkJCXN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYywKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZykKIHsKLQlpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy0mZ3Q7a21lbWNnX2lkOwogCXN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcmMtJmd0O2xvY2spOwotCWRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTsKJiM0MzsJZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZhbXA7ZHN0LSZndDtsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlsaXN0X3NwbGljZV9pbml0KCZhbXA7c3JjLSZndDtsaXN0LCAmYW1wO2RzdC0mZ3Q7bGlzdCk7CkBAIC01MzYsNyAmIzQzOzUzNiw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiAJCSAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXMKIAkJICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby4KIAkJICovCi0JCW1scnUgPSB4YV9sb2FkKCZhbXA7bHJ1LSZndDt4YSwgbWVtY2ctJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQltbHJ1ID0geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAkJaWYgKCFtbHJ1KQogCQkJY29udGludWU7CiAKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW4KIAkJZm9yX2VhY2hfbm9kZShpKQogCQkJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgJmFtcDttbHJ1LSZndDtub2RlW2ldLCBwYXJlbnQpOwogCi0JCXhhX2VyYXNlX2lycSgmYW1wO2xydS0mZ3Q7eGEsIG1lbWNnLSZndDtrbWVtY2dfaWQpOwomIzQzOwkJeGFfZXJhc2VfaXJxKCZhbXA7bHJ1LSZndDt4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpOwogCiAJCS8qCiAJCSAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWQKQEAgLTU2Niw5ICYjNDM7NTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KQogewotCWludCBpZHggPSBtZW1jZy0mZ3Q7a21lbWNnX2lkOwomIzQzOwlpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBpZHggJmx0OyAwIHx8IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIH0KIAogc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKQEAgLTYwMiw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWlmICghbWxydSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl4YXNfc2V0KCZhbXA7eGFzLCBwb3MtJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQl4YXNfc2V0KCZhbXA7eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpOwogCQlkbyB7CiAJCQl4YXNfbG9ja19pcnFzYXZlKCZhbXA7eGFzLCBmbGFncyk7CiAJCQlpZiAoIXhhc19sb2FkKCZhbXA7eGFzKSAmYW1wOyZhbXA7ICFjc3NfaXNfZHlpbmcoJmFtcDtwb3MtJmd0O2NzcykpIHsKQEAgLTY3Niw3ICYjNDM7Njc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwKJiM0MzsJICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9OT05TTEFCKSkpKQogCQltZW1jZ19hd2FyZSA9IGZhbHNlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzYzLDMzICYjNDM7Mzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsCiAJb2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQotCQlyZXR1cm47Ci0KLQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7Ci0KLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwotfQotCi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0KLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkKLQkJcmV0dXJuOwotCi0JcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwotCW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTsKLX0KLQogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvd3JpdGViYWNrLmgmZ3Q7CkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJc2VxbG9ja19pbml0KCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTsKICNlbmRpZgogCW1lbWNnMV9tZW1jZ19pbml0KG1lbWNnKTsKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQpAQCAtNDI5MCw3ICYjNDM7NDI2Miw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCWludCBuaWQ7CiAKLQltZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCiAJLyoKIAkgKiBBIG1lbWNnIG11c3QgYmUgdmlzaWJsZSBmb3IgZXhwYW5kX3Nocmlua2VyX2luZm8oKQpAQCAtNDI5OCw3ICYjNDM7NDI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4mIzM5O3Qgc2tpcCBpdC4KIAkgKi8KIAlpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpCi0JCWdvdG8gb2ZmbGluZV9rbWVtOwomIzQzOwkJZ290byByZXBhcmVudF9scnVzOwogCiAJZm9yX2VhY2hfbm9kZShuaWQpIHsKIAkJb2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7CkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJfQogCX0KIAlmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpOwotb2ZmbGluZV9rbWVtOgotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7cmVwYXJlbnRfbHJ1czoKJiM0MzsJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpOwogCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDM3MiwxMSAmIzQzOzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTsKIAotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTsKIAkvKgogCSAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZgotCSAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0Ci0JICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LgomIzQzOwkgKiB0aGUgbGlzdF9scnUgYWJvdmUsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGV5IHdpbGwgbm90CiYjNDM7CSAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuCiAJICovCiAJbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTsKIAlyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBjZDdiMGI2MjFiZGE4Li5hZmM2YzhkMDNkMjMxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEyNTUsOCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogewogCXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7CiAKLQlzaHJpbmtlciA9Ci0JCXNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgJiMzNDttbS16c3dhcCYjMzQ7KTsKJiM0MzsJc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfAomIzQzOwkJCQkgIFNIUklOS0VSX05PTlNMQUIsICYjMzQ7bW0tenN3YXAmIzM0Oyk7CiAJaWYgKCFzaHJpbmtlcikKIAkJcmV0dXJuIE5VTEw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBhIEtNU0FOIHNlc3Npb24uCgpGaXJzdCwgSSBuZWVkIGEgZGV0YWlsZWQgYnJlYWtkb3duLiBBbHJpZ2h0LCBpdCBzZWVtcyB3ZSYjMzk7cmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCB0aGUgcmVtb3ZhbCBvZiBga21lbWNnX2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6CgoqICAgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYDogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBga21lbWNnX2lkYCBmaWVsZCBmcm9tIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IGFuZCB0aGUgYXNzb2NpYXRlZCBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWQgZmxhZywgYXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJIGFtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLgoqICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0venN3YXAuY2A6IEhlcmUsIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBpcyBiZWluZyBhZGRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjZXJ0YWluIHNocmlua2Vycy4gSW50ZXJlc3Rpbmc7IHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHdlIGFyZSBtaWdyYXRpbmcgYXdheSBmcm9tIHNsYWItYmFzZWQgYWxsb2NhdGlvbnMuCiogICBgbW0vbGlzdF9scnUuY2A6IFRoaXMgZmlsZSBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbGlzdF9scnVfZnJvbV9tZW1jZ19pZHhgIGlzIHJlcGxhY2VkIGJ5IGBsaXN0X2xydV9mcm9tX21lbWNnYC4gVGhlIGNvZGUgaXMgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGttZW1jZ19pZGAgbWV0aG9kcy4gVGhlIGZsYWcgY2hlY2tpbmcgZm9yIGBtZW1jZ19hd2FyZWAgd2hlbiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGxvb2tzIGxpa2UgaXQgbWlnaHQgY2hhbmdlIHNvbWV0aGluZy4KKiAgIGBtbS9tZW1jb250cm9sLmNgOiBXZSYjMzk7cmUgc2VlaW5nIHRoZSByZW1vdmFsIG9mIGBtZW1jZ19vbmxpbmVfa21lbSgpYCwgYG1lbWNnX29mZmxpbmVfa21lbSgpYCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBga21lbWNnX2lkYC4gSW5zdGVhZCBvZiBpbml0aWFsaXppbmcgaXQsIGl0IGxvb2tzIGxpa2UgaXQgaXMgZW5hYmxpbmcgdGhlIHN0YXRpYyBicmFuY2guCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpcyBzYWZlLiBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB3b3JrPyBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW5pdGlhbGl6YXRpb24gaXNzdWUgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSByZW1vdmFsIG9mIGBrbWVtY2dfaWRgLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9pZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MTU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgxNzpzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxOC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTMwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzA2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTMwNzpzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMDgte1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTE3Nz1ERUNMQVJFX0VWRU5UX0NMQVNTKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xOTEtXHRcdF9fZW50cnktXHUwMDNlb3JkZXJcdFx0PSBvcmRlcjtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE5MjpcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE5My1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjE5PURFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yMzEtXHRcdF9fZW50cnktXHUwMDNlbnJfcmVjbGFpbWVkXHQ9IG5yX3JlY2xhaW1lZDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIzMjpcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTIzMy1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjU4PVRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX3N0YXJ0LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTI4OS1cdFx0X19lbnRyeS1cdTAwM2VuaWQgPSBzYy1cdTAwM2VuaWQ7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyOTA6XHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTI5MS1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzA4PVRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX2VuZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzMtXHRcdF9fZW50cnktXHUwMDNlcmV0dmFsID0gc2hyaW5rZXJfcmV0dmFsO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6MzM0Olx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzUtXHQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjY9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXHRcdGVsc2Vcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6XHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTQyPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNjUtXHRcdGVsc2Vcbm1tL2RhbW9uL3BhZGRyLmM6MTY2Olx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5tbS9kYW1vbi9wYWRkci5jLTE2Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTE3PWludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM1LVx0XHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNjpcdFx0XHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNy1cdFx0XHRmb3VuZCA9IHRydWU7XG4tLVxubW0vbGlzdF9scnUuYz03NT1saXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy03OC1cdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cbm1tL2xpc3RfbHJ1LmM6Nzk6XHRcdFx0eGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbm1tL2xpc3RfbHJ1LmMtODAtXG4tLVxubW0vbGlzdF9scnUuYz01MjU9dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTM4LVx0XHQgKi9cbm1tL2xpc3RfbHJ1LmM6NTM5Olx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbm1tL2xpc3RfbHJ1LmMtNTQwLVx0XHRpZiAoIW1scnUpXG4tLVxubW0vbGlzdF9scnUuYy01NTMtXG5tbS9saXN0X2xydS5jOjU1NDpcdFx0eGFfZXJhc2VfaXJxKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vbGlzdF9scnUuYy01NTUtXG4tLVxubW0vbGlzdF9scnUuYz01NjY9c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy01NzEtXG5tbS9saXN0X2xydS5jOjU3MjpcdHJldHVybiB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vbGlzdF9scnUuYy01NzMtfVxuLS1cbm1tL2xpc3RfbHJ1LmM9NTc1PXN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy02MDUtXHRcdH1cbm1tL2xpc3RfbHJ1LmM6NjA2Olx0XHR4YXNfc2V0KFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcbm1tL2xpc3RfbHJ1LmMtNjA3LVx0XHRkbyB7XG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYz00Nz1zdGF0aWMgaW50IHNocmlua2VyX2RlYnVnZnNfY291bnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy03MC1cdFx0aWYgKHRvdGFsKSB7XG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjcxOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JWxsdVwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vc2hyaW5rZXJfZGVidWcuYy03Mi1cdFx0XHRmb3JfZWFjaF9ub2RlKG5pZClcbi0tXG5tbS92bXNjYW4uYz01NzEwPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTcyNy0jZW5kaWZcbm1tL3Ztc2Nhbi5jOjU3Mjg6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7bWVtY2cgJWxsdSAlc1xcblwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xubW0vdm1zY2FuLmMtNTcyOS1cdH1cbi0tXG5tbS92bXNjYW4uYz01ODE0PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy01ODI5LVxubW0vdm1zY2FuLmM6NTgzMDpcdGlmIChtZW1jZ19pZCAhPSBtZW1fY2dyb3VwX2lkKG1lbWNnKSlcbm1tL3Ztc2Nhbi5jLTU4MzEtXHRcdGdvdG8gZG9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbWVtX2Nncm91cF9pZGAgYWN0dWFsbHkgKmlzKi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgYXMgYWx3YXlzOiB0aGUgb2ZmaWNpYWwgZGVmaW5pdGlvbi4gSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2YgdGhpcyBiZWFzdC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgY29tbWVudHMgd2lsbCBlbnN1cmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBjb250cm9sIGxhbmRzY2FwZSBvZiB0aGUga2VybmVsLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQsIGJlY2F1c2UsIGxldCYjMzk7cyBmYWNlIGl0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjb21wbGV4LCBhbmQgYWNjdXJhdGUgZG9jdW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZlbiB0aGUgbW9zdCBiYXNpYyB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA4MTE6XHRcdFx0cmV0dXJuIDA7XG4gODEyOlx0XG4gODEzOlx0XHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4gODE0Olx0fVxuIDgxNTpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gODE2Olx0XG4gODE3Olx0c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gODE4Olx0e1xuIDgxOTpcdFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApIDogMDtcbiA4MjA6XHR9XG4gODIxOlx0XG4gODIyOlx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKTtcbiA4MjM6XHRcbiA4MjQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiA4MjU6XHR7XG4gODI2Olx0XHRyZXR1cm4gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTtcbiA4Mjc6XHR9XG4gODI4Olx0XG4gODI5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG1lbWNnLSZndDtrbWVtY2dfaWRgIFJlbW92YWwgYW5kIGBsaXN0X2xydWAgQWRhcHRhdGlvbioqCgpPa2F5LCBzbyB0aGUgYG1lbWNnLSZndDtrbWVtY2dfaWRgIGhhcyBiZWVuIHJld29ya2VkLiBQcmV2aW91c2x5LCBpdCB3YXMgYW4gaW5kZXggYXNzaWduZWQgZHVyaW5nIGttZW0gb25saW5pbmcsIGVzc2VudGlhbGx5IHRoZSBvbGQgYG1lbWNnLSZndDtpZC5pZGAuIE5vdywgYGxpc3RfbHJ1YCBpcyB1c2luZyBgbWVtX2Nncm91cF9pZChtZW1jZylgIHdoaWNoIHJlc29sdmVzIHRvIGBjZ3JvdXBfaWQobWVtY2ctJmd0O2Nzcy5jZ3JvdXApYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhpbmdzLiBQbHVzLCB0aGUgYFNIUklOS0VSX05PTlNMQUJgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzbWFydCwgaXQgYWxsb3dzIG5vbi1zbGFiIHNocmlua2VycyBsaWtlIGRlZmVycmVkX3NwbGl0IChUSFApIGFuZCB6c3dhcCB0byBsZXZlcmFnZSB0aGUgbWVtY2ctYXdhcmUgYGxpc3RfbHJ1YCBldmVuIHdoZW4ga21lbSBpc24mIzM5O3QgYWN0aXZlIG9yIGluIHRoZSBnZW5lcmFsIGNhc2UuCgpOb3csIG15IG1haW4gY29uY2VybiBpcyBhbHdheXMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIG1ha2luZyB0aGlzIHR5cGUgb2YgY2hhbmdlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IGJ1Z3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBpbmZvIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW50ZW5kZWQgbWVtb3J5IHJlYWRzLiBMZXQmIzM5O3MgYXBwbHkgdGhlIHVzdWFsIGNyaXRlcmlhLgoKMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRXhwb3N1cmU6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSAodGhyb3VnaCBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgTmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBjYXVzZSBwcm9ibGVtcz8gTm90IGluIHRoaXMgc3BlY2lmaWMgY2hhbmdlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIFRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCAoYG1lbWNnYCwgYHBvc2AsIGBscnVgLCBgbmlkYCkgYXJlIHN0YW5kYXJkIHBvaW50ZXJzIG9yIGludGVnZXJzIHRoYXQgYXJlIHBhc3NlZCBpbi4gVGhhdCYjMzk7cyBnb29kLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBBbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBUaGUgZGVsZXRpb24gb2YgYGttZW1jZ19pZGAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGEgZmllbGQuIFRoZW4sIGBsaXN0X2xydV9mcm9tX21lbWNnYCBoYXMgYSBzYW5pdHkgY2hlY2s6IGBpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpYC4gU2VlbXMgc2FmZS4KNC4gICoqQnVmZmVyIEJvdW5kcyAmYW1wOyBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogIEFyZSB3ZSBjaGFuZ2luZyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vIGNoYW5nZXMgdG8gYnVmZmVyIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIHJlbGllZi4KCkZpbmFsbHksIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgY2hlY2suIEkgc2hvdWxkIGxvb2sgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBiYXNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBhbnkgY29kZSBsaW5nZXJpbmcgb3V0IHRoZXJlIHRoYXQgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgYGttZW1jZ19pZGAuIEl0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbWNnX2lkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgQ29udHJvbGxlciBJRHM6IEEgUXVpY2sgQXVkaXQqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIHN1Y2Nlc3NmdWxseSBwdXJnZWQgYW55IGluc3RhbmNlcyBvZiBga21lbWNnX2lkYCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZ29vZCBuZXdzLiBIb3dldmVyLCB3ZSBhbGwga25vdyBob3cgdGhlc2UgdGhpbmdzIGNhbiBzb21ldGltZXMgaGlkZSBpbiBwbGFpbiBzaWdodCBvciBoYXZlIG5hbWluZyBpbmNvbnNpc3RlbmNpZXMuIEJlZm9yZSB3ZSBkZWNsYXJlIHZpY3RvcnksIEkgdGhpbmsgaXQmIzM5O3MgcHJ1ZGVudCB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgYG1lbWNnX2ttZW1faWRgIGFzIHdlbGwuIERvdWJsZS1jaGVja2luZyByZWxhdGVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWxseSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9ucyBpcyBhbHdheXMgdGltZSB3ZWxsLXNwZW50IGluIHRoZXNlIHNpdHVhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzIGFuZCBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgYnkgb3Zlcmxvb2tpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfa21lbV9pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBRdWVyeTogU0hSSU5LRVJfTk9OU0xBQioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gJiMzNDtTSFJJTktFUl9OT05TTEFCJiMzNDsuIFRoYXQgc3BlY2lmaWMgdGVybSBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgbWFjcm8sIG9yIGEgdmFyaWFibGUgbmFtZSwgYWxtb3N0IGNlcnRhaW5seSB3aXRoaW4gYSBjb2RlYmFzZS4gVGhlIHVzZSBvZiBhbGwgY2FwcyByZWluZm9yY2VzIHRoYXQgaXTigJlzIHByb2JhYmx5IGEgY29uc3RhbnQuIFRoZSAmIzM0O1NIUklOS0VSJiMzNDsgcGFydCBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byByZWR1Y2luZyB0aGUgZm9vdHByaW50IG9mIGRhdGEgc3RydWN0dXJlcy4gVGhlICYjMzQ7Tk9OU0xBQiYjMzQ7IHBhcnQgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvbnRyYXN0cyB3aXRoIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtTTEFCJiMzNDssIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIExpbnV4IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmVmb3JlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIGhvdyBhIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBraW5kcyBvZiBvYmplY3RzLgoKVGhlIHByb21wdCBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSAqZGVmaW5pdGlvbiogYW5kICp1c2FnZSogb2YgdGhpcyB0ZXJtLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciB3aGVyZSB0aGlzIGBTSFJJTktFUl9OT05TTEFCYCBpcyBkZWNsYXJlZCwgYW5kIHRoZW4gdHJhY2UgYWxsIGluc3RhbmNlcyB3aGVyZSBpdCYjMzk7cyB1c2VkLiBUaGlzIHN1Z2dlc3RzIHRoZSBxdWVyeSBtaWdodCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHN5c3RlbSBiZWhhdmlvci4gVGhlIGluc3RydWN0aW9uIHRvIHN1bW1hcml6ZSB0aGUgcHJvY2Vzcywgc3VnZ2VzdHMgdGhpcyBpbnZvbHZlcyBleHBsYWluaW5nIHRoZSBwcm9jZXNzIGZyb20gYmVnaW5uaW5nIHRvIGVuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0hSSU5LRVJfTk9OU0xBQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9jb21wcmVzc2lvbi5jPTExMjk9aW50IF9faW5pdCBidHJmc19pbml0X2NvbXByZXNzKHZvaWQpXG4tLVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYzoxMTM2Olx0Y29tcHJfcG9vbC5zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05PTlNMQUIsIFwmIzM0O2J0cmZzLWNvbXByLXBhZ2VzXCYjMzQ7KTtcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtMTEzNy1cdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcbi0tXG5mcy94ZnMveGZzX2ljYWNoZS5jPTIzMzU9eGZzX2lub2RlZ2NfcmVnaXN0ZXJfc2hyaW5rZXIoXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYy0yMzM3LXtcbmZzL3hmcy94ZnNfaWNhY2hlLmM6MjMzODpcdG1wLVx1MDAzZW1faW5vZGVnY19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05PTlNMQUIsXG5mcy94ZnMveGZzX2ljYWNoZS5jLTIzMzktXHRcdFx0XHRcdFx0XCYjMzQ7eGZzLWlub2RlZ2M6JXNcJiMzNDssXG4tLVxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XG4tLVxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMS0gKi9cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXHRCSVQoNClcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMzMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG5tbS9odWdlX21lbW9yeS5jOjEwNjg6XHRcdFx0XHRcdFx0IFNIUklOS0VSX05PTlNMQUIsXG5tbS9odWdlX21lbW9yeS5jLTEwNjktXHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4tLVxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY4MS1cdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9saXN0X2xydS5jOjY4MjpcdCAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxubW0vbGlzdF9scnUuYy02ODMtXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4tLVxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtMjMzLVx0XHRyZXR1cm4gLUVOT1NZUztcbm1tL3Nocmlua2VyLmM6MjM0Olx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcbm1tL3Nocmlua2VyLmMtMjM1LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zaHJpbmtlci5jPTQ3OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9zaHJpbmtlci5jLTU1NS1cdFx0XHRpZiAoIW1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2XG5tbS9zaHJpbmtlci5jOjU1NjpcdFx0XHQgICAgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcbm1tL3Nocmlua2VyLmMtNTU3LVx0XHRcdFx0Y2xlYXJfYml0KG9mZnNldCwgdW5pdC1cdTAwM2VtYXApO1xuLS1cbm1tL3pzd2FwLmM9MTI1ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI1OC1cdHNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbm1tL3pzd2FwLmM6MTI1OTpcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xubW0venN3YXAuYy0xMjYwLVx0aWYgKCFzaHJpbmtlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDQKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlZmFjdG9yaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB0aGUgcmVmYWN0b3Jpbmcgb2YgYGxpc3RfbHJ1YCBhbmQgbWVtY2cgc2hyaW5rZXIgaW5kZXhpbmcuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIG9uIGVuc3VyaW5nIHRoZSBjaGFuZ2VzIGFyZSBzb3VuZCBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IHNhZmV0eS4KClRoZSBrZXkgY2hhbmdlcyBpbnZvbHZlOgoKKiAgIFJlcGxhY2luZyBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAuIFRoaXMgZGlyZWN0IHVzZSBvZiB0aGUgY2dyb3VwIElEIHNlZW1zIGNsZWFuZXIgYW5kIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgoqICAgVGFnZ2luZyB0aGUgVEhQIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaGVscCBLTVNBTiBhbmQgS0FTQU4gZmluZCBwcm9ibGVtcy4KKiAgIFVwZGF0aW5nIGFsbCBgbGlzdF9scnVgIGludGVyYWN0aW9ucyDigJMgbG9va3VwcywgcmVwYXJlbnRpbmcsIGFuZCBhbGxvY2F0aW9ucyDigJMgdG8gYWxpZ24gd2l0aCBgbWVtX2Nncm91cF9pZChtZW1jZylgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlPyBJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGlzLgoKSSYjMzk7dmUgY29uZmlybWVkOgoKKiAgIFdlJiMzOTtyZSBub3QgY29weWluZyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGhvdXQgZW5zdXJpbmcgdGhleSYjMzk7cmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiogICBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucy4KKiAgIEluIGZhY3QsIHdlJiMzOTt2ZSBnb25lIHRoZSBvdGhlciB3YXkg4oCTIHRoZSBga21lbWNnX2lkYCBmaWVsZCBoYXMgYmVlbiAqcmVtb3ZlZCogZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuCgpHaXZlbiB0aGlzLCBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyZWEgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbmN5IHByb2JsZW1zIHdpdGhpbiB0aGUgeGFycmF5IGxvb2t1cCBtZWNoYW5pc20uIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3VyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgaW4gcGxhY2UgdG8gY2F0Y2ggdGhvc2UgaXNzdWVzLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHNldCBvZiBjaGFuZ2VzLiBgTmVlZHNLTVNBTiA9IGZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbC4KCkFscmlnaHQsIHdpdGggdGhhdCBkb25lLCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTEuNjU5NjA1MzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDE3MzE3OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcIl9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcIm1lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwibGlzdF9scnVfY291bnRfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWVtY2cgTFJVIGxpc3QgaW5kZXhpbmcgYnkgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBga21lbWNnX2lkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaW4gZmF2b3Igb2YgYG1lbV9jZ3JvdXBfaWQoKWAsIGFuZCBtYXJrcyBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2VycyB3aXRoIGBTSFJJTktFUl9OT05TTEFCYC5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTEuNjU5NjA5NDM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU3MTMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjQxOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBhMDNiNmUzZTU0NzA3Li4zNDYzZDJjNTJjNjI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gI2lmIEJJVFNfUEVSX0xPTkcgXFx1MDAzYyA2NFxcbiBcXHRzZXFsb2NrX3RcXHRcXHRzb2NrZXRfcHJlc3N1cmVfc2VxbG9jaztcXG4gI2VuZGlmXFxuLVxcdGludCBrbWVtY2dfaWQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7XFxuQEAgLTE3NzUsMTUgKzE3NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuIFxcdFxcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gfVxcbiBcXG4tLypcXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcXG4tICogY29ycmVzcG9uZGluZyBMUlUgbGlzdHMuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cXHUwMDNla21lbWNnX2lkIDogLTE7XFxuLX1cXG4tXFxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbkBAIC0xODUxLDExICsxODQxLDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0cmV0dXJuIC0xO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTA2NCw3ICsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTk9OU0xBQixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4gXFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXFxuaW5kZXggOGE2ZGQwYTQ4OWUxMi4uZjE5NjhmMDJiZTNiMyAxMDA2NDRcXG4tLS0gYS9tbS9saXN0X2xydS5jXFxuKysrIGIvbW0vbGlzdF9scnUuY1xcbkBAIC03MiwxMCArNzIsMTEgQEAgc3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4tXFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgaWR4IFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgaWR4KTtcXG4rXFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4rXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cXG4rXFx0XFx0XFx0eGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIG1scnUgPyBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtuaWRdIDogTlVMTDtcXG4gXFx0fVxcbkBAIC05MSw3ICs5Miw3IEBAIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIGFnYWluOlxcbi1cXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XFxuK1xcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xcbiBcXHRpZiAobGlrZWx5KGwpKSB7XFxuIFxcdFxcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xcbiBcXHRcXHRpZiAobGlrZWx5KFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XFxuQEAgLTEzMiw3ICsxMzMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5scnU7XFxuIH1cXG5AQCAtMzEzLDcgKzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiBcXHRsb25nIGNvdW50O1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcXG4rXFx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsIG1lbWNnKTtcXG4gXFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXFx1MDAzZW5yX2l0ZW1zKSA6IDA7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTAyLDExICs1MDMsMTAgQEAgc3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXFxuIHtcXG4tXFx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXFx1MDAzZWttZW1jZ19pZDtcXG4gXFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4tXFx0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIGRzdF9pZHgpO1xcbitcXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xcbiBcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFxuIFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnNyYy1cXHUwMDNlbGlzdCwgXFx1MDAyNmRzdC1cXHUwMDNlbGlzdCk7XFxuQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxcbiBcXHRcXHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXFxuIFxcdFxcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRtbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuK1xcdFxcdG1scnUgPSB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuIFxcdFxcdGlmICghbWxydSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cXG4gXFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiBcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gXFxuLVxcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuK1xcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxcbkBAIC01NjYsOSArNTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIHtcXG4tXFx0aW50IGlkeCA9IG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQ7XFxuK1xcdGlmICghbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRyZXR1cm4gaWR4IFxcdTAwM2MgMCB8fCB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbkBAIC02MDIsNyArNjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIHBvcy1cXHUwMDNla21lbWNnX2lkKTtcXG4rXFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xcbiBcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiBcXHRcXHRcXHRpZiAoIXhhc19sb2FkKFxcdTAwMjZ4YXMpIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSkge1xcbkBAIC02NzYsNyArNjc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcXG4gXFx0ZWxzZVxcbiBcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIFxcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XFxuK1xcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAoIXNocmlua2VyIHx8ICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcXG4gXFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zNzYzLDMzICszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG4gXFx0b2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcXG4tXFxuLVxcdG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cXHUwMDNlaWQuaWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudDtcXG4tXFxuLVxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuLVxcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTtcXG4tfVxcbi1cXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFx1MDAzZVxcbkBAIC00MjE2LDcgKzQxODksNiBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0c2VxbG9ja19pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xcbiAjZW5kaWZcXG4gXFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xcbi1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcXG5AQCAtNDI5MCw3ICs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4tXFx0bWVtY2dfb25saW5lX2ttZW0obWVtY2cpO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxpa2VseSghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXFxuK1xcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcXG5AQCAtNDI5OCw3ICs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0ICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4ndCBza2lwIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxcbi1cXHRcXHRnb3RvIG9mZmxpbmVfa21lbTtcXG4rXFx0XFx0Z290byByZXBhcmVudF9scnVzO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4gXFx0XFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XFxuQEAgLTQzNTUsOCArNDMyOCw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xcbi1vZmZsaW5lX2ttZW06XFxuLVxcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XFxuK3JlcGFyZW50X2xydXM6XFxuK1xcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcXG4gXFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuQEAgLTQzNzIsMTEgKzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXG4gXFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcXG4gXFxuLVxcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XFxuK1xcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcXG4gXFx0LypcXG4gXFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXFxuLVxcdCAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0XFxuLVxcdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cXG4rXFx0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxcbitcXHQgKiBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxcbiBcXHQgKi9cXG4gXFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcXG4gXFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTI1NSw4ICsxMjU1LDggQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyO1xcbiBcXG4tXFx0c2hyaW5rZXIgPVxcbi1cXHRcXHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFxcXCJtbS16c3dhcFxcXCIpO1xcbitcXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXFxcIm1tLXpzd2FwXFxcIik7XFxuIFxcdGlmICghc2hyaW5rZXIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTIuMTY2MDA5ODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjYzMzk5MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6NDE6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBhMDNiNmUzZTU0NzA3Li4zNDYzZDJjNTJjNjI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjaWYgQklUU19QRVJfTE9ORyBcdTAwM2MgNjRcbiBcdHNlcWxvY2tfdFx0XHRzb2NrZXRfcHJlc3N1cmVfc2VxbG9jaztcbiAjZW5kaWZcbi1cdGludCBrbWVtY2dfaWQ7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcbkBAIC0xNzc1LDE1ICsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuIFx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLS8qXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcbi0gKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbi19XG4tXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuQEAgLTE4NTEsMTEgKzE4NDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfa21lbV9vbmxpbmUodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIC0xO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBkZDY2YzZhZDVhZjEzLi5kMWNlMDYxNjAxYmNkIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEwNjQsNyArMTA2NCw4IEBAIGludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4ge1xuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbi1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4rXHRcdFx0XHRcdFx0IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbitcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTk9OU0xBQixcbiBcdFx0XHRcdFx0XHQgXCJ0aHAtZGVmZXJyZWRfc3BsaXRcIik7XG4gXHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggOGE2ZGQwYTQ4OWUxMi4uZjE5NjhmMDJiZTNiMyAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC03MiwxMCArNzIsMTEgQEAgc3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXG4tbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIGludCBpZHgpXG4rbGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBpZHggXHUwMDNlPSAwKSB7XG4tXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBpZHgpO1xuK1x0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPVxuK1x0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuIFx0fVxuQEAgLTkxLDcgKzkyLDcgQEAgbG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBhZ2Fpbjpcbi1cdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgbWVtY2dfa21lbV9pZCgqbWVtY2cpKTtcbitcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xuIFx0aWYgKGxpa2VseShsKSkge1xuIFx0XHRsb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcbiBcdFx0aWYgKGxpa2VseShSRUFEX09OQ0UobC1cdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XG5AQCAtMTMyLDcgKzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xuIH1cbkBAIC0zMTMsNyArMzE0LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRsb25nIGNvdW50O1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7XG4rXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgbWVtY2cpO1xuIFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpIDogMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTUwMiwxMSArNTAzLDEwIEBAIHN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0XHRcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxuIHtcbi1cdGludCBkc3RfaWR4ID0gZHN0X21lbWNnLVx1MDAzZWttZW1jZ19pZDtcbiBcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDtcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3JjLVx1MDAzZWxvY2spO1xuLVx0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIGRzdF9pZHgpO1xuK1x0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTtcbiBcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2ZHN0LVx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiBcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2c3JjLVx1MDAzZWxpc3QsIFx1MDAyNmRzdC1cdTAwM2VsaXN0KTtcbkBAIC01MzYsNyArNTM2LDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIFx0XHQgKi9cbi1cdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuK1x0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcdFx0aWYgKCFtbHJ1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gXHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIFxuLVx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuK1x0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWRcbkBAIC01NjYsOSArNTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB7XG4tXHRpbnQgaWR4ID0gbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuK1x0aWYgKCFtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiBpZHggXHUwMDNjIDAgfHwgeGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbkBAIC02MDIsNyArNjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRpZiAoIW1scnUpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHR4YXNfc2V0KFx1MDAyNnhhcywgcG9zLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xuIFx0XHRkbyB7XG4gXHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiBcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbkBAIC02NzYsNyArNjc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGVsc2VcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fFxuK1x0ICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxuIFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGNiMmRiOGMwOTIzYS4uYWUyZDZkOWNmYTc0MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzc2MywzMyArMzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsXG4gXHRvYmpfY2dyb3VwX2dldF9tYW55KGZvbGlvX29iamNnKGZvbGlvKSwgbmV3X3JlZnMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4tXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50O1xuLVxuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbi1cdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTtcbi19XG4tXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXHUwMDNlXG5AQCAtNDIxNiw3ICs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRzZXFsb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xuICNlbmRpZlxuIFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG5AQCAtNDI5MCw3ICs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdGludCBuaWQ7XG4gXG4tXHRtZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxuK1x0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuIFx0LypcbiBcdCAqIEEgbWVtY2cgbXVzdCBiZSB2aXNpYmxlIGZvciBleHBhbmRfc2hyaW5rZXJfaW5mbygpXG5AQCAtNDI5OCw3ICs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIGhlcmUsIHdoZW4gbWVtX2Nncm91cF9pdGVyKCkgY2FuJ3Qgc2tpcCBpdC5cbiBcdCAqL1xuIFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxuLVx0XHRnb3RvIG9mZmxpbmVfa21lbTtcbitcdFx0Z290byByZXBhcmVudF9scnVzO1xuIFxuIFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiBcdFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XG5AQCAtNDM1NSw4ICs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0fVxuIFx0fVxuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbi1vZmZsaW5lX2ttZW06XG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuK3JlcGFyZW50X2xydXM6XG4rXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydXMobWVtY2csIHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSk7XG4gXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbiBcdHJldHVybiAtRU5PTUVNO1xuIH1cbkBAIC00MzcyLDExICs0MzQ1LDExIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChtZW1jZyk7XG4gXG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuK1x0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpO1xuIFx0LypcbiBcdCAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZlxuLVx0ICogdGhlIGxpc3RfbHJ1IGluIG1lbWNnX29mZmxpbmVfa21lbSgpLCB3aGljaCBlbnN1cmVzIHRoYXRcbi1cdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cbitcdCAqIHRoZSBsaXN0X2xydSBhYm92ZSwgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZXkgd2lsbCBub3RcbitcdCAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4gXHQgKi9cbiBcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XG4gXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTI1NSw4ICsxMjU1LDggQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyO1xuIFxuLVx0c2hyaW5rZXIgPVxuLVx0XHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFwibW0tenN3YXBcIik7XG4rXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4rXHRcdFx0XHQgIFNIUklOS0VSX05PTlNMQUIsIFwibW0tenN3YXBcIik7XG4gXHRpZiAoIXNocmlua2VyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjEyLjE2NjAxMTE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTE2ODM3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBzaW5jZSB0aGF0J3MgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3RyZWFtbGluaW5nIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykga21lbSB0cmFja2luZyBhbmQgbGlzdF9scnUgbWFuYWdlbWVudC5cblxuVGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGUgY29yZSBjaGFuZ2VzOiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGlzIHNoZWRkaW5nIHRoZSBga21lbWNnX2lkYCBmaWVsZCBhbmQgdGhlIGFzc29jaWF0ZWQgYG1lbWNnX2ttZW1faWQoKWAgZnVuY3Rpb24uIFRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIG1vdmluZyBhd2F5IGZyb20gdGhlIGludGVnZXItYmFzZWQgSUQgYW5kIGFkb3B0aW5nIGEgZGlyZWN0IHBvaW50ZXIgYXBwcm9hY2ggdG8gcmVmZXJlbmNlIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IGl0c2VsZi4gR29vZCwgcG90ZW50aWFsbHkgbGVzcyBvdmVyaGVhZCBhbmQgYSBtb3JlIGRpcmVjdCBkYXRhIGFjY2Vzcy5cblxuVGhlIGBtbS9odWdlX21lbW9yeS5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYGRlZmVycmVkX3NwbGl0X3Nocmlua2VyYCBpbiBgdGhwX3Nocmlua2VyX2luaXQoKWAgaXMgaW50ZXJlc3RpbmcuICBUaGlzIHBvaW50cyB0b3dhcmRzIGltcHJvdmVkIGludGVyYWN0aW9uIHdpdGggdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc2hyaW5rZXIgYW5kIGxpa2VseSBvcHRpbWl6YXRpb24gYXJvdW5kIG5vbi1zbGFiIG1lbW9yeSByZWNsYWltLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzaHJpbmtlciBmbGFncyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYG1tL2xpc3RfbHJ1LmNgIGFyZSBtb3JlIHN1YnN0YW50aWFsLiBXZSdyZSBjbGVhcmx5IHNoaWZ0aW5nIGZyb20gYW4gaW5kZXhlZCBhcHByb2FjaCAoYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCkgdG8gYSBkaXJlY3QgYG1lbV9jZ3JvdXBgIHBvaW50ZXIgKGBsaXN0X2xydV9mcm9tX21lbWNnYCkuICBSZXBsYWNpbmcgdXNlcyBvZiBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgc29saWRpZmllcyB0aGlzIHBvaW50ZXItYmFzZWQgYXBwcm9hY2guIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhlIG1lbWNnIHJlcGFyZW50aW5nIGxvZ2ljIGZvciBsaXN0X2xydXMuIFRoaXMgaXMga2V5LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgY2dyb3VwcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGxvZ2ljIGhhbmRsZXMgcmViYWxhbmNpbmcgb2YgcmVzb3VyY2VzLiBUaGUgY2hhbmdlIGluIGBfX2xpc3RfbHJ1X2luaXRgIHdpdGggdGhlIGBTSFJJTktFUl9OT05TTEFCYCBmbGFnIHNlZW1zIGltcG9ydGFudC4gSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgaXMgcmVsYXRlZCB0byB0aGUgY29uZmlndXJhdGlvbiBvZiBtZW1jZy1hd2FyZSBsaXN0X2xydXMuXG5cblRoZSByZW1vdmFsIG9mIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCB0aGUgaW5saW5pbmcgb2YgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2Agd2l0aGluIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgc3VnZ2VzdHMgdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBiZWluZyBzaW1wbGlmaWVkLiAgVGhpcyBpbmxpbmluZyBhbmQgZGlyZWN0IHJlcGFyZW50aW5nIHdpbGwgYmUgZ29vZCBmb3IgcGVyZm9ybWFuY2UuIFRoZSBmYWN0IGl0J3MgaGFuZGxlZCBkaXJlY3RseSBpbiBvbmxpbmUgYW5kIG9mZmxpbmUgaW1wbGllcyBhbiBpbnRlbnRpb24gdG8gb3B0aW1pemUgdGhlIGNvbW1vbiBwYXRoIGFuZCBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLlxuXG5GaW5hbGx5LCB0aGUgYG1tL3pzd2FwLmNgIGFkZGl0aW9uIG9mIGBTSFJJTktFUl9OT05TTEFCYCB0byBgenN3YXBfYWxsb2Nfc2hyaW5rZXIoKWAgbWVhbnMgenN3YXAgaXMgYWxzbyBiZWluZyBjb25maWd1cmVkIHRvIGludGVyYWN0IGRpZmZlcmVudGx5IHdpdGggdGhlIHNocmlua2VyLiAgVGhpcyBmdXJ0aGVyIHBvaW50cyB0byBpbXByb3ZlbWVudHMgaW4gaG93IHdlIGhhbmRsZSBub24tc2xhYiBtZW1vcnkgcHJlc3N1cmUgYW5kIHJlY2xhaW0gd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGZyYW1ld29yay5cblxuSSdsbCBuZWVkIHRvIHVzZSBncmVwcGVyIGFuZCByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgcmVjbGFpbSwgTlVNQSBpbnRlcmFjdGlvbnMsIGFuZCBvdmVyYWxsIGNncm91cCBwZXJmb3JtYW5jZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYnJlYWsgYW55IGFzc3VtcHRpb25zIEkndmUgcmVsaWVkIG9uIGluIG15IG93biB3b3JrIG9uIHRoZSBzdWJqZWN0LCBvciB3aGV0aGVyIHRoZSBuZXcgYXBwcm9hY2ggaW50cm9kdWNlcyBvcHBvcnR1bml0aWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjIyLjI4Mjg1MjY0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyODMwODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNIUklOS0VSX05PTlNMQUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcXHRjb21wcl9wb29sLnNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTk9OU0xBQiwgXFxcImJ0cmZzLWNvbXByLXBhZ2VzXFxcIik7XFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM3LVxcdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmM9MjMzNT14ZnNfaW5vZGVnY19yZWdpc3Rlcl9zaHJpbmtlcihcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XFxuZnMveGZzL3hmc19pY2FjaGUuYzoyMzM4OlxcdG1wLVxcdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzOS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwieGZzLWlub2RlZ2M6JXNcXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMxLSAqL1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXFx0QklUKDQpXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMy1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9OT05TTEFCLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgxLVxcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9saXN0X2xydS5jOjY4MjpcXHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxcbm1tL2xpc3RfbHJ1LmMtNjgzLVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTIyNj1zdGF0aWMgaW50IHNocmlua2VyX21lbWNnX2FsbG9jKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTIzMy1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG5tbS9zaHJpbmtlci5jOjIzNDpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcXG5tbS9zaHJpbmtlci5jLTIzNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01NTUtXFx0XFx0XFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2hyaW5rZXIuYzo1NTY6XFx0XFx0XFx0ICAgICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcXG5tbS9zaHJpbmtlci5jLTU1Ny1cXHRcXHRcXHRcXHRjbGVhcl9iaXQob2Zmc2V0LCB1bml0LVxcdTAwM2VtYXApO1xcbi0tXFxubW0venN3YXAuYz0xMjU0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNTgtXFx0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbm1tL3pzd2FwLmM6MTI1OTpcXHRcXHRcXHRcXHQgIFNIUklOS0VSX05PTlNMQUIsIFxcXCJtbS16c3dhcFxcXCIpO1xcbm1tL3pzd2FwLmMtMTI2MC1cXHRpZiAoIXNocmlua2VyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MToyNC4wNDU2ODgyODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk0NTc1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgY29kZSBjaGFuZ2VzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29yZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgcmVjZW50IGNvbW1pdHMuIEknbSBzdGFydGluZyB3aXRoIGBtbS9saXN0X2xydS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBhcmVhczsgYW55IGNoYW5nZSBoZXJlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSB0aHJvdWdoIHRoZSBlbnRpcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIGFsdGVyYXRpb25zLCBub3QganVzdCB0aGUgKndoYXQqLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCB0byBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgbG9jayBvcmRlcmluZyBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNoYW5nZXMgdG8gTFJVIGJlaGF2aW9yIHRoYXQgbWlnaHQgbmVnYXRpdmVseSBpbXBhY3QgY2FjaGluZyBvciBzd2FwcGluZy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBzZWUgaWYgYW55IG5ldyBmZWF0dXJlcyBhcmUgZXhwb3NlZCwgb3IgaWYgYW55IGV4aXN0aW5nIGNhcGFiaWxpdGllcyBhcmUgZGVwcmVjYXRlZC4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MToyNi42NDAyNjYxMzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdHtcXG4gIDYxOlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gIDYyOlxcdFxcdFxcdHJldHVybjtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG4gIDY1OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZscnUtXFx1MDAzZWxpc3QpO1xcbiAgNjY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHJldHVybiBscnUtXFx1MDAzZXNocmlua2VyX2lkO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxcbiAgNzU6XFx0bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4gIDc4OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XFxuICA3OTpcXHRcXHRcXHRcXHR4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFxcdHJldHVybiBtbHJ1ID8gXFx1MDAyNm1scnUtXFx1MDAzZW5vZGVbbmlkXSA6IE5VTEw7XFxuICA4MjpcXHRcXHR9XFxuICA4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtuaWRdLmxydTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcXG4gIDg3OlxcdGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuICA4ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuICA4OTpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzLCBib29sIHNraXBfZW1wdHkpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpsO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA5NDpcXHRhZ2FpbjpcXG4gIDk1OlxcdFxcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xcbiAgOTY6XFx0XFx0aWYgKGxpa2VseShsKSkge1xcbiAgOTc6XFx0XFx0XFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XFxuICA5ODpcXHRcXHRcXHRpZiAobGlrZWx5KFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XFxuICA5OTpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTAwOlxcdFxcdFxcdFxcdHJldHVybiBsO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0XFx0dW5sb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcXG4gMTAzOlxcdFxcdH1cXG4gMTA0OlxcdFxcdC8qXFxuIDEwNTpcXHRcXHQgKiBDYWxsZXIgbWF5IHNpbXBseSBiYWlsIG91dCBpZiByYWNlZCB3aXRoIHJlcGFyZW50aW5nIG9yXFxuIDEwNjpcXHRcXHQgKiBtYXkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0X2xydSBhbmQgZXhwZWN0IGVtcHR5IHNsb3RzLlxcbiAxMDc6XFx0XFx0ICovXFxuIDEwODpcXHRcXHRpZiAoc2tpcF9lbXB0eSkge1xcbiAxMDk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDExMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcdFZNX1dBUk5fT04oIWNzc19pc19keWluZyhcXHUwMDI2KCptZW1jZyktXFx1MDAzZWNzcykpO1xcbiAxMTM6XFx0XFx0Km1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAoKm1lbWNnKTtcXG4gMTE0OlxcdFxcdGdvdG8gYWdhaW47XFxuIDExNTpcXHR9XFxuIDExNjpcXHQjZWxzZVxcbiAxMTc6XFx0c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDExODpcXHR7XFxuIDExOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjI2LjY0MDM0NjAzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwODAzMjg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBsaXN0X2xydV9mcm9tX21lbWNnYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBsaXN0X2xydV9mcm9tX21lbWNnYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIGludm9rZWQuIE1vcmUgYnJvYWRseSwgSSB3YW50IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZnVuY3Rpb24ncyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBgbGlzdF9scnVgIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgTFJVIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndobyxcIiBcIndoYXQsXCIgYW5kIFwid2hlcmVcIiB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIExldCdzIHN0YXJ0IHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MjkuNzIwNjc3MzIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdH1cXG4gNTAxOlxcdFxcbiA1MDI6XFx0c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbiA1MDM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxcbiA1MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZylcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4gNTA5OlxcdFxcdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsIGRzdF9tZW1jZyk7XFxuIDUxMDpcXHRcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2c3JjLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZHN0LVxcdTAwM2VsaXN0KTtcXG4gNTEzOlxcdFxcdGlmIChzcmMtXFx1MDAzZW5yX2l0ZW1zKSB7XFxuIDUxNDpcXHRcXHRcXHRXQVJOX09OKHNyYy1cXHUwMDNlbnJfaXRlbXMgXFx1MDAzYyAwKTtcXG4gNTE1OlxcdFxcdFxcdGRzdC1cXHUwMDNlbnJfaXRlbXMgKz0gc3JjLVxcdTAwM2Vucl9pdGVtcztcXG4gNTE2OlxcdFxcdFxcdHNldF9zaHJpbmtlcl9iaXQoZHN0X21lbWNnLCBuaWQsIGxydV9zaHJpbmtlcl9pZChscnUpKTtcXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcdC8qIE1hcmsgdGhlIGxpc3RfbHJ1X29uZSBkZWFkICovXFxuIDUxOTpcXHRcXHRzcmMtXFx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2spO1xcbiA1MjI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzcmMtXFx1MDAzZWxvY2spO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHR2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIDUyNjpcXHR7XFxuIDUyNzpcXHRcXHRzdHJ1Y3QgbGlzdF9scnUgKmxydTtcXG4gNTI4OlxcdFxcdGludCBpO1xcbiA1Mjk6XFx0XFxuIDUzMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1MzE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcXG4gNTMyOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0XFx0LypcXG4gNTM1OlxcdFxcdFxcdCAqIGNzc19pc19keWluZygpIGNoZWNrIGluIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgYXZvaWRzXFxuIDUzNjpcXHRcXHRcXHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXFxuIDUzNzpcXHRcXHRcXHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxcbiA1Mzg6XFx0XFx0XFx0ICovXFxuIDUzOTpcXHRcXHRcXHRtbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiA1NDA6XFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiA1NDE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdFxcdC8qXFxuIDU0NDpcXHRcXHRcXHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcXG4gNTQ1OlxcdFxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbiA1NDY6XFx0XFx0XFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXFxuIDU0NzpcXHRcXHRcXHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xcbiA1NDg6XFx0XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG4gNTQ5OlxcdFxcdFxcdCAqIGl0ZW0gaXMgc3RpbGwgb24gY2hpbGQncyBsaXN0LlxcbiA1NTA6XFx0XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDU1MjpcXHRcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0XFx0eGFfZXJhc2VfaXJxKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdC8qXFxuIDU1NzpcXHRcXHRcXHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXFxuIDU1ODpcXHRcXHRcXHQgKiB0byByZW1haW4gZW1wdHksIHdlIGNhbiBzYWZlbHkgZnJlZSB0aGlzIGxydSwgYW55IGZ1cnRoZXJcXG4gNTU5OlxcdFxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG4gNTYwOlxcdFxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0XFx0a3ZmcmVlX3JjdShtbHJ1LCByY3UpO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNTY4OlxcdHtcXG4gNTY5OlxcdFxcdGlmICghbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4gNTcwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiA1NzM6XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbiA1Nzc6XFx0e1xcbiA1Nzg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTc5OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjI5LjcyMDc4Nzc2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTYwOTAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgX19tZW1jZ19saXN0X2xydV9hbGxvY2Agd29ya3MgYW5kLCBjcnVjaWFsbHksIGhvdyBldmVyeXRoaW5nICp1c2VzKiBpdC4gTXkgbmV4dCBtb3ZlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYnV0IGFsc28gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1YnNlcXVlbnRseSB1c2Ugd2hhdCBpdCBhbGxvY2F0ZXMuIEknbSB0YWxraW5nIGFib3V0IGFueSBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIHRoYXQgcmV0dXJuZWQgZGF0YSBpbiBhIG1lYW5pbmdmdWwgd2F5LlxuXG5UaGlzIG1lYW5zIGEgbWV0aG9kaWNhbCBzZWFyY2ggZm9yIGFueXRoaW5nIGNhbGxpbmcgYG1lbWNnX2xpc3RfbHJ1X2FsbG9jYCBvciBhbnkgb2YgdGhlIGZ1bmRhbWVudGFsIGxpc3RfbHJ1IGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxpc3QgbWFuaXB1bGF0aW9uOiBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBhbmQgYGxpc3RfbHJ1X3dhbGtfb25lYC4gQnkgZXhhbWluaW5nIHRoZXNlLCBJIGNhbiBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uJ3MgbGlmZXRpbWUsIGl0cyBwdXJwb3NlLCBhbmQgaG93IGl0IGlzIHVsdGltYXRlbHkgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSB1c2FnZSBwYXR0ZXJucyBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzMuMDM2ODg2NTExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcG9zLCAqcGFyZW50O1xcbiA1ODE6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdGdmcCBcXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xcbiA1ODQ6XFx0XFx0LypcXG4gNTg1OlxcdFxcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJ3NcXG4gNTg2OlxcdFxcdCAqIGxpc3RfbHJ1LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBjZ3JvdXAgYW5kIGFsbCBpdHNcXG4gNTg3OlxcdFxcdCAqIGFuY2VzdG9ycyBoYXZlIGFsbG9jYXRlZCBsaXN0X2xydV9tZW1jZy5cXG4gNTg4OlxcdFxcdCAqL1xcbiA1ODk6XFx0XFx0ZG8ge1xcbiA1OTA6XFx0XFx0XFx0LypcXG4gNTkxOlxcdFxcdFxcdCAqIEtlZXAgZmluZGluZyB0aGUgZmFyZXN0IHBhcmVudCB0aGF0IHdhc24ndCBwb3B1bGF0ZWRcXG4gNTkyOlxcdFxcdFxcdCAqIHVudGlsIGZvdW5kIG1lbWNnIGl0c2VsZi5cXG4gNTkzOlxcdFxcdFxcdCAqL1xcbiA1OTQ6XFx0XFx0XFx0cG9zID0gbWVtY2c7XFxuIDU5NTpcXHRcXHRcXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xcbiA1OTY6XFx0XFx0XFx0d2hpbGUgKCFtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQocGFyZW50LCBscnUpKSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRwb3MgPSBwYXJlbnQ7XFxuIDU5ODpcXHRcXHRcXHRcXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xcbiA1OTk6XFx0XFx0XFx0fVxcbiA2MDA6XFx0XFxuIDYwMTpcXHRcXHRcXHRpZiAoIW1scnUpIHtcXG4gNjAyOlxcdFxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxuIDYwMzpcXHRcXHRcXHRcXHRpZiAoIW1scnUpXFxuIDYwNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjA1OlxcdFxcdFxcdH1cXG4gNjA2OlxcdFxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcXG4gNjA3OlxcdFxcdFxcdGRvIHtcXG4gNjA4OlxcdFxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiA2MDk6XFx0XFx0XFx0XFx0aWYgKCF4YXNfbG9hZChcXHUwMDI2eGFzKSBcXHUwMDI2XFx1MDAyNiAhY3NzX2lzX2R5aW5nKFxcdTAwMjZwb3MtXFx1MDAzZWNzcykpIHtcXG4gNjEwOlxcdFxcdFxcdFxcdFxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBtbHJ1KTtcXG4gNjExOlxcdFxcdFxcdFxcdFxcdGlmICgheGFzX2Vycm9yKFxcdTAwMjZ4YXMpKVxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0XFx0bWxydSA9IE5VTEw7XFxuIDYxMzpcXHRcXHRcXHRcXHR9XFxuIDYxNDpcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiA2MTU6XFx0XFx0XFx0fSB3aGlsZSAoeGFzX25vbWVtKFxcdTAwMjZ4YXMsIGdmcCkpO1xcbiA2MTY6XFx0XFx0fSB3aGlsZSAocG9zICE9IG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSk7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdGlmICh1bmxpa2VseShtbHJ1KSlcXG4gNjE5OlxcdFxcdFxcdGtmcmVlKG1scnUpO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRyZXR1cm4geGFzX2Vycm9yKFxcdTAwMjZ4YXMpO1xcbiA2MjI6XFx0fVxcbiA2MjM6XFx0XFxuIDYyNDpcXHRpbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gNjI1OlxcdFxcdFxcdFxcdCBnZnBfdCBnZnApXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxcbiA2Mjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYyOTpcXHRcXHRyZXR1cm4gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xcbiA2MzA6XFx0fVxcbiA2MzE6XFx0XFxuIDYzMjpcXHRpbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIDYzMzpcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwKVxcbiA2MzQ6XFx0e1xcbiA2MzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA2MzY6XFx0XFx0aW50IHJlcztcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxcbiA2Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY0MDpcXHRcXG4gNjQxOlxcdFxcdC8qIEZhc3QgcGF0aCB3aGVuIGxpc3RfbHJ1IGhlYWRzIGFscmVhZHkgZXhpc3QgKi9cXG4gNjQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNjQzOlxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbiA2NDQ6XFx0XFx0cmVzID0gbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpO1xcbiA2NDU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDY0NjpcXHRcXHRpZiAobGlrZWx5KHJlcykpXFxuIDY0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0LyogQWxsb2NhdGlvbiBtYXkgYmxvY2ssIHBpbiB0aGUgbWVtY2cgKi9cXG4gNjUwOlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIDY1MTpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MjpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MzpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0I2Vsc2VcXG4gNjU2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0fVxcbiA2NTk6XFx0XFxuIDY2MDpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0fVxcbiA2NjM6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjQ6XFx0XFxuIDY2NTpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjY6XFx0e1xcbiA2Njc6XFx0XFx0aW50IGk7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzMuMDM3NDU1NjgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NTM1MTQwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgZGVlcCBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5IOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gYG1tL2xpc3RfbHJ1LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgaW1wb3J0YW50IVxuXG5UaGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgbGlzdF9scnVgIGluZGV4ZXMgdGhvc2UgcGVyLW1lbWNnIExSVSBsaXN0cy4gQmVmb3JlLCBpdCB3YXMgdXNpbmcgYGttZW1jZ19pZGAsIGJ1dCBub3cgaXQncyBzd2l0Y2hpbmcgdG8gZGlyZWN0bHkgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gT2theSwgc28gdGhleSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBpbml0aWFsaXphdGlvbi1iYXNlZCBga21lbWNnX2lkYCBhbmQgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhlIGBtZW1jZy1cdTAwM2VpZC5pZGAgYWxsb2NhdGVkIGR1cmluZyB0aGUgY3NzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wcm92ZW1lbnQgaW4gaG93IHRoZXNlIExSVSBsaXN0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZyYW1ld29yay5cblxuSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRIUCBkZWZlcnJlZCBzcGxpdCBzaHJpbmtlciBhbmQgdGhlIHpzd2FwIHNocmlua2VyLCB3aXRoIGBTSFJJTktFUl9OT05TTEFCYCBiZWluZyBhZGRlZC4gIEFuZCBhIHR3ZWFrIHRvIGBfX2xpc3RfbHJ1X2luaXRgIHRvIGtlZXAgaXQgYG1lbWNnX2F3YXJlYCBldmVuIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2hlbiBgc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUJgLiBUaGlzIHNlZW1zIGxpa2UgdGhleSdyZSBzaW1wbGlmeWluZyBzb21lIGxvZ2ljIGFuZCBsaWtlbHkgZW5zdXJpbmcgbW9yZSByb2J1c3QgbWVtY2cgaW50ZWdyYXRpb24gaW4gdGhlIHNocmlua2luZyBwcm9jZXNzLiBUaGUgc2ltcGxpZmljYXRpb24gb2YgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCB0byByZW1vdmUgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgYnkgZGlyZWN0bHkgcmVwYXJlbnRpbmcgbGlzdF9scnVzIGZ1cnRoZXIgY29ycm9ib3JhdGVzIHRoaXMuXG5cbklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBBYnNvbHV0ZWx5LiBDb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBjZ3JvdXBzL21lbWNnLCBsaXN0X2xydSwgVEhQIHNocmlua2VyLCBhbmQgenN3YXAgc2hyaW5rZXIgYXJlIGFsbCBpbnRlcnR3aW5lZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMgd2l0aGluIHRoaXMgY29kZSBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBXaGF0IENPTkZJRyBvcHRpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBwbHVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19aU1dBUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYENPTkZJR19NRU1DR19LTUVNYCBzaXR1YXRpb24uLi4gaXMgdGhhdCBzdGlsbCBhcm91bmQsIG9yIGhhcyBpdCBiZWVuIG1lcmdlZCBpbnRvIGp1c3QgYENPTkZJR19NRU1DR2A/IEknbGwgcnVuIGEgcXVpY2sgZ3JlcHBlciBzZWFyY2ggdG8gY29uZmlybS4gR290dGEgbWFrZSBzdXJlIG91ciBmdXp6aW5nIGJ1aWxkcyBhcmUgY29uZmlndXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzguNDkwOTcyNzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyMzM2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzguNTQyMzA0OTU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDEzMTQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBLY29uZmlnIGZpbGVzOlxuXG4qKkZpbmRpbmcgdGhlIFJpZ2h0IENvbmZpZ3VyYXRpb24gTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBjb21tb24gcGxhY2VzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEknZCBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgbG9va2luZyBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdlbmVyYWwgc3lzdGVtIGluaXRpYWxpemF0aW9uIG9wdGlvbnMsIGFuZCBgbW0vS2NvbmZpZ2AgaXMsIG9mIGNvdXJzZSwgdGhlIG9idmlvdXMgY2hvaWNlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kISBUaGV5J3JlIGxpa2VseSB0aGUgbW9zdCByZWxldmFudCBhbmQgZWZmaWNpZW50IHBsYWNlcyB0byBiZWdpbiBteSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDAuODgzNjIyMjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg5OTk0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTQtXFxuaW5pdC9LY29uZmlnOjEwOTU6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5Ni1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMS1cXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMy1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwOC1cXG5pbml0L0tjb25maWc6MTEwOTpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTExMC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MTo0Mi42NzM2MjEzMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwODU1MjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIG1lbW9yeS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHNldHRpbmdzIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgWlNXQVBgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkuIFRoZSBpbXBhY3Qgb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwcmV0dHkgZGlyZWN0IG9uIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZpZXIgd29ya2xvYWRzLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSBpdCdzIHNldCBhcHByb3ByaWF0ZWx5IGZvciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFwcGxpY2F0aW9uIHByb2ZpbGUgaW4gbWluZC4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSBgWlNXQVBgLiBUaGlzIGlzIGZvciBzd2FwIHNwYWNlIGNvbXByZXNzaW9uLiBJIHNob3VsZCBjb25zaWRlciB3aGV0aGVyIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBvZiBjb21wcmVzc2lvbiBvdXR3ZWlnaCB0aGUgQ1BVIG92ZXJoZWFkLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBzdWZmaWNpZW50IHBoeXNpY2FsIFJBTS4gR290dGEgbWFrZSBzdXJlIGJvdGggY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB0aGUgZGVzaWduIGdvYWxzIGFuZCB0aGUgc3lzdGVt4oCZcyByZXNvdXJjZSBjb25zdHJhaW50cy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDUuMDgyMTc1ODgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4NjcwNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODI5LVxcbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NDg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1My1cXG5tbS9LY29uZmlnOjg1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTUtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjAtXFxubW0vS2NvbmZpZzo4NjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Mi1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg2LVxcbm1tL0tjb25maWc6ODg3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5Ni1cXG5tbS9LY29uZmlnOjg5NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg5OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNC1cXG5tbS9LY29uZmlnOjkwNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMS1cXG5tbS9LY29uZmlnOjkzMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTMzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDAtXFxubW0vS2NvbmZpZzo5NDE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDItXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDgtXFxubW0vS2NvbmZpZzo5NDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1MC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDYuNzYwODUzMDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTE2MzM1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTGV0J3MgRGl2ZSBpbnRvIGBaU1dBUGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBaU1dBUGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3RzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsaWtlbHkgdG8gYmUgZHJpdmVuIGJ5IGEgZmV3IGtleSBxdWVzdGlvbnM6IFdoYXQgdHJpZ2dlcmVkIHRoaXMgcmV2aWV3PyBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkLCBhIGJ1ZyByZXBvcnQsIG9yIHBlcmhhcHMgYSBnZW5lcmFsIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbj9cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQncyB0aGUgaW1wbGVtZW50YXRpb24/IEhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzd2FwIHN1YnN5c3RlbT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgTFJVLWJhc2VkIHN3YXBwaW5nIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGRlbWFuZCBwYWdpbmcgd2l0aCBjb21wcmVzc2lvbiBvciBlbmNyeXB0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVjZW50IHBhdGNoZXMgcmVsYXRlZCB0byBgWlNXQVBgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBpbmNyZWFzZWQgdXNhZ2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBuZWVkIG15IGF0dGVudGlvbi5cblxuSSdsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBkYXRhIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JlICh0eXBpY2FsbHkgZGlzayBvciBhIGRlZGljYXRlZCBzd2FwIHBhcnRpdGlvbikuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCB0aGUgb3ZlcmFsbCBzd2FwcGluZyBhbGdvcml0aG0sIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gVGhlIG1haW4gdGhpbmcgaXMgdG8gZmluZCBpZiB0aGVyZSBhcmUgYW55IGN1cnJlbnQgYXJlYXMgb2YgY29uY2Vybiwgb3IgaWYgYW55dGhpbmcgbG9va3MgcGFydGljdWxhcmx5IHVudXN1YWwgYXQgdGhlIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjUyLjA1MjQ4ODY4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDY3MTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NTMuNjUzMTY5MDg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTIyNzkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb25zIGFuZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX1pTV0FQYC4gVGhlc2UgYXJlIHRoZSBrZXkgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHRoZSBwbGF5aW5nIGZpZWxkIGZvciB0aGUgY29kZSBJJ20gYW5hbHl6aW5nLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3Qgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciB0aGF0IGRpcmVjdGx5IGNhbGwgdGhlIGNoYW5nZWQgbG9naWMuIEkgd2FudCB0byBhdm9pZCBhbnl0aGluZyBvdmVybHkgZ2VuZXJhbC5cblxuSSBzZWUgYSBjb25jZW50cmF0ZWQgc2V0IG9mIHRoZXNlIGluIGBtbS9saXN0X2xydS5jYC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGxpc3RlZCwgSSdsbCBuZWVkIHRvIGV4YW1pbmU6XG5cbiogICBgbGlzdF9scnVfY291bnRfb25lYFxuKiAgIGBsaXN0X2xydV9hZGRgXG4qICAgYGxpc3RfbHJ1X2RlbGBcbiogICBgbG9ja19saXN0X2xydV9vZl9tZW1jZ2AgKHRoaXMgb25lJ3Mgc3RhdGljIGlubGluZSwgc28gdGhlcmUgbWF5IGJlIGEgc3ltYm9sIGNoZWNrKSBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYy9leHBvcnRlZCBvciBzdGF0aWMgdXNpbmcgcmVhZC1maWxlIG9yIGdyZXBwZXIuXG4qICAgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2BcbiogICBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lYFxuKiAgIGBtZW1jZ19saXN0X2xydV9hbGxvY2BcbiogICBgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NgXG4qICAgYF9fbWVtY2dfbGlzdF9scnVfYWxsb2NgXG4qICAgYF9fbGlzdF9scnVfaW5pdGBcblxuVGhlbiwgbW92aW5nIHRvIGBtbS9tZW1jb250cm9sLmNgLCB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTpcblxuKiAgIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgXG4qICAgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgXG5cbkFuZCwgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgbGlzdCBpbmNsdWRlczpcblxuKiAgIGB0aHBfc2hyaW5rZXJfaW5pdGAgKHRoaXMgaXMgYW4gaW5pdCBmdW5jdGlvbiwgc28gaXQncyBvbmx5IHJ1biBhdCBib290LCByaWdodD8pXG4qICAgYGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkYCBvciBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgLyBgZGVmZXJyZWRfc3BsaXRfY291bnRgIC8gYGRlZmVycmVkX3NwbGl0X2ZvbGlvYFxuXG5GaW5hbGx5LCBmcm9tIGBtbS96c3dhcC5jYDpcblxuKiAgIGB6c3dhcF9hbGxvY19zaHJpbmtlcmAgLyBgenN3YXBfc2hyaW5rZXJfc2NhbmAgLyBgenN3YXBfc2hyaW5rZXJfY291bnRgXG5cbk5vdywgdG8gcmVmaW5lIHRoaXMgZnVydGhlciwgSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYG1tL2xpc3RfbHJ1LmNgIHRvIGxvb2sgYXQgdGhvc2Ugc3ltYm9sIG5hbWVzIGFuZCBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjU3LjgwNTQ1MDk4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzA1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9saXN0X2xydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2xpc3RfbHJ1LmMtMTctXFxubW0vbGlzdF9scnUuYzoxODpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycSxcXG5tbS9saXN0X2xydS5jLTE5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXFxuLS1cXG5tbS9saXN0X2xydS5jLTI4LVxcbm1tL2xpc3RfbHJ1LmM6Mjk6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXFxubW0vbGlzdF9scnUuYy0zMC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQxOnN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG5tbS9saXN0X2xydS5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9scnVzX211dGV4KTtcXG5tbS9saXN0X2xydS5jLTQzLVxcbm1tL2xpc3RfbHJ1LmM6NDQ6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNDUte1xcbi0tXFxubW0vbGlzdF9scnUuYy00OC1cXG5tbS9saXN0X2xydS5jOjQ5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNTAte1xcbi0tXFxubW0vbGlzdF9scnUuYy01OC1cXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy02MC17XFxuLS1cXG5tbS9saXN0X2xydS5jLTY4LVxcbm1tL2xpc3RfbHJ1LmM6Njk6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy03MC17XFxuLS1cXG5tbS9saXN0X2xydS5jPTg3PWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTExNi0jZWxzZVxcbm1tL2xpc3RfbHJ1LmM6MTE3OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTE4LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIwLVxcbm1tL2xpc3RfbHJ1LmM6MTIxOnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjIte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMjQtXFxubW0vbGlzdF9scnUuYzoxMjU6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjYte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMjktXFxubW0vbGlzdF9scnUuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTMxLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQyPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1My1cXG5tbS9saXN0X2xydS5jOjE1NDpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTU1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jLTE2MC1cXG5tbS9saXN0X2xydS5jOjE2MTp2b2lkIGxpc3RfbHJ1X3VubG9jayhzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtMTYyLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTY1LVxcbm1tL2xpc3RfbHJ1LmM6MTY2OnN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3RfbHJ1X2xvY2tfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTY3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxcbi0tXFxubW0vbGlzdF9scnUuYy0xNzItXFxubW0vbGlzdF9scnUuYzoxNzM6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNzQte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xNzctXFxubW0vbGlzdF9scnUuYzoxNzg6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnFzYXZlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTc5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csXFxuLS1cXG5tbS9saXN0X2xydS5jLTE4NS1cXG5tbS9saXN0X2xydS5jOjE4Njp2b2lkIGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbm1tL2xpc3RfbHJ1LmMtMTg3LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTkwLVxcbm1tL2xpc3RfbHJ1LmM6MTkxOmJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0xOTItXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xcbm1tL2xpc3RfbHJ1LmMtMjEwLVxcbm1tL2xpc3RfbHJ1LmM6MjExOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0yMTItXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuLS1cXG5tbS9saXN0X2xydS5jLTIyMy0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjIyNDpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTIyNS1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjM1LVxcbm1tL2xpc3RfbHJ1LmM6MjM2OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9saXN0X2xydS5jLTIzNy1cXHRcXHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jLTI0Ny1cXG5tbS9saXN0X2xydS5jOjI0ODpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNDkte1xcbi0tXFxubW0vbGlzdF9scnUuYz0yNjM9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI2NS0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjI2Njpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTI2Ny1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjc3LVxcbm1tL2xpc3RfbHJ1LmM6Mjc4OmJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI3OS17XFxuLS1cXG5tbS9saXN0X2xydS5jPTI5Mz1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI5NC1cXG5tbS9saXN0X2xydS5jOjI5NTp2b2lkIGxpc3RfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI5Ni17XFxuLS1cXG5tbS9saXN0X2xydS5jPTMwMD1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlKTtcXG5tbS9saXN0X2xydS5jLTMwMS1cXG5tbS9saXN0X2xydS5jOjMwMjp2b2lkIGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbm1tL2xpc3RfbHJ1LmMtMzAzLVxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9saXN0X2xydS5jPTMwOD1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzA5LVxcbm1tL2xpc3RfbHJ1LmM6MzEwOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL2xpc3RfbHJ1LmMtMzExLVxcdFxcdFxcdFxcdCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jPTMyNj1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9jb3VudF9vbmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzI3LVxcbm1tL2xpc3RfbHJ1LmM6MzI4OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZClcXG5tbS9saXN0X2xydS5jLTMyOS17XFxuLS1cXG5tbS9saXN0X2xydS5jPTQwNj1saXN0X2xydV93YWxrX29uZV9pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDEzLVxcbm1tL2xpc3RfbHJ1LmM6NDE0OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtNDE1LVxcdFxcdFxcdFxcdCBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NDUwPUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X3dhbGtfbm9kZSk7XFxubW0vbGlzdF9scnUuYy00NTEtXFxubW0vbGlzdF9scnUuYzo0NTI6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtNDUzLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDYzLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQ2NDpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbm1tL2xpc3RfbHJ1LmMtNDY1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDc4LVxcbm1tL2xpc3RfbHJ1LmM6NDc5OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbm1tL2xpc3RfbHJ1LmMtNDgwLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDg1LVxcbm1tL2xpc3RfbHJ1LmM6NDg2OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy00ODcte1xcbi0tXFxubW0vbGlzdF9scnUuYy01MDEtXFxubW0vbGlzdF9scnUuYzo1MDI6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtNTAzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTI0LVxcbm1tL2xpc3RfbHJ1LmM6NTI1OnZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9saXN0X2xydS5jLTUyNi17XFxuLS1cXG5tbS9saXN0X2xydS5jLTU2NS1cXG5tbS9saXN0X2xydS5jOjU2NjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jLTU2Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTU3NC1cXG5tbS9saXN0X2xydS5jOjU3NTpzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmMtNTc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjIzLVxcbm1tL2xpc3RfbHJ1LmM6NjI0OmludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL2xpc3RfbHJ1LmMtNjI1LVxcdFxcdFxcdCBnZnBfdCBnZnApXFxuLS1cXG5tbS9saXN0X2xydS5jLTYzMS1cXG5tbS9saXN0X2xydS5jOjYzMjppbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbGlzdF9scnUuYy02MzMtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjU1LSNlbHNlXFxubW0vbGlzdF9scnUuYzo2NTY6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxubW0vbGlzdF9scnUuYy02NTcte1xcbi0tXFxubW0vbGlzdF9scnUuYy02NTktXFxubW0vbGlzdF9scnUuYzo2NjA6c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTY2MS17XFxuLS1cXG5tbS9saXN0X2xydS5jLTY2NC1cXG5tbS9saXN0X2xydS5jOjY2NTppbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbm1tL2xpc3RfbHJ1LmMtNjY2LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Njk4PUVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxubW0vbGlzdF9scnUuYy02OTktXFxubW0vbGlzdF9scnUuYzo3MDA6dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NTcuODUyMzg2OTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzE4MTM4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IENncm91cCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgX19tZW1jZ19saXN0X2xydV9hbGxvY2AsIGBtZW1jZ19saXN0X2xydV9hbGxvY2AsIGBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY2AsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBgbWVtX2Nncm91cF9jc3Nfb25saW5lYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gdGhlIGNoYW5nZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVhc29uaW5nIGFuZCBpbXBhY3QuIFRoZSBwYXRjaCBzZXJpZXMgaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZhY3RvcmluZyBob3cgbWVtb3J5IGNncm91cHMgaGFuZGxlIGBsaXN0X2xydWAgaW5zdGFuY2VzLiBJdCdzIG1vdmluZyBmcm9tIGBrbWVtY2dfaWRgIHRvIGBtZW1fY2dyb3VwX2lkYCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIEl0IGFsc28gcmVtb3ZlcyB0aG9zZSBsaWZlY3ljbGUgaG9va3MsIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gLCBzaW1wbGlmeWluZyB0aGluZ3MuIEFuZCB0aGUgYWRkaXRpb24gb2YgYFNIUklOS0VSX05PTlNMQUJgIGlzIGltcG9ydGFudCwgbWFraW5nIHN1cmUgbWVtY2cgYXdhcmVuZXNzIGlzIHByZXNlbnQgZXZlbiB3aGVuIGttZW0gYWNjb3VudGluZyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCByZXBhcmVudGluZywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGxpa2UgY2dyb3VwIGNyZWF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHJlY2xhaW0gcHJlc3N1cmUuIERlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhLlxuXG5GaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBXZSdyZSBsb29raW5nIGF0IGBNRU1DR2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgWlNXQVBgLiBNYWtlcyBzZW5zZSwgYXMgdGhlc2UgZmVhdHVyZXMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9uIGJlaW5nIHJlZmFjdG9yZWQuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCdzIHRpbWUgdG8gJ3NldC1yZXN1bHRzJyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5ODAsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjA0LjcyNDIwMjkyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Nzk0NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6MDQuODAwMDA0MzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg3NjkxMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjA0LjgwMDUzNzYwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyODc2MzczNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXFxuXFxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgbGlmZXRpbWUsIGNvbmN1cnJlbmN5LCBvciBwb2ludGVyIGluZGV4aW5nIGlzc3VlcyByZWxhdGVkIHRvIHhhcnJheSBvciBtZW1jZyByZXBhcmVudGluZyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGEwM2I2ZTNlNTQ3MDcuLjM0NjNkMmM1MmM2MjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0yNTMsNyArMjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZiBCSVRTX1BFUl9MT05HIFx1MDAzYyA2NFxuIFx0c2VxbG9ja190XHRcdHNvY2tldF9wcmVzc3VyZV9zZXFsb2NrO1xuICNlbmRpZlxuLVx0aW50IGttZW1jZ19pZDtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuQEAgLTE3NzUsMTUgKzE3NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4gXHRcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiB9XG4gXG4tLypcbi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJ3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xuLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHJldHVybiBtZW1jZyA/IG1lbWNnLVx1MDAzZWttZW1jZ19pZCA6IC0xO1xuLX1cbi1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG5AQCAtMTg1MSwxMSArMTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gLTE7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTA2NCw3ICsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiB7XG4gXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxuLVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbitcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxuK1x0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxuIFx0XHRcdFx0XHRcdCBcInRocC1kZWZlcnJlZF9zcGxpdFwiKTtcbiBcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCA4YTZkZDBhNDg5ZTEyLi5mMTk2OGYwMmJlM2IzIDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTcyLDEwICs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuLVx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IGlkeCBcdTAwM2U9IDApIHtcbi1cdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4rXHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4rXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XG4rXHRcdFx0eGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcbiBcdFx0cmV0dXJuIG1scnUgPyBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbbmlkXSA6IE5VTEw7XG4gXHR9XG5AQCAtOTEsNyArOTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIGFnYWluOlxuLVx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpO1xuK1x0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsICptZW1jZyk7XG4gXHRpZiAobGlrZWx5KGwpKSB7XG4gXHRcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbkBAIC0xMzIsNyArMTMzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxuK2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gXHUwMDI2bHJ1LVx1MDAzZW5vZGVbbmlkXS5scnU7XG4gfVxuQEAgLTMxMyw3ICszMTQsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdGxvbmcgY291bnQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcbitcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7XG4gXHRjb3VudCA9IGwgPyBSRUFEX09OQ0UobC1cdTAwM2Vucl9pdGVtcykgOiAwO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTAyLDExICs1MDMsMTAgQEAgc3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXG4gXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXG4ge1xuLVx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuIFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG4tXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgZHN0X2lkeCk7XG4rXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIFx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4gXHRcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXG4gXHRcdCAqL1xuLVx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdG1scnUgPSB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIFx0XHRpZiAoIW1scnUpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gXHRcdGZvcl9lYWNoX25vZGUoaSlcbiBcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG4gXG4tXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxuQEAgLTU2Niw5ICs1NjYsMTAgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIHtcbi1cdGludCBpZHggPSBtZW1jZy1cdTAwM2VrbWVtY2dfaWQ7XG4rXHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cmV0dXJuIGlkeCBcdTAwM2MgMCB8fCB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgaWR4KTtcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuQEAgLTYwMiw3ICs2MDMsNyBAQCBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGlmICghbWxydSlcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBwb3MtXHUwMDNla21lbWNnX2lkKTtcbitcdFx0eGFzX3NldChcdTAwMjZ4YXMsIG1lbV9jZ3JvdXBfaWQocG9zKSk7XG4gXHRcdGRvIHtcbiBcdFx0XHR4YXNfbG9ja19pcnFzYXZlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIFx0XHRcdGlmICgheGFzX2xvYWQoXHUwMDI2eGFzKSBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSkge1xuQEAgLTY3Niw3ICs2NzcsOSBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XG4rXHQgICAgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAoIXNocmlua2VyIHx8ICEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKSkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNzYzLDMzICszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbiBcdG9ial9jZ3JvdXBfZ2V0X21hbnkoZm9saW9fb2JqY2coZm9saW8pLCBuZXdfcmVmcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbi1cbi1cdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkLmlkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7XG4tXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnQpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcdTAwM2VcbkBAIC00MjE2LDcgKzQxODksNiBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdHNlcWxvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmVfc2VxbG9jayk7XG4gI2VuZGlmXG4gXHRtZW1jZzFfbWVtY2dfaW5pdChtZW1jZyk7XG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcbkBAIC00MjkwLDcgKzQyNjIsOCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IG5pZDtcbiBcbi1cdG1lbWNnX29ubGluZV9rbWVtKG1lbWNnKTtcbitcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IGxpa2VseSghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4rXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4gXHQvKlxuIFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcbkBAIC00Mjk4LDcgKzQyNzEsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4ndCBza2lwIGl0LlxuIFx0ICovXG4gXHRpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpXG4tXHRcdGdvdG8gb2ZmbGluZV9rbWVtO1xuK1x0XHRnb3RvIHJlcGFyZW50X2xydXM7XG4gXG4gXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIFx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbkBAIC00MzU1LDggKzQzMjgsOCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHR9XG4gXHR9XG4gXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuLW9mZmxpbmVfa21lbTpcbi1cdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG4rcmVwYXJlbnRfbHJ1czpcbitcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuQEAgLTQzNzIsMTEgKzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcbiBcbi1cdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG4rXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydXMobWVtY2csIHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSk7XG4gXHQvKlxuIFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXG4tXHQgKiB0aGUgbGlzdF9scnUgaW4gbWVtY2dfb2ZmbGluZV9rbWVtKCksIHdoaWNoIGVuc3VyZXMgdGhhdFxuLVx0ICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxuK1x0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxuK1x0ICogbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cbiBcdCAqL1xuIFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbiBcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggY2Q3YjBiNjIxYmRhOC4uYWZjNmM4ZDAzZDIzMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMjU1LDggKzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG4gXG4tXHRzaHJpbmtlciA9XG4tXHRcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXCJtbS16c3dhcFwiKTtcbitcdHNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbitcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCJtbS16c3dhcFwiKTtcbiBcdGlmICghc2hyaW5rZXIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6MDQuODAwNTM4NjE1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTExNjYxNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHdhcnJhbnRzIGEgS01TQU4gc2Vzc2lvbi5cblxuRmlyc3QsIEkgbmVlZCBhIGRldGFpbGVkIGJyZWFrZG93bi4gQWxyaWdodCwgaXQgc2VlbXMgd2UncmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCB0aGUgcmVtb3ZhbCBvZiBga21lbWNnX2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6XG5cbiogICBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBUaGUgbW9zdCBzaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3QgYW5kIHRoZSBhc3NvY2lhdGVkIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBpcyBhIHJlZCBmbGFnLCBhcyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgYW0gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGlzIGlzIGJlaW5nIGhhbmRsZWQuXG4qICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0venN3YXAuY2A6IEhlcmUsIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBpcyBiZWluZyBhZGRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjZXJ0YWluIHNocmlua2Vycy4gSW50ZXJlc3Rpbmc7IHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHdlIGFyZSBtaWdyYXRpbmcgYXdheSBmcm9tIHNsYWItYmFzZWQgYWxsb2NhdGlvbnMuXG4qICAgYG1tL2xpc3RfbHJ1LmNgOiBUaGlzIGZpbGUgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCBpcyByZXBsYWNlZCBieSBgbGlzdF9scnVfZnJvbV9tZW1jZ2AuIFRoZSBjb2RlIGlzIHVzaW5nIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBrbWVtY2dfaWRgIG1ldGhvZHMuIFRoZSBmbGFnIGNoZWNraW5nIGZvciBgbWVtY2dfYXdhcmVgIHdoZW4gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBsb29rcyBsaWtlIGl0IG1pZ2h0IGNoYW5nZSBzb21ldGhpbmcuXG4qICAgYG1tL21lbWNvbnRyb2wuY2A6IFdlJ3JlIHNlZWluZyB0aGUgcmVtb3ZhbCBvZiBgbWVtY2dfb25saW5lX2ttZW0oKWAsIGBtZW1jZ19vZmZsaW5lX2ttZW0oKWAsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGttZW1jZ19pZGAuIEluc3RlYWQgb2YgaW5pdGlhbGl6aW5nIGl0LCBpdCBsb29rcyBsaWtlIGl0IGlzIGVuYWJsaW5nIHRoZSBzdGF0aWMgYnJhbmNoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpcyBzYWZlLiBXaGF0J3MgdGhlIGltcGxlbWVudGF0aW9uPyBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHdvcms/IEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGZpbmQgaXRzIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQncyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZSBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJlbW92YWwgb2YgYGttZW1jZ19pZGAuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCBjcmVhdGUgYW55IG5ldyByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MjoxNS4zMTIyMDMwMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzY5Nzg3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9pZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgxNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MTc6c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzMDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzA2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzMDc6c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwOC17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0xNzc9REVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xOTEtXFx0XFx0X19lbnRyeS1cXHUwMDNlb3JkZXJcXHRcXHQ9IG9yZGVyO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE5MjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZFxcdD0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTkzLVxcdCksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yMTk9REVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjMxLVxcdFxcdF9fZW50cnktXFx1MDAzZW5yX3JlY2xhaW1lZFxcdD0gbnJfcmVjbGFpbWVkO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIzMjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZFxcdD0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjMzLVxcdCksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yNTg9VFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yODktXFx0XFx0X19lbnRyeS1cXHUwMDNlbmlkID0gc2MtXFx1MDAzZW5pZDtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyOTA6XFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yOTEtXFx0KSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTMwOD1UUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzMtXFx0XFx0X19lbnRyeS1cXHUwMDNlcmV0dmFsID0gc2hyaW5rZXJfcmV0dmFsO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjMzNDpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCA9IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTMzNS1cXHQpLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjg1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE0Mj1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNjUtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL3BhZGRyLmM6MTY2OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTY3LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTE3PWludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzUtXFx0XFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM2OlxcdFxcdFxcdCppZCA9IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNy1cXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuLS1cXG5tbS9saXN0X2xydS5jPTc1PWxpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzgtXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cXG5tbS9saXN0X2xydS5jOjc5OlxcdFxcdFxcdHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTgwLVxcbi0tXFxubW0vbGlzdF9scnUuYz01MjU9dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbGlzdF9scnUuYy01MzgtXFx0XFx0ICovXFxubW0vbGlzdF9scnUuYzo1Mzk6XFx0XFx0bWxydSA9IHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU0MC1cXHRcXHRpZiAoIW1scnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTU1My1cXG5tbS9saXN0X2xydS5jOjU1NDpcXHRcXHR4YV9lcmFzZV9pcnEoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU1NS1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NTY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbGlzdF9scnUuYy01NzEtXFxubW0vbGlzdF9scnUuYzo1NzI6XFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU3My19XFxuLS1cXG5tbS9saXN0X2xydS5jPTU3NT1zdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbGlzdF9scnUuYy02MDUtXFx0XFx0fVxcbm1tL2xpc3RfbHJ1LmM6NjA2OlxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcXG5tbS9saXN0X2xydS5jLTYwNy1cXHRcXHRkbyB7XFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTQ3PXN0YXRpYyBpbnQgc2hyaW5rZXJfZGVidWdmc19jb3VudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNzAtXFx0XFx0aWYgKHRvdGFsKSB7XFxubW0vc2hyaW5rZXJfZGVidWcuYzo3MTpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlbGx1XFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbm1tL3Nocmlua2VyX2RlYnVnLmMtNzItXFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpXFxuLS1cXG5tbS92bXNjYW4uYz01NzEwPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NzI3LSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjU3Mjg6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwibWVtY2cgJWxsdSAlc1xcXFxuXFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xcbm1tL3Ztc2Nhbi5jLTU3MjktXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxND1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODI5LVxcbm1tL3Ztc2Nhbi5jOjU4MzA6XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbm1tL3Ztc2Nhbi5jLTU4MzEtXFx0XFx0Z290byBkb25lO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MjoxNy4zODkxODY5NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MjU3MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXB0aHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG1lbV9jZ3JvdXBfaWRgIGFjdHVhbGx5ICppcyouIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgYXMgYWx3YXlzOiB0aGUgb2ZmaWNpYWwgZGVmaW5pdGlvbi4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2YgdGhpcyBiZWFzdC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgY29tbWVudHMgd2lsbCBlbnN1cmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBjb250cm9sIGxhbmRzY2FwZSBvZiB0aGUga2VybmVsLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkLCBiZWNhdXNlLCBsZXQncyBmYWNlIGl0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjb21wbGV4LCBhbmQgYWNjdXJhdGUgZG9jdW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZlbiB0aGUgbW9zdCBiYXNpYyB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjI2LjM3MTc2MDczOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDgxMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwKSA6IDA7XFxuIDgyMDpcXHR9XFxuIDgyMTpcXHRcXG4gODIyOlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZCk7XFxuIDgyMzpcXHRcXG4gODI0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9zZXEoc3RydWN0IHNlcV9maWxlICptKVxcbiA4MjU6XFx0e1xcbiA4MjY6XFx0XFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhtKSk7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjI2LjM3MTg5ODY0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA3MjE2MzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1lbWNnLVx1MDAzZWttZW1jZ19pZGAgUmVtb3ZhbCBhbmQgYGxpc3RfbHJ1YCBBZGFwdGF0aW9uKipcblxuT2theSwgc28gdGhlIGBtZW1jZy1cdTAwM2VrbWVtY2dfaWRgIGhhcyBiZWVuIHJld29ya2VkLiBQcmV2aW91c2x5LCBpdCB3YXMgYW4gaW5kZXggYXNzaWduZWQgZHVyaW5nIGttZW0gb25saW5pbmcsIGVzc2VudGlhbGx5IHRoZSBvbGQgYG1lbWNnLVx1MDAzZWlkLmlkYC4gTm93LCBgbGlzdF9scnVgIGlzIHVzaW5nIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgd2hpY2ggcmVzb2x2ZXMgdG8gYGNncm91cF9pZChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHN0cmVhbWxpbmVzIHRoaW5ncy4gUGx1cywgdGhlIGBTSFJJTktFUl9OT05TTEFCYCBmbGFnIGlzIGJlaW5nIGludHJvZHVjZWQuIFRoaXMgaXMgc21hcnQsIGl0IGFsbG93cyBub24tc2xhYiBzaHJpbmtlcnMgbGlrZSBkZWZlcnJlZF9zcGxpdCAoVEhQKSBhbmQgenN3YXAgdG8gbGV2ZXJhZ2UgdGhlIG1lbWNnLWF3YXJlIGBsaXN0X2xydWAgZXZlbiB3aGVuIGttZW0gaXNuJ3QgYWN0aXZlIG9yIGluIHRoZSBnZW5lcmFsIGNhc2UuXG5cbk5vdywgbXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gbWFraW5nIHRoaXMgdHlwZSBvZiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBidWdzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgaW5mbyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmludGVuZGVkIG1lbW9yeSByZWFkcy4gTGV0J3MgYXBwbHkgdGhlIHVzdWFsIGNyaXRlcmlhLlxuXG4xLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBFeHBvc3VyZToqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlICh0aHJvdWdoIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBOZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyksIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IGNhdXNlIHByb2JsZW1zPyBOb3QgaW4gdGhpcyBzcGVjaWZpYyBjaGFuZ2UsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIFRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCAoYG1lbWNnYCwgYHBvc2AsIGBscnVgLCBgbmlkYCkgYXJlIHN0YW5kYXJkIHBvaW50ZXJzIG9yIGludGVnZXJzIHRoYXQgYXJlIHBhc3NlZCBpbi4gVGhhdCdzIGdvb2QuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBBbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBUaGUgZGVsZXRpb24gb2YgYGttZW1jZ19pZGAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGEgZmllbGQuIFRoZW4sIGBsaXN0X2xydV9mcm9tX21lbWNnYCBoYXMgYSBzYW5pdHkgY2hlY2s6IGBpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKWAuIFNlZW1zIHNhZmUuXG40LiAgKipCdWZmZXIgQm91bmRzIFx1MDAyNiBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogIEFyZSB3ZSBjaGFuZ2luZyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vIGNoYW5nZXMgdG8gYnVmZmVyIGFjY2Vzcy4gVGhhdCdzIGEgcmVsaWVmLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG8gYSBicm9hZGVyIGNoZWNrLiBJIHNob3VsZCBsb29rIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYmFzZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFueSBjb2RlIGxpbmdlcmluZyBvdXQgdGhlcmUgdGhhdCBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyBga21lbWNnX2lkYC4gSXQncyBhIGNsYXNzaWMgZ290Y2hhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjQ1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NDIuNDQ0MDY0Njk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzAzMjc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtY2dfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjQ0LjA0ODc3NDQ2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODM5MTg5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgQ29udHJvbGxlciBJRHM6IEEgUXVpY2sgQXVkaXQqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSB3ZSd2ZSBzdWNjZXNzZnVsbHkgcHVyZ2VkIGFueSBpbnN0YW5jZXMgb2YgYGttZW1jZ19pZGAgaW4gdGhlIGNvZGUsIHdoaWNoIGlzIGdvb2QgbmV3cy4gSG93ZXZlciwgd2UgYWxsIGtub3cgaG93IHRoZXNlIHRoaW5ncyBjYW4gc29tZXRpbWVzIGhpZGUgaW4gcGxhaW4gc2lnaHQgb3IgaGF2ZSBuYW1pbmcgaW5jb25zaXN0ZW5jaWVzLiBCZWZvcmUgd2UgZGVjbGFyZSB2aWN0b3J5LCBJIHRoaW5rIGl0J3MgcHJ1ZGVudCB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgYG1lbWNnX2ttZW1faWRgIGFzIHdlbGwuIERvdWJsZS1jaGVja2luZyByZWxhdGVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWxseSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9ucyBpcyBhbHdheXMgdGltZSB3ZWxsLXNwZW50IGluIHRoZXNlIHNpdHVhdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcyBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgYnkgb3Zlcmxvb2tpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NDcuODg3OTY4MjUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0MTMwNzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19rbWVtX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0Mjo0OS40OTIxMTIzMThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3OTczNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBRdWVyeTogU0hSSU5LRVJfTk9OU0xBQioqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBcIlNIUklOS0VSX05PTlNMQUJcIi4gVGhhdCBzcGVjaWZpYyB0ZXJtIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBhIG1hY3JvLCBvciBhIHZhcmlhYmxlIG5hbWUsIGFsbW9zdCBjZXJ0YWlubHkgd2l0aGluIGEgY29kZWJhc2UuIFRoZSB1c2Ugb2YgYWxsIGNhcHMgcmVpbmZvcmNlcyB0aGF0IGl04oCZcyBwcm9iYWJseSBhIGNvbnN0YW50LiBUaGUgXCJTSFJJTktFUlwiIHBhcnQgaGludHMgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGdhcmJhZ2UgY29sbGVjdGlvbiwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmVkdWNpbmcgdGhlIGZvb3RwcmludCBvZiBkYXRhIHN0cnVjdHVyZXMuIFRoZSBcIk5PTlNMQUJcIiBwYXJ0IGlzIGludGVyZXN0aW5nOyBpdCBjb250cmFzdHMgd2l0aCBzb21ldGhpbmcgY2FsbGVkIFwiU0xBQlwiLCB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCBMaW51eCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZXJlZm9yZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIGhvdyBhIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBraW5kcyBvZiBvYmplY3RzLlxuXG5UaGUgcHJvbXB0IGV4cGxpY2l0bHkgdGVsbHMgbWUgdG8gY2hlY2sgdGhlICpkZWZpbml0aW9uKiBhbmQgKnVzYWdlKiBvZiB0aGlzIHRlcm0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIHRoaXMgYFNIUklOS0VSX05PTlNMQUJgIGlzIGRlY2xhcmVkLCBhbmQgdGhlbiB0cmFjZSBhbGwgaW5zdGFuY2VzIHdoZXJlIGl0J3MgdXNlZC4gVGhpcyBzdWdnZXN0cyB0aGUgcXVlcnkgbWlnaHQgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgaXRzIGluZmx1ZW5jZSBvbiBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBpbnN0cnVjdGlvbiB0byBzdW1tYXJpemUgdGhlIHByb2Nlc3MsIHN1Z2dlc3RzIHRoaXMgaW52b2x2ZXMgZXhwbGFpbmluZyB0aGUgcHJvY2VzcyBmcm9tIGJlZ2lubmluZyB0byBlbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NTEuODcxODUwMzIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MjMyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNIUklOS0VSX05PTlNMQUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcXHRjb21wcl9wb29sLnNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTk9OU0xBQiwgXFxcImJ0cmZzLWNvbXByLXBhZ2VzXFxcIik7XFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM3LVxcdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmM9MjMzNT14ZnNfaW5vZGVnY19yZWdpc3Rlcl9zaHJpbmtlcihcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XFxuZnMveGZzL3hmc19pY2FjaGUuYzoyMzM4OlxcdG1wLVxcdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzOS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwieGZzLWlub2RlZ2M6JXNcXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMxLSAqL1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXFx0QklUKDQpXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMy1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9OT05TTEFCLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgxLVxcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9saXN0X2xydS5jOjY4MjpcXHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxcbm1tL2xpc3RfbHJ1LmMtNjgzLVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTIyNj1zdGF0aWMgaW50IHNocmlua2VyX21lbWNnX2FsbG9jKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTIzMy1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG5tbS9zaHJpbmtlci5jOjIzNDpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcXG5tbS9zaHJpbmtlci5jLTIzNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01NTUtXFx0XFx0XFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2hyaW5rZXIuYzo1NTY6XFx0XFx0XFx0ICAgICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcXG5tbS9zaHJpbmtlci5jLTU1Ny1cXHRcXHRcXHRcXHRjbGVhcl9iaXQob2Zmc2V0LCB1bml0LVxcdTAwM2VtYXApO1xcbi0tXFxubW0venN3YXAuYz0xMjU0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNTgtXFx0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbm1tL3pzd2FwLmM6MTI1OTpcXHRcXHRcXHRcXHQgIFNIUklOS0VSX05PTlNMQUIsIFxcXCJtbS16c3dhcFxcXCIpO1xcbm1tL3pzd2FwLmMtMTI2MC1cXHRpZiAoIXNocmlua2VyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0Mjo1My40NzEwODgzOTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTgwMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWZhY3RvcmluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSByZWZhY3RvcmluZyBvZiBgbGlzdF9scnVgIGFuZCBtZW1jZyBzaHJpbmtlciBpbmRleGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgb24gZW5zdXJpbmcgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCBkb24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG1lbW9yeSBzYWZldHkuXG5cblRoZSBrZXkgY2hhbmdlcyBpbnZvbHZlOlxuXG4qICAgUmVwbGFjaW5nIGBrbWVtY2dfaWRgIHdpdGggYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gVGhpcyBkaXJlY3QgdXNlIG9mIHRoZSBjZ3JvdXAgSUQgc2VlbXMgY2xlYW5lciBhbmQgbW9yZSBzdHJhaWdodGZvcndhcmQuXG4qICAgVGFnZ2luZyB0aGUgVEhQIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaGVscCBLTVNBTiBhbmQgS0FTQU4gZmluZCBwcm9ibGVtcy5cbiogICBVcGRhdGluZyBhbGwgYGxpc3RfbHJ1YCBpbnRlcmFjdGlvbnMg4oCTIGxvb2t1cHMsIHJlcGFyZW50aW5nLCBhbmQgYWxsb2NhdGlvbnMg4oCTIHRvIGFsaWduIHdpdGggYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlPyBJJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoaXMuXG5cbkkndmUgY29uZmlybWVkOlxuXG4qICAgV2UncmUgbm90IGNvcHlpbmcgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRob3V0IGVuc3VyaW5nIHRoZXkncmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucy5cbiogICBJbiBmYWN0LCB3ZSd2ZSBnb25lIHRoZSBvdGhlciB3YXkg4oCTIHRoZSBga21lbWNnX2lkYCBmaWVsZCBoYXMgYmVlbiAqcmVtb3ZlZCogZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cbkdpdmVuIHRoaXMsIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMgd2l0aGluIHRoZSB4YXJyYXkgbG9va3VwIG1lY2hhbmlzbS4gRm9ydHVuYXRlbHksIHdlIGhhdmUgS0FTQU4sIExPQ0tERVAsIGFuZCBvdXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBpbiBwbGFjZSB0byBjYXRjaCB0aG9zZSBpc3N1ZXMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyBzZXQgb2YgY2hhbmdlcy4gYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBkb25lLCBpdCdzIHRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NCwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NTcuNjc2ODk0MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWVtY2cgTFJVIGxpc3QgaW5kZXhpbmcgYnkgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBga21lbWNnX2lkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaW4gZmF2b3Igb2YgYG1lbV9jZ3JvdXBfaWQoKWAsIGFuZCBtYXJrcyBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2VycyB3aXRoIGBTSFJJTktFUl9OT05TTEFCYC5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxcblxcbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 08:26:11 +0000 UTC FinishedAt: 2026-09-10 08:42:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "ZSWAP" ], "series_id": "e96efa22-223c-45ed-9dc5-4cfe7ccebc58" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memcg_reparent_list_lrus", "__memcg_list_lru_alloc", "memcg_list_lru_alloc", "folio_memcg_list_lru_alloc", "list_lru_count_one", "mem_cgroup_css_online", "mem_cgroup_css_offline" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6NDE6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZiBCSVRTX1BFUl9MT05HIFx1MDAzYyA2NFxuIFx0c2VxbG9ja190XHRcdHNvY2tldF9wcmVzc3VyZV9zZXFsb2NrO1xuICNlbmRpZlxuLVx0aW50IGttZW1jZ19pZDtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuIFx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLS8qXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZyYjMzk7cyBrbWVtX2lkLCB1c2VkIGZvciBnZXR0aW5nXG4tICogY29ycmVzcG9uZGluZyBMUlUgbGlzdHMuXG4tICovXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIG1lbWNnID8gbWVtY2ctXHUwMDNla21lbWNnX2lkIDogLTE7XG4tfVxuLVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gLTE7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTA2NCw3ICYjNDM7MTA2NCw4IEBAIGludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4ge1xuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbi1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4mIzQzO1x0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4mIzQzO1x0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxuIFx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuIFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jXG5AQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbiYjNDM7bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBpZHggXHUwMDNlPSAwKSB7XG4tXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBpZHgpO1xuJiM0MztcdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbiYjNDM7XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XG4mIzQzO1x0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuIFx0fVxuQEAgLTkxLDcgJiM0Mzs5Miw3IEBAIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gYWdhaW46XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XG4mIzQzO1x0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsICptZW1jZyk7XG4gXHRpZiAobGlrZWx5KGwpKSB7XG4gXHRcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbiYjNDM7bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBcdTAwMjZscnUtXHUwMDNlbm9kZVtuaWRdLmxydTtcbiB9XG5AQCAtMzEzLDcgJiM0MzszMTQsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdGxvbmcgY291bnQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcbiYjNDM7XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgbWVtY2cpO1xuIFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpIDogMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcbiBcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZylcbiB7XG4tXHRpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy1cdTAwM2VrbWVtY2dfaWQ7XG4gXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnNyYy1cdTAwM2Vsb2NrKTtcbi1cdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTtcbiYjNDM7XHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuQEAgLTUzNiw3ICYjNDM7NTM2LDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIFx0XHQgKi9cbi1cdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuJiM0MztcdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXHRcdGlmICghbWxydSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01NTEsNyAmIzQzOzU1MSw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gXHRcdGZvcl9lYWNoX25vZGUoaSlcbiBcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG4gXG4tXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4mIzQzO1x0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWRcbkBAIC01NjYsOSAmIzQzOzU2NiwxMCBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4ge1xuLVx0aW50IGlkeCA9IG1lbWNnLVx1MDAzZWttZW1jZ19pZDtcbiYjNDM7XHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiBpZHggXHUwMDNjIDAgfHwgeGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4mIzQzO1x0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5AQCAtNjAyLDcgJiM0Mzs2MDMsNyBAQCBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGlmICghbWxydSlcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBwb3MtXHUwMDNla21lbWNnX2lkKTtcbiYjNDM7XHRcdHhhc19zZXQoXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xuIFx0XHRkbyB7XG4gXHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiBcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbkBAIC02NzYsNyAmIzQzOzY3Nyw5IEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XG4mIzQzO1x0ICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcbiBcdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDRjYjJkYjhjMDkyM2EuLmFlMmQ2ZDljZmE3NDIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM3NjMsMzMgJiM0MzszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbiBcdG9ial9jZ3JvdXBfZ2V0X21hbnkoZm9saW9fb2JqY2coZm9saW8pLCBuZXdfcmVmcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbi1cbi1cdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkLmlkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7XG4tXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnQpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcdTAwM2VcbkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRzZXFsb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xuICNlbmRpZlxuIFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbkBAIC00MjkwLDcgJiM0Mzs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdGludCBuaWQ7XG4gXG4tXHRtZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgbGlrZWx5KCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbiYjNDM7XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4gXHQvKlxuIFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcbkBAIC00Mjk4LDcgJiM0Mzs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIGhlcmUsIHdoZW4gbWVtX2Nncm91cF9pdGVyKCkgY2FuJiMzOTt0IHNraXAgaXQuXG4gXHQgKi9cbiBcdGlmIChhbGxvY19zaHJpbmtlcl9pbmZvKG1lbWNnKSlcbi1cdFx0Z290byBvZmZsaW5lX2ttZW07XG4mIzQzO1x0XHRnb3RvIHJlcGFyZW50X2xydXM7XG4gXG4gXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIFx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0fVxuIFx0fVxuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbi1vZmZsaW5lX2ttZW06XG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuJiM0MztyZXBhcmVudF9scnVzOlxuJiM0MztcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuQEAgLTQzNzIsMTEgJiM0Mzs0MzQ1LDExIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChtZW1jZyk7XG4gXG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuJiM0MztcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdC8qXG4gXHQgKiBUaGUgcmVwYXJlbnRpbmcgb2Ygb2JqY2cgbXVzdCBiZSBhZnRlciB0aGUgcmVwYXJlbnRpbmcgb2Zcbi1cdCAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0XG4tXHQgKiB0aGV5IHdpbGwgbm90IG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4mIzQzO1x0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxuJiM0MztcdCAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4gXHQgKi9cbiBcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XG4gXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTI1NSw4ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcbiBcbi1cdHNocmlua2VyID1cbi1cdFx0c2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFLCBcJiMzNDttbS16c3dhcFwmIzM0Oyk7XG4mIzQzO1x0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxuJiM0MztcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xuIFx0aWYgKCFzaHJpbmtlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1jZ19yZXBhcmVudF9saXN0X2xydXMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDttZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDtmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvYyYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV9jb3VudF9vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jc3Nfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2lmIEJJVFNfUEVSX0xPTkcgJmx0OyA2NAogCXNlcWxvY2tfdAkJc29ja2V0X3ByZXNzdXJlX3NlcWxvY2s7CiAjZW5kaWYKLQlpbnQga21lbWNnX2lkOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDsKQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogCQlfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLS8qCi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJiMzOTtzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmcKLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlyZXR1cm4gbWVtY2cgPyBtZW1jZy0mZ3Q7a21lbWNnX2lkIDogLTE7Ci19Ci0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZDFjZTA2MTYwMWJjZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMDY0LDcgJiM0MzsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogewogCWRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8Ci0JCQkJCQkgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsCiYjNDM7CQkJCQkJIFNIUklOS0VSX01FTUNHX0FXQVJFIHwKJiM0MzsJCQkJCQkgU0hSSU5LRVJfTk9OU0xBQiwKIAkJCQkJCSAmIzM0O3RocC1kZWZlcnJlZF9zcGxpdCYjMzQ7KTsKIAlpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSAwKSB7Ci0JCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9CiYjNDM7CQkJeGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAogCQlyZXR1cm4gbWxydSA/ICZhbXA7bWxydS0mZ3Q7bm9kZVtuaWRdIDogTlVMTDsKIAl9CkBAIC05MSw3ICYjNDM7OTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCiAJcmN1X3JlYWRfbG9jaygpOwogYWdhaW46Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpOwomIzQzOwlsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTsKIAlpZiAobGlrZWx5KGwpKSB7CiAJCWxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpOwogCQlpZiAobGlrZWx5KFJFQURfT05DRShsLSZndDtucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7CkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gJmFtcDtscnUtJmd0O25vZGVbbmlkXS5scnU7CiB9CkBAIC0zMTMsNyAmIzQzOzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCWxvbmcgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7CiYjNDM7CWwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7CiAJY291bnQgPSBsID8gUkVBRF9PTkNFKGwtJmd0O25yX2l0ZW1zKSA6IDA7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCQkJCXN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYywKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZykKIHsKLQlpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy0mZ3Q7a21lbWNnX2lkOwogCXN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcmMtJmd0O2xvY2spOwotCWRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTsKJiM0MzsJZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZhbXA7ZHN0LSZndDtsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlsaXN0X3NwbGljZV9pbml0KCZhbXA7c3JjLSZndDtsaXN0LCAmYW1wO2RzdC0mZ3Q7bGlzdCk7CkBAIC01MzYsNyAmIzQzOzUzNiw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiAJCSAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXMKIAkJICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby4KIAkJICovCi0JCW1scnUgPSB4YV9sb2FkKCZhbXA7bHJ1LSZndDt4YSwgbWVtY2ctJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQltbHJ1ID0geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAkJaWYgKCFtbHJ1KQogCQkJY29udGludWU7CiAKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW4KIAkJZm9yX2VhY2hfbm9kZShpKQogCQkJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgJmFtcDttbHJ1LSZndDtub2RlW2ldLCBwYXJlbnQpOwogCi0JCXhhX2VyYXNlX2lycSgmYW1wO2xydS0mZ3Q7eGEsIG1lbWNnLSZndDtrbWVtY2dfaWQpOwomIzQzOwkJeGFfZXJhc2VfaXJxKCZhbXA7bHJ1LSZndDt4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpOwogCiAJCS8qCiAJCSAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWQKQEAgLTU2Niw5ICYjNDM7NTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KQogewotCWludCBpZHggPSBtZW1jZy0mZ3Q7a21lbWNnX2lkOwomIzQzOwlpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBpZHggJmx0OyAwIHx8IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIH0KIAogc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKQEAgLTYwMiw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWlmICghbWxydSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl4YXNfc2V0KCZhbXA7eGFzLCBwb3MtJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQl4YXNfc2V0KCZhbXA7eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpOwogCQlkbyB7CiAJCQl4YXNfbG9ja19pcnFzYXZlKCZhbXA7eGFzLCBmbGFncyk7CiAJCQlpZiAoIXhhc19sb2FkKCZhbXA7eGFzKSAmYW1wOyZhbXA7ICFjc3NfaXNfZHlpbmcoJmFtcDtwb3MtJmd0O2NzcykpIHsKQEAgLTY3Niw3ICYjNDM7Njc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwKJiM0MzsJICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9OT05TTEFCKSkpKQogCQltZW1jZ19hd2FyZSA9IGZhbHNlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzYzLDMzICYjNDM7Mzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsCiAJb2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQotCQlyZXR1cm47Ci0KLQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7Ci0KLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwotfQotCi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0KLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkKLQkJcmV0dXJuOwotCi0JcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwotCW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTsKLX0KLQogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvd3JpdGViYWNrLmgmZ3Q7CkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJc2VxbG9ja19pbml0KCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTsKICNlbmRpZgogCW1lbWNnMV9tZW1jZ19pbml0KG1lbWNnKTsKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQpAQCAtNDI5MCw3ICYjNDM7NDI2Miw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCWludCBuaWQ7CiAKLQltZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCiAJLyoKIAkgKiBBIG1lbWNnIG11c3QgYmUgdmlzaWJsZSBmb3IgZXhwYW5kX3Nocmlua2VyX2luZm8oKQpAQCAtNDI5OCw3ICYjNDM7NDI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4mIzM5O3Qgc2tpcCBpdC4KIAkgKi8KIAlpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpCi0JCWdvdG8gb2ZmbGluZV9rbWVtOwomIzQzOwkJZ290byByZXBhcmVudF9scnVzOwogCiAJZm9yX2VhY2hfbm9kZShuaWQpIHsKIAkJb2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7CkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJfQogCX0KIAlmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpOwotb2ZmbGluZV9rbWVtOgotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7cmVwYXJlbnRfbHJ1czoKJiM0MzsJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpOwogCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDM3MiwxMSAmIzQzOzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTsKIAotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTsKIAkvKgogCSAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZgotCSAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0Ci0JICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LgomIzQzOwkgKiB0aGUgbGlzdF9scnUgYWJvdmUsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGV5IHdpbGwgbm90CiYjNDM7CSAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuCiAJICovCiAJbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTsKIAlyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBjZDdiMGI2MjFiZGE4Li5hZmM2YzhkMDNkMjMxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEyNTUsOCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogewogCXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7CiAKLQlzaHJpbmtlciA9Ci0JCXNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgJiMzNDttbS16c3dhcCYjMzQ7KTsKJiM0MzsJc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfAomIzQzOwkJCQkgIFNIUklOS0VSX05PTlNMQUIsICYjMzQ7bW0tenN3YXAmIzM0Oyk7CiAJaWYgKCFzaHJpbmtlcikKIAkJcmV0dXJuIE5VTEw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDb250cm9sbGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlciwgc2luY2UgdGhhdCYjMzk7cyBteSBhcmVhIG9mIGV4cGVydGlzZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc3RyZWFtbGluaW5nIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykga21lbSB0cmFja2luZyBhbmQgbGlzdF9scnUgbWFuYWdlbWVudC4KClRoZSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNvcmUgY2hhbmdlczogYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBpcyBzaGVkZGluZyB0aGUgYGttZW1jZ19pZGAgZmllbGQgYW5kIHRoZSBhc3NvY2lhdGVkIGBtZW1jZ19rbWVtX2lkKClgIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBtZWFucyB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgaW50ZWdlci1iYXNlZCBJRCBhbmQgYWRvcHRpbmcgYSBkaXJlY3QgcG9pbnRlciBhcHByb2FjaCB0byByZWZlcmVuY2UgdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3QgaXRzZWxmLiBHb29kLCBwb3RlbnRpYWxseSBsZXNzIG92ZXJoZWFkIGFuZCBhIG1vcmUgZGlyZWN0IGRhdGEgYWNjZXNzLgoKVGhlIGBtbS9odWdlX21lbW9yeS5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYGRlZmVycmVkX3NwbGl0X3Nocmlua2VyYCBpbiBgdGhwX3Nocmlua2VyX2luaXQoKWAgaXMgaW50ZXJlc3RpbmcuICBUaGlzIHBvaW50cyB0b3dhcmRzIGltcHJvdmVkIGludGVyYWN0aW9uIHdpdGggdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc2hyaW5rZXIgYW5kIGxpa2VseSBvcHRpbWl6YXRpb24gYXJvdW5kIG5vbi1zbGFiIG1lbW9yeSByZWNsYWltLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2hyaW5rZXIgZmxhZ3MgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGhlcmUuCgpUaGUgY2hhbmdlcyBpbiBgbW0vbGlzdF9scnUuY2AgYXJlIG1vcmUgc3Vic3RhbnRpYWwuIFdlJiMzOTtyZSBjbGVhcmx5IHNoaWZ0aW5nIGZyb20gYW4gaW5kZXhlZCBhcHByb2FjaCAoYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCkgdG8gYSBkaXJlY3QgYG1lbV9jZ3JvdXBgIHBvaW50ZXIgKGBsaXN0X2xydV9mcm9tX21lbWNnYCkuICBSZXBsYWNpbmcgdXNlcyBvZiBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgc29saWRpZmllcyB0aGlzIHBvaW50ZXItYmFzZWQgYXBwcm9hY2guIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhlIG1lbWNnIHJlcGFyZW50aW5nIGxvZ2ljIGZvciBsaXN0X2xydXMuIFRoaXMgaXMga2V5LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmVzdGVkIGNncm91cHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBsb2dpYyBoYW5kbGVzIHJlYmFsYW5jaW5nIG9mIHJlc291cmNlcy4gVGhlIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YCB3aXRoIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBzZWVtcyBpbXBvcnRhbnQuIElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIGl0IGlzIHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtY2ctYXdhcmUgbGlzdF9scnVzLgoKVGhlIHJlbW92YWwgb2YgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRoZSBpbmxpbmluZyBvZiBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzYCB3aXRoaW4gYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBzdWdnZXN0cyB0aGF0IHRoZXNlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHNpbXBsaWZpZWQuICBUaGlzIGlubGluaW5nIGFuZCBkaXJlY3QgcmVwYXJlbnRpbmcgd2lsbCBiZSBnb29kIGZvciBwZXJmb3JtYW5jZS4gVGhlIGZhY3QgaXQmIzM5O3MgaGFuZGxlZCBkaXJlY3RseSBpbiBvbmxpbmUgYW5kIG9mZmxpbmUgaW1wbGllcyBhbiBpbnRlbnRpb24gdG8gb3B0aW1pemUgdGhlIGNvbW1vbiBwYXRoIGFuZCBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLgoKRmluYWxseSwgdGhlIGBtbS96c3dhcC5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYHpzd2FwX2FsbG9jX3Nocmlua2VyKClgIG1lYW5zIHpzd2FwIGlzIGFsc28gYmVpbmcgY29uZmlndXJlZCB0byBpbnRlcmFjdCBkaWZmZXJlbnRseSB3aXRoIHRoZSBzaHJpbmtlci4gIFRoaXMgZnVydGhlciBwb2ludHMgdG8gaW1wcm92ZW1lbnRzIGluIGhvdyB3ZSBoYW5kbGUgbm9uLXNsYWIgbWVtb3J5IHByZXNzdXJlIGFuZCByZWNsYWltIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBmcmFtZXdvcmsuCgpJJiMzOTtsbCBuZWVkIHRvIHVzZSBncmVwcGVyIGFuZCByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgcmVjbGFpbSwgTlVNQSBpbnRlcmFjdGlvbnMsIGFuZCBvdmVyYWxsIGNncm91cCBwZXJmb3JtYW5jZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVzZSBjaGFuZ2VzIGJyZWFrIGFueSBhc3N1bXB0aW9ucyBJJiMzOTt2ZSByZWxpZWQgb24gaW4gbXkgb3duIHdvcmsgb24gdGhlIHN1YmplY3QsIG9yIHdoZXRoZXIgdGhlIG5ldyBhcHByb2FjaCBpbnRyb2R1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NIUklOS0VSX05PTlNMQUImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxuLS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtMTEzNS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcdGNvbXByX3Bvb2wuc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLCBcJiMzNDtidHJmcy1jb21wci1wYWdlc1wmIzM0Oyk7XG5mcy9idHJmcy9jb21wcmVzc2lvbi5jLTExMzctXHRpZiAoIWNvbXByX3Bvb2wuc2hyaW5rZXIpXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYz0yMzM1PXhmc19pbm9kZWdjX3JlZ2lzdGVyX3Nocmlua2VyKFxuLS1cbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XG5mcy94ZnMveGZzX2ljYWNoZS5jOjIzMzg6XHRtcC1cdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxuZnMveGZzL3hmc19pY2FjaGUuYy0yMzM5LVx0XHRcdFx0XHRcdFwmIzM0O3hmcy1pbm9kZWdjOiVzXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaD04Mj1zdHJ1Y3Qgc2hyaW5rZXIge1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMzEtICovXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTMyOiNkZWZpbmUgU0hSSU5LRVJfTk9OU0xBQlx0QklUKDQpXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMzLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4Olx0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY1PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02ODEtXHQgICAgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxubW0vbGlzdF9scnUuYzo2ODI6XHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcbm1tL2xpc3RfbHJ1LmMtNjgzLVx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuLS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzMy1cdFx0cmV0dXJuIC1FTk9TWVM7XG5tbS9zaHJpbmtlci5jOjIzNDpcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpXG5tbS9zaHJpbmtlci5jLTIzNS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxubW0vc2hyaW5rZXIuYz00Nzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01NTUtXHRcdFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFx1MDAyNlx1MDAyNlxubW0vc2hyaW5rZXIuYzo1NTY6XHRcdFx0ICAgICEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKSB7XG5tbS9zaHJpbmtlci5jLTU1Ny1cdFx0XHRcdGNsZWFyX2JpdChvZmZzZXQsIHVuaXQtXHUwMDNlbWFwKTtcbi0tXG5tbS96c3dhcC5jPTEyNTQ9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyNTgtXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG5tbS96c3dhcC5jOjEyNTk6XHRcdFx0XHQgIFNIUklOS0VSX05PTlNMQUIsIFwmIzM0O21tLXpzd2FwXCYjMzQ7KTtcbm1tL3pzd2FwLmMtMTI2MC1cdGlmICghc2hyaW5rZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNvZGUgY2hhbmdlcywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgcmVjZW50IGNvbW1pdHMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgbW0vbGlzdF9scnUuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYXJlYXM7IGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byByaXBwbGUgdGhyb3VnaCB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGVzZSBhbHRlcmF0aW9ucywgbm90IGp1c3QgdGhlICp3aGF0Ki4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBpbXBhY3QgdG8gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueSBsb2NrIG9yZGVyaW5nIGlzc3VlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgY2hhbmdlcyB0byBMUlUgYmVoYXZpb3IgdGhhdCBtaWdodCBuZWdhdGl2ZWx5IGltcGFjdCBjYWNoaW5nIG9yIHN3YXBwaW5nLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSBpZiBhbnkgbmV3IGZlYXR1cmVzIGFyZSBleHBvc2VkLCBvciBpZiBhbnkgZXhpc3RpbmcgY2FwYWJpbGl0aWVzIGFyZSBkZXByZWNhdGVkLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIG9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0e1xuICA2MTpcdFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxuICA2MjpcdFx0XHRyZXR1cm47XG4gIDYzOlx0XG4gIDY0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG4gIDY1Olx0XHRsaXN0X2RlbChcdTAwMjZscnUtXHUwMDNlbGlzdCk7XG4gIDY2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gIDcwOlx0e1xuICA3MTpcdFx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbiAgNzU6XHRsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc2Olx0e1xuICA3NzpcdFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuICA3ODpcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPVxuICA3OTpcdFx0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gIDgwOlx0XG4gIDgxOlx0XHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuICA4MjpcdFx0fVxuICA4MzpcdFx0cmV0dXJuIFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxuICA4NzpcdGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4gIDg4Olx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnLCBib29sIGlycSxcbiAgODk6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncywgYm9vbCBza2lwX2VtcHR5KVxuICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG4gIDkyOlx0XG4gIDkzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDk0Olx0YWdhaW46XG4gIDk1Olx0XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTtcbiAgOTY6XHRcdGlmIChsaWtlbHkobCkpIHtcbiAgOTc6XHRcdFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG4gIDk4Olx0XHRcdGlmIChsaWtlbHkoUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpICE9IExPTkdfTUlOKSkge1xuICA5OTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEwMDpcdFx0XHRcdHJldHVybiBsO1xuIDEwMTpcdFx0XHR9XG4gMTAyOlx0XHRcdHVubG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG4gMTAzOlx0XHR9XG4gMTA0Olx0XHQvKlxuIDEwNTpcdFx0ICogQ2FsbGVyIG1heSBzaW1wbHkgYmFpbCBvdXQgaWYgcmFjZWQgd2l0aCByZXBhcmVudGluZyBvclxuIDEwNjpcdFx0ICogbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdF9scnUgYW5kIGV4cGVjdCBlbXB0eSBzbG90cy5cbiAxMDc6XHRcdCAqL1xuIDEwODpcdFx0aWYgKHNraXBfZW1wdHkpIHtcbiAxMDk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTEwOlx0XHRcdHJldHVybiBOVUxMO1xuIDExMTpcdFx0fVxuIDExMjpcdFx0Vk1fV0FSTl9PTighY3NzX2lzX2R5aW5nKFx1MDAyNigqbWVtY2cpLVx1MDAzZWNzcykpO1xuIDExMzpcdFx0Km1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAoKm1lbWNnKTtcbiAxMTQ6XHRcdGdvdG8gYWdhaW47XG4gMTE1Olx0fVxuIDExNjpcdCNlbHNlXG4gMTE3Olx0c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gMTE4Olx0e1xuIDExOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYGxpc3RfbHJ1X2Zyb21fbWVtY2dgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBsaXN0X2xydV9mcm9tX21lbWNnYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCYjMzk7cyBpbnZva2VkLiBNb3JlIGJyb2FkbHksIEkgd2FudCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3Vic3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBMUlUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3dobywmIzM0OyAmIzM0O3doYXQsJiMzNDsgYW5kICYjMzQ7d2hlcmUmIzM0OyB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHR9XG4gNTAxOlx0XG4gNTAyOlx0c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIDUwMzpcdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXG4gNTA0Olx0XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXG4gNTA1Olx0e1xuIDUwNjpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xuIDUwNzpcdFxuIDUwODpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG4gNTA5Olx0XHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIDUxMDpcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIDUxMTpcdFxuIDUxMjpcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuIDUxMzpcdFx0aWYgKHNyYy1cdTAwM2Vucl9pdGVtcykge1xuIDUxNDpcdFx0XHRXQVJOX09OKHNyYy1cdTAwM2Vucl9pdGVtcyBcdTAwM2MgMCk7XG4gNTE1Olx0XHRcdGRzdC1cdTAwM2Vucl9pdGVtcyAmIzQzOz0gc3JjLVx1MDAzZW5yX2l0ZW1zO1xuIDUxNjpcdFx0XHRzZXRfc2hyaW5rZXJfYml0KGRzdF9tZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG4gNTE3Olx0XHR9XG4gNTE4Olx0XHQvKiBNYXJrIHRoZSBsaXN0X2xydV9vbmUgZGVhZCAqL1xuIDUxOTpcdFx0c3JjLVx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XG4gNTIwOlx0XG4gNTIxOlx0XHRzcGluX3VubG9jayhcdTAwMjZkc3QtXHUwMDNlbG9jayk7XG4gNTIyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c3JjLVx1MDAzZWxvY2spO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHR2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gNTI2Olx0e1xuIDUyNzpcdFx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XG4gNTI4Olx0XHRpbnQgaTtcbiA1Mjk6XHRcbiA1MzA6XHRcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1MzE6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkobHJ1LCBcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcbiA1MzI6XHRcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1O1xuIDUzMzpcdFxuIDUzNDpcdFx0XHQvKlxuIDUzNTpcdFx0XHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xuIDUzNjpcdFx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4gNTM3Olx0XHRcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXG4gNTM4Olx0XHRcdCAqL1xuIDUzOTpcdFx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiA1NDA6XHRcdFx0aWYgKCFtbHJ1KVxuIDU0MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDU0MjpcdFxuIDU0MzpcdFx0XHQvKlxuIDU0NDpcdFx0XHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcbiA1NDU6XHRcdFx0ICogKExPTkdfTUlOKSBiZWZvcmUgY2xlYXJpbmcgeGFycmF5IGVudHJ5IG90aGVyd2lzZSBhXG4gNTQ2Olx0XHRcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xuIDU0NzpcdFx0XHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xuIDU0ODpcdFx0XHQgKiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnIHdpbGwgYWNxdWlyZSBwYXJlbnQmIzM5O3MgbG9jayB3aGlsZSB0aGVcbiA1NDk6XHRcdFx0ICogaXRlbSBpcyBzdGlsbCBvbiBjaGlsZCYjMzk7cyBsaXN0LlxuIDU1MDpcdFx0XHQgKi9cbiA1NTE6XHRcdFx0Zm9yX2VhY2hfbm9kZShpKVxuIDU1MjpcdFx0XHRcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShscnUsIGksIFx1MDAyNm1scnUtXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcbiA1NTM6XHRcbiA1NTQ6XHRcdFx0eGFfZXJhc2VfaXJxKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIDU1NTpcdFxuIDU1NjpcdFx0XHQvKlxuIDU1NzpcdFx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG4gNTU4Olx0XHRcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxuIDU1OTpcdFx0XHQgKiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGNhbGwgd2lsbCBzaW1wbHkgYmFpbCBvdXQuXG4gNTYwOlx0XHRcdCAqL1xuIDU2MTpcdFx0XHRrdmZyZWVfcmN1KG1scnUsIHJjdSk7XG4gNTYyOlx0XHR9XG4gNTYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbiA1NjQ6XHR9XG4gNTY1Olx0XG4gNTY2Olx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTY3Olx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiA1Njg6XHR7XG4gNTY5Olx0XHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4gNTcwOlx0XHRcdHJldHVybiB0cnVlO1xuIDU3MTpcdFxuIDU3MjpcdFx0cmV0dXJuIHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gNTczOlx0fVxuIDU3NDpcdFxuIDU3NTpcdHN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gNTc2Olx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4gNTc3Olx0e1xuIDU3ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA1Nzk6XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXAgaW50byBgX19tZW1jZ19saXN0X2xydV9hbGxvY2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgX19tZW1jZ19saXN0X2xydV9hbGxvY2Agd29ya3MgYW5kLCBjcnVjaWFsbHksIGhvdyBldmVyeXRoaW5nICp1c2VzKiBpdC4gTXkgbmV4dCBtb3ZlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYnV0IGFsc28gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1YnNlcXVlbnRseSB1c2Ugd2hhdCBpdCBhbGxvY2F0ZXMuIEkmIzM5O20gdGFsa2luZyBhYm91dCBhbnkgZnVuY3Rpb24gdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGF0IHJldHVybmVkIGRhdGEgaW4gYSBtZWFuaW5nZnVsIHdheS4KClRoaXMgbWVhbnMgYSBtZXRob2RpY2FsIHNlYXJjaCBmb3IgYW55dGhpbmcgY2FsbGluZyBgbWVtY2dfbGlzdF9scnVfYWxsb2NgIG9yIGFueSBvZiB0aGUgZnVuZGFtZW50YWwgbGlzdF9scnUgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxpc3QgbWFuaXB1bGF0aW9uOiBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBhbmQgYGxpc3RfbHJ1X3dhbGtfb25lYC4gQnkgZXhhbWluaW5nIHRoZXNlLCBJIGNhbiBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uJiMzOTtzIGxpZmV0aW1lLCBpdHMgcHVycG9zZSwgYW5kIGhvdyBpdCBpcyB1bHRpbWF0ZWx5IGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgdXNhZ2UgcGF0dGVybnMgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGluZm9ybWVkIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwb3MsICpwYXJlbnQ7XG4gNTgxOlx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG4gNTgyOlx0XG4gNTgzOlx0XHRnZnAgXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xuIDU4NDpcdFx0LypcbiA1ODU6XHRcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJiMzOTtzXG4gNTg2Olx0XHQgKiBsaXN0X2xydSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2dyb3VwIGFuZCBhbGwgaXRzXG4gNTg3Olx0XHQgKiBhbmNlc3RvcnMgaGF2ZSBhbGxvY2F0ZWQgbGlzdF9scnVfbWVtY2cuXG4gNTg4Olx0XHQgKi9cbiA1ODk6XHRcdGRvIHtcbiA1OTA6XHRcdFx0LypcbiA1OTE6XHRcdFx0ICogS2VlcCBmaW5kaW5nIHRoZSBmYXJlc3QgcGFyZW50IHRoYXQgd2FzbiYjMzk7dCBwb3B1bGF0ZWRcbiA1OTI6XHRcdFx0ICogdW50aWwgZm91bmQgbWVtY2cgaXRzZWxmLlxuIDU5MzpcdFx0XHQgKi9cbiA1OTQ6XHRcdFx0cG9zID0gbWVtY2c7XG4gNTk1Olx0XHRcdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKHBvcyk7XG4gNTk2Olx0XHRcdHdoaWxlICghbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHBhcmVudCwgbHJ1KSkge1xuIDU5NzpcdFx0XHRcdHBvcyA9IHBhcmVudDtcbiA1OTg6XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xuIDU5OTpcdFx0XHR9XG4gNjAwOlx0XG4gNjAxOlx0XHRcdGlmICghbWxydSkge1xuIDYwMjpcdFx0XHRcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XG4gNjAzOlx0XHRcdFx0aWYgKCFtbHJ1KVxuIDYwNDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjA1Olx0XHRcdH1cbiA2MDY6XHRcdFx0eGFzX3NldChcdTAwMjZ4YXMsIG1lbV9jZ3JvdXBfaWQocG9zKSk7XG4gNjA3Olx0XHRcdGRvIHtcbiA2MDg6XHRcdFx0XHR4YXNfbG9ja19pcnFzYXZlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIDYwOTpcdFx0XHRcdGlmICgheGFzX2xvYWQoXHUwMDI2eGFzKSBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSkge1xuIDYxMDpcdFx0XHRcdFx0eGFzX3N0b3JlKFx1MDAyNnhhcywgbWxydSk7XG4gNjExOlx0XHRcdFx0XHRpZiAoIXhhc19lcnJvcihcdTAwMjZ4YXMpKVxuIDYxMjpcdFx0XHRcdFx0XHRtbHJ1ID0gTlVMTDtcbiA2MTM6XHRcdFx0XHR9XG4gNjE0Olx0XHRcdFx0eGFzX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIDYxNTpcdFx0XHR9IHdoaWxlICh4YXNfbm9tZW0oXHUwMDI2eGFzLCBnZnApKTtcbiA2MTY6XHRcdH0gd2hpbGUgKHBvcyAhPSBtZW1jZyBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodW5saWtlbHkobWxydSkpXG4gNjE5Olx0XHRcdGtmcmVlKG1scnUpO1xuIDYyMDpcdFxuIDYyMTpcdFx0cmV0dXJuIHhhc19lcnJvcihcdTAwMjZ4YXMpO1xuIDYyMjpcdH1cbiA2MjM6XHRcbiA2MjQ6XHRpbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiA2MjU6XHRcdFx0XHQgZ2ZwX3QgZ2ZwKVxuIDYyNjpcdHtcbiA2Mjc6XHRcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSB8fCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQobWVtY2csIGxydSkpXG4gNjI4Olx0XHRcdHJldHVybiAwO1xuIDYyOTpcdFx0cmV0dXJuIF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2MzA6XHR9XG4gNjMxOlx0XG4gNjMyOlx0aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIDYzMzpcdFx0XHRcdCAgICAgICBnZnBfdCBnZnApXG4gNjM0Olx0e1xuIDYzNTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDYzNjpcdFx0aW50IHJlcztcbiA2Mzc6XHRcbiA2Mzg6XHRcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcbiA2Mzk6XHRcdFx0cmV0dXJuIDA7XG4gNjQwOlx0XG4gNjQxOlx0XHQvKiBGYXN0IHBhdGggd2hlbiBsaXN0X2xydSBoZWFkcyBhbHJlYWR5IGV4aXN0ICovXG4gNjQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNjQzOlx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiA2NDQ6XHRcdHJlcyA9IG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChtZW1jZywgbHJ1KTtcbiA2NDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDY0NjpcdFx0aWYgKGxpa2VseShyZXMpKVxuIDY0NzpcdFx0XHRyZXR1cm4gMDtcbiA2NDg6XHRcbiA2NDk6XHRcdC8qIEFsbG9jYXRpb24gbWF5IGJsb2NrLCBwaW4gdGhlIG1lbWNnICovXG4gNjUwOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIDY1MTpcdFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xuIDY1MjpcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDY1MzpcdFx0cmV0dXJuIHJlcztcbiA2NTQ6XHR9XG4gNjU1Olx0I2Vsc2VcbiA2NTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA2NTc6XHR7XG4gNjU4Olx0fVxuIDY1OTpcdFxuIDY2MDpcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjYxOlx0e1xuIDY2MjpcdH1cbiA2NjM6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gNjY0Olx0XG4gNjY1Olx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbiA2NjY6XHR7XG4gNjY3Olx0XHRpbnQgaTtcbiA2Njg6XHRcbiA2Njk6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgZGVlcCBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGBtbS9saXN0X2xydS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIGBtbS96c3dhcC5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGltcG9ydGFudCEKClRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGBsaXN0X2xydWAgaW5kZXhlcyB0aG9zZSBwZXItbWVtY2cgTFJVIGxpc3RzLiBCZWZvcmUsIGl0IHdhcyB1c2luZyBga21lbWNnX2lkYCwgYnV0IG5vdyBpdCYjMzk7cyBzd2l0Y2hpbmcgdG8gZGlyZWN0bHkgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gT2theSwgc28gdGhleSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24tYmFzZWQgYGttZW1jZ19pZGAgYW5kIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBgbWVtY2ctJmd0O2lkLmlkYCBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBjc3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudCBpbiBob3cgdGhlc2UgTFJVIGxpc3RzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnJhbWV3b3JrLgoKSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRIUCBkZWZlcnJlZCBzcGxpdCBzaHJpbmtlciBhbmQgdGhlIHpzd2FwIHNocmlua2VyLCB3aXRoIGBTSFJJTktFUl9OT05TTEFCYCBiZWluZyBhZGRlZC4gIEFuZCBhIHR3ZWFrIHRvIGBfX2xpc3RfbHJ1X2luaXRgIHRvIGtlZXAgaXQgYG1lbWNnX2F3YXJlYCBldmVuIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2hlbiBgc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX05PTlNMQUJgLiBUaGlzIHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgc2ltcGxpZnlpbmcgc29tZSBsb2dpYyBhbmQgbGlrZWx5IGVuc3VyaW5nIG1vcmUgcm9idXN0IG1lbWNnIGludGVncmF0aW9uIGluIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4gVGhlIHNpbXBsaWZpY2F0aW9uIG9mIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gcmVtb3ZlIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gIGJ5IGRpcmVjdGx5IHJlcGFyZW50aW5nIGxpc3RfbHJ1cyBmdXJ0aGVyIGNvcnJvYm9yYXRlcyB0aGlzLgoKSXMgdGhpcyBjb2RlIHBhdGggYWN0dWFsbHkgKnJlYWNoYWJsZSo/IEFic29sdXRlbHkuIENvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGNncm91cHMvbWVtY2csIGxpc3RfbHJ1LCBUSFAgc2hyaW5rZXIsIGFuZCB6c3dhcCBzaHJpbmtlciBhcmUgYWxsIGludGVydHdpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gdGhpcyBjb2RlIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBXaGF0IENPTkZJRyBvcHRpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBwbHVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19aU1dBUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYENPTkZJR19NRU1DR19LTUVNYCBzaXR1YXRpb24uLi4gaXMgdGhhdCBzdGlsbCBhcm91bmQsIG9yIGhhcyBpdCBiZWVuIG1lcmdlZCBpbnRvIGp1c3QgYENPTkZJR19NRU1DR2A/IEkmIzM5O2xsIHJ1biBhIHF1aWNrIGdyZXBwZXIgc2VhcmNoIHRvIGNvbmZpcm0uIEdvdHRhIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBidWlsZHMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTUxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgS2NvbmZpZyBmaWxlczoKCioqRmluZGluZyB0aGUgUmlnaHQgQ29uZmlndXJhdGlvbiBMb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBjb21tb24gcGxhY2VzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2QgaW1tZWRpYXRlbHkgbGVhbiB0b3dhcmRzIGxvb2tpbmcgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gYGluaXQvS2NvbmZpZ2AgaXMgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmFsIHN5c3RlbSBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBhbmQgYG1tL0tjb25maWdgIGlzLCBvZiBjb3Vyc2UsIHRoZSBvYnZpb3VzIGNob2ljZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQhIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgbW9zdCByZWxldmFudCBhbmQgZWZmaWNpZW50IHBsYWNlcyB0byBiZWdpbiBteSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTQtXG5pbml0L0tjb25maWc6MTA5NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDEtXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA4LVxuaW5pdC9LY29uZmlnOjExMDk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTExMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGNvdXBsZSBvZiBjcml0aWNhbCBtZW1vcnktcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBzZXR0aW5ncyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFpTV0FQYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgZm9yIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5LiBUaGUgaW1wYWN0IG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJldHR5IGRpcmVjdCBvbiBtZW1vcnkgZnJhZ21lbnRhdGlvbiBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB1bmRlciBoZWF2aWVyIHdvcmtsb2FkcywgYW5kIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYXBwbGljYXRpb24gcHJvZmlsZSBpbiBtaW5kLiBUaGVuIEkgbmVlZCB0byBjb25maXJtIGBaU1dBUGAuIFRoaXMgaXMgZm9yIHN3YXAgc3BhY2UgY29tcHJlc3Npb24uIEkgc2hvdWxkIGNvbnNpZGVyIHdoZXRoZXIgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGNvbXByZXNzaW9uIG91dHdlaWdoIHRoZSBDUFUgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIHN1ZmZpY2llbnQgcGh5c2ljYWwgUkFNLiBHb3R0YSBtYWtlIHN1cmUgYm90aCBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIHRoZSBzeXN0ZW3igJlzIHJlc291cmNlIGNvbnN0cmFpbnRzLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI3PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODI5LVxubW0vS2NvbmZpZzo4MzA6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzEtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg0OD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1My1cbm1tL0tjb25maWc6ODU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTUtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjAtXG5tbS9LY29uZmlnOjg2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Mi1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4Ni1cbm1tL0tjb25maWc6ODg3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODg4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTYtXG5tbS9LY29uZmlnOjg5NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy04OTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwNi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTIyPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMxLVxubW0vS2NvbmZpZzo5MzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0MC1cbm1tL0tjb25maWc6OTQxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Mi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkxldCYjMzk7cyBEaXZlIGludG8gYFpTV0FQYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBaU1dBUGAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGlrZWx5IHRvIGJlIGRyaXZlbiBieSBhIGZldyBrZXkgcXVlc3Rpb25zOiBXaGF0IHRyaWdnZXJlZCB0aGlzIHJldmlldz8gSXMgaXQgcGVyZm9ybWFuY2UtcmVsYXRlZCwgYSBidWcgcmVwb3J0LCBvciBwZXJoYXBzIGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb24/CgpNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDogV2hhdCYjMzk7cyB0aGUgaW1wbGVtZW50YXRpb24/IEhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzd2FwIHN1YnN5c3RlbT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgTFJVLWJhc2VkIHN3YXBwaW5nIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGRlbWFuZCBwYWdpbmcgd2l0aCBjb21wcmVzc2lvbiBvciBlbmNyeXB0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVjZW50IHBhdGNoZXMgcmVsYXRlZCB0byBgWlNXQVBgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaW5jcmVhc2VkIHVzYWdlLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgbmVlZCBteSBhdHRlbnRpb24uCgpJJiMzOTtsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBkYXRhIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JlICh0eXBpY2FsbHkgZGlzayBvciBhIGRlZGljYXRlZCBzd2FwIHBhcnRpdGlvbikuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgdGhlIG92ZXJhbGwgc3dhcHBpbmcgYWxnb3JpdGhtLCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IGl0IGNhbiBhZmZlY3QgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoZSBtYWluIHRoaW5nIGlzIHRvIGZpbmQgaWYgdGhlcmUgYXJlIGFueSBjdXJyZW50IGFyZWFzIG9mIGNvbmNlcm4sIG9yIGlmIGFueXRoaW5nIGxvb2tzIHBhcnRpY3VsYXJseSB1bnVzdWFsIGF0IHRoZSBtb21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX1pTV0FQYC4gVGhlc2UgYXJlIHRoZSBrZXkgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHRoZSBwbGF5aW5nIGZpZWxkIGZvciB0aGUgY29kZSBJJiMzOTttIGFuYWx5emluZy4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBNeSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBtb3N0IHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgdGhhdCBkaXJlY3RseSBjYWxsIHRoZSBjaGFuZ2VkIGxvZ2ljLiBJIHdhbnQgdG8gYXZvaWQgYW55dGhpbmcgb3Zlcmx5IGdlbmVyYWwuCgpJIHNlZSBhIGNvbmNlbnRyYXRlZCBzZXQgb2YgdGhlc2UgaW4gYG1tL2xpc3RfbHJ1LmNgLiBMb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgbGlzdGVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmU6CgoqICAgYGxpc3RfbHJ1X2NvdW50X29uZWAKKiAgIGBsaXN0X2xydV9hZGRgCiogICBgbGlzdF9scnVfZGVsYAoqICAgYGxvY2tfbGlzdF9scnVfb2ZfbWVtY2dgICh0aGlzIG9uZSYjMzk7cyBzdGF0aWMgaW5saW5lLCBzbyB0aGVyZSBtYXkgYmUgYSBzeW1ib2wgY2hlY2spIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYy9leHBvcnRlZCBvciBzdGF0aWMgdXNpbmcgcmVhZC1maWxlIG9yIGdyZXBwZXIuCiogICBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzYAoqICAgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZWAKKiAgIGBtZW1jZ19saXN0X2xydV9hbGxvY2AKKiAgIGBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY2AKKiAgIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYAoqICAgYF9fbGlzdF9scnVfaW5pdGAKClRoZW4sIG1vdmluZyB0byBgbW0vbWVtY29udHJvbC5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6CgoqICAgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAKKiAgIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYAoKQW5kLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBsaXN0IGluY2x1ZGVzOgoKKiAgIGB0aHBfc2hyaW5rZXJfaW5pdGAgKHRoaXMgaXMgYW4gaW5pdCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb25seSBydW4gYXQgYm9vdCwgcmlnaHQ/KQoqICAgYGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkYCBvciBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgLyBgZGVmZXJyZWRfc3BsaXRfY291bnRgIC8gYGRlZmVycmVkX3NwbGl0X2ZvbGlvYAoKRmluYWxseSwgZnJvbSBgbW0venN3YXAuY2A6CgoqICAgYHpzd2FwX2FsbG9jX3Nocmlua2VyYCAvIGB6c3dhcF9zaHJpbmtlcl9zY2FuYCAvIGB6c3dhcF9zaHJpbmtlcl9jb3VudGAKCk5vdywgdG8gcmVmaW5lIHRoaXMgZnVydGhlciwgSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBtbS9saXN0X2xydS5jYCB0byBsb29rIGF0IHRob3NlIHN5bWJvbCBuYW1lcyBhbmQgbWFrZSBzdXJlIEkga25vdyBob3cgdGhleSYjMzk7cmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfMC05XSYjNDM7IC4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9saXN0X2xydS5jLTE3LVxubW0vbGlzdF9scnUuYzoxODpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycSxcbm1tL2xpc3RfbHJ1LmMtMTktXHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMjgtXG5tbS9saXN0X2xydS5jOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxubW0vbGlzdF9scnUuYy0zMC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncylcbi0tXG5tbS9saXN0X2xydS5jLTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDE6c3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xubW0vbGlzdF9scnUuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTQzLVxubW0vbGlzdF9scnUuYzo0NDpzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTQ1LXtcbi0tXG5tbS9saXN0X2xydS5jLTQ4LVxubW0vbGlzdF9scnUuYzo0OTpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNTAte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTgtXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTYwLXtcbi0tXG5tbS9saXN0X2xydS5jLTY4LVxubW0vbGlzdF9scnUuYzo2OTpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNzAte1xuLS1cbm1tL2xpc3RfbHJ1LmM9ODc9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTExNi0jZWxzZVxubW0vbGlzdF9scnUuYzoxMTc6c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTExOC17XG4tLVxubW0vbGlzdF9scnUuYy0xMjAtXG5tbS9saXN0X2xydS5jOjEyMTpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMjIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTI0LVxubW0vbGlzdF9scnUuYzoxMjU6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTEyNi17XG4tLVxubW0vbGlzdF9scnUuYy0xMjktXG5tbS9saXN0X2xydS5jOjEzMDpzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTEzMS17XG4tLVxubW0vbGlzdF9scnUuYz0xNDI9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTE1My1cbm1tL2xpc3RfbHJ1LmM6MTU0OnN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3RfbHJ1X2xvY2soc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE1NS1cdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy0xNjAtXG5tbS9saXN0X2xydS5jOjE2MTp2b2lkIGxpc3RfbHJ1X3VubG9jayhzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy0xNjIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTY1LVxubW0vbGlzdF9scnUuYzoxNjY6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE2Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMTcyLVxubW0vbGlzdF9scnUuYzoxNzM6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG5tbS9saXN0X2xydS5jLTE3NC17XG4tLVxubW0vbGlzdF9scnUuYy0xNzctXG5tbS9saXN0X2xydS5jOjE3ODpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycXNhdmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE3OS1cdFx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTE4NS1cbm1tL2xpc3RfbHJ1LmM6MTg2OnZvaWQgbGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG5tbS9saXN0X2xydS5jLTE4Ny17XG4tLVxubW0vbGlzdF9scnUuYy0xOTAtXG5tbS9saXN0X2xydS5jOjE5MTpib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0xOTItXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmM9MjA5PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2FkZCk7XG5tbS9saXN0X2xydS5jLTIxMC1cbm1tL2xpc3RfbHJ1LmM6MjExOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG5tbS9saXN0X2xydS5jLTIxMi1cdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXG4tLVxubW0vbGlzdF9scnUuYy0yMjMtLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXG5tbS9saXN0X2xydS5jOjIyNDpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMjI1LVx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9saXN0X2xydS5jLTIzNS1cbm1tL2xpc3RfbHJ1LmM6MjM2OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2xpc3RfbHJ1LmMtMjM3LVx0XHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy0yNDctXG5tbS9saXN0X2xydS5jOjI0ODpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG5tbS9saXN0X2xydS5jLTI0OS17XG4tLVxubW0vbGlzdF9scnUuYz0yNjM9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XG4tLVxubW0vbGlzdF9scnUuYy0yNjUtLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXG5tbS9saXN0X2xydS5jOjI2Njpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMjY3LVx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9saXN0X2xydS5jLTI3Ny1cbm1tL2xpc3RfbHJ1LmM6Mjc4OmJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbm1tL2xpc3RfbHJ1LmMtMjc5LXtcbi0tXG5tbS9saXN0X2xydS5jPTI5Mz1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjk0LVxubW0vbGlzdF9scnUuYzoyOTU6dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG5tbS9saXN0X2xydS5jLTI5Ni17XG4tLVxubW0vbGlzdF9scnUuYz0zMDA9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XG5tbS9saXN0X2xydS5jLTMwMS1cbm1tL2xpc3RfbHJ1LmM6MzAyOnZvaWQgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG5tbS9saXN0X2xydS5jLTMwMy1cdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm1tL2xpc3RfbHJ1LmM9MzA4PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGVfbW92ZSk7XG5tbS9saXN0X2xydS5jLTMwOS1cbm1tL2xpc3RfbHJ1LmM6MzEwOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbGlzdF9scnUuYy0zMTEtXHRcdFx0XHQgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmM9MzI2PUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XG5tbS9saXN0X2xydS5jLTMyNy1cbm1tL2xpc3RfbHJ1LmM6MzI4OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZClcbm1tL2xpc3RfbHJ1LmMtMzI5LXtcbi0tXG5tbS9saXN0X2xydS5jPTQwNj1saXN0X2xydV93YWxrX29uZV9pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTQxMy1cbm1tL2xpc3RfbHJ1LmM6NDE0OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy00MTUtXHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG4tLVxubW0vbGlzdF9scnUuYz00NTA9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUxLVxubW0vbGlzdF9scnUuYzo0NTI6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy00NTMte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDYzLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDY0OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG5tbS9saXN0X2xydS5jLTQ2NS17XG4tLVxubW0vbGlzdF9scnUuYy00NzgtXG5tbS9saXN0X2xydS5jOjQ3OTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbm1tL2xpc3RfbHJ1LmMtNDgwLXtcbi0tXG5tbS9saXN0X2xydS5jLTQ4NS1cbm1tL2xpc3RfbHJ1LmM6NDg2OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTQ4Ny17XG4tLVxubW0vbGlzdF9scnUuYy01MDEtXG5tbS9saXN0X2xydS5jOjUwMjpzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTUwMy1cdFx0XHRcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxuLS1cbm1tL2xpc3RfbHJ1LmMtNTI0LVxubW0vbGlzdF9scnUuYzo1MjU6dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbGlzdF9scnUuYy01MjYte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTY1LVxubW0vbGlzdF9scnUuYzo1NjY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jLTU2Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTc0LVxubW0vbGlzdF9scnUuYzo1NzU6c3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2xpc3RfbHJ1LmMtNTc2LVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjIzLVxubW0vbGlzdF9scnUuYzo2MjQ6aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9saXN0X2xydS5jLTYyNS1cdFx0XHQgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjMxLVxubW0vbGlzdF9scnUuYzo2MzI6aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbGlzdF9scnUuYy02MzMtXHRcdFx0ICAgICAgIGdmcF90IGdmcClcbi0tXG5tbS9saXN0X2xydS5jLTY1NS0jZWxzZVxubW0vbGlzdF9scnUuYzo2NTY6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG5tbS9saXN0X2xydS5jLTY1Ny17XG4tLVxubW0vbGlzdF9scnUuYy02NTktXG5tbS9saXN0X2xydS5jOjY2MDpzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy02NjEte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNjY0LVxubW0vbGlzdF9scnUuYzo2NjU6aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbm1tL2xpc3RfbHJ1LmMtNjY2LXtcbi0tXG5tbS9saXN0X2xydS5jPTY5OD1FWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTktXG5tbS9saXN0X2xydS5jOjcwMDp2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgwCgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgQ2dyb3VwIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYG1lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYGxpc3RfbHJ1X2NvdW50X29uZWAsIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIG9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlYXNvbmluZyBhbmQgaW1wYWN0LiBUaGUgcGF0Y2ggc2VyaWVzIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgcmVmYWN0b3JpbmcgaG93IG1lbW9yeSBjZ3JvdXBzIGhhbmRsZSBgbGlzdF9scnVgIGluc3RhbmNlcy4gSXQmIzM5O3MgbW92aW5nIGZyb20gYGttZW1jZ19pZGAgdG8gYG1lbV9jZ3JvdXBfaWRgIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gSXQgYWxzbyByZW1vdmVzIHRob3NlIGxpZmVjeWNsZSBob29rcywgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAsIHNpbXBsaWZ5aW5nIHRoaW5ncy4gQW5kIHRoZSBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgaXMgaW1wb3J0YW50LCBtYWtpbmcgc3VyZSBtZW1jZyBhd2FyZW5lc3MgaXMgcHJlc2VudCBldmVuIHdoZW4ga21lbSBhY2NvdW50aW5nIGlzIGRpc2FibGVkLiBUaGlzIGlzIGEgcHJldHR5IGNvcmUgY2hhbmdlIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHJlcGFyZW50aW5nLCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGxpa2UgY2dyb3VwIGNyZWF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHJlY2xhaW0gcHJlc3N1cmUuIERlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhLgoKRmluYWxseSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBaU1dBUGAuIE1ha2VzIHNlbnNlLCBhcyB0aGVzZSBmZWF0dXJlcyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb24gYmVpbmcgcmVmYWN0b3JlZC4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCYjMzk7cyB0aW1lIHRvICYjMzk7c2V0LXJlc3VsdHMmIzM5OyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfY291bnRfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsaXN0X2xydSBpbmRleGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYnkgcmVwbGFjaW5nIGttZW1jZ19pZCB3aXRoIG1lbV9jZ3JvdXBfaWQgYW5kIHVuaWZ5aW5nIHRoZSByZXBhcmVudGluZyBwYXRocyBkdXJpbmcgbWVtY2cgb2ZmbGluZS4gSXQgYWxzbyBlbmFibGVzIFNIUklOS0VSX05PTlNMQUIgb24gVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBjb2RlIHBhdGhzIGV4ZWN1dGVkIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlcyBhbmQgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYTAzYjZlM2U1NDcwNy4uMzQ2M2QyYzUyYzYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2lmIEJJVFNfUEVSX0xPTkcgJmx0OyA2NAogCXNlcWxvY2tfdAkJc29ja2V0X3ByZXNzdXJlX3NlcWxvY2s7CiAjZW5kaWYKLQlpbnQga21lbWNnX2lkOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDsKQEAgLTE3NzUsMTUgJiM0MzsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogCQlfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLS8qCi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJiMzOTtzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmcKLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlyZXR1cm4gbWVtY2cgPyBtZW1jZy0mZ3Q7a21lbWNnX2lkIDogLTE7Ci19Ci0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCkBAIC0xODUxLDExICYjNDM7MTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZDFjZTA2MTYwMWJjZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMDY0LDcgJiM0MzsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKQogewogCWRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8Ci0JCQkJCQkgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsCiYjNDM7CQkJCQkJIFNIUklOS0VSX01FTUNHX0FXQVJFIHwKJiM0MzsJCQkJCQkgU0hSSU5LRVJfTk9OU0xBQiwKIAkJCQkJCSAmIzM0O3RocC1kZWZlcnJlZF9zcGxpdCYjMzQ7KTsKIAlpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDhhNmRkMGE0ODllMTIuLmYxOTY4ZjAyYmUzYjMgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNzIsMTAgJiM0Mzs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSAwKSB7Ci0JCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9CiYjNDM7CQkJeGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAogCQlyZXR1cm4gbWxydSA/ICZhbXA7bWxydS0mZ3Q7bm9kZVtuaWRdIDogTlVMTDsKIAl9CkBAIC05MSw3ICYjNDM7OTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCiAJcmN1X3JlYWRfbG9jaygpOwogYWdhaW46Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpOwomIzQzOwlsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgKm1lbWNnKTsKIAlpZiAobGlrZWx5KGwpKSB7CiAJCWxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpOwogCQlpZiAobGlrZWx5KFJFQURfT05DRShsLSZndDtucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7CkBAIC0xMzIsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSkKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICoKLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KQomIzQzO2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gJmFtcDtscnUtJmd0O25vZGVbbmlkXS5scnU7CiB9CkBAIC0zMTMsNyAmIzQzOzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCWxvbmcgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7CiYjNDM7CWwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7CiAJY291bnQgPSBsID8gUkVBRF9PTkNFKGwtJmd0O25yX2l0ZW1zKSA6IDA7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTUwMiwxMSAmIzQzOzUwMywxMCBAQCBzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsCiAJCQkJCXN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYywKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZykKIHsKLQlpbnQgZHN0X2lkeCA9IGRzdF9tZW1jZy0mZ3Q7a21lbWNnX2lkOwogCXN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcmMtJmd0O2xvY2spOwotCWRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTsKJiM0MzsJZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZhbXA7ZHN0LSZndDtsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlsaXN0X3NwbGljZV9pbml0KCZhbXA7c3JjLSZndDtsaXN0LCAmYW1wO2RzdC0mZ3Q7bGlzdCk7CkBAIC01MzYsNyAmIzQzOzUzNiw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiAJCSAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXMKIAkJICogbWVtY2cgYSByY3UgZ3JhY2UgcGVyaW9kIGFnby4KIAkJICovCi0JCW1scnUgPSB4YV9sb2FkKCZhbXA7bHJ1LSZndDt4YSwgbWVtY2ctJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQltbHJ1ID0geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAkJaWYgKCFtbHJ1KQogCQkJY29udGludWU7CiAKQEAgLTU1MSw3ICYjNDM7NTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW4KIAkJZm9yX2VhY2hfbm9kZShpKQogCQkJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgJmFtcDttbHJ1LSZndDtub2RlW2ldLCBwYXJlbnQpOwogCi0JCXhhX2VyYXNlX2lycSgmYW1wO2xydS0mZ3Q7eGEsIG1lbWNnLSZndDtrbWVtY2dfaWQpOwomIzQzOwkJeGFfZXJhc2VfaXJxKCZhbXA7bHJ1LSZndDt4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpOwogCiAJCS8qCiAJCSAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWQKQEAgLTU2Niw5ICYjNDM7NTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuCiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KQogewotCWludCBpZHggPSBtZW1jZy0mZ3Q7a21lbWNnX2lkOwomIzQzOwlpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBpZHggJmx0OyAwIHx8IHhhX2xvYWQoJmFtcDtscnUtJmd0O3hhLCBpZHgpOwomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO2xydS0mZ3Q7eGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIH0KIAogc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKQEAgLTYwMiw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWlmICghbWxydSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl4YXNfc2V0KCZhbXA7eGFzLCBwb3MtJmd0O2ttZW1jZ19pZCk7CiYjNDM7CQl4YXNfc2V0KCZhbXA7eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpOwogCQlkbyB7CiAJCQl4YXNfbG9ja19pcnFzYXZlKCZhbXA7eGFzLCBmbGFncyk7CiAJCQlpZiAoIXhhc19sb2FkKCZhbXA7eGFzKSAmYW1wOyZhbXA7ICFjc3NfaXNfZHlpbmcoJmFtcDtwb3MtJmd0O2NzcykpIHsKQEAgLTY3Niw3ICYjNDM7Njc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHIKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwKJiM0MzsJICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9OT05TTEFCKSkpKQogCQltZW1jZ19hd2FyZSA9IGZhbHNlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNzYzLDMzICYjNDM7Mzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsCiAJb2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCWlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQotCQlyZXR1cm47Ci0KLQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7Ci0KLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwotfQotCi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7Ci0KLQlpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkKLQkJcmV0dXJuOwotCi0JcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOwotCW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTsKLX0KLQogI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLCiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvd3JpdGViYWNrLmgmZ3Q7CkBAIC00MjE2LDcgJiM0Mzs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJc2VxbG9ja19pbml0KCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTsKICNlbmRpZgogCW1lbWNnMV9tZW1jZ19pbml0KG1lbWNnKTsKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQpAQCAtNDI5MCw3ICYjNDM7NDI2Miw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCWludCBuaWQ7CiAKLQltZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDttZW1jZ19rbWVtX29ubGluZV9rZXkpOwogCiAJLyoKIAkgKiBBIG1lbWNnIG11c3QgYmUgdmlzaWJsZSBmb3IgZXhwYW5kX3Nocmlua2VyX2luZm8oKQpAQCAtNDI5OCw3ICYjNDM7NDI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4mIzM5O3Qgc2tpcCBpdC4KIAkgKi8KIAlpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpCi0JCWdvdG8gb2ZmbGluZV9rbWVtOwomIzQzOwkJZ290byByZXBhcmVudF9scnVzOwogCiAJZm9yX2VhY2hfbm9kZShuaWQpIHsKIAkJb2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7CkBAIC00MzU1LDggJiM0Mzs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAkJfQogCX0KIAlmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpOwotb2ZmbGluZV9rbWVtOgotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7cmVwYXJlbnRfbHJ1czoKJiM0MzsJbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpOwogCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDM3MiwxMSAmIzQzOzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTsKIAotCW1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7CiYjNDM7CW1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTsKIAkvKgogCSAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZgotCSAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0Ci0JICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LgomIzQzOwkgKiB0aGUgbGlzdF9scnUgYWJvdmUsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGV5IHdpbGwgbm90CiYjNDM7CSAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuCiAJICovCiAJbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTsKIAlyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBjZDdiMGI2MjFiZGE4Li5hZmM2YzhkMDNkMjMxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEyNTUsOCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogewogCXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7CiAKLQlzaHJpbmtlciA9Ci0JCXNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgJiMzNDttbS16c3dhcCYjMzQ7KTsKJiM0MzsJc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfAomIzQzOwkJCQkgIFNIUklOS0VSX05PTlNMQUIsICYjMzQ7bW0tenN3YXAmIzM0Oyk7CiAJaWYgKCFzaHJpbmtlcikKIAkJcmV0dXJuIE5VTEw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBhIEtNU0FOIHNlc3Npb24uCgpGaXJzdCwgSSBuZWVkIGEgZGV0YWlsZWQgYnJlYWtkb3duLiBBbHJpZ2h0LCBpdCBzZWVtcyB3ZSYjMzk7cmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCB0aGUgcmVtb3ZhbCBvZiBga21lbWNnX2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6CgoqICAgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYDogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBga21lbWNnX2lkYCBmaWVsZCBmcm9tIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IGFuZCB0aGUgYXNzb2NpYXRlZCBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWQgZmxhZywgYXMgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBJIGFtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLgoqICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0venN3YXAuY2A6IEhlcmUsIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBpcyBiZWluZyBhZGRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjZXJ0YWluIHNocmlua2Vycy4gSW50ZXJlc3Rpbmc7IHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHdlIGFyZSBtaWdyYXRpbmcgYXdheSBmcm9tIHNsYWItYmFzZWQgYWxsb2NhdGlvbnMuCiogICBgbW0vbGlzdF9scnUuY2A6IFRoaXMgZmlsZSBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbGlzdF9scnVfZnJvbV9tZW1jZ19pZHhgIGlzIHJlcGxhY2VkIGJ5IGBsaXN0X2xydV9mcm9tX21lbWNnYC4gVGhlIGNvZGUgaXMgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGttZW1jZ19pZGAgbWV0aG9kcy4gVGhlIGZsYWcgY2hlY2tpbmcgZm9yIGBtZW1jZ19hd2FyZWAgd2hlbiBgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKClgIGxvb2tzIGxpa2UgaXQgbWlnaHQgY2hhbmdlIHNvbWV0aGluZy4KKiAgIGBtbS9tZW1jb250cm9sLmNgOiBXZSYjMzk7cmUgc2VlaW5nIHRoZSByZW1vdmFsIG9mIGBtZW1jZ19vbmxpbmVfa21lbSgpYCwgYG1lbWNnX29mZmxpbmVfa21lbSgpYCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBga21lbWNnX2lkYC4gSW5zdGVhZCBvZiBpbml0aWFsaXppbmcgaXQsIGl0IGxvb2tzIGxpa2UgaXQgaXMgZW5hYmxpbmcgdGhlIHN0YXRpYyBicmFuY2guCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpcyBzYWZlLiBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiB3b3JrPyBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW5pdGlhbGl6YXRpb24gaXNzdWUgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSByZW1vdmFsIG9mIGBrbWVtY2dfaWRgLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9pZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MTU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgxNzpzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxOC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTMwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzA2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTMwNzpzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMDgte1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTE3Nz1ERUNMQVJFX0VWRU5UX0NMQVNTKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xOTEtXHRcdF9fZW50cnktXHUwMDNlb3JkZXJcdFx0PSBvcmRlcjtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE5MjpcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE5My1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjE5PURFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yMzEtXHRcdF9fZW50cnktXHUwMDNlbnJfcmVjbGFpbWVkXHQ9IG5yX3JlY2xhaW1lZDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIzMjpcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTIzMy1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjU4PVRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX3N0YXJ0LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTI4OS1cdFx0X19lbnRyeS1cdTAwM2VuaWQgPSBzYy1cdTAwM2VuaWQ7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyOTA6XHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTI5MS1cdCksXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MzA4PVRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX2VuZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzMtXHRcdF9fZW50cnktXHUwMDNlcmV0dmFsID0gc2hyaW5rZXJfcmV0dmFsO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6MzM0Olx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzUtXHQpLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjY9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXHRcdGVsc2Vcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6XHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTQyPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNjUtXHRcdGVsc2Vcbm1tL2RhbW9uL3BhZGRyLmM6MTY2Olx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5tbS9kYW1vbi9wYWRkci5jLTE2Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTE3PWludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM1LVx0XHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNjpcdFx0XHQqaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNy1cdFx0XHRmb3VuZCA9IHRydWU7XG4tLVxubW0vbGlzdF9scnUuYz03NT1saXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbGlzdF9scnUuYy03OC1cdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cbm1tL2xpc3RfbHJ1LmM6Nzk6XHRcdFx0eGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbm1tL2xpc3RfbHJ1LmMtODAtXG4tLVxubW0vbGlzdF9scnUuYz01MjU9dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTM4LVx0XHQgKi9cbm1tL2xpc3RfbHJ1LmM6NTM5Olx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbm1tL2xpc3RfbHJ1LmMtNTQwLVx0XHRpZiAoIW1scnUpXG4tLVxubW0vbGlzdF9scnUuYy01NTMtXG5tbS9saXN0X2xydS5jOjU1NDpcdFx0eGFfZXJhc2VfaXJxKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vbGlzdF9scnUuYy01NTUtXG4tLVxubW0vbGlzdF9scnUuYz01NjY9c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy01NzEtXG5tbS9saXN0X2xydS5jOjU3MjpcdHJldHVybiB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vbGlzdF9scnUuYy01NzMtfVxuLS1cbm1tL2xpc3RfbHJ1LmM9NTc1PXN0YXRpYyBpbnQgX19tZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy02MDUtXHRcdH1cbm1tL2xpc3RfbHJ1LmM6NjA2Olx0XHR4YXNfc2V0KFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcbm1tL2xpc3RfbHJ1LmMtNjA3LVx0XHRkbyB7XG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYz00Nz1zdGF0aWMgaW50IHNocmlua2VyX2RlYnVnZnNfY291bnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy03MC1cdFx0aWYgKHRvdGFsKSB7XG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjcxOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JWxsdVwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZykpO1xubW0vc2hyaW5rZXJfZGVidWcuYy03Mi1cdFx0XHRmb3JfZWFjaF9ub2RlKG5pZClcbi0tXG5tbS92bXNjYW4uYz01NzEwPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTcyNy0jZW5kaWZcbm1tL3Ztc2Nhbi5jOjU3Mjg6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7bWVtY2cgJWxsdSAlc1xcblwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xubW0vdm1zY2FuLmMtNTcyOS1cdH1cbi0tXG5tbS92bXNjYW4uYz01ODE0PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy01ODI5LVxubW0vdm1zY2FuLmM6NTgzMDpcdGlmIChtZW1jZ19pZCAhPSBtZW1fY2dyb3VwX2lkKG1lbWNnKSlcbm1tL3Ztc2Nhbi5jLTU4MzEtXHRcdGdvdG8gZG9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbWVtX2Nncm91cF9pZGAgYWN0dWFsbHkgKmlzKi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgYXMgYWx3YXlzOiB0aGUgb2ZmaWNpYWwgZGVmaW5pdGlvbi4gSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2YgdGhpcyBiZWFzdC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgY29tbWVudHMgd2lsbCBlbnN1cmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBjb250cm9sIGxhbmRzY2FwZSBvZiB0aGUga2VybmVsLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQsIGJlY2F1c2UsIGxldCYjMzk7cyBmYWNlIGl0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjb21wbGV4LCBhbmQgYWNjdXJhdGUgZG9jdW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZlbiB0aGUgbW9zdCBiYXNpYyB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA4MTE6XHRcdFx0cmV0dXJuIDA7XG4gODEyOlx0XG4gODEzOlx0XHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4gODE0Olx0fVxuIDgxNTpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gODE2Olx0XG4gODE3Olx0c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gODE4Olx0e1xuIDgxOTpcdFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApIDogMDtcbiA4MjA6XHR9XG4gODIxOlx0XG4gODIyOlx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKTtcbiA4MjM6XHRcbiA4MjQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiA4MjU6XHR7XG4gODI2Olx0XHRyZXR1cm4gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTtcbiA4Mjc6XHR9XG4gODI4Olx0XG4gODI5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG1lbWNnLSZndDtrbWVtY2dfaWRgIFJlbW92YWwgYW5kIGBsaXN0X2xydWAgQWRhcHRhdGlvbioqCgpPa2F5LCBzbyB0aGUgYG1lbWNnLSZndDtrbWVtY2dfaWRgIGhhcyBiZWVuIHJld29ya2VkLiBQcmV2aW91c2x5LCBpdCB3YXMgYW4gaW5kZXggYXNzaWduZWQgZHVyaW5nIGttZW0gb25saW5pbmcsIGVzc2VudGlhbGx5IHRoZSBvbGQgYG1lbWNnLSZndDtpZC5pZGAuIE5vdywgYGxpc3RfbHJ1YCBpcyB1c2luZyBgbWVtX2Nncm91cF9pZChtZW1jZylgIHdoaWNoIHJlc29sdmVzIHRvIGBjZ3JvdXBfaWQobWVtY2ctJmd0O2Nzcy5jZ3JvdXApYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhpbmdzLiBQbHVzLCB0aGUgYFNIUklOS0VSX05PTlNMQUJgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhpcyBpcyBzbWFydCwgaXQgYWxsb3dzIG5vbi1zbGFiIHNocmlua2VycyBsaWtlIGRlZmVycmVkX3NwbGl0IChUSFApIGFuZCB6c3dhcCB0byBsZXZlcmFnZSB0aGUgbWVtY2ctYXdhcmUgYGxpc3RfbHJ1YCBldmVuIHdoZW4ga21lbSBpc24mIzM5O3QgYWN0aXZlIG9yIGluIHRoZSBnZW5lcmFsIGNhc2UuCgpOb3csIG15IG1haW4gY29uY2VybiBpcyBhbHdheXMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIG1ha2luZyB0aGlzIHR5cGUgb2YgY2hhbmdlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IGJ1Z3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBpbmZvIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW50ZW5kZWQgbWVtb3J5IHJlYWRzLiBMZXQmIzM5O3MgYXBwbHkgdGhlIHVzdWFsIGNyaXRlcmlhLgoKMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRXhwb3N1cmU6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSAodGhyb3VnaCBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgTmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBjYXVzZSBwcm9ibGVtcz8gTm90IGluIHRoaXMgc3BlY2lmaWMgY2hhbmdlLCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIFRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCAoYG1lbWNnYCwgYHBvc2AsIGBscnVgLCBgbmlkYCkgYXJlIHN0YW5kYXJkIHBvaW50ZXJzIG9yIGludGVnZXJzIHRoYXQgYXJlIHBhc3NlZCBpbi4gVGhhdCYjMzk7cyBnb29kLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBBbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBUaGUgZGVsZXRpb24gb2YgYGttZW1jZ19pZGAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGEgZmllbGQuIFRoZW4sIGBsaXN0X2xydV9mcm9tX21lbWNnYCBoYXMgYSBzYW5pdHkgY2hlY2s6IGBpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSAmYW1wOyZhbXA7IG1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpYC4gU2VlbXMgc2FmZS4KNC4gICoqQnVmZmVyIEJvdW5kcyAmYW1wOyBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogIEFyZSB3ZSBjaGFuZ2luZyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vIGNoYW5nZXMgdG8gYnVmZmVyIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIHJlbGllZi4KCkZpbmFsbHksIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgY2hlY2suIEkgc2hvdWxkIGxvb2sgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBiYXNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBhbnkgY29kZSBsaW5nZXJpbmcgb3V0IHRoZXJlIHRoYXQgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgYGttZW1jZ19pZGAuIEl0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbWNnX2lkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgQ29udHJvbGxlciBJRHM6IEEgUXVpY2sgQXVkaXQqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIHN1Y2Nlc3NmdWxseSBwdXJnZWQgYW55IGluc3RhbmNlcyBvZiBga21lbWNnX2lkYCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZ29vZCBuZXdzLiBIb3dldmVyLCB3ZSBhbGwga25vdyBob3cgdGhlc2UgdGhpbmdzIGNhbiBzb21ldGltZXMgaGlkZSBpbiBwbGFpbiBzaWdodCBvciBoYXZlIG5hbWluZyBpbmNvbnNpc3RlbmNpZXMuIEJlZm9yZSB3ZSBkZWNsYXJlIHZpY3RvcnksIEkgdGhpbmsgaXQmIzM5O3MgcHJ1ZGVudCB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgYG1lbWNnX2ttZW1faWRgIGFzIHdlbGwuIERvdWJsZS1jaGVja2luZyByZWxhdGVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWxseSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9ucyBpcyBhbHdheXMgdGltZSB3ZWxsLXNwZW50IGluIHRoZXNlIHNpdHVhdGlvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzIGFuZCBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgYnkgb3Zlcmxvb2tpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfa21lbV9pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBRdWVyeTogU0hSSU5LRVJfTk9OU0xBQioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gJiMzNDtTSFJJTktFUl9OT05TTEFCJiMzNDsuIFRoYXQgc3BlY2lmaWMgdGVybSBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgbWFjcm8sIG9yIGEgdmFyaWFibGUgbmFtZSwgYWxtb3N0IGNlcnRhaW5seSB3aXRoaW4gYSBjb2RlYmFzZS4gVGhlIHVzZSBvZiBhbGwgY2FwcyByZWluZm9yY2VzIHRoYXQgaXTigJlzIHByb2JhYmx5IGEgY29uc3RhbnQuIFRoZSAmIzM0O1NIUklOS0VSJiMzNDsgcGFydCBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byByZWR1Y2luZyB0aGUgZm9vdHByaW50IG9mIGRhdGEgc3RydWN0dXJlcy4gVGhlICYjMzQ7Tk9OU0xBQiYjMzQ7IHBhcnQgaXMgaW50ZXJlc3Rpbmc7IGl0IGNvbnRyYXN0cyB3aXRoIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtTTEFCJiMzNDssIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIExpbnV4IGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmVmb3JlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIGhvdyBhIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBraW5kcyBvZiBvYmplY3RzLgoKVGhlIHByb21wdCBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSAqZGVmaW5pdGlvbiogYW5kICp1c2FnZSogb2YgdGhpcyB0ZXJtLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGZvciB3aGVyZSB0aGlzIGBTSFJJTktFUl9OT05TTEFCYCBpcyBkZWNsYXJlZCwgYW5kIHRoZW4gdHJhY2UgYWxsIGluc3RhbmNlcyB3aGVyZSBpdCYjMzk7cyB1c2VkLiBUaGlzIHN1Z2dlc3RzIHRoZSBxdWVyeSBtaWdodCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHN5c3RlbSBiZWhhdmlvci4gVGhlIGluc3RydWN0aW9uIHRvIHN1bW1hcml6ZSB0aGUgcHJvY2Vzcywgc3VnZ2VzdHMgdGhpcyBpbnZvbHZlcyBleHBsYWluaW5nIHRoZSBwcm9jZXNzIGZyb20gYmVnaW5uaW5nIHRvIGVuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0hSSU5LRVJfTk9OU0xBQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9jb21wcmVzc2lvbi5jPTExMjk9aW50IF9faW5pdCBidHJmc19pbml0X2NvbXByZXNzKHZvaWQpXG4tLVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYzoxMTM2Olx0Y29tcHJfcG9vbC5zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05PTlNMQUIsIFwmIzM0O2J0cmZzLWNvbXByLXBhZ2VzXCYjMzQ7KTtcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtMTEzNy1cdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcbi0tXG5mcy94ZnMveGZzX2ljYWNoZS5jPTIzMzU9eGZzX2lub2RlZ2NfcmVnaXN0ZXJfc2hyaW5rZXIoXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYy0yMzM3LXtcbmZzL3hmcy94ZnNfaWNhY2hlLmM6MjMzODpcdG1wLVx1MDAzZW1faW5vZGVnY19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05PTlNMQUIsXG5mcy94ZnMveGZzX2ljYWNoZS5jLTIzMzktXHRcdFx0XHRcdFx0XCYjMzQ7eGZzLWlub2RlZ2M6JXNcJiMzNDssXG4tLVxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XG4tLVxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMS0gKi9cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXHRCSVQoNClcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMzMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG5tbS9odWdlX21lbW9yeS5jOjEwNjg6XHRcdFx0XHRcdFx0IFNIUklOS0VSX05PTlNMQUIsXG5tbS9odWdlX21lbW9yeS5jLTEwNjktXHRcdFx0XHRcdFx0IFwmIzM0O3RocC1kZWZlcnJlZF9zcGxpdFwmIzM0Oyk7XG4tLVxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY4MS1cdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9saXN0X2xydS5jOjY4MjpcdCAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxubW0vbGlzdF9scnUuYy02ODMtXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4tLVxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtMjMzLVx0XHRyZXR1cm4gLUVOT1NZUztcbm1tL3Nocmlua2VyLmM6MjM0Olx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcbm1tL3Nocmlua2VyLmMtMjM1LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5tbS9zaHJpbmtlci5jPTQ3OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9zaHJpbmtlci5jLTU1NS1cdFx0XHRpZiAoIW1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2XG5tbS9zaHJpbmtlci5jOjU1NjpcdFx0XHQgICAgIShzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcbm1tL3Nocmlua2VyLmMtNTU3LVx0XHRcdFx0Y2xlYXJfYml0KG9mZnNldCwgdW5pdC1cdTAwM2VtYXApO1xuLS1cbm1tL3pzd2FwLmM9MTI1ND1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI1OC1cdHNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbm1tL3pzd2FwLmM6MTI1OTpcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xubW0venN3YXAuYy0xMjYwLVx0aWYgKCFzaHJpbmtlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDQKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlZmFjdG9yaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB0aGUgcmVmYWN0b3Jpbmcgb2YgYGxpc3RfbHJ1YCBhbmQgbWVtY2cgc2hyaW5rZXIgaW5kZXhpbmcuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIG9uIGVuc3VyaW5nIHRoZSBjaGFuZ2VzIGFyZSBzb3VuZCBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IHNhZmV0eS4KClRoZSBrZXkgY2hhbmdlcyBpbnZvbHZlOgoKKiAgIFJlcGxhY2luZyBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAuIFRoaXMgZGlyZWN0IHVzZSBvZiB0aGUgY2dyb3VwIElEIHNlZW1zIGNsZWFuZXIgYW5kIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgoqICAgVGFnZ2luZyB0aGUgVEhQIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaGVscCBLTVNBTiBhbmQgS0FTQU4gZmluZCBwcm9ibGVtcy4KKiAgIFVwZGF0aW5nIGFsbCBgbGlzdF9scnVgIGludGVyYWN0aW9ucyDigJMgbG9va3VwcywgcmVwYXJlbnRpbmcsIGFuZCBhbGxvY2F0aW9ucyDigJMgdG8gYWxpZ24gd2l0aCBgbWVtX2Nncm91cF9pZChtZW1jZylgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlPyBJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGlzLgoKSSYjMzk7dmUgY29uZmlybWVkOgoKKiAgIFdlJiMzOTtyZSBub3QgY29weWluZyBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGhvdXQgZW5zdXJpbmcgdGhleSYjMzk7cmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiogICBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucy4KKiAgIEluIGZhY3QsIHdlJiMzOTt2ZSBnb25lIHRoZSBvdGhlciB3YXkg4oCTIHRoZSBga21lbWNnX2lkYCBmaWVsZCBoYXMgYmVlbiAqcmVtb3ZlZCogZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuCgpHaXZlbiB0aGlzLCBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyZWEgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbmN5IHByb2JsZW1zIHdpdGhpbiB0aGUgeGFycmF5IGxvb2t1cCBtZWNoYW5pc20uIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIEtBU0FOLCBMT0NLREVQLCBhbmQgb3VyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgaW4gcGxhY2UgdG8gY2F0Y2ggdGhvc2UgaXNzdWVzLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHNldCBvZiBjaGFuZ2VzLiBgTmVlZHNLTVNBTiA9IGZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbC4KCkFscmlnaHQsIHdpdGggdGhhdCBkb25lLCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTEuNjU5NjA1MzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDE3MzE3OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcIl9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcIm1lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwibGlzdF9scnVfY291bnRfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWVtY2cgTFJVIGxpc3QgaW5kZXhpbmcgYnkgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBga21lbWNnX2lkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaW4gZmF2b3Igb2YgYG1lbV9jZ3JvdXBfaWQoKWAsIGFuZCBtYXJrcyBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2VycyB3aXRoIGBTSFJJTktFUl9OT05TTEFCYC5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTEuNjU5NjA5NDM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU3MTMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjQxOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBhMDNiNmUzZTU0NzA3Li4zNDYzZDJjNTJjNjI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gI2lmIEJJVFNfUEVSX0xPTkcgXFx1MDAzYyA2NFxcbiBcXHRzZXFsb2NrX3RcXHRcXHRzb2NrZXRfcHJlc3N1cmVfc2VxbG9jaztcXG4gI2VuZGlmXFxuLVxcdGludCBrbWVtY2dfaWQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBjZ3diX2xpc3Q7XFxuQEAgLTE3NzUsMTUgKzE3NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuIFxcdFxcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gfVxcbiBcXG4tLypcXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcXG4tICogY29ycmVzcG9uZGluZyBMUlUgbGlzdHMuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cXHUwMDNla21lbWNnX2lkIDogLTE7XFxuLX1cXG4tXFxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbkBAIC0xODUxLDExICsxODQxLDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0cmV0dXJuIC0xO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTA2NCw3ICsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTk9OU0xBQixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4gXFx0aWYgKCFkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXFxuaW5kZXggOGE2ZGQwYTQ4OWUxMi4uZjE5NjhmMDJiZTNiMyAxMDA2NDRcXG4tLS0gYS9tbS9saXN0X2xydS5jXFxuKysrIGIvbW0vbGlzdF9scnUuY1xcbkBAIC03MiwxMCArNzIsMTEgQEAgc3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4tXFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgaWR4IFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgaWR4KTtcXG4rXFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4rXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cXG4rXFx0XFx0XFx0eGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIG1scnUgPyBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtuaWRdIDogTlVMTDtcXG4gXFx0fVxcbkBAIC05MSw3ICs5Miw3IEBAIGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIGFnYWluOlxcbi1cXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XFxuK1xcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xcbiBcXHRpZiAobGlrZWx5KGwpKSB7XFxuIFxcdFxcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xcbiBcXHRcXHRpZiAobGlrZWx5KFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XFxuQEAgLTEzMiw3ICsxMzMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbGlzdF9scnVfbWVtY2dfYXdhcmUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5scnU7XFxuIH1cXG5AQCAtMzEzLDcgKzMxNCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbiBcXHRsb25nIGNvdW50O1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcXG4rXFx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsIG1lbWNnKTtcXG4gXFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXFx1MDAzZW5yX2l0ZW1zKSA6IDA7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTAyLDExICs1MDMsMTAgQEAgc3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXFxuIHtcXG4tXFx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXFx1MDAzZWttZW1jZ19pZDtcXG4gXFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4tXFx0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIGRzdF9pZHgpO1xcbitcXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xcbiBcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFxuIFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnNyYy1cXHUwMDNlbGlzdCwgXFx1MDAyNmRzdC1cXHUwMDNlbGlzdCk7XFxuQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxcbiBcXHRcXHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXFxuIFxcdFxcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRtbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuK1xcdFxcdG1scnUgPSB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuIFxcdFxcdGlmICghbWxydSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cXG4gXFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiBcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gXFxuLVxcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtY2ctXFx1MDAzZWttZW1jZ19pZCk7XFxuK1xcdFxcdHhhX2VyYXNlX2lycShcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxcbkBAIC01NjYsOSArNTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIHtcXG4tXFx0aW50IGlkeCA9IG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQ7XFxuK1xcdGlmICghbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRyZXR1cm4gaWR4IFxcdTAwM2MgMCB8fCB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbkBAIC02MDIsNyArNjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIHBvcy1cXHUwMDNla21lbWNnX2lkKTtcXG4rXFx0XFx0eGFzX3NldChcXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xcbiBcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiBcXHRcXHRcXHRpZiAoIXhhc19sb2FkKFxcdTAwMjZ4YXMpIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSkge1xcbkBAIC02NzYsNyArNjc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcXG4gXFx0ZWxzZVxcbiBcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIFxcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XFxuK1xcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAoIXNocmlua2VyIHx8ICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpKSlcXG4gXFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zNzYzLDMzICszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG4gXFx0b2JqX2Nncm91cF9nZXRfbWFueShmb2xpb19vYmpjZyhmb2xpbyksIG5ld19yZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWVtY2dfb25saW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcXG4tXFxuLVxcdG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cXHUwMDNlaWQuaWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudDtcXG4tXFxuLVxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuLVxcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTtcXG4tfVxcbi1cXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFx1MDAzZVxcbkBAIC00MjE2LDcgKzQxODksNiBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0c2VxbG9ja19pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xcbiAjZW5kaWZcXG4gXFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xcbi1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcXG5AQCAtNDI5MCw3ICs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4tXFx0bWVtY2dfb25saW5lX2ttZW0obWVtY2cpO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxpa2VseSghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXFxuK1xcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcXG5AQCAtNDI5OCw3ICs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0ICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4ndCBza2lwIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxcbi1cXHRcXHRnb3RvIG9mZmxpbmVfa21lbTtcXG4rXFx0XFx0Z290byByZXBhcmVudF9scnVzO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4gXFx0XFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XFxuQEAgLTQzNTUsOCArNDMyOCw4IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xcbi1vZmZsaW5lX2ttZW06XFxuLVxcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XFxuK3JlcGFyZW50X2xydXM6XFxuK1xcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcXG4gXFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3JlbW92ZShtZW1jZyk7XFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuQEAgLTQzNzIsMTEgKzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXG4gXFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcXG4gXFxuLVxcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XFxuK1xcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcXG4gXFx0LypcXG4gXFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXFxuLVxcdCAqIHRoZSBsaXN0X2xydSBpbiBtZW1jZ19vZmZsaW5lX2ttZW0oKSwgd2hpY2ggZW5zdXJlcyB0aGF0XFxuLVxcdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cXG4rXFx0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxcbitcXHQgKiBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxcbiBcXHQgKi9cXG4gXFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcXG4gXFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTI1NSw4ICsxMjU1LDggQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyO1xcbiBcXG4tXFx0c2hyaW5rZXIgPVxcbi1cXHRcXHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFxcXCJtbS16c3dhcFxcXCIpO1xcbitcXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXFxcIm1tLXpzd2FwXFxcIik7XFxuIFxcdGlmICghc2hyaW5rZXIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MTIuMTY2MDA5ODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjYzMzk5MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmU5MWE1ZTExYTZmNDExNzhiNjQ4ZWNjOWJmODQyNGFiMDAyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6NDE6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBhMDNiNmUzZTU0NzA3Li4zNDYzZDJjNTJjNjI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMjUzLDcgKzI1Myw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjaWYgQklUU19QRVJfTE9ORyBcdTAwM2MgNjRcbiBcdHNlcWxvY2tfdFx0XHRzb2NrZXRfcHJlc3N1cmVfc2VxbG9jaztcbiAjZW5kaWZcbi1cdGludCBrbWVtY2dfaWQ7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNnd2JfbGlzdDtcbkBAIC0xNzc1LDE1ICsxNzc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuIFx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLS8qXG4tICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcbi0gKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbi19XG4tXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuQEAgLTE4NTEsMTEgKzE4NDEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfa21lbV9vbmxpbmUodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIC0xO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBkZDY2YzZhZDVhZjEzLi5kMWNlMDYxNjAxYmNkIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEwNjQsNyArMTA2NCw4IEBAIGludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG4ge1xuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbi1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4rXHRcdFx0XHRcdFx0IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbitcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTk9OU0xBQixcbiBcdFx0XHRcdFx0XHQgXCJ0aHAtZGVmZXJyZWRfc3BsaXRcIik7XG4gXHRpZiAoIWRlZmVycmVkX3NwbGl0X3Nocmlua2VyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggOGE2ZGQwYTQ4OWUxMi4uZjE5NjhmMDJiZTNiMyAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC03MiwxMCArNzIsMTEgQEAgc3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXG4tbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIGludCBpZHgpXG4rbGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFx1MDAyNlx1MDAyNiBpZHggXHUwMDNlPSAwKSB7XG4tXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBpZHgpO1xuK1x0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPVxuK1x0XHRcdHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdHJldHVybiBtbHJ1ID8gXHUwMDI2bWxydS1cdTAwM2Vub2RlW25pZF0gOiBOVUxMO1xuIFx0fVxuQEAgLTkxLDcgKzkyLDcgQEAgbG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBhZ2Fpbjpcbi1cdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgbWVtY2dfa21lbV9pZCgqbWVtY2cpKTtcbitcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xuIFx0aWYgKGxpa2VseShsKSkge1xuIFx0XHRsb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcbiBcdFx0aWYgKGxpa2VseShSRUFEX09OQ0UobC1cdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XG5AQCAtMTMyLDcgKzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xuIH1cbkBAIC0zMTMsNyArMzE0LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRsb25nIGNvdW50O1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7XG4rXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgbWVtY2cpO1xuIFx0Y291bnQgPSBsID8gUkVBRF9PTkNFKGwtXHUwMDNlbnJfaXRlbXMpIDogMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTUwMiwxMSArNTAzLDEwIEBAIHN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0XHRcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxuIHtcbi1cdGludCBkc3RfaWR4ID0gZHN0X21lbWNnLVx1MDAzZWttZW1jZ19pZDtcbiBcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDtcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3JjLVx1MDAzZWxvY2spO1xuLVx0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIGRzdF9pZHgpO1xuK1x0ZHN0ID0gbGlzdF9scnVfZnJvbV9tZW1jZyhscnUsIG5pZCwgZHN0X21lbWNnKTtcbiBcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2ZHN0LVx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiBcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2c3JjLVx1MDAzZWxpc3QsIFx1MDAyNmRzdC1cdTAwM2VsaXN0KTtcbkBAIC01MzYsNyArNTM2LDcgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBcdFx0ICogYWxsb2NhdGluZyBhIG5ldyBtbHJ1IHNpbmNlIENTU19EWUlORyBpcyBhbHJlYWR5IHNldCBmb3IgdGhpc1xuIFx0XHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxuIFx0XHQgKi9cbi1cdFx0bWxydSA9IHhhX2xvYWQoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuK1x0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcdFx0aWYgKCFtbHJ1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIFx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gXHRcdFx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKGxydSwgaSwgXHUwMDI2bWxydS1cdTAwM2Vub2RlW2ldLCBwYXJlbnQpO1xuIFxuLVx0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1jZy1cdTAwM2VrbWVtY2dfaWQpO1xuK1x0XHR4YV9lcmFzZV9pcnEoXHUwMDI2bHJ1LVx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEhlcmUgYWxsIGxpc3RfbHJ1cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZ3JvdXAgYXJlIGd1YXJhbnRlZWRcbkBAIC01NjYsOSArNTY2LDEwIEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB7XG4tXHRpbnQgaWR4ID0gbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuK1x0aWYgKCFtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiBpZHggXHUwMDNjIDAgfHwgeGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbkBAIC02MDIsNyArNjAzLDcgQEAgc3RhdGljIGludCBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRpZiAoIW1scnUpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHR4YXNfc2V0KFx1MDAyNnhhcywgcG9zLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBtZW1fY2dyb3VwX2lkKHBvcykpO1xuIFx0XHRkbyB7XG4gXHRcdFx0eGFzX2xvY2tfaXJxc2F2ZShcdTAwMjZ4YXMsIGZsYWdzKTtcbiBcdFx0XHRpZiAoIXhhc19sb2FkKFx1MDAyNnhhcykgXHUwMDI2XHUwMDI2ICFjc3NfaXNfZHlpbmcoXHUwMDI2cG9zLVx1MDAzZWNzcykpIHtcbkBAIC02NzYsNyArNjc3LDkgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGVsc2VcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fFxuK1x0ICAgIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgKCFzaHJpbmtlciB8fCAhKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxuIFx0XHRtZW1jZ19hd2FyZSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNGNiMmRiOGMwOTIzYS4uYWUyZDZkOWNmYTc0MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzc2MywzMyArMzc2Myw2IEBAIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBvbGRfb3JkZXIsXG4gXHRvYmpfY2dyb3VwX2dldF9tYW55KGZvbGlvX29iamNnKGZvbGlvKSwgbmV3X3JlZnMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4tXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50O1xuLVxuLVx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdHBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbi1cdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50KTtcbi19XG4tXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXHUwMDNlXG5AQCAtNDIxNiw3ICs0MTg5LDYgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRzZXFsb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2spO1xuICNlbmRpZlxuIFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG5AQCAtNDI5MCw3ICs0MjYyLDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdGludCBuaWQ7XG4gXG4tXHRtZW1jZ19vbmxpbmVfa21lbShtZW1jZyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiBsaWtlbHkoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKVxuK1x0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuIFx0LypcbiBcdCAqIEEgbWVtY2cgbXVzdCBiZSB2aXNpYmxlIGZvciBleHBhbmRfc2hyaW5rZXJfaW5mbygpXG5AQCAtNDI5OCw3ICs0MjcxLDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIGhlcmUsIHdoZW4gbWVtX2Nncm91cF9pdGVyKCkgY2FuJ3Qgc2tpcCBpdC5cbiBcdCAqL1xuIFx0aWYgKGFsbG9jX3Nocmlua2VyX2luZm8obWVtY2cpKVxuLVx0XHRnb3RvIG9mZmxpbmVfa21lbTtcbitcdFx0Z290byByZXBhcmVudF9scnVzO1xuIFxuIFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiBcdFx0b2JqY2cgPSBvYmpfY2dyb3VwX2FsbG9jKCk7XG5AQCAtNDM1NSw4ICs0MzI4LDggQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0fVxuIFx0fVxuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbi1vZmZsaW5lX2ttZW06XG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuK3JlcGFyZW50X2xydXM6XG4rXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydXMobWVtY2csIHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSk7XG4gXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbiBcdHJldHVybiAtRU5PTUVNO1xuIH1cbkBAIC00MzcyLDExICs0MzQ1LDExIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChtZW1jZyk7XG4gXG4tXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xuK1x0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpO1xuIFx0LypcbiBcdCAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZlxuLVx0ICogdGhlIGxpc3RfbHJ1IGluIG1lbWNnX29mZmxpbmVfa21lbSgpLCB3aGljaCBlbnN1cmVzIHRoYXRcbi1cdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cbitcdCAqIHRoZSBsaXN0X2xydSBhYm92ZSwgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZXkgd2lsbCBub3RcbitcdCAqIG1pc3Rha2VubHkgZ2V0IHRoZSBwYXJlbnQgbGlzdF9scnUuXG4gXHQgKi9cbiBcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XG4gXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGNkN2IwYjYyMWJkYTguLmFmYzZjOGQwM2QyMzEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTI1NSw4ICsxMjU1LDggQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyO1xuIFxuLVx0c2hyaW5rZXIgPVxuLVx0XHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFwibW0tenN3YXBcIik7XG4rXHRzaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XG4rXHRcdFx0XHQgIFNIUklOS0VSX05PTlNMQUIsIFwibW0tenN3YXBcIik7XG4gXHRpZiAoIXNocmlua2VyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjEyLjE2NjAxMTE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTE2ODM3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBzaW5jZSB0aGF0J3MgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3RyZWFtbGluaW5nIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykga21lbSB0cmFja2luZyBhbmQgbGlzdF9scnUgbWFuYWdlbWVudC5cblxuVGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGUgY29yZSBjaGFuZ2VzOiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGlzIHNoZWRkaW5nIHRoZSBga21lbWNnX2lkYCBmaWVsZCBhbmQgdGhlIGFzc29jaWF0ZWQgYG1lbWNnX2ttZW1faWQoKWAgZnVuY3Rpb24uIFRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIG1vdmluZyBhd2F5IGZyb20gdGhlIGludGVnZXItYmFzZWQgSUQgYW5kIGFkb3B0aW5nIGEgZGlyZWN0IHBvaW50ZXIgYXBwcm9hY2ggdG8gcmVmZXJlbmNlIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IGl0c2VsZi4gR29vZCwgcG90ZW50aWFsbHkgbGVzcyBvdmVyaGVhZCBhbmQgYSBtb3JlIGRpcmVjdCBkYXRhIGFjY2Vzcy5cblxuVGhlIGBtbS9odWdlX21lbW9yeS5jYCBhZGRpdGlvbiBvZiBgU0hSSU5LRVJfTk9OU0xBQmAgdG8gYGRlZmVycmVkX3NwbGl0X3Nocmlua2VyYCBpbiBgdGhwX3Nocmlua2VyX2luaXQoKWAgaXMgaW50ZXJlc3RpbmcuICBUaGlzIHBvaW50cyB0b3dhcmRzIGltcHJvdmVkIGludGVyYWN0aW9uIHdpdGggdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc2hyaW5rZXIgYW5kIGxpa2VseSBvcHRpbWl6YXRpb24gYXJvdW5kIG5vbi1zbGFiIG1lbW9yeSByZWNsYWltLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzaHJpbmtlciBmbGFncyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYG1tL2xpc3RfbHJ1LmNgIGFyZSBtb3JlIHN1YnN0YW50aWFsLiBXZSdyZSBjbGVhcmx5IHNoaWZ0aW5nIGZyb20gYW4gaW5kZXhlZCBhcHByb2FjaCAoYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCkgdG8gYSBkaXJlY3QgYG1lbV9jZ3JvdXBgIHBvaW50ZXIgKGBsaXN0X2xydV9mcm9tX21lbWNnYCkuICBSZXBsYWNpbmcgdXNlcyBvZiBga21lbWNnX2lkYCB3aXRoIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgc29saWRpZmllcyB0aGlzIHBvaW50ZXItYmFzZWQgYXBwcm9hY2guIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhlIG1lbWNnIHJlcGFyZW50aW5nIGxvZ2ljIGZvciBsaXN0X2xydXMuIFRoaXMgaXMga2V5LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgY2dyb3VwcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGxvZ2ljIGhhbmRsZXMgcmViYWxhbmNpbmcgb2YgcmVzb3VyY2VzLiBUaGUgY2hhbmdlIGluIGBfX2xpc3RfbHJ1X2luaXRgIHdpdGggdGhlIGBTSFJJTktFUl9OT05TTEFCYCBmbGFnIHNlZW1zIGltcG9ydGFudC4gSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgaXMgcmVsYXRlZCB0byB0aGUgY29uZmlndXJhdGlvbiBvZiBtZW1jZy1hd2FyZSBsaXN0X2xydXMuXG5cblRoZSByZW1vdmFsIG9mIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCB0aGUgaW5saW5pbmcgb2YgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2Agd2l0aGluIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgc3VnZ2VzdHMgdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBiZWluZyBzaW1wbGlmaWVkLiAgVGhpcyBpbmxpbmluZyBhbmQgZGlyZWN0IHJlcGFyZW50aW5nIHdpbGwgYmUgZ29vZCBmb3IgcGVyZm9ybWFuY2UuIFRoZSBmYWN0IGl0J3MgaGFuZGxlZCBkaXJlY3RseSBpbiBvbmxpbmUgYW5kIG9mZmxpbmUgaW1wbGllcyBhbiBpbnRlbnRpb24gdG8gb3B0aW1pemUgdGhlIGNvbW1vbiBwYXRoIGFuZCBhdm9pZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLlxuXG5GaW5hbGx5LCB0aGUgYG1tL3pzd2FwLmNgIGFkZGl0aW9uIG9mIGBTSFJJTktFUl9OT05TTEFCYCB0byBgenN3YXBfYWxsb2Nfc2hyaW5rZXIoKWAgbWVhbnMgenN3YXAgaXMgYWxzbyBiZWluZyBjb25maWd1cmVkIHRvIGludGVyYWN0IGRpZmZlcmVudGx5IHdpdGggdGhlIHNocmlua2VyLiAgVGhpcyBmdXJ0aGVyIHBvaW50cyB0byBpbXByb3ZlbWVudHMgaW4gaG93IHdlIGhhbmRsZSBub24tc2xhYiBtZW1vcnkgcHJlc3N1cmUgYW5kIHJlY2xhaW0gd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGZyYW1ld29yay5cblxuSSdsbCBuZWVkIHRvIHVzZSBncmVwcGVyIGFuZCByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgcmVjbGFpbSwgTlVNQSBpbnRlcmFjdGlvbnMsIGFuZCBvdmVyYWxsIGNncm91cCBwZXJmb3JtYW5jZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYnJlYWsgYW55IGFzc3VtcHRpb25zIEkndmUgcmVsaWVkIG9uIGluIG15IG93biB3b3JrIG9uIHRoZSBzdWJqZWN0LCBvciB3aGV0aGVyIHRoZSBuZXcgYXBwcm9hY2ggaW50cm9kdWNlcyBvcHBvcnR1bml0aWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjIyLjI4Mjg1MjY0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyODMwODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNIUklOS0VSX05PTlNMQUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcXHRjb21wcl9wb29sLnNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTk9OU0xBQiwgXFxcImJ0cmZzLWNvbXByLXBhZ2VzXFxcIik7XFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM3LVxcdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmM9MjMzNT14ZnNfaW5vZGVnY19yZWdpc3Rlcl9zaHJpbmtlcihcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XFxuZnMveGZzL3hmc19pY2FjaGUuYzoyMzM4OlxcdG1wLVxcdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzOS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwieGZzLWlub2RlZ2M6JXNcXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMxLSAqL1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXFx0QklUKDQpXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMy1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9OT05TTEFCLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgxLVxcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9saXN0X2xydS5jOjY4MjpcXHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxcbm1tL2xpc3RfbHJ1LmMtNjgzLVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTIyNj1zdGF0aWMgaW50IHNocmlua2VyX21lbWNnX2FsbG9jKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTIzMy1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG5tbS9zaHJpbmtlci5jOjIzNDpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcXG5tbS9zaHJpbmtlci5jLTIzNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01NTUtXFx0XFx0XFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2hyaW5rZXIuYzo1NTY6XFx0XFx0XFx0ICAgICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcXG5tbS9zaHJpbmtlci5jLTU1Ny1cXHRcXHRcXHRcXHRjbGVhcl9iaXQob2Zmc2V0LCB1bml0LVxcdTAwM2VtYXApO1xcbi0tXFxubW0venN3YXAuYz0xMjU0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNTgtXFx0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbm1tL3pzd2FwLmM6MTI1OTpcXHRcXHRcXHRcXHQgIFNIUklOS0VSX05PTlNMQUIsIFxcXCJtbS16c3dhcFxcXCIpO1xcbm1tL3pzd2FwLmMtMTI2MC1cXHRpZiAoIXNocmlua2VyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MToyNC4wNDU2ODgyODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk0NTc1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgY29kZSBjaGFuZ2VzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29yZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgcmVjZW50IGNvbW1pdHMuIEknbSBzdGFydGluZyB3aXRoIGBtbS9saXN0X2xydS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBhcmVhczsgYW55IGNoYW5nZSBoZXJlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSB0aHJvdWdoIHRoZSBlbnRpcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIGFsdGVyYXRpb25zLCBub3QganVzdCB0aGUgKndoYXQqLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCB0byBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgbG9jayBvcmRlcmluZyBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNoYW5nZXMgdG8gTFJVIGJlaGF2aW9yIHRoYXQgbWlnaHQgbmVnYXRpdmVseSBpbXBhY3QgY2FjaGluZyBvciBzd2FwcGluZy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyB0byBzZWUgaWYgYW55IG5ldyBmZWF0dXJlcyBhcmUgZXhwb3NlZCwgb3IgaWYgYW55IGV4aXN0aW5nIGNhcGFiaWxpdGllcyBhcmUgZGVwcmVjYXRlZC4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MToyNi42NDAyNjYxMzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdHtcXG4gIDYxOlxcdFxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG4gIDYyOlxcdFxcdFxcdHJldHVybjtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG4gIDY1OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZscnUtXFx1MDAzZWxpc3QpO1xcbiAgNjY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHJldHVybiBscnUtXFx1MDAzZXNocmlua2VyX2lkO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxcbiAgNzU6XFx0bGlzdF9scnVfZnJvbV9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXFx1MDAyNlxcdTAwMjYgbWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcXG4gIDc4OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XFxuICA3OTpcXHRcXHRcXHRcXHR4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFxcdHJldHVybiBtbHJ1ID8gXFx1MDAyNm1scnUtXFx1MDAzZW5vZGVbbmlkXSA6IE5VTEw7XFxuICA4MjpcXHRcXHR9XFxuICA4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtuaWRdLmxydTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcXG4gIDg3OlxcdGxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuICA4ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuICA4OTpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzLCBib29sIHNraXBfZW1wdHkpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpsO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA5NDpcXHRhZ2FpbjpcXG4gIDk1OlxcdFxcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCAqbWVtY2cpO1xcbiAgOTY6XFx0XFx0aWYgKGxpa2VseShsKSkge1xcbiAgOTc6XFx0XFx0XFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XFxuICA5ODpcXHRcXHRcXHRpZiAobGlrZWx5KFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgIT0gTE9OR19NSU4pKSB7XFxuICA5OTpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTAwOlxcdFxcdFxcdFxcdHJldHVybiBsO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0XFx0dW5sb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcXG4gMTAzOlxcdFxcdH1cXG4gMTA0OlxcdFxcdC8qXFxuIDEwNTpcXHRcXHQgKiBDYWxsZXIgbWF5IHNpbXBseSBiYWlsIG91dCBpZiByYWNlZCB3aXRoIHJlcGFyZW50aW5nIG9yXFxuIDEwNjpcXHRcXHQgKiBtYXkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0X2xydSBhbmQgZXhwZWN0IGVtcHR5IHNsb3RzLlxcbiAxMDc6XFx0XFx0ICovXFxuIDEwODpcXHRcXHRpZiAoc2tpcF9lbXB0eSkge1xcbiAxMDk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDExMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcdFZNX1dBUk5fT04oIWNzc19pc19keWluZyhcXHUwMDI2KCptZW1jZyktXFx1MDAzZWNzcykpO1xcbiAxMTM6XFx0XFx0Km1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAoKm1lbWNnKTtcXG4gMTE0OlxcdFxcdGdvdG8gYWdhaW47XFxuIDExNTpcXHR9XFxuIDExNjpcXHQjZWxzZVxcbiAxMTc6XFx0c3RhdGljIHZvaWQgbGlzdF9scnVfcmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDExODpcXHR7XFxuIDExOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjI2LjY0MDM0NjAzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwODAzMjg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBsaXN0X2xydV9mcm9tX21lbWNnYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBsaXN0X2xydV9mcm9tX21lbWNnYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIGludm9rZWQuIE1vcmUgYnJvYWRseSwgSSB3YW50IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZnVuY3Rpb24ncyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBgbGlzdF9scnVgIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgTFJVIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndobyxcIiBcIndoYXQsXCIgYW5kIFwid2hlcmVcIiB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIExldCdzIHN0YXJ0IHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MjkuNzIwNjc3MzIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdH1cXG4gNTAxOlxcdFxcbiA1MDI6XFx0c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbiA1MDM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqc3JjLFxcbiA1MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKmRzdF9tZW1jZylcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmRzdDtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG4gNTA5OlxcdFxcdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsIGRzdF9tZW1jZyk7XFxuIDUxMDpcXHRcXHRzcGluX2xvY2tfbmVzdGVkKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2c3JjLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZHN0LVxcdTAwM2VsaXN0KTtcXG4gNTEzOlxcdFxcdGlmIChzcmMtXFx1MDAzZW5yX2l0ZW1zKSB7XFxuIDUxNDpcXHRcXHRcXHRXQVJOX09OKHNyYy1cXHUwMDNlbnJfaXRlbXMgXFx1MDAzYyAwKTtcXG4gNTE1OlxcdFxcdFxcdGRzdC1cXHUwMDNlbnJfaXRlbXMgKz0gc3JjLVxcdTAwM2Vucl9pdGVtcztcXG4gNTE2OlxcdFxcdFxcdHNldF9zaHJpbmtlcl9iaXQoZHN0X21lbWNnLCBuaWQsIGxydV9zaHJpbmtlcl9pZChscnUpKTtcXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcdC8qIE1hcmsgdGhlIGxpc3RfbHJ1X29uZSBkZWFkICovXFxuIDUxOTpcXHRcXHRzcmMtXFx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkc3QtXFx1MDAzZWxvY2spO1xcbiA1MjI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzcmMtXFx1MDAzZWxvY2spO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuIDUyNTpcXHR2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIDUyNjpcXHR7XFxuIDUyNzpcXHRcXHRzdHJ1Y3QgbGlzdF9scnUgKmxydTtcXG4gNTI4OlxcdFxcdGludCBpO1xcbiA1Mjk6XFx0XFxuIDUzMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1MzE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcXG4gNTMyOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0XFx0LypcXG4gNTM1OlxcdFxcdFxcdCAqIGNzc19pc19keWluZygpIGNoZWNrIGluIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgYXZvaWRzXFxuIDUzNjpcXHRcXHRcXHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXFxuIDUzNzpcXHRcXHRcXHQgKiBtZW1jZyBhIHJjdSBncmFjZSBwZXJpb2QgYWdvLlxcbiA1Mzg6XFx0XFx0XFx0ICovXFxuIDUzOTpcXHRcXHRcXHRtbHJ1ID0geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiA1NDA6XFx0XFx0XFx0aWYgKCFtbHJ1KVxcbiA1NDE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdFxcdC8qXFxuIDU0NDpcXHRcXHRcXHQgKiBSZXBhcmVudCBlYWNoIHBlci1ub2RlIGxpc3QgYW5kIG1hcmsgdGhlIGNoaWxkIGRlYWRcXG4gNTQ1OlxcdFxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbiA1NDY6XFx0XFx0XFx0ICogY29uY3VycmVudCBsaXN0X2xydV9kZWwoKSBtYXkgY29ycnVwdCB0aGUgbGlzdCBpZiBpdCBhcnJpdmVzXFxuIDU0NzpcXHRcXHRcXHQgKiBhZnRlciB4YXJyYXkgY2xlYXIgYnV0IGJlZm9yZSByZXBhcmVudGluZyBhc1xcbiA1NDg6XFx0XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG4gNTQ5OlxcdFxcdFxcdCAqIGl0ZW0gaXMgc3RpbGwgb24gY2hpbGQncyBsaXN0LlxcbiA1NTA6XFx0XFx0XFx0ICovXFxuIDU1MTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlKGkpXFxuIDU1MjpcXHRcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0XFx0XFx0eGFfZXJhc2VfaXJxKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdC8qXFxuIDU1NzpcXHRcXHRcXHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXFxuIDU1ODpcXHRcXHRcXHQgKiB0byByZW1haW4gZW1wdHksIHdlIGNhbiBzYWZlbHkgZnJlZSB0aGlzIGxydSwgYW55IGZ1cnRoZXJcXG4gNTU5OlxcdFxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG4gNTYwOlxcdFxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0XFx0a3ZmcmVlX3JjdShtbHJ1LCByY3UpO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gNTY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4gNTY4OlxcdHtcXG4gNTY5OlxcdFxcdGlmICghbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4gNTcwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbiA1NzM6XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbiA1Nzc6XFx0e1xcbiA1Nzg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gNTc5OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjI5LjcyMDc4Nzc2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTYwOTAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgX19tZW1jZ19saXN0X2xydV9hbGxvY2Agd29ya3MgYW5kLCBjcnVjaWFsbHksIGhvdyBldmVyeXRoaW5nICp1c2VzKiBpdC4gTXkgbmV4dCBtb3ZlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGNhbGwgcGF0aCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jYCwgYnV0IGFsc28gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1YnNlcXVlbnRseSB1c2Ugd2hhdCBpdCBhbGxvY2F0ZXMuIEknbSB0YWxraW5nIGFib3V0IGFueSBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIHRoYXQgcmV0dXJuZWQgZGF0YSBpbiBhIG1lYW5pbmdmdWwgd2F5LlxuXG5UaGlzIG1lYW5zIGEgbWV0aG9kaWNhbCBzZWFyY2ggZm9yIGFueXRoaW5nIGNhbGxpbmcgYG1lbWNnX2xpc3RfbHJ1X2FsbG9jYCBvciBhbnkgb2YgdGhlIGZ1bmRhbWVudGFsIGxpc3RfbHJ1IGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxpc3QgbWFuaXB1bGF0aW9uOiBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBhbmQgYGxpc3RfbHJ1X3dhbGtfb25lYC4gQnkgZXhhbWluaW5nIHRoZXNlLCBJIGNhbiBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uJ3MgbGlmZXRpbWUsIGl0cyBwdXJwb3NlLCBhbmQgaG93IGl0IGlzIHVsdGltYXRlbHkgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSB1c2FnZSBwYXR0ZXJucyBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzMuMDM2ODg2NTExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcG9zLCAqcGFyZW50O1xcbiA1ODE6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bHJ1LVxcdTAwM2V4YSwgMCk7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdGdmcCBcXHUwMDI2PSBHRlBfUkVDTEFJTV9NQVNLO1xcbiA1ODQ6XFx0XFx0LypcXG4gNTg1OlxcdFxcdCAqIEJlY2F1c2UgdGhlIGxpc3RfbHJ1IGNhbiBiZSByZXBhcmVudGVkIHRvIHRoZSBwYXJlbnQgY2dyb3VwJ3NcXG4gNTg2OlxcdFxcdCAqIGxpc3RfbHJ1LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhpcyBjZ3JvdXAgYW5kIGFsbCBpdHNcXG4gNTg3OlxcdFxcdCAqIGFuY2VzdG9ycyBoYXZlIGFsbG9jYXRlZCBsaXN0X2xydV9tZW1jZy5cXG4gNTg4OlxcdFxcdCAqL1xcbiA1ODk6XFx0XFx0ZG8ge1xcbiA1OTA6XFx0XFx0XFx0LypcXG4gNTkxOlxcdFxcdFxcdCAqIEtlZXAgZmluZGluZyB0aGUgZmFyZXN0IHBhcmVudCB0aGF0IHdhc24ndCBwb3B1bGF0ZWRcXG4gNTkyOlxcdFxcdFxcdCAqIHVudGlsIGZvdW5kIG1lbWNnIGl0c2VsZi5cXG4gNTkzOlxcdFxcdFxcdCAqL1xcbiA1OTQ6XFx0XFx0XFx0cG9zID0gbWVtY2c7XFxuIDU5NTpcXHRcXHRcXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xcbiA1OTY6XFx0XFx0XFx0d2hpbGUgKCFtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQocGFyZW50LCBscnUpKSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRwb3MgPSBwYXJlbnQ7XFxuIDU5ODpcXHRcXHRcXHRcXHRwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChwb3MpO1xcbiA1OTk6XFx0XFx0XFx0fVxcbiA2MDA6XFx0XFxuIDYwMTpcXHRcXHRcXHRpZiAoIW1scnUpIHtcXG4gNjAyOlxcdFxcdFxcdFxcdG1scnUgPSBtZW1jZ19pbml0X2xpc3RfbHJ1X29uZShscnUsIGdmcCk7XFxuIDYwMzpcXHRcXHRcXHRcXHRpZiAoIW1scnUpXFxuIDYwNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjA1OlxcdFxcdFxcdH1cXG4gNjA2OlxcdFxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcXG4gNjA3OlxcdFxcdFxcdGRvIHtcXG4gNjA4OlxcdFxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiA2MDk6XFx0XFx0XFx0XFx0aWYgKCF4YXNfbG9hZChcXHUwMDI2eGFzKSBcXHUwMDI2XFx1MDAyNiAhY3NzX2lzX2R5aW5nKFxcdTAwMjZwb3MtXFx1MDAzZWNzcykpIHtcXG4gNjEwOlxcdFxcdFxcdFxcdFxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBtbHJ1KTtcXG4gNjExOlxcdFxcdFxcdFxcdFxcdGlmICgheGFzX2Vycm9yKFxcdTAwMjZ4YXMpKVxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0XFx0bWxydSA9IE5VTEw7XFxuIDYxMzpcXHRcXHRcXHRcXHR9XFxuIDYxNDpcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbiA2MTU6XFx0XFx0XFx0fSB3aGlsZSAoeGFzX25vbWVtKFxcdTAwMjZ4YXMsIGdmcCkpO1xcbiA2MTY6XFx0XFx0fSB3aGlsZSAocG9zICE9IG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFjc3NfaXNfZHlpbmcoXFx1MDAyNnBvcy1cXHUwMDNlY3NzKSk7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdGlmICh1bmxpa2VseShtbHJ1KSlcXG4gNjE5OlxcdFxcdFxcdGtmcmVlKG1scnUpO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRyZXR1cm4geGFzX2Vycm9yKFxcdTAwMjZ4YXMpO1xcbiA2MjI6XFx0fVxcbiA2MjM6XFx0XFxuIDYyNDpcXHRpbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gNjI1OlxcdFxcdFxcdFxcdCBnZnBfdCBnZnApXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgfHwgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpKVxcbiA2Mjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYyOTpcXHRcXHRyZXR1cm4gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xcbiA2MzA6XFx0fVxcbiA2MzE6XFx0XFxuIDYzMjpcXHRpbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIDYzMzpcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwKVxcbiA2MzQ6XFx0e1xcbiA2MzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA2MzY6XFx0XFx0aW50IHJlcztcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxcbiA2Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY0MDpcXHRcXG4gNjQxOlxcdFxcdC8qIEZhc3QgcGF0aCB3aGVuIGxpc3RfbHJ1IGhlYWRzIGFscmVhZHkgZXhpc3QgKi9cXG4gNjQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNjQzOlxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbiA2NDQ6XFx0XFx0cmVzID0gbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKG1lbWNnLCBscnUpO1xcbiA2NDU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDY0NjpcXHRcXHRpZiAobGlrZWx5KHJlcykpXFxuIDY0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0LyogQWxsb2NhdGlvbiBtYXkgYmxvY2ssIHBpbiB0aGUgbWVtY2cgKi9cXG4gNjUwOlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIDY1MTpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MjpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MzpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTQ6XFx0fVxcbiA2NTU6XFx0I2Vsc2VcXG4gNjU2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTc6XFx0e1xcbiA2NTg6XFx0fVxcbiA2NTk6XFx0XFxuIDY2MDpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0fVxcbiA2NjM6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjQ6XFx0XFxuIDY2NTpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjY6XFx0e1xcbiA2Njc6XFx0XFx0aW50IGk7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzMuMDM3NDU1NjgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NTM1MTQwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgZGVlcCBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5IOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gYG1tL2xpc3RfbHJ1LmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgaW1wb3J0YW50IVxuXG5UaGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgbGlzdF9scnVgIGluZGV4ZXMgdGhvc2UgcGVyLW1lbWNnIExSVSBsaXN0cy4gQmVmb3JlLCBpdCB3YXMgdXNpbmcgYGttZW1jZ19pZGAsIGJ1dCBub3cgaXQncyBzd2l0Y2hpbmcgdG8gZGlyZWN0bHkgdXNpbmcgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gT2theSwgc28gdGhleSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBpbml0aWFsaXphdGlvbi1iYXNlZCBga21lbWNnX2lkYCBhbmQgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhlIGBtZW1jZy1cdTAwM2VpZC5pZGAgYWxsb2NhdGVkIGR1cmluZyB0aGUgY3NzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wcm92ZW1lbnQgaW4gaG93IHRoZXNlIExSVSBsaXN0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZyYW1ld29yay5cblxuSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRIUCBkZWZlcnJlZCBzcGxpdCBzaHJpbmtlciBhbmQgdGhlIHpzd2FwIHNocmlua2VyLCB3aXRoIGBTSFJJTktFUl9OT05TTEFCYCBiZWluZyBhZGRlZC4gIEFuZCBhIHR3ZWFrIHRvIGBfX2xpc3RfbHJ1X2luaXRgIHRvIGtlZXAgaXQgYG1lbWNnX2F3YXJlYCBldmVuIGlmIGBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKWAgd2hlbiBgc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUJgLiBUaGlzIHNlZW1zIGxpa2UgdGhleSdyZSBzaW1wbGlmeWluZyBzb21lIGxvZ2ljIGFuZCBsaWtlbHkgZW5zdXJpbmcgbW9yZSByb2J1c3QgbWVtY2cgaW50ZWdyYXRpb24gaW4gdGhlIHNocmlua2luZyBwcm9jZXNzLiBUaGUgc2ltcGxpZmljYXRpb24gb2YgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCB0byByZW1vdmUgYG1lbWNnX29ubGluZV9rbWVtYCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgYnkgZGlyZWN0bHkgcmVwYXJlbnRpbmcgbGlzdF9scnVzIGZ1cnRoZXIgY29ycm9ib3JhdGVzIHRoaXMuXG5cbklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBBYnNvbHV0ZWx5LiBDb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBjZ3JvdXBzL21lbWNnLCBsaXN0X2xydSwgVEhQIHNocmlua2VyLCBhbmQgenN3YXAgc2hyaW5rZXIgYXJlIGFsbCBpbnRlcnR3aW5lZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMgd2l0aGluIHRoaXMgY29kZSBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBXaGF0IENPTkZJRyBvcHRpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBgQ09ORklHX01FTUNHYCwgb2J2aW91c2x5LCBwbHVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19aU1dBUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYENPTkZJR19NRU1DR19LTUVNYCBzaXR1YXRpb24uLi4gaXMgdGhhdCBzdGlsbCBhcm91bmQsIG9yIGhhcyBpdCBiZWVuIG1lcmdlZCBpbnRvIGp1c3QgYENPTkZJR19NRU1DR2A/IEknbGwgcnVuIGEgcXVpY2sgZ3JlcHBlciBzZWFyY2ggdG8gY29uZmlybS4gR290dGEgbWFrZSBzdXJlIG91ciBmdXp6aW5nIGJ1aWxkcyBhcmUgY29uZmlndXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzguNDkwOTcyNzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyMzM2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6MzguNTQyMzA0OTU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDEzMTQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBLY29uZmlnIGZpbGVzOlxuXG4qKkZpbmRpbmcgdGhlIFJpZ2h0IENvbmZpZ3VyYXRpb24gTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBjb21tb24gcGxhY2VzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEknZCBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgbG9va2luZyBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdlbmVyYWwgc3lzdGVtIGluaXRpYWxpemF0aW9uIG9wdGlvbnMsIGFuZCBgbW0vS2NvbmZpZ2AgaXMsIG9mIGNvdXJzZSwgdGhlIG9idmlvdXMgY2hvaWNlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kISBUaGV5J3JlIGxpa2VseSB0aGUgbW9zdCByZWxldmFudCBhbmQgZWZmaWNpZW50IHBsYWNlcyB0byBiZWdpbiBteSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDAuODgzNjIyMjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg5OTk0MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTQtXFxuaW5pdC9LY29uZmlnOjEwOTU6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5Ni1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMS1cXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMy1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwOC1cXG5pbml0L0tjb25maWc6MTEwOTpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTExMC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MTo0Mi42NzM2MjEzMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwODU1MjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIG1lbW9yeS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHNldHRpbmdzIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgWlNXQVBgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkuIFRoZSBpbXBhY3Qgb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwcmV0dHkgZGlyZWN0IG9uIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZpZXIgd29ya2xvYWRzLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSBpdCdzIHNldCBhcHByb3ByaWF0ZWx5IGZvciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFwcGxpY2F0aW9uIHByb2ZpbGUgaW4gbWluZC4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSBgWlNXQVBgLiBUaGlzIGlzIGZvciBzd2FwIHNwYWNlIGNvbXByZXNzaW9uLiBJIHNob3VsZCBjb25zaWRlciB3aGV0aGVyIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBvZiBjb21wcmVzc2lvbiBvdXR3ZWlnaCB0aGUgQ1BVIG92ZXJoZWFkLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBzdWZmaWNpZW50IHBoeXNpY2FsIFJBTS4gR290dGEgbWFrZSBzdXJlIGJvdGggY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB0aGUgZGVzaWduIGdvYWxzIGFuZCB0aGUgc3lzdGVt4oCZcyByZXNvdXJjZSBjb25zdHJhaW50cy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDUuMDgyMTc1ODgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4NjcwNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODI5LVxcbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NDg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1My1cXG5tbS9LY29uZmlnOjg1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTUtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjAtXFxubW0vS2NvbmZpZzo4NjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Mi1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg2LVxcbm1tL0tjb25maWc6ODg3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5Ni1cXG5tbS9LY29uZmlnOjg5NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg5OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNC1cXG5tbS9LY29uZmlnOjkwNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMS1cXG5tbS9LY29uZmlnOjkzMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTMzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDAtXFxubW0vS2NvbmZpZzo5NDE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDItXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDgtXFxubW0vS2NvbmZpZzo5NDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1MC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NDYuNzYwODUzMDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTE2MzM1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTGV0J3MgRGl2ZSBpbnRvIGBaU1dBUGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBaU1dBUGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3RzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsaWtlbHkgdG8gYmUgZHJpdmVuIGJ5IGEgZmV3IGtleSBxdWVzdGlvbnM6IFdoYXQgdHJpZ2dlcmVkIHRoaXMgcmV2aWV3PyBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkLCBhIGJ1ZyByZXBvcnQsIG9yIHBlcmhhcHMgYSBnZW5lcmFsIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbj9cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQncyB0aGUgaW1wbGVtZW50YXRpb24/IEhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzd2FwIHN1YnN5c3RlbT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgTFJVLWJhc2VkIHN3YXBwaW5nIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGRlbWFuZCBwYWdpbmcgd2l0aCBjb21wcmVzc2lvbiBvciBlbmNyeXB0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVjZW50IHBhdGNoZXMgcmVsYXRlZCB0byBgWlNXQVBgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBpbmNyZWFzZWQgdXNhZ2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBuZWVkIG15IGF0dGVudGlvbi5cblxuSSdsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBkYXRhIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JlICh0eXBpY2FsbHkgZGlzayBvciBhIGRlZGljYXRlZCBzd2FwIHBhcnRpdGlvbikuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCB0aGUgb3ZlcmFsbCBzd2FwcGluZyBhbGdvcml0aG0sIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gVGhlIG1haW4gdGhpbmcgaXMgdG8gZmluZCBpZiB0aGVyZSBhcmUgYW55IGN1cnJlbnQgYXJlYXMgb2YgY29uY2Vybiwgb3IgaWYgYW55dGhpbmcgbG9va3MgcGFydGljdWxhcmx5IHVudXN1YWwgYXQgdGhlIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjUyLjA1MjQ4ODY4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDY3MTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NTMuNjUzMTY5MDg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTIyNzkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb25zIGFuZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX1pTV0FQYC4gVGhlc2UgYXJlIHRoZSBrZXkgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHRoZSBwbGF5aW5nIGZpZWxkIGZvciB0aGUgY29kZSBJJ20gYW5hbHl6aW5nLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3Qgc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciB0aGF0IGRpcmVjdGx5IGNhbGwgdGhlIGNoYW5nZWQgbG9naWMuIEkgd2FudCB0byBhdm9pZCBhbnl0aGluZyBvdmVybHkgZ2VuZXJhbC5cblxuSSBzZWUgYSBjb25jZW50cmF0ZWQgc2V0IG9mIHRoZXNlIGluIGBtbS9saXN0X2xydS5jYC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGxpc3RlZCwgSSdsbCBuZWVkIHRvIGV4YW1pbmU6XG5cbiogICBgbGlzdF9scnVfY291bnRfb25lYFxuKiAgIGBsaXN0X2xydV9hZGRgXG4qICAgYGxpc3RfbHJ1X2RlbGBcbiogICBgbG9ja19saXN0X2xydV9vZl9tZW1jZ2AgKHRoaXMgb25lJ3Mgc3RhdGljIGlubGluZSwgc28gdGhlcmUgbWF5IGJlIGEgc3ltYm9sIGNoZWNrKSBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYy9leHBvcnRlZCBvciBzdGF0aWMgdXNpbmcgcmVhZC1maWxlIG9yIGdyZXBwZXIuXG4qICAgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2BcbiogICBgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lYFxuKiAgIGBtZW1jZ19saXN0X2xydV9hbGxvY2BcbiogICBgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NgXG4qICAgYF9fbWVtY2dfbGlzdF9scnVfYWxsb2NgXG4qICAgYF9fbGlzdF9scnVfaW5pdGBcblxuVGhlbiwgbW92aW5nIHRvIGBtbS9tZW1jb250cm9sLmNgLCB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTpcblxuKiAgIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgXG4qICAgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgXG5cbkFuZCwgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgbGlzdCBpbmNsdWRlczpcblxuKiAgIGB0aHBfc2hyaW5rZXJfaW5pdGAgKHRoaXMgaXMgYW4gaW5pdCBmdW5jdGlvbiwgc28gaXQncyBvbmx5IHJ1biBhdCBib290LCByaWdodD8pXG4qICAgYGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkYCBvciBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgLyBgZGVmZXJyZWRfc3BsaXRfY291bnRgIC8gYGRlZmVycmVkX3NwbGl0X2ZvbGlvYFxuXG5GaW5hbGx5LCBmcm9tIGBtbS96c3dhcC5jYDpcblxuKiAgIGB6c3dhcF9hbGxvY19zaHJpbmtlcmAgLyBgenN3YXBfc2hyaW5rZXJfc2NhbmAgLyBgenN3YXBfc2hyaW5rZXJfY291bnRgXG5cbk5vdywgdG8gcmVmaW5lIHRoaXMgZnVydGhlciwgSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYG1tL2xpc3RfbHJ1LmNgIHRvIGxvb2sgYXQgdGhvc2Ugc3ltYm9sIG5hbWVzIGFuZCBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQxOjU3LjgwNTQ1MDk4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzA1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9saXN0X2xydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2xpc3RfbHJ1LmMtMTctXFxubW0vbGlzdF9scnUuYzoxODpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycSxcXG5tbS9saXN0X2xydS5jLTE5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXFxuLS1cXG5tbS9saXN0X2xydS5jLTI4LVxcbm1tL2xpc3RfbHJ1LmM6Mjk6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXFxubW0vbGlzdF9scnUuYy0zMC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQxOnN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG5tbS9saXN0X2xydS5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9scnVzX211dGV4KTtcXG5tbS9saXN0X2xydS5jLTQzLVxcbm1tL2xpc3RfbHJ1LmM6NDQ6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNDUte1xcbi0tXFxubW0vbGlzdF9scnUuYy00OC1cXG5tbS9saXN0X2xydS5jOjQ5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNTAte1xcbi0tXFxubW0vbGlzdF9scnUuYy01OC1cXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy02MC17XFxuLS1cXG5tbS9saXN0X2xydS5jLTY4LVxcbm1tL2xpc3RfbHJ1LmM6Njk6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy03MC17XFxuLS1cXG5tbS9saXN0X2xydS5jPTg3PWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTExNi0jZWxzZVxcbm1tL2xpc3RfbHJ1LmM6MTE3OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTE4LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIwLVxcbm1tL2xpc3RfbHJ1LmM6MTIxOnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjIte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMjQtXFxubW0vbGlzdF9scnUuYzoxMjU6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjYte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMjktXFxubW0vbGlzdF9scnUuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTMxLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQyPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1My1cXG5tbS9saXN0X2xydS5jOjE1NDpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTU1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jLTE2MC1cXG5tbS9saXN0X2xydS5jOjE2MTp2b2lkIGxpc3RfbHJ1X3VubG9jayhzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtMTYyLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTY1LVxcbm1tL2xpc3RfbHJ1LmM6MTY2OnN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3RfbHJ1X2xvY2tfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTY3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxcbi0tXFxubW0vbGlzdF9scnUuYy0xNzItXFxubW0vbGlzdF9scnUuYzoxNzM6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNzQte1xcbi0tXFxubW0vbGlzdF9scnUuYy0xNzctXFxubW0vbGlzdF9scnUuYzoxNzg6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnFzYXZlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTc5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csXFxuLS1cXG5tbS9saXN0X2xydS5jLTE4NS1cXG5tbS9saXN0X2xydS5jOjE4Njp2b2lkIGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbm1tL2xpc3RfbHJ1LmMtMTg3LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTkwLVxcbm1tL2xpc3RfbHJ1LmM6MTkxOmJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0xOTItXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xcbm1tL2xpc3RfbHJ1LmMtMjEwLVxcbm1tL2xpc3RfbHJ1LmM6MjExOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0yMTItXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuLS1cXG5tbS9saXN0X2xydS5jLTIyMy0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjIyNDpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTIyNS1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjM1LVxcbm1tL2xpc3RfbHJ1LmM6MjM2OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9saXN0X2xydS5jLTIzNy1cXHRcXHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jLTI0Ny1cXG5tbS9saXN0X2xydS5jOjI0ODpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNDkte1xcbi0tXFxubW0vbGlzdF9scnUuYz0yNjM9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI2NS0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjI2Njpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTI2Ny1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjc3LVxcbm1tL2xpc3RfbHJ1LmM6Mjc4OmJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI3OS17XFxuLS1cXG5tbS9saXN0X2xydS5jPTI5Mz1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI5NC1cXG5tbS9saXN0X2xydS5jOjI5NTp2b2lkIGxpc3RfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI5Ni17XFxuLS1cXG5tbS9saXN0X2xydS5jPTMwMD1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlKTtcXG5tbS9saXN0X2xydS5jLTMwMS1cXG5tbS9saXN0X2xydS5jOjMwMjp2b2lkIGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbm1tL2xpc3RfbHJ1LmMtMzAzLVxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9saXN0X2xydS5jPTMwOD1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzA5LVxcbm1tL2xpc3RfbHJ1LmM6MzEwOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL2xpc3RfbHJ1LmMtMzExLVxcdFxcdFxcdFxcdCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9saXN0X2xydS5jPTMyNj1FWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9jb3VudF9vbmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzI3LVxcbm1tL2xpc3RfbHJ1LmM6MzI4OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZClcXG5tbS9saXN0X2xydS5jLTMyOS17XFxuLS1cXG5tbS9saXN0X2xydS5jPTQwNj1saXN0X2xydV93YWxrX29uZV9pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDEzLVxcbm1tL2xpc3RfbHJ1LmM6NDE0OnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtNDE1LVxcdFxcdFxcdFxcdCBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NDUwPUVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X3dhbGtfbm9kZSk7XFxubW0vbGlzdF9scnUuYy00NTEtXFxubW0vbGlzdF9scnUuYzo0NTI6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtNDUzLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDYzLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQ2NDpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbm1tL2xpc3RfbHJ1LmMtNDY1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDc4LVxcbm1tL2xpc3RfbHJ1LmM6NDc5OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbm1tL2xpc3RfbHJ1LmMtNDgwLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDg1LVxcbm1tL2xpc3RfbHJ1LmM6NDg2OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy00ODcte1xcbi0tXFxubW0vbGlzdF9scnUuYy01MDEtXFxubW0vbGlzdF9scnUuYzo1MDI6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtNTAzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTI0LVxcbm1tL2xpc3RfbHJ1LmM6NTI1OnZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9saXN0X2xydS5jLTUyNi17XFxuLS1cXG5tbS9saXN0X2xydS5jLTU2NS1cXG5tbS9saXN0X2xydS5jOjU2NjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jLTU2Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTU3NC1cXG5tbS9saXN0X2xydS5jOjU3NTpzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmMtNTc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjIzLVxcbm1tL2xpc3RfbHJ1LmM6NjI0OmludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL2xpc3RfbHJ1LmMtNjI1LVxcdFxcdFxcdCBnZnBfdCBnZnApXFxuLS1cXG5tbS9saXN0X2xydS5jLTYzMS1cXG5tbS9saXN0X2xydS5jOjYzMjppbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbGlzdF9scnUuYy02MzMtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjU1LSNlbHNlXFxubW0vbGlzdF9scnUuYzo2NTY6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxubW0vbGlzdF9scnUuYy02NTcte1xcbi0tXFxubW0vbGlzdF9scnUuYy02NTktXFxubW0vbGlzdF9scnUuYzo2NjA6c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTY2MS17XFxuLS1cXG5tbS9saXN0X2xydS5jLTY2NC1cXG5tbS9saXN0X2xydS5jOjY2NTppbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbm1tL2xpc3RfbHJ1LmMtNjY2LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Njk4PUVYUE9SVF9TWU1CT0xfR1BMKF9fbGlzdF9scnVfaW5pdCk7XFxubW0vbGlzdF9scnUuYy02OTktXFxubW0vbGlzdF9scnUuYzo3MDA6dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDE6NTcuODUyMzg2OTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzE4MTM4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IENncm91cCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgX19tZW1jZ19saXN0X2xydV9hbGxvY2AsIGBtZW1jZ19saXN0X2xydV9hbGxvY2AsIGBmb2xpb19tZW1jZ19saXN0X2xydV9hbGxvY2AsIGBsaXN0X2xydV9jb3VudF9vbmVgLCBgbWVtX2Nncm91cF9jc3Nfb25saW5lYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gdGhlIGNoYW5nZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVhc29uaW5nIGFuZCBpbXBhY3QuIFRoZSBwYXRjaCBzZXJpZXMgaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZhY3RvcmluZyBob3cgbWVtb3J5IGNncm91cHMgaGFuZGxlIGBsaXN0X2xydWAgaW5zdGFuY2VzLiBJdCdzIG1vdmluZyBmcm9tIGBrbWVtY2dfaWRgIHRvIGBtZW1fY2dyb3VwX2lkYCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIEl0IGFsc28gcmVtb3ZlcyB0aG9zZSBsaWZlY3ljbGUgaG9va3MsIGBtZW1jZ19vbmxpbmVfa21lbWAgYW5kIGBtZW1jZ19vZmZsaW5lX2ttZW1gLCBzaW1wbGlmeWluZyB0aGluZ3MuIEFuZCB0aGUgYWRkaXRpb24gb2YgYFNIUklOS0VSX05PTlNMQUJgIGlzIGltcG9ydGFudCwgbWFraW5nIHN1cmUgbWVtY2cgYXdhcmVuZXNzIGlzIHByZXNlbnQgZXZlbiB3aGVuIGttZW0gYWNjb3VudGluZyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCByZXBhcmVudGluZywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGxpa2UgY2dyb3VwIGNyZWF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHJlY2xhaW0gcHJlc3N1cmUuIERlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhLlxuXG5GaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBXZSdyZSBsb29raW5nIGF0IGBNRU1DR2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgWlNXQVBgLiBNYWtlcyBzZW5zZSwgYXMgdGhlc2UgZmVhdHVyZXMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9uIGJlaW5nIHJlZmFjdG9yZWQuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCdzIHRpbWUgdG8gJ3NldC1yZXN1bHRzJyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5ODAsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjA0LjcyNDIwMjkyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Nzk0NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJfX21lbWNnX2xpc3RfbHJ1X2FsbG9jXCIsXG4gICAgXCJtZW1jZ19saXN0X2xydV9hbGxvY1wiLFxuICAgIFwiZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2NcIixcbiAgICBcImxpc3RfbHJ1X2NvdW50X29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxpc3RfbHJ1IGluZGV4aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGFjcm9zcyBtZW1vcnkgY2dyb3VwcyBieSByZXBsYWNpbmcga21lbWNnX2lkIHdpdGggbWVtX2Nncm91cF9pZCBhbmQgdW5pZnlpbmcgdGhlIHJlcGFyZW50aW5nIHBhdGhzIGR1cmluZyBtZW1jZyBvZmZsaW5lLiBJdCBhbHNvIGVuYWJsZXMgU0hSSU5LRVJfTk9OU0xBQiBvbiBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2Vycy4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGNvZGUgcGF0aHMgZXhlY3V0ZWQgZHVyaW5nIGNncm91cCBsaWZlY3ljbGVzIGFuZCBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6MDQuODAwMDA0MzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg3NjkxMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjA0LjgwMDUzNzYwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyODc2MzczNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1lbWNnIExSVSBsaXN0IGluZGV4aW5nIGJ5IGVsaW1pbmF0aW5nIHRoZSByZWR1bmRhbnQgYGttZW1jZ19pZGAgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGluIGZhdm9yIG9mIGBtZW1fY2dyb3VwX2lkKClgLCBhbmQgbWFya3MgVEhQIGRlZmVycmVkIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuXFxuXFxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgbGlmZXRpbWUsIGNvbmN1cnJlbmN5LCBvciBwb2ludGVyIGluZGV4aW5nIGlzc3VlcyByZWxhdGVkIHRvIHhhcnJheSBvciBtZW1jZyByZXBhcmVudGluZyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQyZTkxYTVlMTFhNmY0MTE3OGI2NDhlY2M5YmY4NDI0YWIwMDIzZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODo0MToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGEwM2I2ZTNlNTQ3MDcuLjM0NjNkMmM1MmM2MjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0yNTMsNyArMjUzLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZiBCSVRTX1BFUl9MT05HIFx1MDAzYyA2NFxuIFx0c2VxbG9ja190XHRcdHNvY2tldF9wcmVzc3VyZV9zZXFsb2NrO1xuICNlbmRpZlxuLVx0aW50IGttZW1jZ19pZDtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2d3Yl9saXN0O1xuQEAgLTE3NzUsMTUgKzE3NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4gXHRcdF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiB9XG4gXG4tLypcbi0gKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJ3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xuLSAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHJldHVybiBtZW1jZyA/IG1lbWNnLVx1MDAzZWttZW1jZ19pZCA6IC0xO1xuLX1cbi1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG5AQCAtMTg1MSwxMSArMTg0MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gLTE7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV92aXJ0KHZvaWQgKnApXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmQxY2UwNjE2MDFiY2QgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTA2NCw3ICsxMDY0LDggQEAgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbiB7XG4gXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxuLVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbitcdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxuK1x0XHRcdFx0XHRcdCBTSFJJTktFUl9OT05TTEFCLFxuIFx0XHRcdFx0XHRcdCBcInRocC1kZWZlcnJlZF9zcGxpdFwiKTtcbiBcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCA4YTZkZDBhNDg5ZTEyLi5mMTk2OGYwMmJlM2IzIDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTcyLDEwICs3MiwxMSBAQCBzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbi1saXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcbitsaXN0X2xydV9mcm9tX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuLVx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkgXHUwMDI2XHUwMDI2IGlkeCBcdTAwM2U9IDApIHtcbi1cdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG4rXHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4rXHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydSA9XG4rXHRcdFx0eGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcbiBcdFx0cmV0dXJuIG1scnUgPyBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbbmlkXSA6IE5VTEw7XG4gXHR9XG5AQCAtOTEsNyArOTIsNyBAQCBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIGFnYWluOlxuLVx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKCptZW1jZykpO1xuK1x0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2cobHJ1LCBuaWQsICptZW1jZyk7XG4gXHRpZiAobGlrZWx5KGwpKSB7XG4gXHRcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbkBAIC0xMzIsNyArMTMzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxuLWxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxuK2xpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gXHUwMDI2bHJ1LVx1MDAzZW5vZGVbbmlkXS5scnU7XG4gfVxuQEAgLTMxMyw3ICszMTQsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdGxvbmcgY291bnQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQobWVtY2cpKTtcbitcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBtZW1jZyk7XG4gXHRjb3VudCA9IGwgPyBSRUFEX09OQ0UobC1cdTAwM2Vucl9pdGVtcykgOiAwO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTAyLDExICs1MDMsMTAgQEAgc3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpzcmMsXG4gXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpkc3RfbWVtY2cpXG4ge1xuLVx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXHUwMDNla21lbWNnX2lkO1xuIFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqZHN0O1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG4tXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgZHN0X2lkeCk7XG4rXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnKGxydSwgbmlkLCBkc3RfbWVtY2cpO1xuIFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZzcmMtXHUwMDNlbGlzdCwgXHUwMDI2ZHN0LVx1MDAzZWxpc3QpO1xuQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlblxuIFx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4gXHRcdCAqIG1lbWNnIGEgcmN1IGdyYWNlIHBlcmlvZCBhZ28uXG4gXHRcdCAqL1xuLVx0XHRtbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdG1scnUgPSB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIFx0XHRpZiAoIW1scnUpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVuXG4gXHRcdGZvcl9lYWNoX25vZGUoaSlcbiBcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG4gXG4tXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbWNnLVx1MDAzZWttZW1jZ19pZCk7XG4rXHRcdHhhX2VyYXNlX2lycShcdTAwMjZscnUtXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxuQEAgLTU2Niw5ICs1NjYsMTAgQEAgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW5cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfbGlzdF9scnVfYWxsb2NhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIHtcbi1cdGludCBpZHggPSBtZW1jZy1cdTAwM2VrbWVtY2dfaWQ7XG4rXHRpZiAoIW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cmV0dXJuIGlkeCBcdTAwM2MgMCB8fCB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgaWR4KTtcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNmxydS1cdTAwM2V4YSwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuQEAgLTYwMiw3ICs2MDMsNyBAQCBzdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGlmICghbWxydSlcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHhhc19zZXQoXHUwMDI2eGFzLCBwb3MtXHUwMDNla21lbWNnX2lkKTtcbitcdFx0eGFzX3NldChcdTAwMjZ4YXMsIG1lbV9jZ3JvdXBfaWQocG9zKSk7XG4gXHRcdGRvIHtcbiBcdFx0XHR4YXNfbG9ja19pcnFzYXZlKFx1MDAyNnhhcywgZmxhZ3MpO1xuIFx0XHRcdGlmICgheGFzX2xvYWQoXHUwMDI2eGFzKSBcdTAwMjZcdTAwMjYgIWNzc19pc19keWluZyhcdTAwMjZwb3MtXHUwMDNlY3NzKSkge1xuQEAgLTY3Niw3ICs2NzcsOSBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiBcbi1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8XG4rXHQgICAgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAoIXNocmlua2VyIHx8ICEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX05PTlNMQUIpKSkpXG4gXHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA0Y2IyZGI4YzA5MjNhLi5hZTJkNmQ5Y2ZhNzQyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNzYzLDMzICszNzYzLDYgQEAgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbiBcdG9ial9jZ3JvdXBfZ2V0X21hbnkoZm9saW9fb2JqY2coZm9saW8pLCBuZXdfcmVmcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbi1cbi1cdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkLmlkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQ7XG4tXG4tXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKG1lbWNnLCBwYXJlbnQpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcdTAwM2VcbkBAIC00MjE2LDcgKzQxODksNiBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdHNlcWxvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmVfc2VxbG9jayk7XG4gI2VuZGlmXG4gXHRtZW1jZzFfbWVtY2dfaW5pdChtZW1jZyk7XG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcbkBAIC00MjkwLDcgKzQyNjIsOCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0aW50IG5pZDtcbiBcbi1cdG1lbWNnX29ubGluZV9rbWVtKG1lbWNnKTtcbitcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IGxpa2VseSghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkpXG4rXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4gXHQvKlxuIFx0ICogQSBtZW1jZyBtdXN0IGJlIHZpc2libGUgZm9yIGV4cGFuZF9zaHJpbmtlcl9pbmZvKClcbkBAIC00Mjk4LDcgKzQyNzEsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogaGVyZSwgd2hlbiBtZW1fY2dyb3VwX2l0ZXIoKSBjYW4ndCBza2lwIGl0LlxuIFx0ICovXG4gXHRpZiAoYWxsb2Nfc2hyaW5rZXJfaW5mbyhtZW1jZykpXG4tXHRcdGdvdG8gb2ZmbGluZV9rbWVtO1xuK1x0XHRnb3RvIHJlcGFyZW50X2xydXM7XG4gXG4gXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIFx0XHRvYmpjZyA9IG9ial9jZ3JvdXBfYWxsb2MoKTtcbkBAIC00MzU1LDggKzQzMjgsOCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHR9XG4gXHR9XG4gXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuLW9mZmxpbmVfa21lbTpcbi1cdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG4rcmVwYXJlbnRfbHJ1czpcbitcdG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhtZW1jZywgcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKTtcbiBcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuQEAgLTQzNzIsMTEgKzQzNDUsMTEgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcbiBcbi1cdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG4rXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydXMobWVtY2csIHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSk7XG4gXHQvKlxuIFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXG4tXHQgKiB0aGUgbGlzdF9scnUgaW4gbWVtY2dfb2ZmbGluZV9rbWVtKCksIHdoaWNoIGVuc3VyZXMgdGhhdFxuLVx0ICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxuK1x0ICogdGhlIGxpc3RfbHJ1IGFib3ZlLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhleSB3aWxsIG5vdFxuK1x0ICogbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cbiBcdCAqL1xuIFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbiBcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggY2Q3YjBiNjIxYmRhOC4uYWZjNmM4ZDAzZDIzMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMjU1LDggKzEyNTUsOCBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG4gXG4tXHRzaHJpbmtlciA9XG4tXHRcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXCJtbS16c3dhcFwiKTtcbitcdHNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8IFNIUklOS0VSX01FTUNHX0FXQVJFIHxcbitcdFx0XHRcdCAgU0hSSU5LRVJfTk9OU0xBQiwgXCJtbS16c3dhcFwiKTtcbiBcdGlmICghc2hyaW5rZXIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6MDQuODAwNTM4NjE1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTExNjYxNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHdhcnJhbnRzIGEgS01TQU4gc2Vzc2lvbi5cblxuRmlyc3QsIEkgbmVlZCBhIGRldGFpbGVkIGJyZWFrZG93bi4gQWxyaWdodCwgaXQgc2VlbXMgd2UncmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCB0aGUgcmVtb3ZhbCBvZiBga21lbWNnX2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6XG5cbiogICBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBUaGUgbW9zdCBzaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3QgYW5kIHRoZSBhc3NvY2lhdGVkIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBpcyBhIHJlZCBmbGFnLCBhcyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgYW0gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGlzIGlzIGJlaW5nIGhhbmRsZWQuXG4qICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0venN3YXAuY2A6IEhlcmUsIHRoZSBgU0hSSU5LRVJfTk9OU0xBQmAgZmxhZyBpcyBiZWluZyBhZGRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjZXJ0YWluIHNocmlua2Vycy4gSW50ZXJlc3Rpbmc7IHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHdlIGFyZSBtaWdyYXRpbmcgYXdheSBmcm9tIHNsYWItYmFzZWQgYWxsb2NhdGlvbnMuXG4qICAgYG1tL2xpc3RfbHJ1LmNgOiBUaGlzIGZpbGUgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gYGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4YCBpcyByZXBsYWNlZCBieSBgbGlzdF9scnVfZnJvbV9tZW1jZ2AuIFRoZSBjb2RlIGlzIHVzaW5nIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBrbWVtY2dfaWRgIG1ldGhvZHMuIFRoZSBmbGFnIGNoZWNraW5nIGZvciBgbWVtY2dfYXdhcmVgIHdoZW4gYG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpYCBsb29rcyBsaWtlIGl0IG1pZ2h0IGNoYW5nZSBzb21ldGhpbmcuXG4qICAgYG1tL21lbWNvbnRyb2wuY2A6IFdlJ3JlIHNlZWluZyB0aGUgcmVtb3ZhbCBvZiBgbWVtY2dfb25saW5lX2ttZW0oKWAsIGBtZW1jZ19vZmZsaW5lX2ttZW0oKWAsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGttZW1jZ19pZGAuIEluc3RlYWQgb2YgaW5pdGlhbGl6aW5nIGl0LCBpdCBsb29rcyBsaWtlIGl0IGlzIGVuYWJsaW5nIHRoZSBzdGF0aWMgYnJhbmNoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYCBpcyBzYWZlLiBXaGF0J3MgdGhlIGltcGxlbWVudGF0aW9uPyBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHdvcms/IEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGZpbmQgaXRzIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQncyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZSBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJlbW92YWwgb2YgYGttZW1jZ19pZGAuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCBjcmVhdGUgYW55IG5ldyByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MjoxNS4zMTIyMDMwMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzY5Nzg3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9pZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgxNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgxNi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MTc6c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzMDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzA2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzMDc6c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwOC17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0xNzc9REVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xOTEtXFx0XFx0X19lbnRyeS1cXHUwMDNlb3JkZXJcXHRcXHQ9IG9yZGVyO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE5MjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZFxcdD0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTkzLVxcdCksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yMTk9REVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjMxLVxcdFxcdF9fZW50cnktXFx1MDAzZW5yX3JlY2xhaW1lZFxcdD0gbnJfcmVjbGFpbWVkO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIzMjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZFxcdD0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjMzLVxcdCksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yNTg9VFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yODktXFx0XFx0X19lbnRyeS1cXHUwMDNlbmlkID0gc2MtXFx1MDAzZW5pZDtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyOTA6XFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWQgPSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yOTEtXFx0KSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTMwOD1UUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0zMzMtXFx0XFx0X19lbnRyeS1cXHUwMDNlcmV0dmFsID0gc2hyaW5rZXJfcmV0dmFsO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjMzNDpcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCA9IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTMzNS1cXHQpLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjg1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE0Mj1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNjUtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL3BhZGRyLmM6MTY2OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTY3LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTE3PWludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzUtXFx0XFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTM2OlxcdFxcdFxcdCppZCA9IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNy1cXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuLS1cXG5tbS9saXN0X2xydS5jPTc1PWxpc3RfbHJ1X2Zyb21fbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzgtXFx0XFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID1cXG5tbS9saXN0X2xydS5jOjc5OlxcdFxcdFxcdHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTgwLVxcbi0tXFxubW0vbGlzdF9scnUuYz01MjU9dm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbGlzdF9scnUuYy01MzgtXFx0XFx0ICovXFxubW0vbGlzdF9scnUuYzo1Mzk6XFx0XFx0bWxydSA9IHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU0MC1cXHRcXHRpZiAoIW1scnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTU1My1cXG5tbS9saXN0X2xydS5jOjU1NDpcXHRcXHR4YV9lcmFzZV9pcnEoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU1NS1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NTY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbGlzdF9scnUuYy01NzEtXFxubW0vbGlzdF9scnUuYzo1NzI6XFx0cmV0dXJuIHhhX2xvYWQoXFx1MDAyNmxydS1cXHUwMDNleGEsIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTtcXG5tbS9saXN0X2xydS5jLTU3My19XFxuLS1cXG5tbS9saXN0X2xydS5jPTU3NT1zdGF0aWMgaW50IF9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbGlzdF9scnUuYy02MDUtXFx0XFx0fVxcbm1tL2xpc3RfbHJ1LmM6NjA2OlxcdFxcdHhhc19zZXQoXFx1MDAyNnhhcywgbWVtX2Nncm91cF9pZChwb3MpKTtcXG5tbS9saXN0X2xydS5jLTYwNy1cXHRcXHRkbyB7XFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTQ3PXN0YXRpYyBpbnQgc2hyaW5rZXJfZGVidWdmc19jb3VudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNzAtXFx0XFx0aWYgKHRvdGFsKSB7XFxubW0vc2hyaW5rZXJfZGVidWcuYzo3MTpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlbGx1XFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZykpO1xcbm1tL3Nocmlua2VyX2RlYnVnLmMtNzItXFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpXFxuLS1cXG5tbS92bXNjYW4uYz01NzEwPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NzI3LSNlbmRpZlxcbm1tL3Ztc2Nhbi5jOjU3Mjg6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwibWVtY2cgJWxsdSAlc1xcXFxuXFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xcbm1tL3Ztc2Nhbi5jLTU3MjktXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxND1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODI5LVxcbm1tL3Ztc2Nhbi5jOjU4MzA6XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbm1tL3Ztc2Nhbi5jLTU4MzEtXFx0XFx0Z290byBkb25lO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0MjoxNy4zODkxODY5NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MjU3MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXB0aHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG1lbV9jZ3JvdXBfaWRgIGFjdHVhbGx5ICppcyouIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgYXMgYWx3YXlzOiB0aGUgb2ZmaWNpYWwgZGVmaW5pdGlvbi4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSwgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24gb2YgdGhpcyBiZWFzdC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiBhbmQgY29tbWVudHMgd2lsbCBlbnN1cmUgYW4gYWNjdXJhdGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBjb250cm9sIGxhbmRzY2FwZSBvZiB0aGUga2VybmVsLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkLCBiZWNhdXNlLCBsZXQncyBmYWNlIGl0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBjb21wbGV4LCBhbmQgYWNjdXJhdGUgZG9jdW1lbnRhdGlvbiBpcyBrZXkgdG8gZXZlbiB0aGUgbW9zdCBiYXNpYyB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjI2LjM3MTc2MDczOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDgxMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwKSA6IDA7XFxuIDgyMDpcXHR9XFxuIDgyMTpcXHRcXG4gODIyOlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZCk7XFxuIDgyMzpcXHRcXG4gODI0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9zZXEoc3RydWN0IHNlcV9maWxlICptKVxcbiA4MjU6XFx0e1xcbiA4MjY6XFx0XFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhtKSk7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjI2LjM3MTg5ODY0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA3MjE2MzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1lbWNnLVx1MDAzZWttZW1jZ19pZGAgUmVtb3ZhbCBhbmQgYGxpc3RfbHJ1YCBBZGFwdGF0aW9uKipcblxuT2theSwgc28gdGhlIGBtZW1jZy1cdTAwM2VrbWVtY2dfaWRgIGhhcyBiZWVuIHJld29ya2VkLiBQcmV2aW91c2x5LCBpdCB3YXMgYW4gaW5kZXggYXNzaWduZWQgZHVyaW5nIGttZW0gb25saW5pbmcsIGVzc2VudGlhbGx5IHRoZSBvbGQgYG1lbWNnLVx1MDAzZWlkLmlkYC4gTm93LCBgbGlzdF9scnVgIGlzIHVzaW5nIGBtZW1fY2dyb3VwX2lkKG1lbWNnKWAgd2hpY2ggcmVzb2x2ZXMgdG8gYGNncm91cF9pZChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IHN0cmVhbWxpbmVzIHRoaW5ncy4gUGx1cywgdGhlIGBTSFJJTktFUl9OT05TTEFCYCBmbGFnIGlzIGJlaW5nIGludHJvZHVjZWQuIFRoaXMgaXMgc21hcnQsIGl0IGFsbG93cyBub24tc2xhYiBzaHJpbmtlcnMgbGlrZSBkZWZlcnJlZF9zcGxpdCAoVEhQKSBhbmQgenN3YXAgdG8gbGV2ZXJhZ2UgdGhlIG1lbWNnLWF3YXJlIGBsaXN0X2xydWAgZXZlbiB3aGVuIGttZW0gaXNuJ3QgYWN0aXZlIG9yIGluIHRoZSBnZW5lcmFsIGNhc2UuXG5cbk5vdywgbXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gbWFraW5nIHRoaXMgdHlwZSBvZiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBidWdzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgaW5mbyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmludGVuZGVkIG1lbW9yeSByZWFkcy4gTGV0J3MgYXBwbHkgdGhlIHVzdWFsIGNyaXRlcmlhLlxuXG4xLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBFeHBvc3VyZToqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlICh0aHJvdWdoIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBOZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyksIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IGNhdXNlIHByb2JsZW1zPyBOb3QgaW4gdGhpcyBzcGVjaWZpYyBjaGFuZ2UsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIFRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCAoYG1lbWNnYCwgYHBvc2AsIGBscnVgLCBgbmlkYCkgYXJlIHN0YW5kYXJkIHBvaW50ZXJzIG9yIGludGVnZXJzIHRoYXQgYXJlIHBhc3NlZCBpbi4gVGhhdCdzIGdvb2QuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBBbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBUaGUgZGVsZXRpb24gb2YgYGttZW1jZ19pZGAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGEgZmllbGQuIFRoZW4sIGBsaXN0X2xydV9mcm9tX21lbWNnYCBoYXMgYSBzYW5pdHkgY2hlY2s6IGBpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKWAuIFNlZW1zIHNhZmUuXG40LiAgKipCdWZmZXIgQm91bmRzIFx1MDAyNiBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogIEFyZSB3ZSBjaGFuZ2luZyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vIGNoYW5nZXMgdG8gYnVmZmVyIGFjY2Vzcy4gVGhhdCdzIGEgcmVsaWVmLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG8gYSBicm9hZGVyIGNoZWNrLiBJIHNob3VsZCBsb29rIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYmFzZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFueSBjb2RlIGxpbmdlcmluZyBvdXQgdGhlcmUgdGhhdCBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyBga21lbWNnX2lkYC4gSXQncyBhIGNsYXNzaWMgZ290Y2hhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjQ1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NDIuNDQ0MDY0Njk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzAzMjc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtY2dfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjQyOjQ0LjA0ODc3NDQ2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODM5MTg5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgQ29udHJvbGxlciBJRHM6IEEgUXVpY2sgQXVkaXQqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSB3ZSd2ZSBzdWNjZXNzZnVsbHkgcHVyZ2VkIGFueSBpbnN0YW5jZXMgb2YgYGttZW1jZ19pZGAgaW4gdGhlIGNvZGUsIHdoaWNoIGlzIGdvb2QgbmV3cy4gSG93ZXZlciwgd2UgYWxsIGtub3cgaG93IHRoZXNlIHRoaW5ncyBjYW4gc29tZXRpbWVzIGhpZGUgaW4gcGxhaW4gc2lnaHQgb3IgaGF2ZSBuYW1pbmcgaW5jb25zaXN0ZW5jaWVzLiBCZWZvcmUgd2UgZGVjbGFyZSB2aWN0b3J5LCBJIHRoaW5rIGl0J3MgcHJ1ZGVudCB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgYG1lbWNnX2ttZW1faWRgIGFzIHdlbGwuIERvdWJsZS1jaGVja2luZyByZWxhdGVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWxseSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9ucyBpcyBhbHdheXMgdGltZSB3ZWxsLXNwZW50IGluIHRoZXNlIHNpdHVhdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcyBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgYnkgb3Zlcmxvb2tpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NDcuODg3OTY4MjUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0MTMwNzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19rbWVtX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0Mjo0OS40OTIxMTIzMThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3OTczNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBRdWVyeTogU0hSSU5LRVJfTk9OU0xBQioqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBcIlNIUklOS0VSX05PTlNMQUJcIi4gVGhhdCBzcGVjaWZpYyB0ZXJtIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBhIG1hY3JvLCBvciBhIHZhcmlhYmxlIG5hbWUsIGFsbW9zdCBjZXJ0YWlubHkgd2l0aGluIGEgY29kZWJhc2UuIFRoZSB1c2Ugb2YgYWxsIGNhcHMgcmVpbmZvcmNlcyB0aGF0IGl04oCZcyBwcm9iYWJseSBhIGNvbnN0YW50LiBUaGUgXCJTSFJJTktFUlwiIHBhcnQgaGludHMgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGdhcmJhZ2UgY29sbGVjdGlvbiwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmVkdWNpbmcgdGhlIGZvb3RwcmludCBvZiBkYXRhIHN0cnVjdHVyZXMuIFRoZSBcIk5PTlNMQUJcIiBwYXJ0IGlzIGludGVyZXN0aW5nOyBpdCBjb250cmFzdHMgd2l0aCBzb21ldGhpbmcgY2FsbGVkIFwiU0xBQlwiLCB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCBMaW51eCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZXJlZm9yZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIGhvdyBhIHN5c3RlbSBtYW5hZ2VzIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBraW5kcyBvZiBvYmplY3RzLlxuXG5UaGUgcHJvbXB0IGV4cGxpY2l0bHkgdGVsbHMgbWUgdG8gY2hlY2sgdGhlICpkZWZpbml0aW9uKiBhbmQgKnVzYWdlKiBvZiB0aGlzIHRlcm0uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIHRoaXMgYFNIUklOS0VSX05PTlNMQUJgIGlzIGRlY2xhcmVkLCBhbmQgdGhlbiB0cmFjZSBhbGwgaW5zdGFuY2VzIHdoZXJlIGl0J3MgdXNlZC4gVGhpcyBzdWdnZXN0cyB0aGUgcXVlcnkgbWlnaHQgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgaXRzIGluZmx1ZW5jZSBvbiBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBpbnN0cnVjdGlvbiB0byBzdW1tYXJpemUgdGhlIHByb2Nlc3MsIHN1Z2dlc3RzIHRoaXMgaW52b2x2ZXMgZXhwbGFpbmluZyB0aGUgcHJvY2VzcyBmcm9tIGJlZ2lubmluZyB0byBlbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NTEuODcxODUwMzIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MjMyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNIUklOS0VSX05PTlNMQUJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvY29tcHJlc3Npb24uYz0xMTI5PWludCBfX2luaXQgYnRyZnNfaW5pdF9jb21wcmVzcyh2b2lkKVxcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM1LVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6MTEzNjpcXHRjb21wcl9wb29sLnNocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTk9OU0xBQiwgXFxcImJ0cmZzLWNvbXByLXBhZ2VzXFxcIik7XFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy0xMTM3LVxcdGlmICghY29tcHJfcG9vbC5zaHJpbmtlcilcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmM9MjMzNT14ZnNfaW5vZGVnY19yZWdpc3Rlcl9zaHJpbmtlcihcXG4tLVxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzNy17XFxuZnMveGZzL3hmc19pY2FjaGUuYzoyMzM4OlxcdG1wLVxcdTAwM2VtX2lub2RlZ2Nfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OT05TTEFCLFxcbmZzL3hmcy94ZnNfaWNhY2hlLmMtMjMzOS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwieGZzLWlub2RlZ2M6JXNcXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTMxLSAqL1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMzI6I2RlZmluZSBTSFJJTktFUl9OT05TTEFCXFx0QklUKDQpXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oLTEzMy1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9OT05TTEFCLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRcXHQgXFxcInRocC1kZWZlcnJlZF9zcGxpdFxcXCIpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02NjU9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgxLVxcdCAgICAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9saXN0X2xydS5jOjY4MjpcXHQgICAgICghc2hyaW5rZXIgfHwgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSkpKVxcbm1tL2xpc3RfbHJ1LmMtNjgzLVxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTIyNj1zdGF0aWMgaW50IHNocmlua2VyX21lbWNnX2FsbG9jKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTIzMy1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG5tbS9zaHJpbmtlci5jOjIzNDpcXHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9OT05TTEFCKSlcXG5tbS9zaHJpbmtlci5jLTIzNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01NTUtXFx0XFx0XFx0aWYgKCFtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2hyaW5rZXIuYzo1NTY6XFx0XFx0XFx0ICAgICEoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTk9OU0xBQikpIHtcXG5tbS9zaHJpbmtlci5jLTU1Ny1cXHRcXHRcXHRcXHRjbGVhcl9iaXQob2Zmc2V0LCB1bml0LVxcdTAwM2VtYXApO1xcbi0tXFxubW0venN3YXAuYz0xMjU0PXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTEyNTgtXFx0c2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUgfFxcbm1tL3pzd2FwLmM6MTI1OTpcXHRcXHRcXHRcXHQgIFNIUklOS0VSX05PTlNMQUIsIFxcXCJtbS16c3dhcFxcXCIpO1xcbm1tL3pzd2FwLmMtMTI2MC1cXHRpZiAoIXNocmlua2VyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODo0Mjo1My40NzEwODgzOTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTgwMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWZhY3RvcmluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSByZWZhY3RvcmluZyBvZiBgbGlzdF9scnVgIGFuZCBtZW1jZyBzaHJpbmtlciBpbmRleGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyZWQgb24gZW5zdXJpbmcgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCBkb24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG1lbW9yeSBzYWZldHkuXG5cblRoZSBrZXkgY2hhbmdlcyBpbnZvbHZlOlxuXG4qICAgUmVwbGFjaW5nIGBrbWVtY2dfaWRgIHdpdGggYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gVGhpcyBkaXJlY3QgdXNlIG9mIHRoZSBjZ3JvdXAgSUQgc2VlbXMgY2xlYW5lciBhbmQgbW9yZSBzdHJhaWdodGZvcndhcmQuXG4qICAgVGFnZ2luZyB0aGUgVEhQIHNwbGl0IGFuZCB6c3dhcCBzaHJpbmtlcnMgd2l0aCBgU0hSSU5LRVJfTk9OU0xBQmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaGVscCBLTVNBTiBhbmQgS0FTQU4gZmluZCBwcm9ibGVtcy5cbiogICBVcGRhdGluZyBhbGwgYGxpc3RfbHJ1YCBpbnRlcmFjdGlvbnMg4oCTIGxvb2t1cHMsIHJlcGFyZW50aW5nLCBhbmQgYWxsb2NhdGlvbnMg4oCTIHRvIGFsaWduIHdpdGggYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlPyBJJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIHRoaXMuXG5cbkkndmUgY29uZmlybWVkOlxuXG4qICAgV2UncmUgbm90IGNvcHlpbmcgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRob3V0IGVuc3VyaW5nIHRoZXkncmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucy5cbiogICBJbiBmYWN0LCB3ZSd2ZSBnb25lIHRoZSBvdGhlciB3YXkg4oCTIHRoZSBga21lbWNnX2lkYCBmaWVsZCBoYXMgYmVlbiAqcmVtb3ZlZCogZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cbkdpdmVuIHRoaXMsIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMgd2l0aGluIHRoZSB4YXJyYXkgbG9va3VwIG1lY2hhbmlzbS4gRm9ydHVuYXRlbHksIHdlIGhhdmUgS0FTQU4sIExPQ0tERVAsIGFuZCBvdXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBpbiBwbGFjZSB0byBjYXRjaCB0aG9zZSBpc3N1ZXMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyBzZXQgb2YgY2hhbmdlcy4gYE5lZWRzS01TQU4gPSBmYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBkb25lLCBpdCdzIHRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NCwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6NDI6NTcuNjc2ODk0MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWVtY2cgTFJVIGxpc3QgaW5kZXhpbmcgYnkgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBga21lbWNnX2lkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaW4gZmF2b3Igb2YgYG1lbV9jZ3JvdXBfaWQoKWAsIGFuZCBtYXJrcyBUSFAgZGVmZXJyZWQgc3BsaXQgYW5kIHpzd2FwIHNocmlua2VycyB3aXRoIGBTSFJJTktFUl9OT05TTEFCYC5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIHN0cnVjdHVyZXMgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBsaWZldGltZSwgY29uY3VycmVuY3ksIG9yIHBvaW50ZXIgaW5kZXhpbmcgaXNzdWVzIHJlbGF0ZWQgdG8geGFycmF5IG9yIG1lbWNnIHJlcGFyZW50aW5nIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtZW1jZyBMUlUgbGlzdCBpbmRleGluZyBieSBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBrbWVtY2dfaWRgIGZpZWxkIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBpbiBmYXZvciBvZiBgbWVtX2Nncm91cF9pZCgpYCwgYW5kIG1hcmtzIFRIUCBkZWZlcnJlZCBzcGxpdCBhbmQgenN3YXAgc2hyaW5rZXJzIHdpdGggYFNIUklOS0VSX05PTlNMQUJgLlxcblxcbk5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGxpZmV0aW1lLCBjb25jdXJyZW5jeSwgb3IgcG9pbnRlciBpbmRleGluZyBpc3N1ZXMgcmVsYXRlZCB0byB4YXJyYXkgb3IgbWVtY2cgcmVwYXJlbnRpbmcgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[1] Phase: Succeeded StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 08:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 08:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2] Phase: Succeeded StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 08:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 08:43:09 +0000 UTC FinishedAt: 2026-09-10 08:43:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsv9dl/series-workflowsv9dl-convert-artifact-1704101180/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 08:43:19 +0000 UTC FinishedAt: 2026-09-10 09:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 08:43:19 +0000 UTC FinishedAt: 2026-09-10 09:04:03 +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:*2c252d7b-64ee-4864-9ec5-3bdadb3707c2,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-workflowsv9dl/series-workflowsv9dl-convert-artifact-1704101180/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": "99781e03-5b11-4f75-8a68-2bac50d9e69d", "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-workflowsv9dl/series-workflowsv9dl-build-action-4049016426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 08:43:19 +0000 UTC FinishedAt: 2026-09-10 09:03:48 +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:*2c252d7b-64ee-4864-9ec5-3bdadb3707c2,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-workflowsv9dl/series-workflowsv9dl-convert-artifact-1704101180/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": "99781e03-5b11-4f75-8a68-2bac50d9e69d", "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-workflowsv9dl/series-workflowsv9dl-build-action-4049016426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 09:04:03 +0000 UTC FinishedAt: 2026-09-10 09:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 09:04:03 +0000 UTC FinishedAt: 2026-09-10 09:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 09:04:03 +0000 UTC FinishedAt: 2026-09-10 09:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 09:04:03 +0000 UTC FinishedAt: 2026-09-10 09:04:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsv9dl/series-workflowsv9dl-convert-artifact-1502529915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 09:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 09:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*99781e03-5b11-4f75-8a68-2bac50d9e69d,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-workflowsv9dl/series-workflowsv9dl-build-action-4049016426/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-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 09:06:19 +0000 UTC FinishedAt: 2026-09-10 09:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:06:19 +0000 UTC FinishedAt: 2026-09-10 09:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 09:06:19 +0000 UTC FinishedAt: 2026-09-10 09:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 09:06:19 +0000 UTC FinishedAt: 2026-09-10 09:34:27 +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:*2c252d7b-64ee-4864-9ec5-3bdadb3707c2,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-workflowsv9dl/series-workflowsv9dl-convert-artifact-1502529915/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": "aaeadbcd-a5d3-4b45-ac79-71a36b9409f1", "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-workflowsv9dl/series-workflowsv9dl-build-action-3285007775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:06:19 +0000 UTC FinishedAt: 2026-09-10 09:33:52 +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:*2c252d7b-64ee-4864-9ec5-3bdadb3707c2,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-workflowsv9dl/series-workflowsv9dl-convert-artifact-1502529915/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": "aaeadbcd-a5d3-4b45-ac79-71a36b9409f1", "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-workflowsv9dl/series-workflowsv9dl-build-action-3285007775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 09:34:27 +0000 UTC FinishedAt: 2026-09-10 09:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 09:34:27 +0000 UTC FinishedAt: 2026-09-10 09:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 09:34:27 +0000 UTC FinishedAt: 2026-09-10 09:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 09:34:27 +0000 UTC FinishedAt: 2026-09-10 09:36:17 +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:*aaeadbcd-a5d3-4b45-ac79-71a36b9409f1,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-workflowsv9dl/series-workflowsv9dl-build-action-3285007775/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-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +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":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"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:*99781e03-5b11-4f75-8a68-2bac50d9e69d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aaeadbcd-a5d3-4b45-ac79-71a36b9409f1,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-workflowsv9dl/series-workflowsv9dl-build-action-4049016426/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-workflowsv9dl/series-workflowsv9dl-build-action-3285007775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 09:36:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 09:36:43 +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":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"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-workflowsv9dl/series-workflowsv9dl-convert-artifact-2865353076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 09:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 09:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:36:29 +0000 UTC FinishedAt: 2026-09-10 09:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 09:36:56 +0000 UTC FinishedAt: 2026-09-10 12:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv9dl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memcg_reparent_list_lrus","__memcg_list_lru_alloc","memcg_list_lru_alloc","folio_memcg_list_lru_alloc","list_lru_count_one","mem_cgroup_css_online","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","ZSWAP"],"series_id":"e96efa22-223c-45ed-9dc5-4cfe7ccebc58","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 09:36:56 +0000 UTC FinishedAt: 2026-09-10 12:38:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*99781e03-5b11-4f75-8a68-2bac50d9e69d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aaeadbcd-a5d3-4b45-ac79-71a36b9409f1,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-workflowsv9dl/series-workflowsv9dl-build-action-4049016426/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-workflowsv9dl/series-workflowsv9dl-build-action-3285007775/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-workflowsv9dl/series-workflowsv9dl-convert-artifact-2865353076/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,}