Name: series-workflowd4shr Phase: Succeeded StartedAt: 2026-08-13 09:33:37 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[0] Phase: Succeeded StartedAt: 2026-08-13 09:33:37 +0000 UTC FinishedAt: 2026-08-13 09:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:33:37 +0000 UTC FinishedAt: 2026-08-13 09:37:01 +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": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "SWAP" ], "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": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "SWAP" ], "series_id": "3a8a2a5f-8b6d-4abf-954e-a1a18ee62748" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_from_private_id", "mem_cgroup_from_private_id_online", "mem_cgroup_private_id_get", "mem_cgroup_swapin_charge_folio", "__mem_cgroup_try_charge_swap", "__mem_cgroup_uncharge_swap", "__memcg1_swapout", "list_lru_walk_node", "workingset_test_recent" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG5cbkFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcyBkdWUgdG8gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLmZlZjhhMWM0MTkxYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xOTEsNiAmIzQzOzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdH07XG4gXHRib29sIGlzX3Jvb3Q7XG4mIzQzO1x0cmVmY291bnRfdCBpZF9yZWY7XG4gfTtcbiBcbiAvKlxuQEAgLTIwMiw4ICYjNDM7MjAzLDggQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzcztcbiBcbi1cdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZDtcbiYjNDM7XHQvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqL1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI3MCw2ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNlbmRpZlxuIFx0aW50IGttZW1jZ19pZDtcbiBcbiYjNDM7XHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbiYjNDM7XHRpbnQgaWQ7XG4mIzQzO1xuIFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICp2bXN0YXRzX3BlcmNwdTtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbkBAIC04MjAsOSAmIzQzOzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBtZW1jZy1cdTAwM2VpZC5pZDtcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4mIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmNcbkBAIC00MjgsNyAmIzQzOzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4mIzQzO1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAyZGM1OTk0ODRkMDA2Li5lNTE2MWUwNjFiZDExIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC02MTgsNyAmIzQzOzYxOCw3IEBAIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqL1xuIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gXG5AQCAtNjM4LDE5ICYjNDM7NjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpjZylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdC8qXG4gXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJiMzOTt0XG4gXHQgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lXG4tXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZCBhbmQgdHJhbnNmZXIgdGhlIG1lbW9yeSYjNDM7c3dhcCBjaGFyZ2UuXG4mIzQzO1x0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQuXG4gXHQgKi9cbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuIFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4tXHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4mIzQzO1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTtcbiBcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpO1xuJiM0MztcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFxuIFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4gXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbkBAIC02NTgsMTIgJiM0Mzs2NTksNiBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbiBcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgbnJfZW50cmllcyk7XG4gXG4tXHRpZiAobWVtY2cgIT0gc3dhcF9tZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChzd2FwX21lbWNnKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNnN3YXBfbWVtY2ctXHUwMDNlbWVtc3csIG5yX2VudHJpZXMpO1xuLVx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX2VudHJpZXMpO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jayB3aXRoIElSUSBvZmYuIEl0IGlzXG4gXHQgKiBpbXBvcnRhbnQgaGVyZSB0byBoYXZlIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdGhlXG5AQCAtNjc1LDcgJiM0Mzs2NzAsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xuIFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjEsOCAmIzQzOzIxLDcgQEAgdm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xuIFxuIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG4gXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG4pO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG4gXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM2OTcsNyAmIzQzOzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtMzk1NiwzNiAmIzQzOzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbiYjNDM7XHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkKTtcbiYjNDM7XHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7LyoqXG4mIzQzOyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZ1xuJiM0MzsgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4mIzQzO1x0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpKSB7XG4mIzQzO1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuJiM0MztcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0XG4tXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG4tXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0fVxuLVx0cmV0dXJuIG1lbWNnO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIG4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7e1xuJiM0MztcdGJvb2wgc3VjY2VzcztcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbiYjNDM7XG4mIzQzO1x0c3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpO1xuJiM0MztcdFZNX1dBUk5fT04oIXN1Y2Nlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTkzLDExICYjNDM7Mzk5OSw1NSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWRcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxuJiM0MzsgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuJiM0MztcbiYjNDM7XHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4mIzQzO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiB9XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxuQEAgLTQwOTgsNyAmIzQzOzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGlmICghbWVtY2cpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbiYjNDM7XHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDI0Myw5ICYjNDM7NDI5MywxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHRcdFx0ICAgRkxVU0hfVElNRSk7XG4gXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XG4gXG4tXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cbi1cdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYsIDEpO1xuLVx0Y3NzX2dldChjc3MpO1xuJiM0MztcdC8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi9cbiYjNDM7XHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvWzBdLVx1MDAzZW9iamNnO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZF9vYmpjZy1cdTAwM2VpZF9yZWYsIDEpO1xuJiM0MztcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJiMzOTtyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDI1Nyw3ICYjNDM7NDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxuIFx0ICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLlxuIFx0ICovXG4tXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCwgbWVtY2csIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBvYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzMDgsOCAmIzQzOzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbi1cbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTQzMTgsNiAmIzQzOzQzNjcsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0aW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhtZW1jZyk7XG4gXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbiYjNDM7XHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01MjE5LDExICYjNDM7NTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xuLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbiBcbkBAIC01NjIxLDI0ICYjNDM7NTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbiYjNDM7XHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuJiM0MztcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXG4gXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NjUxLDE5ICYjNDM7NTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4tXHRpZiAobWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4tXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4tXHRcdH1cbi1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0bWVtY2cgPSBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKGlkLCBucl9wYWdlcyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4mIzQzO1x0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMjgzLDYgJiM0MzsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcbiBcdCpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFxuJiM0MztcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbiBcdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbiBcbkBAIC00NzAsNyAmIzQzOzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiYjNDM7XHRpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExOTVmNTVkNTI3ZWQ0NGNmMjJkNjU5Mzk3MmFjODYyOGU4MmNlMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTozNDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggODE3MGJiODA2NmEyMi4uZmVmOGExYzQxOTFiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgc3RydWN0IG9ial9jZ3JvdXAgewogCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCX07CiAJYm9vbCBpc19yb290OwomIzQzOwlyZWZjb3VudF90IGlkX3JlZjsKIH07CiAKIC8qCkBAIC0yMDIsOCAmIzQzOzIwMyw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAKLQkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkOwomIzQzOwkvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqLwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7CiAKIAkvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovCiAJc3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7CQkvKiBCb3RoIHYxICZhbXA7IHYyICovCkBAIC0yNzAsNiAmIzQzOzI3MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKICNlbmRpZgogCWludCBrbWVtY2dfaWQ7CiAKJiM0MzsJLyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovCiYjNDM7CWludCBpZDsKJiM0MzsKIAlzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnZtc3RhdHNfcGVyY3B1OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKQEAgLTgyMCw5ICYjNDM7ODI0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7aWQ7CiB9CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpOwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpOwogCiBzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwKIAkJeGFfZm9yX2VhY2goJmFtcDtscnUtJmd0O3hhLCBpbmRleCwgbWxydSkgewogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7Ci0JCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewomIzQzOwkJCWlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTYxOCw3ICYjNDM7NjE4LDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKi8KIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAKQEAgLTYzOCwxOSAmIzQzOzYzOCwyMCBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIAlpZiAoIW9iamNnKQogCQlyZXR1cm47CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKIAkvKgogCSAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3QKIAkgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lCi0JICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQgYW5kIHRyYW5zZmVyIHRoZSBtZW1vcnkmIzQzO3N3YXAgY2hhcmdlLgomIzQzOwkgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC4KIAkgKi8KJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAlucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCXN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7Ci0JbW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpOwomIzQzOwltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpOwomIzQzOwomIzQzOwkvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqLwomIzQzOwltZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTsKIAogCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9lbnRyaWVzLAotCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpOwomIzQzOwkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiAKIAlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKIAlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CkBAIC02NTgsMTIgJiM0Mzs2NTksNiBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIAlpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpCiAJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1vcnksIG5yX2VudHJpZXMpOwogCi0JaWYgKG1lbWNnICE9IHN3YXBfbWVtY2cpIHsKLQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3Qoc3dhcF9tZW1jZykpCi0JCQlwYWdlX2NvdW50ZXJfY2hhcmdlKCZhbXA7c3dhcF9tZW1jZy0mZ3Q7bWVtc3csIG5yX2VudHJpZXMpOwotCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX2VudHJpZXMpOwotCX0KLQogCS8qCiAJICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXMKIAkgKiBpbXBvcnRhbnQgaGVyZSB0byBoYXZlIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdGhlCkBAIC02NzUsNyAmIzQzOzY3MCw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwogCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaAppbmRleCAwZjcwM2YyMzljODBmLi45Yzc0NDAwYWE3ZGRiIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLXYxLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oCkBAIC0yMSw4ICYjNDM7MjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7CiAKIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IG4pOwomIzQzO3ZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKTsKIAogLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqLwogI2lmZGVmIENPTkZJR19NRU1DR19WMQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM2OTcsNyAmIzQzOzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7CiAKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwomIzQzOwltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkOwogfQogCiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpAQCAtMzk1NiwzNiAmIzQzOzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpOwogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobWVtY2ctJmd0O2lkLmlkICZndDsgMCkgewotCQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCk7Ci0JCW1lbWNnLSZndDtpZC5pZCA9IDA7CiYjNDM7CWlmIChtZW1jZy0mZ3Q7aWQgJmd0OyAwKSB7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCk7CiYjNDM7CQltZW1jZy0mZ3Q7aWQgPSAwOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MzsvKioKJiM0MzsgKiBAb2JqY2c6IHRoZSBvYmpjZyByZXR1cm5lZCBieSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfb2JqY2cKJiM0MzsgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAomIzQzOwkJdW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQogewotCWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7CiAKLQkJLyogTWVtY2cgSUQgcGlucyBDU1MgKi8KLQkJY3NzX3B1dCgmYW1wO21lbWNnLSZndDtjc3MpOwomIzQzOwlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7b2JqY2ctJmd0O2lkX3JlZikpIHsKJiM0MzsJCW9iamNnX2ZyZWUgPSB4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJCVZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7CiYjNDM7CiYjNDM7CQkvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqLwomIzQzOwkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwogCX0KIH0KIAotc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKIHsKLQl3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7Ci0JCS8qCi0JCSAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0Ci0JCSAqIGFsd2F5cyBiZSAmZ3Q7PSAxLgotCQkgKi8KLQkJaWYgKFdBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkgewotCQkJVk1fQlVHX09OKDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7Ci0JfQotCXJldHVybiBtZW1jZzsKJiM0MzsJX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLSZndDtpZF9vYmpjZywgbWVtY2ctJmd0O2lkLCBuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwlib29sIHN1Y2Nlc3M7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKJiM0MzsKJiM0MzsJc3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO29iamNnLSZndDtpZF9yZWYpOwomIzQzOwlWTV9XQVJOX09OKCFzdWNjZXNzKTsKIH0KIAogLyoqCkBAIC0zOTkzLDExICYjNDM7Mzk5OSw1NSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bgogICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cAogICoKICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLgomIzQzOyAqCiYjNDM7ICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuCiAgKi8KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCkKIHsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJV0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7Ci0JcmV0dXJuIHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwomIzQzOwlpZiAobWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSAhPSBpZCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhbiBvbmxpbmUgbWVtY2cgZnJvbSBhIG1lbWNnIGlkCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLgomIzQzOyAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXAKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQomIzQzO3sKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwomIzQzOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTsKJiM0MzsJcmV0dXJuIG1lbWNnOwogfQogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpCkBAIC00MDk4LDcgJiM0Mzs0MTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJaWYgKCFtZW1jZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQuaWQsIE5VTEwsCiYjNDM7CWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZCwgTlVMTCwKIAkJCSBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtNDI0Myw5ICYjNDM7NDI5MywxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCQkJCSAgIEZMVVNIX1RJTUUpOwogCWxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTsKIAotCS8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqLwotCXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZC5yZWYsIDEpOwotCWNzc19nZXQoY3NzKTsKJiM0MzsJLyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqLwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBtZW1jZy0mZ3Q7bm9kZWluZm9bMF0tJmd0O29iamNnOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDttZW1jZy0mZ3Q7aWRfb2JqY2ctJmd0O2lkX3JlZiwgMSk7CiYjNDM7CW9ial9jZ3JvdXBfZ2V0KG1lbWNnLSZndDtpZF9vYmpjZyk7CiAKIAkvKgogCSAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS4KQEAgLTQyNTcsNyAmIzQzOzQzMDgsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCSAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlCiAJICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLgogCSAqLwotCXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLCBvYmpjZywgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gMDsKIGZyZWVfb2JqY2c6CkBAIC00MzA4LDggJiM0Mzs0MzU5LDYgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWxydV9nZW5fb2ZmbGluZV9tZW1jZyhtZW1jZyk7CiAKIAlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwotCi0JbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC00MzE4LDYgJiM0Mzs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAogCWludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpOwogCWxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpOwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC01MjE5LDExICYjNDM7NTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7Ci0JaWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoJmFtcDttZW1jZy0mZ3Q7Y3NzKSkKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUoaWQpOwomIzQzOwlpZiAoIW1lbWNnKQogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTsKIApAQCAtNTYyMSwyNCAmIzQzOzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuIDA7CiAJfQogCi0JbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpOwotCS8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqLwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpICZhbXA7JmFtcDsKIAkgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzLCAmYW1wO2NvdW50ZXIpKSB7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpOwogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpOwogCiYjNDM7CS8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovCiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywKIAkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCXJldHVybiAwOwogfQogCkBAIC01NjUxLDE5ICYjNDM7NTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpOwotCWlmIChtZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKLQkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCi0JCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbXN3LCBucl9wYWdlcyk7Ci0JCQllbHNlCi0JCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzKTsKLQkJfQotCQltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKGlkLCBucl9wYWdlcyk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewomIzQzOwkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKJiM0MzsJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtMjgzLDYgJiM0MzsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsCiAJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7CiAJKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAKJiM0MzsJLyogcmVwYXJlbnRlZCBtZW1jZyBsb3NlcyBpdHMgbWF4X3NlcSAqLwomIzQzOwlpZiAoIW1lbWNnKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCW1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7CiAJbWF4X3NlcSAmYW1wOz0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSAmZ3Q7Jmd0OyBMUlVfUkVGU19XSURUSDsKIApAQCAtNDcwLDcgJiM0Mzs0NzQsNyBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC4KIAkgKi8KIAlldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpOwotCWlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKQomIzQzOwlpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiAJCWV2aWN0aW9uX21lbWNnID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY1CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDY3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBNZW1jZyBJRCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyB0aGUgYG1lbWNnLSZndDtpZGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgc3Vic3lzdGVtIChtZW1jZykuIEl0JiMzOTtzIGEgcHJldHR5IHN1YnN0YW50aWFsIGNoYW5nZSwgbW92aW5nIHRoZSBgcmVmY291bnRfdCBpZF9yZWZgIGZyb20gYG1lbWNnYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWZhY3RvcmluZyBob3cgdGhlIElEIGlzIG1hbmFnZWQsIGVzc2VudGlhbGx5LiBUaGlzIGFsc28gaW52b2x2ZXMgcmVuYW1pbmcgYSBmZXcgdGhpbmdzOyBgbWVtY2ctJmd0O2lkLmlkYCBpcyBub3cgc2ltcGx5IGBtZW1jZy0mZ3Q7aWRgLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgaGFuZGxlZCB0aHJvdWdoIGBtZW1jZy0mZ3Q7aWRfb2JqY2ctJmd0O2lkX3JlZmAuCgpUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjb2RlLCBtZWFuaW5nIGl0IGhhcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCZWNhdXNlIG9mIHRoYXQsIGFuZCBrbm93aW5nIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGluIHJlZmNvdW50aW5nIGNoYW5nZXMgbGlrZSB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUsIG5vIHF1ZXN0aW9uKS4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBhcmVhcyB0byB0YXJnZXQgd2l0aCBvdXIgZnV6emVycy4gQmFzZWQgb24gdGhlIGRpZmYsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgYWRkZWQ6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAsIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgLCBgbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZGAsIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3Rlc3RfcmVjZW50YC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBwcmlvcml0aXplIGJhc2VkIG9uIGFjY2Vzc2liaWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgKnB1YmxpYyogZW50cnlwb2ludHMuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2Agc2luY2UgdGhlIGRpZmYgdG91Y2hlcyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAsIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIG1ha2VzIHRoZW0gbGlrZWx5IGVudHJ5IHBvaW50cy4KCknigJltIHRoaW5raW5nIEkgd2lsbCB1dGlsaXplIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoZXNlIGRlZmluaXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBsaWtlbHkgZ2l2ZSB1cyB0aGUgaW5mb3JtYXRpb24gdG8gZmluZCB0ZXN0IGhhcm5lc3MgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdvIGZyb20gdGhlcmUsIGFuZCBjb25zdHJ1Y3QgYW4gZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfHN0cnVjdCBtZW1fY2dyb3VwIFxcKnxpbnR8dW5zaWduZWQgbG9uZ3xib29sKSAobWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWR8bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lfG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXR8bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvfF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXB8X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXB8X19tZW1jZzFfc3dhcG91dHxsaXN0X2xydV93YWxrX25vZGV8d29ya2luZ3NldF90ZXN0X3JlY2VudClcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXN0X2xydS5oPTMyMD11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMzIzLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjMyNDp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC0zMjUtXHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY0PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjUtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ny1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NzM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5ODE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTAxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA2LSNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDgtc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oPTI4PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4tLVxubW0vaW50ZXJuYWwuaC0zNC0vKiBtbS93b3JraW5nc2V0LmMgKi9cbm1tL2ludGVybmFsLmg6MzU6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxubW0vaW50ZXJuYWwuaC0zNi1cdFx0XHQgICAgYm9vbCBmbHVzaCk7XG4tLVxubW0vbGlzdF9scnUuYz00MDU9bGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy00MTItXG5tbS9saXN0X2xydS5jOjQxMzp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtNDE0LVx0XHRcdFx0IGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz01OTc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYxOC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzo2MTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtNjIwLXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjI9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbm1tL21lbWNvbnRyb2wtdjEuaC0yMy1cbm1tL21lbWNvbnRyb2wtdjEuaDoyNDp2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG5tbS9tZW1jb250cm9sLXYxLmgtMjUtXG4tLVxubW0vbWVtY29udHJvbC5jPTM5ODM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk4Ny1cbm1tL21lbWNvbnRyb2wuYzozOTg4OnZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxubW0vbWVtY29udHJvbC5jLTM5ODkte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjMxPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2NC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjY1OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI2Ni1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jPTU2MDU9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY0OS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjUwOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTY1MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3MDItICovXG5tbS9tZW1jb250cm9sLmM6NTcwMzp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTcwNC17XG4tLVxubW0vd29ya2luZ3NldC5jPTM5Nj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4tLVxubW0vd29ya2luZ3NldC5jLTQzMy0gKi9cbm1tL3dvcmtpbmdzZXQuYzo0MzQ6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxubW0vd29ya2luZ3NldC5jLTQzNS1cdFx0XHRcdGJvb2wgZmx1c2gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgbXkgcmVnZXggZGlkbiYjMzk7dCBjYXRjaCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgLiBIbW0sIEkgd29uZGVyIHdoeS4uLiBBaCwgcmlnaHQsIGl0IHJldHVybnMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKmAuIFRoYXQmIzM5O3Mgd2h5IHRoZSByZWdleCBtaXNzZWQgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSB0aGF0IG9uZSBpbiBvdXIgZXZhbHVhdGlvbi4KCkkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBhIGZldyBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGggZm9yIGV4cGxvcmluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBtZW1vcnkgY2dyb3Vwcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscyBvZiBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZXRyaWV2ZSB0aGUgbWVtb3J5IGNncm91cCBiYXNlZCBvbiBhIHByaXZhdGUgSUQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG1lbV9jZ3JvdXAgXFwqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjgtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODI5OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MzA6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mzk4OD12b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDAwNC0gKi9cbm1tL21lbWNvbnRyb2wuYzo0MDA1OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbm1tL21lbWNvbnRyb2wuYy00MDA2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDAyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo0MDI3OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpXG5tbS9tZW1jb250cm9sLmMtNDAyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODQKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGVzZSB0d28gZnVuY3Rpb25zLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBpdHMgb25saW5lIGNvdW50ZXJwYXJ0LCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUuIEJ1dCB0aGV5IHByaW1hcmlseSBzZWVtIHRvIGZ1bmN0aW9uIGFzIGhlbHBlciByb3V0aW5lcywgd2hpY2ggcmFpc2VzIGEgcXVlc3Rpb24gb2YgdGhlaXIgd2lkZXIgaW1wYWN0IGFuZCBob3cgdGhleSBhcmUgdXNlZC4gVGhlIGtleSBlbnRyeSBwb2ludHMgdGhhdCByZWx5IG9uIHRoZW0gYXBwZWFyIHRvIGJlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFRoaXMgZ2l2ZXMgbWUgc29tZSBkaXJlY3Rpb24gYXMgdG8gd2hlcmUgdG8gbG9vayB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dCBvZiB0aGVpciB1c2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGVpciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19NRU1DR2AgaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gV2hhdCBJJiMzOTttIGxlc3MgY2VydGFpbiBhYm91dCBpcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1NXQVBgLiBHaXZlbiB0aGF0IGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBzd2FwLXJlbGF0ZWQsIHRoZXJlIGlzIGEgc3Ryb25nIHBvc3NpYmlsaXR5IHRoYXQgYENPTkZJR19TV0FQYCB3aWxsIGFsc28gYmUgYSBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHNvdXJjZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYm90aCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGxvb2sgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oI2lmZGVmfCNpZm5kZWYpIENPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcbm1tL21lbWNvbnRyb2wuYy0xMDMtXG5tbS9tZW1jb250cm9sLmM6MTA0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzMtXG5tbS9tZW1jb250cm9sLmM6MjM0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3Nz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDQtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TV0FQQ0FDSEUsXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjQwODojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtNDA5LVx0UEdQUk9NT1RFX1NVQ0NFU1MsXG4tLVxubW0vbWVtY29udHJvbC5jLTQyNy1cdFBHUkVGSUxMLFxubW0vbWVtY29udHJvbC5jOjQyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTQyOS1cdE5SX0hVR0VUTEIsXG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTUwMi1cdHggPSBSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo1MDM6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy01MDQtXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjUtXHR4ID0gUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG5tbS9tZW1jb250cm9sLmM6NTI2OiNpZmRlZiBDT05GSUdfU01QXG5tbS9tZW1jb250cm9sLmMtNTI3LVx0aWYgKHggXHUwMDNjIDApXG4tLVxubW0vbWVtY29udHJvbC5jLTUzMi1cbm1tL21lbWNvbnRyb2wuYzo1MzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTUzNC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTU5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01NjAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MC1cdFBHTEFaWUZSRUVELFxubW0vbWVtY29udHJvbC5jOjU3MTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NzItXHRTV1BJTl9aRVJPLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01NzYtXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTU4MS1cdFRIUF9GQVVMVF9BTExPQyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg1LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU4NjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtNTg3LVx0TlVNQV9QQUdFX01JR1JBVEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy03NzAtXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTc3Mi1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYz03OTI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04MDctXG5tbS9tZW1jb250cm9sLmM6ODA4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy04MDktLypcbi0tXG5tbS9tZW1jb250cm9sLmM9ODc2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy04ODgtXG5tbS9tZW1jb250cm9sLmM6ODg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xubW0vbWVtY29udHJvbC5jPTg5MT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy04OTktXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jOjkwMDojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTkwMS1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDcxLVxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTEwNzMtdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2MS1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NjMtXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTY5LVx0eyBcJiMzNDtmaWxlX3dyaXRlYmFja1wmIzM0OyxcdFx0TlJfV1JJVEVCQUNLXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NzEtXHR7IFwmIzM0O3N3YXBjYWNoZWRcJiMzNDssXHRcdFx0TlJfU1dBUENBQ0hFXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTcyLSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTE1NzQtXHR7IFwmIzM0O2Fub25fdGhwXCYjMzQ7LFx0XHRcdE5SX0FOT05fVEhQU1x0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1ODQtXHR7IFwmIzM0O3NsYWJfdW5yZWNsYWltYWJsZVwmIzM0OyxcdFx0TlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0JcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTg1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cdHsgXCYjMzQ7aHVnZXRsYlwmIzM0OyxcdFx0XHROUl9IVUdFVExCXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYxMC1cdHsgXCYjMzQ7cGdyZWZpbGxcJiMzNDssXHRcdFx0UEdSRUZJTExcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNjExOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVx0eyBcJiMzNDtwZ3Byb21vdGVfc3VjY2Vzc1wmIzM0OyxcdFx0UEdQUk9NT1RFX1NVQ0NFU1NcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTE2MzM9c3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjYyLVx0Y2FzZSBQR1JFRklMTDpcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbm1tL21lbWNvbnRyb2wuYy0xNjY0LVx0Y2FzZSBQR1BST01PVEVfU1VDQ0VTUzpcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY3Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE2NzctXG5tbS9tZW1jb250cm9sLmM6MTY3ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTY3OS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE2ODUtXG5tbS9tZW1jb250cm9sLmM6MTY4NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjk4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTYtXG5tbS9tZW1jb250cm9sLmM6MTcxNzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE3MTgtXHRcdGlmICh1bmxpa2VseShtZW1vcnlfc3RhdHNbaV0uaWR4ID09IE5SX0hVR0VUTEIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzQ2LVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODE3LVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODE5LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MTctXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjgxOS1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDQ3LVxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMwNDktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzcxNi1cbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTM3MTgtXG4tLVxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTMtXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbm1tL21lbWNvbnRyb2wuYzo0MTk0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTQxOTUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjA5PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjIyLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTQyMjQtXHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjMyLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyMzQtXHRcdG1lbWNnLVx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDI0My1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNDQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNDUtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNzktXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MzgxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbi0tXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDE5LVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fZ3JvdXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0NDIwOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00NDIxLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2V6c3dhcF9tYXgsIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NDIzLSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjQ0MjQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQ0MjUtXHRwYWdlX2NvdW50ZXJfc2V0X21heChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDQ1Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0ODgtXG5tbS9tZW1jb250cm9sLmM6NDQ4OTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjE5PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MzUtXG5tbS9tZW1jb250cm9sLmM6NDYzNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00OTc1PWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk4OS1cbm1tL21lbWNvbnRyb2wuYzo0OTkwOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jPTUwNzI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMjUtXHR9LFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9tZW1jb250cm9sLmMtNTEyNy1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE0Nj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNTctXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG5tbS9tZW1jb250cm9sLmM6NTE1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDAtXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NjQyLS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg5NC1cbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODk2LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYwOTgtXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmM6NjA5OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MTAyOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTAzLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz05ND1lbnVtIHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTAxLVxubW0vbWVtY29udHJvbC12MS5jOjEwMjojaWZkZWYgQ09ORklHX0xPQ0tERVBcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDMtc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz00MDU9c3RhdGljIHU2NCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNDEwLVxubW0vbWVtY29udHJvbC12MS5jOjQxMTojaWZkZWYgQ09ORklHX01NVVxubW0vbWVtY29udHJvbC12MS5jLTQxMi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NTk3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02MDYtXG5tbS9tZW1jb250cm9sLXYxLmM6NjA3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTYwOC0vKipcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjAzMz1zdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX3Jlc2V0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDY5LVxubW0vbWVtY29udHJvbC12MS5jOjIwNzA6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9tZW1jb250cm9sLXYxLmMtMjA3MS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjE2MD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTYyLVx0TlJfQU5PTl9NQVBQRUQsXG5tbS9tZW1jb250cm9sLXYxLmM6MjE2MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2NC1cdE5SX0FOT05fVEhQUyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3MS1cdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFLFxubW0vbWVtY29udHJvbC12MS5jOjIxNzI6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3My1cdE1FTUNHX1NXQVAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIxNzg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxODAtXHRcJiMzNDtyc3NcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4MTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4Mi1cdFwmIzM0O3Jzc19odWdlXCYjMzQ7LFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg5LVx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjE5MDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTkxLVx0XCYjMzQ7c3dhcFwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjIyMD12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjc0LVxubW0vbWVtY29udHJvbC12MS5jOjIyNzU6I2lmZGVmIENPTkZJR19ERUJVR19WTVxubW0vbWVtY29udHJvbC12MS5jLTIyNzYtXHR7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIzMzE9c3RhdGljIGludCBtZW1fY2dyb3VwX29vbV9jb250cm9sX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIzNTAtXG5tbS9tZW1jb250cm9sLXYxLmM6MjM1MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zbGFiX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMzYyPXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjQyOC1cdH0sXG5tbS9tZW1jb250cm9sLXYxLmM6MjQyOTojaWZkZWYgQ09ORklHX05VTUFcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDMwLVx0e1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNDU3LVx0fSxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vbWVtY29udHJvbC12MS5jLTI0NTktXHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwLVJlbGF0ZWQgTWVtb3J5IENncm91cCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgY2dyb3VwIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMuIEkgc2VlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgYWxsIGNsZWFybHkgZ3VhcmRlZCBieSBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEkgaW5pdGlhbGx5IHRob3VnaHQgaXQgKnNob3VsZCogYWxzbyBiZSB1bmRlciBgQ09ORklHX1NXQVBgIGdpdmVuIGl0cyBuYW1lLCBhbmQgdGhhdCBpdCYjMzk7cyBpbiBgbW0vbWVtY29udHJvbC5jYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQgKmlzbiYjMzk7dCogZGlyZWN0bHkgdW5kZXIgYSBgI2lmZGVmIENPTkZJR19TV0FQYCBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCB3aGljaCBpcyBzdHJhbmdlLiBJIG5lZWQgdG8gYmUgc3VyZS4gQWxyaWdodCwgbm93IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgdW5kZXIgc29tZSBvdGhlciBjb25kaXRpb25hbC4gQWgsIGZvdW5kIGl0LiBMb29raW5nIGF0IGxpbmUgNTY0MSBJIGNhbiBzZWUgdGhhdCBgI2lmZGVmIENPTkZJR19TV0FQYCBpcyB1c2VkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyMzE9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjY0LSAqL1xubW0vbWVtY29udHJvbC5jOjUyNjU6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MjY2LVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24sIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB0aGluZyBldmVuICphbHdheXMqIGVuYWJsZWQ/IE9yIGlzIGl0IHR1Y2tlZCBhd2F5IGJlaGluZCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwsIG1heWJlIG9ubHkgY29tcGlsZWQgaW4gZm9yIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucywgb3IgcGVyaGFwcyBhIGZlYXR1cmUgZmxhZyB0aGF0JiMzOTtzIG9ubHkgYWN0aXZlIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBxdWljayBzY2FuIGZvciBgI2lmZGVmYCBzdGF0ZW1lbnRzIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvciB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBuZWNlc3NhcnkgZmlyc3Qgc3RlcC4gVGhhdCYjMzk7bGwgc2F2ZSBtZSBmcm9tIGNoYXNpbmcgYSBnaG9zdCBsYXRlciwgeW91IGtub3c/IEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHdhc3RlZCBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xMDI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7XG5tbS9tZW1jb250cm9sLmMtMTAzLVxubW0vbWVtY29udHJvbC5jOjEwNDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy0xMDUtc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjMzLVxubW0vbWVtY29udHJvbC5jOjIzNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM1LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDA0LVx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo0MDU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNDA2LVx0TlJfU1dBUENBQ0hFLFxubW0vbWVtY29udHJvbC5jLTQwNy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtY29udHJvbC5jLTQwOS1cdFBHUFJPTU9URV9TVUNDRVNTLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjctXHRQR1JFRklMTCxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy00MjktXHROUl9IVUdFVExCLFxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODg9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDItXHR4ID0gUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG5tbS9tZW1jb250cm9sLmM6NTAzOiNpZmRlZiBDT05GSUdfU01QXG5tbS9tZW1jb250cm9sLmMtNTA0LVx0aWYgKHggXHUwMDNjIDApXG4tLVxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1LVx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTUyNy1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzItXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MzQtc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xubW0vbWVtY29udHJvbC5jOjU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTYwLVx0UEdQR0lOLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzAtXHRQR0xBWllGUkVFRCxcbm1tL21lbWNvbnRyb2wuYzo1NzE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNTcyLVx0U1dQSU5fWkVSTyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc0LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTc2LVx0WlNXUElOLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzktI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTgwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy01ODEtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo1ODY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtY29udHJvbC5jLTU4Ny1cdE5VTUFfUEFHRV9NSUdSQVRFLFxuLS1cbm1tL21lbWNvbnRyb2wuYz03NjI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNzcwLVx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo3NzE6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy03NzItXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9NzkyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODA3LVxubW0vbWVtY29udHJvbC5jOjgwODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODA5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTg3Nj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtODg4LVxubW0vbWVtY29udHJvbC5jOjg4OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODkwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtODk5LVx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy05MDEtXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA2ND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA3MS1cbm1tL21lbWNvbnRyb2wuYzoxMDcyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NjEtXHR7IFwmIzM0O3NobWVtXCYjMzQ7LFx0XHRcdE5SX1NITUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTYyOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2OS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU3MDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmMtMTU3Mi0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNTczOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTg0LVx0eyBcJiMzNDtzbGFiX3VucmVjbGFpbWFibGVcJiMzNDssXHRcdE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE1ODYtXHR7IFwmIzM0O2h1Z2V0bGJcJiMzNDssXHRcdFx0TlJfSFVHRVRMQlx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jLTE2MTAtXHR7IFwmIzM0O3BncmVmaWxsXCYjMzQ7LFx0XHRcdFBHUkVGSUxMXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtMTYxMi1cdHsgXCYjMzQ7cGdwcm9tb3RlX3N1Y2Nlc3NcJiMzNDssXHRcdFBHUFJPTU9URV9TVUNDRVNTXHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjMzPXN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cdGNhc2UgUEdSRUZJTEw6XG5tbS9tZW1jb250cm9sLmM6MTY2MzojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cdGNhc2UgUEdQUk9NT1RFX1NVQ0NFU1M6XG4tLVxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjc3LVxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE2NzktdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxubW0vbWVtY29udHJvbC5jOjE2ODY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjg3LXN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5OD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxubW0vbWVtY29udHJvbC5jOjE3MTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNzE4LVx0XHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc0NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc0Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE3OTY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTgxNy1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTgxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTgxOS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yODA1PXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODE3LVxubW0vbWVtY29udHJvbC5jOjI4MTg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jPTMwMzc9c3RydWN0IG9ial9jZ3JvdXAgKmdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA0Ny1cbm1tL21lbWNvbnRyb2wuYzozMDQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTM3MTYtXG5tbS9tZW1jb250cm9sLmM6MzcxNzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTkzLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG5tbS9tZW1jb250cm9sLmM6NDE5NDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MTk1LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwOT1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYzo0MjIzOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00MjI0LVx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIzMi1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjM0LVx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNDMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjQ0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjQ1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNzU9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00Mzc5LVxubW0vbWVtY29udHJvbC5jOjQzODA6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0MTM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQxOS1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDQyMDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDQyMS1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfbWF4LCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0NDI0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00NDI1LVx0cGFnZV9jb3VudGVyX3NldF9tYXgoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0NTM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDg4LVxubW0vbWVtY29udHJvbC5jOjQ0ODk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTQ0OTAtc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDYxOT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM1LVxubW0vbWVtY29udHJvbC5jOjQ2MzY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDYzNy1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk3NT1pbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5ODktXG5tbS9tZW1jb250cm9sLmM6NDk5MDojaWZkZWYgQ09ORklHX05VTUFcbm1tL21lbWNvbnRyb2wuYy00OTkxLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDcyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTI1LVx0fSxcbm1tL21lbWNvbnRyb2wuYzo1MTI2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vbWVtY29udHJvbC5jLTUxMjctXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTU3LVx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxubW0vbWVtY29udHJvbC5jOjUxNTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTUxNTktXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTYwNT1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjQwLVxubW0vbWVtY29udHJvbC5jOjU2NDE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NTg2MD1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4OTQtXG5tbS9tZW1jb250cm9sLmM6NTg5NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NjA5Mz1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDk4LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jOjYwOTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYxMDAtXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYxMDEtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNjEwMy1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGFuZCBTd2FwIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkuIE5vdywgdGhhdCYjMzk7cyBtYWtpbmcgbWUgcmVjb25zaWRlciB0aGUgYXJjaGl0ZWN0dXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIElmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgYWN0dWFsIHN3YXBvdXQgZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLCBgX19tZW1jZzFfc3dhcG91dGAsIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEFuZCB0aGF0IGZpbGUmIzM5O3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgdGllZCB0byBgQ09ORklHX01FTUNHX1YxYC4gSSYjMzk7bSBzdGFydGluZyB0byBwdXQgdGhlIHBpZWNlcyB0b2dldGhlci4gVGhlIHYxIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24gbWlnaHQgaGFuZGxlIHRoaXMgc3dhcCBpbnRlcmFjdGlvbiBkaWZmZXJlbnRseSBvciBlbmNhcHN1bGF0ZSByZWxhdGVkIGxvZ2ljLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzdGVwLiBUbyBjb25maXJtIHRoaXMgbGluZSBvZiB0aGlua2luZyBhbmQgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdmlldyBvZiBob3cgdGhlc2UgZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlcmNvbm5lY3RlZCBhdCB0aGUgYnVpbGQgbGV2ZWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgaG93IGV2ZXJ5dGhpbmcgaXMgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wtdjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxOTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIHN5bWJvbHMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX01FTUNHX1YxYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbiBgX19tZW1jZzFfc3dhcG91dGAuIFRoZW4sIHdlIG5lZWQgYENPTkZJR19TV0FQYCBmb3IgYm90aCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfTUVNQ0dgIGlzIGZ1bmRhbWVudGFsIGZvciBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYXMgd2VsbCBhcyBgbGlzdF9scnVfd2Fsa19ub2RlYCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBsaXN0X2xydV93YWxrX25vZGVgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgYXJlIGFsd2F5cyBpbmNsdWRlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHJlYXNvbmFibGUgY2lyY3Vtc3RhbmNlcy4gTGV0JiMzOTtzIHNlZS4uLiBgbGlzdF9scnVfd2Fsa19ub2RlYCByZXNpZGVzIGluIGBtbS9saXN0X2xydS5jYCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGlzIGluIGBtbS93b3JraW5nc2V0LmNgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBgbGlzdF9scnUub2AgYW5kIGB3b3JraW5nc2V0Lm9gIGFyZSBnZXR0aW5nIGJ1aWx0LCB0byBjb25maXJtIG5vIHVuZXhwZWN0ZWQgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9scnVcXC5vfHdvcmtpbmdzZXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtNTYtXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbm1tL01ha2VmaWxlOjU3Olx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxubW0vTWFrZWZpbGUtNTgtXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcgb24gRm9jdXNpbmcgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBhbmQgdGhpcyBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IEkmIzM5O20gY29tcGlsaW5nIHRoZSBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgbWVhbnMgSSYjMzk7bSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucywgYW5kIEkmIzM5O20gbG9va2luZyBhdCBldmVyeXRoaW5nLgoKSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQsIHdoaWNoIGFyZSBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KClJpZ2h0IG5vdywgbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gU29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaW5jbHVkaW5nIHNvbWUgc21hbGxlciBoZWxwZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uc2lkZXJpbmcgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAuIFRoZXkmIzM5O3JlIG5vbi1zdGF0aWMsIHRoZXkmIzM5O3JlIGV4cG9ydGVkLCBhbmQgd2hpbGUgZnV6emluZyB0aGVtICpkaXJlY3RseSogbWlnaHQgbm90IHlpZWxkIHRoZSBtb3N0IGludGVyZXN0aW5nIHJlc3VsdHMgY29tcGFyZWQgdG8gZnV6emluZyB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZW0sIGl0IGRvZXNuJiMzOTt0IGh1cnQuIE1pZ2h0IGFzIHdlbGwgaW5jbHVkZSB0aGVtIGZvciBicm9hZGVyIGNvdmVyYWdlLiBBY3R1YWxseSwgaG9sZCBvbi4gSSBzZWUgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgIGFuZCBgbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZGAsIHdoaWNoIGFyZSBzdGF0aWMgYW5kIHJlbGF0ZWQsIHNvIGxldCYjMzk7cyBpbmNsdWRlIHRob3NlIHRvby4gVGhpcyBpcyBleHBhbmRpbmcgdGhlIHNjb3BlIGEgYml0LgoKT2theSwgbGV0JiMzOTtzIHVwZGF0ZSB0aGF0IGxpc3Q6Ci0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgCi0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYAotICAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgCi0gICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYAotICAgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgCi0gICBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgCi0gICBgX19tZW1jZzFfc3dhcG91dGAKLSAgIGBsaXN0X2xydV93YWxrX25vZGVgCi0gICBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAKCk5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBJIGtub3cgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBpcyBub24tc3RhdGljIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIEl0JiMzOTtzIGVhc3kgdG8gb3Zlcmxvb2sgc29tZXRoaW5nIGluIHRoZXNlIHNvcnRzIG9mIGV2YWx1YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3ltYm9sJiMzOTtzIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIG5vdCBgc3RhdGljYCBlaXRoZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQgaGFzIGEgZ2xvYmFsbHkgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGlzIHN1Z2dlc3RzIGl0ICpjb3VsZCogYmUgdXNlZCBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBpdCBhY3R1YWxseSBiZSBhY2Nlc3NlZCBmcm9tIG90aGVyIG1vZHVsZXM/IEkgbmVlZCB0byBrbm93IGlmIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IG1hZGUgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UuIExldCYjMzk7cyBkaWcgaW50byB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIG9yIG5vdCwgYW5kIGhvdyB3ZSBjYW4gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNjAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBGdW5jdGlvbiBCZWhhdmlvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBhbHNvICpub3QqIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1leHBvcnRlZCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIHRyaWNreSwgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciBhbmQgbGlua2VyIGVudmlyb25tZW50LiBUaGV5IG1pZ2h0IGJlIHN1YmplY3QgdG8gaW50ZXJuYWwgbGlua2FnZSBvciwgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBwcm9jZXNzLCBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0IG9yIGxpbmtlZCBvYmplY3QgZmlsZXMgaW4gd2F5cyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgc3RhbmRhcmQgaGVhZGVyIGV4YW1pbmF0aW9uLiBUaGlzIHNpdHVhdGlvbiByYWlzZXMgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmN5IGNvbmNlcm5zIGR1cmluZyByZWZhY3RvcmluZyBvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy4KClRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGltcGxpZXMgYSBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uLiBXaXRob3V0IG1vcmUgY29udGV4dCwgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyB0byB0aGlzLiBJcyB0aGUgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCB0aHJvdWdoIGEgbW9yZSBjb21wbGV4IGxpbmthZ2UgbWVjaGFuaXNtLCBwZXJoYXBzIHdpdGggYSBzaGFyZWQgbGlicmFyeSBvciBETEw/IE9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgZGVzaWduIHBhdHRlcm4gaW4gcGxheT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUuCgpUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FsbGluZyBjb250ZXh0LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbGlzdF9scnVfd2Fsa19ub2RlYC4gRXhhbWluaW5nIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhpcyBvbmUgaXMgdXNlZCwgd2hpY2ggY2FuIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHBvdGVudGlhbCBpbXBhY3QuIEl0IHdpbGwgaW5kaWNhdGUgdGhlIGRhdGEgc3RydWN0dXJlcyBvciBtZXRob2RzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIGEgbGFyZ2VyIHN5c3RlbSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipsaXN0X2xydV93YWxrX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00NDgtfVxubW0vbGlzdF9scnUuYzo0NDk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiBDdXJyZW50IFN0YXR1cyAmYW1wOyBJbml0aWFsIEFwcHJvYWNoKioKCkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzICpleHBvcnRlZCouIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgYnJhc3MgdGFja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgdG8gY2hlY2sgdGhlIHJlY2VudCBkYXRhLiBJdCBzb3VuZHMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIGZvciBhbmFseXNpcyBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfdGVzdF9yZWNlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3MwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcGhyYXNlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOgoKKipNeSBBbmFseXNpcyBvZiB0aGlzIEtlcm5lbCBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjb3JlIGFzcGVjdCBvZiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbDogc3BlY2lmaWNhbGx5LCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAsIG9yIG1lbWNnLCBzdWJzeXN0ZW0uIEFuZCBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb2RlIGlzICpub3QqIGV4cG9ydGVkLCBidXQgaXQgYWxzbyBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciBsYXRlciBjb25zaWRlcmF0aW9uLgoKVGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGlzIHRvdWNoZXMsIGFuZCB0aGVyZWZvcmUgZGVwZW5kcyB1cG9uLCBhcmUgcHJldHR5IGNsZWFyOiBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkOyBhbnkgc2lnbmlmaWNhbnQgbWVtY2cgY2hhbmdlIGlzIGdvaW5nIHRvIHJpcHBsZSBvdXQgdG8gdGhlIHN3YXAgaGFuZGxpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHJlZmFjdG9yaW5nIG9mIGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbW92aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZXNlIElEcyBpbnRvIHRoZSBgc3RydWN0IG9ial9jZ3JvdXBgLiBUaGlzIGltcGxpZXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIG1hbmFnZXMgdGhlc2UgbWVtY2cgSURzIHRocm91Z2hvdXQgdGhlIHN5c3RlbS4gSSYjMzk7bSBub3RpbmcgdGhpcyBpcyBhIGNoYW5nZSB0byB0aGUgSUQgbWFuYWdlbWVudCBsb2dpYy4KClRoYXQgbWVhbnMsIG9mIGNvdXJzZSwgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIOKAkyBzd2FwLCB3b3JraW5nc2V0LCBhbmQgbGlzdF9scnUg4oCTIGFyZSAqYWxsKiBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBJRCBtYW5hZ2VtZW50IHBhcmFkaWdtLiBUaGVzZSBhcmUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgY2hhbmdlcyBoZXJlIGNhbiBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLiBJdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyBnb2luZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKTGV0JiMzOTtzIHRlcm0gdGhpcyBjaGFuZ2UgYXMgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIEl0IGNoYW5nZXMgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIGZyb20gdGhlc2UgSURzIGFuZCBob3cgdGhlaXIgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGR1cmluZyBzd2FwIGFuZCB3b3JraW5nc2V0IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cblxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTkxLDYgJiM0MzsxOTEsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJfTsKIAlib29sIGlzX3Jvb3Q7CiYjNDM7CXJlZmNvdW50X3QgaWRfcmVmOwogfTsKIAogLyoKQEAgLTIwMiw4ICYjNDM7MjAzLDggQEAgc3RydWN0IG9ial9jZ3JvdXAgewogc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAotCS8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqLwotCXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7CiYjNDM7CS8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovCiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZzsKIAogCS8qIEFjY291bnRlZCByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTsJCS8qIEJvdGggdjEgJmFtcDsgdjIgKi8KQEAgLTI3MCw2ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2VuZGlmCiAJaW50IGttZW1jZ19pZDsKIAomIzQzOwkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KJiM0MzsJaW50IGlkOwomIzQzOwogCXN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwpAQCAtODIwLDkgJiM0Mzs4MjQsMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDtpZDsKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC00MjgsNyAmIzQzOzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCQl4YV9mb3JfZWFjaCgmYW1wO2xydS0mZ3Q7eGEsIGluZGV4LCBtbHJ1KSB7CiAJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTsKLQkJCWlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7CiYjNDM7CQkJaWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmMKaW5kZXggMmRjNTk5NDg0ZDAwNi4uZTUxNjFlMDYxYmQxMSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtNjE4LDcgJiM0Mzs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqLwogdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAl1bnNpZ25lZCBpbnQgbnJfZW50cmllczsKIApAQCAtNjM4LDE5ICYjNDM7NjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCWlmICghb2JqY2cpCiAJCXJldHVybjsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwogCS8qCiAJICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2VzbiYjMzk7dAogCSAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmUKLQkgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZCBhbmQgdHJhbnNmZXIgdGhlIG1lbW9yeSYjNDM7c3dhcCBjaGFyZ2UuCiYjNDM7CSAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkLgogCSAqLwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwogCW5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0Jc3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTsKLQltb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7CiYjNDM7CW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovCiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX2VudHJpZXMpOwogCiAJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX2VudHJpZXMsCi0JCQkgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzd2FwX21lbWNnKSk7CiYjNDM7CQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKIAogCWZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pOwogCWZvbGlvLSZndDttZW1jZ19kYXRhID0gMDsKQEAgLTY1OCwxMiAmIzQzOzY1OSw2IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCWlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkKIAkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgbnJfZW50cmllcyk7CiAKLQlpZiAobWVtY2cgIT0gc3dhcF9tZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChzd2FwX21lbWNnKSkKLQkJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDtzd2FwX21lbWNnLSZndDttZW1zdywgbnJfZW50cmllcyk7Ci0JCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgbnJfZW50cmllcyk7Ci0JfQotCiAJLyoKIAkgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2sgd2l0aCBJUlEgb2ZmLiBJdCBpcwogCSAqIGltcG9ydGFudCBoZXJlIHRvIGhhdmUgdGhlIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBpdCBpcyB0aGUKQEAgLTY3NSw3ICYjNDM7NjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJcHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7CiAJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDBmNzAzZjIzOWM4MGYuLjljNzQ0MDBhYTdkZGIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTIxLDggJiM0MzsyMSw3IEBAIHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTsKIAogaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgbik7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pOwogCiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggODMxOWFkOGM1YzIzYS4uZTc1NTVlY2E3NzAxOSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzY5Nyw3ICYjNDM7MzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAogCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7bWVtY2dfa21lbV9vbmxpbmVfa2V5KTsKIAotCW1lbWNnLSZndDtrbWVtY2dfaWQgPSBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CW1lbWNnLSZndDtrbWVtY2dfaWQgPSBtZW1jZy0mZ3Q7aWQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCkBAIC0zOTU2LDM2ICYjNDM7Mzk1Niw0MiBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQzEobWVtX2Nncm91cF9wcml2YXRlX2lkcyk7CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewotCWlmIChtZW1jZy0mZ3Q7aWQuaWQgJmd0OyAwKSB7Ci0JCXhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkKTsKLQkJbWVtY2ctJmd0O2lkLmlkID0gMDsKJiM0MzsJaWYgKG1lbWNnLSZndDtpZCAmZ3Q7IDApIHsKJiM0MzsJCXhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkKTsKJiM0MzsJCW1lbWNnLSZndDtpZCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKQomIzQzOy8qKgomIzQzOyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZwomIzQzOyAqIEBpZDogdGhlIGNvcnJlc3BvbmRpbmcgbWVtY2cgcHJpdmF0ZSBpZAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pCiB7Ci0JaWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2dfZnJlZTsKIAotCQkvKiBNZW1jZyBJRCBwaW5zIENTUyAqLwotCQljc3NfcHV0KCZhbXA7bWVtY2ctJmd0O2Nzcyk7CiYjNDM7CWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDtvYmpjZy0mZ3Q7aWRfcmVmKSkgewomIzQzOwkJb2JqY2dfZnJlZSA9IHhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwkJVk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTsKJiM0MzsKJiM0MzsJCS8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovCiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiAJfQogfQogCi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKQogewotCXdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7bWVtY2ctJmd0O2lkLnJlZikpIHsKLQkJLyoKLQkJICogVGhlIHJvb3QgY2dyb3VwIGNhbm5vdCBiZSBkZXN0cm95ZWQsIHNvIGl0JiMzOTtzIHJlZmNvdW50IG11c3QKLQkJICogYWx3YXlzIGJlICZndDs9IDEuCi0JCSAqLwotCQlpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7Ci0JCQlWTV9CVUdfT04oMSk7Ci0JCQlicmVhazsKLQkJfQotCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKLQl9Ci0JcmV0dXJuIG1lbWNnOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctJmd0O2lkX29iamNnLCBtZW1jZy0mZ3Q7aWQsIG4pOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0Mzt7CiYjNDM7CWJvb2wgc3VjY2VzczsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gbWVtY2ctJmd0O2lkX29iamNnOwomIzQzOwomIzQzOwlzdWNjZXNzID0gcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7b2JqY2ctJmd0O2lkX3JlZik7CiYjNDM7CVZNX1dBUk5fT04oIXN1Y2Nlc3MpOwogfQogCiAvKioKQEAgLTM5OTMsMTEgJiM0MzszOTk5LDU1IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuCiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC4KICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKQogewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTsKLQlyZXR1cm4geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CWlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWQKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBnZXQgYSByZWZlcmVuY2UuCiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cAomIzQzOyAqLwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiYjNDM7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pOwomIzQzOwlyZXR1cm4gbWVtY2c7CiB9CiAKIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZCkKQEAgLTQwOTgsNyAmIzQzOzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAlpZiAoIW1lbWNnKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZC5pZCwgTlVMTCwKJiM0MzsJZXJyb3IgPSB4YV9hbGxvYygmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsICZhbXA7bWVtY2ctJmd0O2lkLCBOVUxMLAogCQkJIFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CkBAIC00MjQzLDkgJiM0Mzs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJCQkJICAgRkxVU0hfVElNRSk7CiAJbHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpOwogCi0JLyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovCi0JcmVmY291bnRfc2V0KCZhbXA7bWVtY2ctJmd0O2lkLnJlZiwgMSk7Ci0JY3NzX2dldChjc3MpOwomIzQzOwkvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovCiYjNDM7CW1lbWNnLSZndDtpZF9vYmpjZyA9IG1lbWNnLSZndDtub2RlaW5mb1swXS0mZ3Q7b2JqY2c7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZF9vYmpjZy0mZ3Q7aWRfcmVmLCAxKTsKJiM0MzsJb2JqX2Nncm91cF9nZXQobWVtY2ctJmd0O2lkX29iamNnKTsKIAogCS8qCiAJICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSYjMzk7cmUgZnVsbHkgb25saW5lLgpAQCAtNDI1Nyw3ICYjNDM7NDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGUKIAkgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuCiAJICovCi0JeGFfc3RvcmUoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFfc3RvcmUoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQsIG9iamNnLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiAwOwogZnJlZV9vYmpjZzoKQEAgLTQzMDgsOCAmIzQzOzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJbHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTsKIAogCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7Ci0KLQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTQzMTgsNiAmIzQzOzQzNjcsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJaW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhtZW1jZyk7CiAJbHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiYjNDM7CW1lbWNnLSZndDtpZF9vYmpjZyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTUyMTksMTEgJiM0Mzs1MjcxLDkgQEAgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTsKLQlpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7CiYjNDM7CWlmICghbWVtY2cpCiAJCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApOwogCkBAIC01NjIxLDI0ICYjNDM7NTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm4gMDsKIAl9CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7Ci0JLyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovCiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgJmFtcDsmYW1wOwogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7CiAKJiM0MzsJLyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi8KJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7CiAJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLAogCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NTEsMTkgJiM0Mzs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7Ci0JaWYgKG1lbWNnKSB7Ci0JCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewotCQkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKLQkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKLQkJCWVsc2UKLQkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwotCQl9Ci0JCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7CiYjNDM7CQlpZiAoZG9fbWVtc3dfYWNjb3VudCgpKQomIzQzOwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgbnJfcGFnZXMpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDtzd2FwLCBucl9wYWdlcyk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAogbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi5iNmUyMjUzNmE1MjQwIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC0yODMsNiAmIzQzOzI4MywxMCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYywKIAltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTsKIAkqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKIAomIzQzOwkvKiByZXBhcmVudGVkIG1lbWNnIGxvc2VzIGl0cyBtYXhfc2VxICovCiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJbWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKIAltYXhfc2VxICZhbXA7PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIOwogCkBAIC00NzAsNyAmIzQzOzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAkgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLgogCSAqLwogCWV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7Ci0JaWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiYjNDM7CWlmICghZXZpY3Rpb25fbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKIAkJZXZpY3Rpb25fbWVtY2cgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFByaXZhdGUgSUQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGhvdyBwcml2YXRlIElEcyBhcmUgaGFuZGxlZCBhbmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRob3NlIElEcy4gSSBzZWUgaXQgaW50cm9kdWNlcyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAsIGFuZCBpdCYjMzk7cyB0d2Vha2luZyBhIGJ1bmNoIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gTW9zdGx5LCBpdCBzZWVtcyB0byBiZSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgbWVtY2dzIGFuZCB0aGVpciBwcml2YXRlIElEcywgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIHN3YXAgYW5kIHdvcmtpbmdzZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHBvdGVudGlhbCBzZWN1cml0eSBvciBzdGFiaWxpdHkgaXNzdWVzLiBUaGUgYmlnIHRoaW5nIEkgYWx3YXlzIGNoZWNrIGlzIHdoZXRoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIGJ1dCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyAqcHVyZWx5KiBpbnRlcm5hbC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgc3RydWN0IG9ial9jZ3JvdXBgLCBidXQgbm90aGluZyBuZXcgaXMgYmVpbmcgKmNvcGllZCogdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhc3NlZCBiYWNrIGVpdGhlci4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCwgcmVmY291bnRzLCBwb2ludGVycywgYW5kIElEcy4KClRoZSB0eXBlcyBvZiBidWdzIHRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gaW50cm9kdWNlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLiBLQVNBTiBpcyB0aGUgdG9vbCBmb3IgY2F0Y2hpbmcgdGhvc2Uga2luZHMgb2YgaXNzdWVzLCB3aGljaCBpcyBncmVhdC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBLTVNBTiB3b3VsZCBjYXRjaD8KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBwYXRjaCBkb2VzIGNoYW5nZSBob3cgdGhlIElEIGlzIHN0b3JlZC4gYG1lbWNnLSZndDtpZGAgaXMgbm93IGFuIGBpbnRgLCByZXBsYWNpbmcgdGhlIG9sZCBgc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZGAuIEFuZCBgbWVtY2ctJmd0O2lkX29iamNnYCBpcyBhIHBvaW50ZXIuIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGluaXRpYWxpemVkIGluIGBtZW1fY2dyb3VwX2FsbG9jYCBvciBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gIEFuZCwgaWYgaXQmIzM5O3MgdXNpbmcgc3RhbmRhcmQgbWVtY2cgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHRoZW4gd2Ugc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIGNhcmVmdWxseSwganVzdCB0byBiZSBzdXJlLCBidXQgaXQmIzM5O3MgbGlrZWx5IHVzaW5nIGBremFsbG9jYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZW5zdXJpbmcgaW5pdGlhbGl6YXRpb24uCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCB1bmlxdWVseSBjYXRjaC4gVGhlIEtBU0FOIGNoZWNrcyBhcmUgZ29pbmcgdG8gYmUgcGVyZmVjdCBmb3IgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB0aGF0IGNvdWxkIHN0ZW0gZnJvbSBzY3Jld2VkLXVwIHJlZmNvdW50aW5nLiBTdGlsbCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGBtZW1fY2dyb3VwX2FsbG9jYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEkgc2hvdWxkIG5ldmVyIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDEzMT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTM3LVxubW0vbWVtY29udHJvbC5jOjQxMzg6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDEzOS17XG4tLVxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMTUtXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6NDIxNjpcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTQyMTctXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgbWVtX2Nncm91cF9hbGxvY2AsIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfYWxsb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgZ3V0cyBvZiB0aGUgYG1lbV9jZ3JvdXBfYWxsb2NgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBoZXJlPyBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgY2dyb3VwIGl0c2VsZiwgdGhlIHBlci1ub2RlIGFjY291bnRpbmcgc3RydWN0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBhbGxvY2F0aW9uIGNoZWNrIGFuZCBhY2NvdW50aW5nIHVwZGF0ZSwgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggYmFsYW5jaW5nIGFjdCBnb2luZyBvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLCBOVU1BIGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiByZXNvdXJjZSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlY2xhaW0sIHN3YXAsIGFuZCBPT00gaGFuZGxpbmc/IFdoYXQmIzM5O3MgdGhlIGxvY2sgaGllcmFyY2h5IGxpa2UsIGFuZCBob3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgZXZlbiBkZWFkbG9jayBzY2VuYXJpb3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUgY2FsbGVyIGV4cGVjdHMgaW4gcmV0dXJuLiBJIGV4cGVjdCB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiB0byBiZSBpbnRlcmVzdGluZywgc28gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmNpZXMuIEkgd29uZGVyIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBzaXR1YXRpb25zIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMgZHVlIHRvIG1lbW9yeSBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTM4Olx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG40MTM5Olx0e1xuNDE0MDpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcbjQxNDE6XHRcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XG40MTQyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MTQzOlx0XHRpbnQgbm9kZSwgY3B1O1xuNDE0NDpcdFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG40MTQ1Olx0XHRsb25nIGVycm9yO1xuNDE0NjpcdFxuNDE0NzpcdFx0bWVtY2cgPSBrbWVtX2NhY2hlX3phbGxvYyhtZW1jZ19jYWNoZXAsIEdGUF9LRVJORUwpO1xuNDE0ODpcdFx0aWYgKCFtZW1jZylcbjQxNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG40MTUwOlx0XG40MTUxOlx0XHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuNDE1MjpcdFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuNDE1MzpcdFx0aWYgKGVycm9yKVxuNDE1NDpcdFx0XHRnb3RvIGZhaWw7XG40MTU1Olx0XHRlcnJvciA9IC1FTk9NRU07XG40MTU2Olx0XG40MTU3Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTU4Olx0XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHMpXG40MTU5Olx0XHRcdGdvdG8gZmFpbDtcbjQxNjA6XHRcbjQxNjE6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXG40MTYyOlx0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTYzOlx0XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1KVxuNDE2NDpcdFx0XHRnb3RvIGZhaWw7XG40MTY1Olx0XG40MTY2Olx0XHRpZiAoIW1lbWNnMV9hbGxvY19ldmVudHMobWVtY2cpKVxuNDE2NzpcdFx0XHRnb3RvIGZhaWw7XG40MTY4Olx0XG40MTY5Olx0XHRwc3RhdGNfcGNwdSA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XG40MTcwOlx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG40MTcxOlx0XHRcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG40MTcyOlx0XHRcdHN0YXRjLVx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XG40MTczOlx0XHRcdHN0YXRjLVx1MDAzZXZtc3RhdHMgPSBtZW1jZy1cdTAwM2V2bXN0YXRzO1xuNDE3NDpcdFx0fVxuNDE3NTpcdFxuNDE3NjpcdFx0Zm9yX2VhY2hfbm9kZShub2RlKVxuNDE3NzpcdFx0XHRpZiAoIWFsbG9jX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhtZW1jZywgbm9kZSkpXG40MTc4Olx0XHRcdFx0Z290byBmYWlsO1xuNDE3OTpcdFxuNDE4MDpcdFx0aWYgKG1lbWNnX3diX2RvbWFpbl9pbml0KG1lbWNnLCBHRlBfS0VSTkVMKSlcbjQxODE6XHRcdFx0Z290byBmYWlsO1xuNDE4MjpcdFxuNDE4MzpcdFx0SU5JVF9XT1JLKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yaywgaGlnaF93b3JrX2Z1bmMpO1xuNDE4NDpcdFx0dm1wcmVzc3VyZV9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmUpO1xuNDE4NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X3BlYWtzKTtcbjQxODY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXBfcGVha3MpO1xuNDE4NzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTIKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoLCBkZWFsaW5nIHdpdGggYG1lbWNnYCBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgaXNuJiMzOTt0IGdvaW5nIHRvIHJlcXVpcmUgS01TQU4uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSByZWZpbmluZyBob3cgd2UgbWFuYWdlIGFuZCB0cmFjayBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgYm9va2tlZXBpbmcsIG1haW5seSBjZW50ZXJlZCBhcm91bmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy4KCkNydWNpYWxseSwgdGhlIGBtZW1fY2dyb3VwYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGF0IGFsb25lIHNpZ25pZmljYW50bHkgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGUgcHJpbWFyeSByaXNrIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yczogdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgcGVyaGFwcyBzb21lIHN1YnRsZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBsZWFkaW5nIHRvIGxlYWtzIG9yIHByZW1hdHVyZSBmcmVlLWluZy4KCkNvbnNpZGVyaW5nIHRoZSB0eXBlcyBvZiBjaGFuZ2VzIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGxpa2VseSBsaWUsIEtBU0FOIHNlZW1zIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgZXJyb3JzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjbGFzc2ljIGtlcm5lbCBtZW1vcnkgYnVncywgbm90IHRoZSB0eXBlIG9mIGRhdGEgbGVha2FnZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmUmIzM5O3Mgbm8gaW5kaWNhdGlvbiBvZiB1c2VyLXNwYWNlIGRhdGEgY29weWluZyBvciBtYW5pcHVsYXRpb24gdGhhdCB3b3VsZCBleHBvc2UgbmV3LCBwb3NzaWJseSB1bmluaXRpYWxpemVkLCBtZW1vcnkgYXJlYXMgdG8gdXNlciBwcm9jZXNzZXMuIEdpdmVuIHRoYXQgS0FTQU4mIzM5O3MgY292ZXJhZ2Ugb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGlzIGV4Y2VsbGVudCBhbmQgdGhhdCB0aGUgbmV3IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIHB1c2ggZm9yIGEgS01TQU4gc2Vzc2lvbi4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGBOZWVkc0tNU0FOYCBsYWJlbCBzZWVtcyB1bm5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG5cbkFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcyBkdWUgdG8gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIEl0IGNoYW5nZXMgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIGZyb20gdGhlc2UgSURzIGFuZCBob3cgdGhlaXIgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGR1cmluZyBzd2FwIGFuZCB3b3JraW5nc2V0IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cblxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6MDEuMTM5MDE4MTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzM4MTcyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG5cXG5BbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MgZHVlIHRvIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMS4xMzkwMjQ2OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODA4NDU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMTk1ZjU1ZDUyN2VkNDRjZjIyZDY1OTM5NzJhYzg2MjhlODJjZTI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTkxLDYgKzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcXG4gXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gXFx0fTtcXG4gXFx0Ym9vbCBpc19yb290O1xcbitcXHRyZWZjb3VudF90IGlkX3JlZjtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTIwMiw4ICsyMDMsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XFxuIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xcbiBcXG4tXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XFxuK1xcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcXG4gXFxuIFxcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cXG4gXFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XFx0XFx0LyogQm90aCB2MSBcXHUwMDI2IHYyICovXFxuQEAgLTI3MCw2ICsyNzEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuICNlbmRpZlxcbiBcXHRpbnQga21lbWNnX2lkO1xcbiBcXG4rXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuK1xcdGludCBpZDtcXG4rXFxuIFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5AQCAtODIwLDkgKzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXFxuaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDRcXG4tLS0gYS9tbS9saXN0X2xydS5jXFxuKysrIGIvbW0vbGlzdF9scnUuY1xcbkBAIC00MjgsNyArNDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuIFxcdFxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xcbiBcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xcbi1cXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xcbitcXHRcXHRcXHRpZiAoIW1lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG4gXFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXFxuQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gICovXFxuIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiB7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcXG4gXFxuQEAgLTYzOCwxOSArNjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiBcXHRpZiAoIW9iamNnKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIFxcdC8qXFxuIFxcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxcbiBcXHQgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lXFxuLVxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbitcXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC5cXG4gXFx0ICovXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuIFxcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuLVxcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XFxuLVxcdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4rXFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4rXFxuK1xcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXFxuK1xcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX2VudHJpZXMpO1xcbiBcXG4gXFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXFxuLVxcdFxcdFxcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcXG4rXFx0XFx0XFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcXG4gXFxuIFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbiBcXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuQEAgLTY1OCwxMiArNjU5LDYgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIFxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG4gXFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBucl9lbnRyaWVzKTtcXG4gXFxuLVxcdGlmIChtZW1jZyAhPSBzd2FwX21lbWNnKSB7XFxuLVxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KHN3YXBfbWVtY2cpKVxcbi1cXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2hhcmdlKFxcdTAwMjZzd2FwX21lbWNnLVxcdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XFxuLVxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXNcXG4gXFx0ICogaW1wb3J0YW50IGhlcmUgdG8gaGF2ZSB0aGUgaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIGl0IGlzIHRoZVxcbkBAIC02NzUsNyArNjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIFxcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xcbiBcXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcXG5AQCAtMjEsOCArMjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XFxuIFxcbiBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbiBcXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBuKTtcXG4rdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pO1xcbiBcXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM2OTcsNyArMzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFxuIFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xcbiBcXG4tXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5AQCAtMzk1NiwzNiArMzk1Niw0MiBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQzEobWVtX2Nncm91cF9wcml2YXRlX2lkcyk7XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbi1cXHRpZiAobWVtY2ctXFx1MDAzZWlkLmlkIFxcdTAwM2UgMCkge1xcbi1cXHRcXHR4YV9lcmFzZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkLmlkKTtcXG4tXFx0XFx0bWVtY2ctXFx1MDAzZWlkLmlkID0gMDtcXG4rXFx0aWYgKG1lbWNnLVxcdTAwM2VpZCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0eGFfZXJhc2UoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVxcdTAwM2VpZCk7XFxuK1xcdFxcdG1lbWNnLVxcdTAwM2VpZCA9IDA7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4rLyoqXFxuKyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZ1xcbisgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuK1xcdFxcdHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcXG4ge1xcbi1cXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQucmVmKSkge1xcbi1cXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XFxuIFxcbi1cXHRcXHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xcbi1cXHRcXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4rXFx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcXHUwMDI2b2JqY2ctXFx1MDAzZWlkX3JlZikpIHtcXG4rXFx0XFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdFxcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XFxuK1xcbitcXHRcXHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xcbitcXHRcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZC5yZWYpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCdzIHJlZmNvdW50IG11c3RcXG4tXFx0XFx0ICogYWx3YXlzIGJlIFxcdTAwM2U9IDEuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XFxuLVxcdFxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIG1lbWNnO1xcbitcXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctXFx1MDAzZWlkX29iamNnLCBtZW1jZy1cXHUwMDNlaWQsIG4pO1xcbit9XFxuK1xcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRib29sIHN1Y2Nlc3M7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLVxcdTAwM2VpZF9vYmpjZztcXG4rXFxuK1xcdHN1Y2Nlc3MgPSByZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm9iamNnLVxcdTAwM2VpZF9yZWYpO1xcbitcXHRWTV9XQVJOX09OKCFzdWNjZXNzKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTM5OTMsMTEgKzM5OTksNTUgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxcbiAgKlxcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS5cXG4rICpcXG4rICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuXFxuICAqL1xcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuIHtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xcbi1cXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXG4rXFx0b2JqY2cgPSB4YV9sb2FkKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbisvKipcXG4rICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWRcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxcbisgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXFxuKyAqL1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuK1xcbitcXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTtcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXFxuQEAgLTQwOTgsNyArNDE0OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiBcXHRpZiAoIW1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuLVxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQuaWQsIE5VTEwsXFxuK1xcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQsIE5VTEwsXFxuIFxcdFxcdFxcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG5AQCAtNDI0Myw5ICs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdFxcdFxcdFxcdCAgIEZMVVNIX1RJTUUpO1xcbiBcXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XFxuIFxcbi1cXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cXG4tXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQucmVmLCAxKTtcXG4tXFx0Y3NzX2dldChjc3MpO1xcbitcXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXFxuK1xcdG1lbWNnLVxcdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1swXS1cXHUwMDNlb2JqY2c7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZWlkX29iamNnLVxcdTAwM2VpZF9yZWYsIDEpO1xcbitcXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cXHUwMDNlaWRfb2JqY2cpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXFxuQEAgLTQyNTcsNyArNDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXFxuIFxcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cXG4gXFx0ICovXFxuLVxcdHhhX3N0b3JlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfc3RvcmUoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVxcdTAwM2VpZCwgb2JqY2csIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGZyZWVfb2JqY2c6XFxuQEAgLTQzMDgsOCArNDM1OSw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG4gXFxuIFxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxuLVxcbi1cXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5AQCAtNDMxOCw2ICs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFxuIFxcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xcbiBcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbitcXG4rXFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XFxuK1xcdG1lbWNnLVxcdTAwM2VpZF9vYmpjZyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5AQCAtNTIxOSwxMSArNTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG4tXFx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpKVxcbitcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XFxuK1xcdGlmICghbWVtY2cpXFxuIFxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG4gXFxuQEAgLTU2MjEsMjQgKzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4tXFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxuIFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XFxuLVxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcXG4gXFxuK1xcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXFxuK1xcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuIFxcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXFx1MDAzZXN3YXApLCBucl9wYWdlcyxcXG4gXFx0XFx0XFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC01NjUxLDE5ICs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xcbi1cXHRpZiAobWVtY2cpIHtcXG4tXFx0XFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxuLVxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuLVxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xcbitcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxuK1xcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIH1cXG4gXFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IGYzNTE3OThlNzIzYWMuLmI2ZTIyNTM2YTUyNDAgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTI4Myw2ICsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxuIFxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xcbiBcXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gXFxuK1xcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0bWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG4gXFx0bWF4X3NlcSBcXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1dJRFRIO1xcbiBcXG5AQCAtNDcwLDcgKzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4gXFx0ICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC5cXG4gXFx0ICovXFxuIFxcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XFxuLVxcdGlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxcbitcXHRpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuIFxcdFxcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMi42MjA2NDMxMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzIyNTk3NzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0XCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggODE3MGJiODA2NmEyMi4uZmVmOGExYzQxOTFiMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTE5MSw2ICsxOTEsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHR9O1xuIFx0Ym9vbCBpc19yb290O1xuK1x0cmVmY291bnRfdCBpZF9yZWY7XG4gfTtcbiBcbiAvKlxuQEAgLTIwMiw4ICsyMDMsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gc3RydWN0IG1lbV9jZ3JvdXAge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xuIFxuLVx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkO1xuK1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbitcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI3MCw2ICsyNzEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2VuZGlmXG4gXHRpbnQga21lbWNnX2lkO1xuIFxuK1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4rXHRpbnQgaWQ7XG4rXG4gXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnZtc3RhdHNfcGVyY3B1O1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuQEAgLTgyMCw5ICs4MjQsMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4rc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gXG4gc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0eGFfZm9yX2VhY2goXHUwMDI2bHJ1LVx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xuIFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbi1cdFx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuK1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAyZGM1OTk0ODRkMDA2Li5lNTE2MWUwNjFiZDExIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC02MTgsNyArNjE4LDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICovXG4gdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4ge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xuIFxuQEAgLTYzOCwxOSArNjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpjZylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdC8qXG4gXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcbiBcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbi1cdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxuK1x0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQuXG4gXHQgKi9cbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcbi1cdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbitcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4rXG4rXHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuK1x0bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfZW50cmllcyk7XG4gXG4gXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9lbnRyaWVzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcbitcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFxuIFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4gXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbkBAIC02NTgsMTIgKzY1OSw2IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxuIFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBucl9lbnRyaWVzKTtcbiBcbi1cdGlmIChtZW1jZyAhPSBzd2FwX21lbWNnKSB7XG4tXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KHN3YXBfbWVtY2cpKVxuLVx0XHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2c3dhcF9tZW1jZy1cdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XG4tXHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XG4tXHR9XG4tXG4gXHQvKlxuIFx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXNcbiBcdCAqIGltcG9ydGFudCBoZXJlIHRvIGhhdmUgdGhlIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBpdCBpcyB0aGVcbkBAIC02NzUsNyArNjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcbiBcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjEsOCArMjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XG4gXG4gaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbik7XG4rdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pO1xuIFxuIC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5lNzU1NWVjYTc3MDE5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNjk3LDcgKzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbkBAIC0zOTU2LDM2ICszOTU2LDQyIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4tXHRpZiAobWVtY2ctXHUwMDNlaWQuaWQgXHUwMDNlIDApIHtcbi1cdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQpO1xuLVx0XHRtZW1jZy1cdTAwM2VpZC5pZCA9IDA7XG4rXHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbitcdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQpO1xuK1x0XHRtZW1jZy1cdTAwM2VpZCA9IDA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4rLyoqXG4rICogQG9iamNnOiB0aGUgb2JqY2cgcmV0dXJuZWQgYnkgbWVtX2Nncm91cF9wcml2YXRlX2lkX29iamNnXG4rICogQGlkOiB0aGUgY29ycmVzcG9uZGluZyBtZW1jZyBwcml2YXRlIGlkXG4rICovXG4rc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbitcdFx0dW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4rXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZWlkX3JlZikpIHtcbitcdFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdFx0Vk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTtcbitcbitcdFx0LyogTWVtY2cgSUQgcGlucyB0aGUgb2JqY2cgKi9cbitcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZikpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlIHJvb3QgY2dyb3VwIGNhbm5vdCBiZSBkZXN0cm95ZWQsIHNvIGl0J3MgcmVmY291bnQgbXVzdFxuLVx0XHQgKiBhbHdheXMgYmUgXHUwMDNlPSAxLlxuLVx0XHQgKi9cbi1cdFx0aWYgKFdBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkge1xuLVx0XHRcdFZNX0JVR19PTigxKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbi1cdH1cbi1cdHJldHVybiBtZW1jZztcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIG4pO1xuK31cbitcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRib29sIHN1Y2Nlc3M7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbitcbitcdHN1Y2Nlc3MgPSByZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2b2JqY2ctXHUwMDNlaWRfcmVmKTtcbitcdFZNX1dBUk5fT04oIXN1Y2Nlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTkzLDExICszOTk5LDU1IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxuICAqXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXG4rICpcbisgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG4tXHRyZXR1cm4geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuK1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisvKipcbisgKiBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCAtIGxvb2sgdXAgYW4gb25saW5lIG1lbWNnIGZyb20gYSBtZW1jZyBpZFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGdldCBhIHJlZmVyZW5jZS5cbisgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4rICovXG4rc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZClcbit7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4re1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbitcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuK1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDA5OCw3ICs0MTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRpZiAoIW1lbWNnKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQuaWQsIE5VTEwsXG4rXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDI0Myw5ICs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4rXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXG4rXHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvWzBdLVx1MDAzZW9iamNnO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZWlkX3JlZiwgMSk7XG4rXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDI1Nyw3ICs0MzA4LDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXG4gXHQgKi9cbi1cdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XG4rXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00MzA4LDggKzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbi1cbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTQzMTgsNiArNDM2Nyw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHRpbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKG1lbWNnKTtcbiBcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XG4rXG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbitcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTUyMTksMTEgKzUyNzEsOSBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbi1cdGlmICghbWVtY2cgfHwgIWNzc190cnlnZXRfb25saW5lKFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XG4rXHRpZiAoIW1lbWNnKVxuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xuIFxuQEAgLTU2MjEsMjQgKzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4tXHQvKiBtZW1jZyBpcyBwaW5lZCBieSBtZW1jZyBJRC4gKi9cbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpO1xuIFxuK1x0Lyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi9cbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcbitcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcyxcbiBcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTY1MSwxOSArNTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4tXHRpZiAobWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4tXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4tXHRcdH1cbi1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTtcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMjgzLDYgKzI4MywxMCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbiBcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xuIFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXG4rXHQvKiByZXBhcmVudGVkIG1lbWNnIGxvc2VzIGl0cyBtYXhfc2VxICovXG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4gXHRtYXhfc2VxIFx1MDAyNj0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XG4gXG5AQCAtNDcwLDcgKzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbitcdGlmICghZXZpY3Rpb25fbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiBcdFx0ZXZpY3Rpb25fbWVtY2cgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMi42MjA2NDQzMjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc4NDEyMTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBNZW1jZyBJRCBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBXZSd2ZSBnb3QgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgdGhlIGBtZW1jZy1cdTAwM2VpZGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgc3Vic3lzdGVtIChtZW1jZykuIEl0J3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlLCBtb3ZpbmcgdGhlIGByZWZjb3VudF90IGlkX3JlZmAgZnJvbSBgbWVtY2dgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVmYWN0b3JpbmcgaG93IHRoZSBJRCBpcyBtYW5hZ2VkLCBlc3NlbnRpYWxseS4gVGhpcyBhbHNvIGludm9sdmVzIHJlbmFtaW5nIGEgZmV3IHRoaW5nczsgYG1lbWNnLVx1MDAzZWlkLmlkYCBpcyBub3cgc2ltcGx5IGBtZW1jZy1cdTAwM2VpZGAsIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIG5vdyBoYW5kbGVkIHRocm91Z2ggYG1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZWlkX3JlZmAuXG5cblRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNvZGUsIG1lYW5pbmcgaXQgaGFzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQmVjYXVzZSBvZiB0aGF0LCBhbmQga25vd2luZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBpbiByZWZjb3VudGluZyBjaGFuZ2VzIGxpa2UgdGhpcywgSSdtIGNvbmZpZGVudCB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUsIG5vIHF1ZXN0aW9uKS5cblxuTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGFyZWFzIHRvIHRhcmdldCB3aXRoIG91ciBmdXp6ZXJzLiBCYXNlZCBvbiB0aGUgZGlmZiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBhZGRlZDogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAsIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCwgYF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dGAsIGBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fdGVzdF9yZWNlbnRgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcHJpb3JpdGl6ZSBiYXNlZCBvbiBhY2Nlc3NpYmlsaXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlICpwdWJsaWMqIGVudHJ5cG9pbnRzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2Agc2luY2UgdGhlIGRpZmYgdG91Y2hlcyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgX19tZW1jZzFfc3dhcG91dGAsIGBsaXN0X2xydV93YWxrX25vZGVgLCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgdGhlbSBsaWtlbHkgZW50cnkgcG9pbnRzLlxuXG5J4oCZbSB0aGlua2luZyBJIHdpbGwgdXRpbGl6ZSBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGVzZSBkZWZpbml0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgbGlrZWx5IGdpdmUgdXMgdGhlIGluZm9ybWF0aW9uIHRvIGZpbmQgdGVzdCBoYXJuZXNzIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYmUgYWJsZSB0byBnbyBmcm9tIHRoZXJlLCBhbmQgY29uc3RydWN0IGFuIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY1LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjEzLjQwNDc2ODI0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU0MjQxODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxzdHJ1Y3QgbWVtX2Nncm91cCBcXFxcKnxpbnR8dW5zaWduZWQgbG9uZ3xib29sKSAobWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWR8bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lfG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXR8bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvfF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXB8X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXB8X19tZW1jZzFfc3dhcG91dHxsaXN0X2xydV93YWxrX25vZGV8d29ya2luZ3NldF90ZXN0X3JlY2VudClcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9MzIwPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTMyMy1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2Fsayk7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjMyNDp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMzI1LVxcdFxcdFxcdFxcdCBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2ND1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTczPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTgxOnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTgyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTUwMT1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA2LSNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA4LXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTI4PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTM0LS8qIG1tL3dvcmtpbmdzZXQuYyAqL1xcbm1tL2ludGVybmFsLmg6MzU6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbm1tL2ludGVybmFsLmgtMzYtXFx0XFx0XFx0ICAgIGJvb2wgZmx1c2gpO1xcbi0tXFxubW0vbGlzdF9scnUuYz00MDU9bGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9saXN0X2xydS5jLTQxMi1cXG5tbS9saXN0X2xydS5jOjQxMzp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTQxNC1cXHRcXHRcXHRcXHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NTk3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYxOC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6NjE5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy02MjAte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTIyPWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XFxubW0vbWVtY29udHJvbC12MS5oLTIzLVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyNDp2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XFxubW0vbWVtY29udHJvbC12MS5oLTI1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5ODM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zOTg3LVxcbm1tL21lbWNvbnRyb2wuYzozOTg4OnZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbm1tL21lbWNvbnRyb2wuYy0zOTg5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjMxPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjY0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjY1OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxubW0vbWVtY29udHJvbC5jLTUyNjYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0OS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTY1MDppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NjUxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzAyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzAzOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTcwNC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9Mzk2PXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00MzMtICovXFxubW0vd29ya2luZ3NldC5jOjQzNDpib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxubW0vd29ya2luZ3NldC5jLTQzNS1cXHRcXHRcXHRcXHRib29sIGZsdXNoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToxNi44NTkwMTUwNTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA3MDk4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZWQgaXMgdGhhdCBteSByZWdleCBkaWRuJ3QgY2F0Y2ggYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gSG1tLCBJIHdvbmRlciB3aHkuLi4gQWgsIHJpZ2h0LCBpdCByZXR1cm5zIGEgYHN0cnVjdCBtZW1fY2dyb3VwICpgLiBUaGF0J3Mgd2h5IHRoZSByZWdleCBtaXNzZWQgaXQuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoYXQgb25lIGluIG91ciBldmFsdWF0aW9uLlxuXG5JJ3ZlIGFsc28gaWRlbnRpZmllZCBhIGZldyBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGggZm9yIGV4cGxvcmluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBtZW1vcnkgY2dyb3Vwcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMgb2YgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgcmV0cmlldmUgdGhlIG1lbW9yeSBjZ3JvdXAgYmFzZWQgb24gYSBwcml2YXRlIElELlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyMS4xNjYxMTc4NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjUxOTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtX2Nncm91cCBcXFxcKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgyMj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjgtfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgyOTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgzMDpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMDEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTMwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zOTg4PXZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwMDQtICovXFxubW0vbWVtY29udHJvbC5jOjQwMDU6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbm1tL21lbWNvbnRyb2wuYy00MDA2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MDI2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MDI3OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpXFxubW0vbWVtY29udHJvbC5jLTQwMjgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyMy43NTg2NDI4NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc1ODU3NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGVzZSB0d28gZnVuY3Rpb25zLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBpdHMgb25saW5lIGNvdW50ZXJwYXJ0LCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIHRoZXkncmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBzY29wZS4gQnV0IHRoZXkgcHJpbWFyaWx5IHNlZW0gdG8gZnVuY3Rpb24gYXMgaGVscGVyIHJvdXRpbmVzLCB3aGljaCByYWlzZXMgYSBxdWVzdGlvbiBvZiB0aGVpciB3aWRlciBpbXBhY3QgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBUaGUga2V5IGVudHJ5IHBvaW50cyB0aGF0IHJlbHkgb24gdGhlbSBhcHBlYXIgdG8gYmUgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gVGhpcyBnaXZlcyBtZSBzb21lIGRpcmVjdGlvbiBhcyB0byB3aGVyZSB0byBsb29rIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0IG9mIHRoZWlyIHVzZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIENsZWFybHksIGBDT05GSUdfTUVNQ0dgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuIFdoYXQgSSdtIGxlc3MgY2VydGFpbiBhYm91dCBpcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1NXQVBgLiBHaXZlbiB0aGF0IGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBzd2FwLXJlbGF0ZWQsIHRoZXJlIGlzIGEgc3Ryb25nIHBvc3NpYmlsaXR5IHRoYXQgYENPTkZJR19TV0FQYCB3aWxsIGFsc28gYmUgYSBkZXBlbmRlbmN5LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgc291cmNlIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEknbSBnb2luZyB0byBsb29rIGF0IGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBsb29rIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4NCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyOS41MzQ1MDQxMDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NDI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXigjaWZkZWZ8I2lmbmRlZikgQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG5tbS9tZW1jb250cm9sLmMtMTAzLVxcbm1tL21lbWNvbnRyb2wuYzoxMDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMzLVxcbm1tL21lbWNvbnRyb2wuYzoyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA0LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NXQVBDQUNIRSxcXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy00MDktXFx0UEdQUk9NT1RFX1NVQ0NFU1MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI3LVxcdFBHUkVGSUxMLFxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtNDI5LVxcdE5SX0hVR0VUTEIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg4PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDItXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUwMzojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MDQtXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUtXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MjctXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMi1cXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTM0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1NTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NjAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy01ODEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTg2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtNTg3LVxcdE5VTUFfUEFHRV9NSUdSQVRFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc3MC1cXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy03NzItXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc5Mj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODA3LVxcbm1tL21lbWNvbnRyb2wuYzo4MDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04MDktLypcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NzY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg4LVxcbm1tL21lbWNvbnRyb2wuYzo4ODk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04OTktXFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcXG5tbS9tZW1jb250cm9sLmMtOTAxLVxcdGlmICh4IFxcdTAwM2MgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEwNzEtXFxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTYxLVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1NzItI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVxcdHsgXFxcImFub25fdGhwXFxcIixcXHRcXHRcXHROUl9BTk9OX1RIUFNcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1ODQtXFx0eyBcXFwic2xhYl91bnJlY2xhaW1hYmxlXFxcIixcXHRcXHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cXHR7IFxcXCJodWdldGxiXFxcIixcXHRcXHRcXHROUl9IVUdFVExCXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEwLVxcdHsgXFxcInBncmVmaWxsXFxcIixcXHRcXHRcXHRQR1JFRklMTFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTE6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVxcdHsgXFxcInBncHJvbW90ZV9zdWNjZXNzXFxcIixcXHRcXHRQR1BST01PVEVfU1VDQ0VTU1xcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTYzMz1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cXHRjYXNlIFBHUkVGSUxMOlxcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cXHRjYXNlIFBHUFJPTU9URV9TVUNDRVNTOlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2NzctXFxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNjc5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoxNjg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3MTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpKyspIHtcXG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE3NDYtXFx0XFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MTctXFx0XFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XFxubW0vbWVtY29udHJvbC5jOjE4MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xODE5LVxcdGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjgxNy1cXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDctXFxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzE2LVxcbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxubW0vbWVtY29udHJvbC5jOjQxOTQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTQxOTUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM0LVxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI0My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDUtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3OS1cXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MTktXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0MjA6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDIxLVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQyNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0MjUtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDUzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDg4LVxcbm1tL21lbWNvbnRyb2wuYzo0NDg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5NzU9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODktXFxubW0vbWVtY29udHJvbC5jOjQ5OTA6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI1LVxcdH0sXFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTUxMjctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTctXFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYzo1MTU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0MC1cXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODk0LVxcbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA5OC1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYzo2MDk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjI5LjU4MTQ1MTcxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg0OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9OTQ9ZW51bSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTAxLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMDI6I2lmZGVmIENPTkZJR19MT0NLREVQXFxubW0vbWVtY29udHJvbC12MS5jLTEwMy1zdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NDA1PXN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNDEwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzo0MTE6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9tZW1jb250cm9sLXYxLmMtNDEyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTU5Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy02MDYtXFxubW0vbWVtY29udHJvbC12MS5jOjYwNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtNjA4LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwMzM9c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9yZXNldChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDY5LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDcwOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDcxLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNjA9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTYyLVxcdE5SX0FOT05fTUFQUEVELFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTYzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2NC1cXHROUl9BTk9OX1RIUFMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3MS1cXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE3MjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3My1cXHRNRU1DR19TV0FQLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNzg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4MC1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4MTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxODItXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg5LVxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIxOTA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTIxOTEtXFx0XFxcInN3YXBcXFwiLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIyMjA9dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjc0LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjc1OiNpZmRlZiBDT05GSUdfREVCVUdfVk1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjI3Ni1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjMzMT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfb29tX2NvbnRyb2xfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMzUxOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zbGFiX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIzNjI9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI0MjgtXFx0fSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjQyOTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9tZW1jb250cm9sLXYxLmMtMjQzMC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjQ1Ny1cXHR9LFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDU5LVxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6MjkuNjI4MzA4OTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTQ0OTExNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAtUmVsYXRlZCBNZW1vcnkgQ2dyb3VwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgY2dyb3VwIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMuIEkgc2VlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgYWxsIGNsZWFybHkgZ3VhcmRlZCBieSBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQnV0IGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCAqc2hvdWxkKiBhbHNvIGJlIHVuZGVyIGBDT05GSUdfU1dBUGAgZ2l2ZW4gaXRzIG5hbWUsIGFuZCB0aGF0IGl0J3MgaW4gYG1tL21lbWNvbnRyb2wuY2AuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQgKmlzbid0KiBkaXJlY3RseSB1bmRlciBhIGAjaWZkZWYgQ09ORklHX1NXQVBgIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIHdoaWNoIGlzIHN0cmFuZ2UuIEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBub3cgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AgbW9yZSBicm9hZGx5IHRvIHNlZSBpZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBkZWZpbmVkIHVuZGVyIHNvbWUgb3RoZXIgY29uZGl0aW9uYWwuIEFoLCBmb3VuZCBpdC4gTG9va2luZyBhdCBsaW5lIDU2NDEgSSBjYW4gc2VlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgaXMgdXNlZC4gTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTozNC43ODI4MDIzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUyMzE9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjQtICovXFxubW0vbWVtY29udHJvbC5jOjUyNjU6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5tbS9tZW1jb250cm9sLmMtNTI2Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTozNC44Njg1NzY4MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDUzNTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHRoaW5nIGV2ZW4gKmFsd2F5cyogZW5hYmxlZD8gT3IgaXMgaXQgdHVja2VkIGF3YXkgYmVoaW5kIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZT9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsLCBtYXliZSBvbmx5IGNvbXBpbGVkIGluIGZvciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBmZWF0dXJlIGZsYWcgdGhhdCdzIG9ubHkgYWN0aXZlIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBxdWljayBzY2FuIGZvciBgI2lmZGVmYCBzdGF0ZW1lbnRzIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvciB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBuZWNlc3NhcnkgZmlyc3Qgc3RlcC4gVGhhdCdsbCBzYXZlIG1lIGZyb20gY2hhc2luZyBhIGdob3N0IGxhdGVyLCB5b3Uga25vdz8gSXQncyBhIGZ1bmRhbWVudGFsIHNhbml0eSBjaGVjayB0byBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHdhc3RlZCBteSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjM4LjU4OTExNTA1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXigjaWZkZWZ8I2lmbmRlZikgQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG5tbS9tZW1jb250cm9sLmMtMTAzLVxcbm1tL21lbWNvbnRyb2wuYzoxMDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMzLVxcbm1tL21lbWNvbnRyb2wuYzoyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA0LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NXQVBDQUNIRSxcXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy00MDktXFx0UEdQUk9NT1RFX1NVQ0NFU1MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI3LVxcdFBHUkVGSUxMLFxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtNDI5LVxcdE5SX0hVR0VUTEIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg4PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDItXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUwMzojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MDQtXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUtXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MjctXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMi1cXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTM0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1NTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NjAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy01ODEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTg2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtNTg3LVxcdE5VTUFfUEFHRV9NSUdSQVRFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc3MC1cXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy03NzItXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc5Mj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODA3LVxcbm1tL21lbWNvbnRyb2wuYzo4MDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04MDktLypcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NzY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg4LVxcbm1tL21lbWNvbnRyb2wuYzo4ODk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04OTktXFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcXG5tbS9tZW1jb250cm9sLmMtOTAxLVxcdGlmICh4IFxcdTAwM2MgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEwNzEtXFxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTYxLVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1NzItI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVxcdHsgXFxcImFub25fdGhwXFxcIixcXHRcXHRcXHROUl9BTk9OX1RIUFNcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1ODQtXFx0eyBcXFwic2xhYl91bnJlY2xhaW1hYmxlXFxcIixcXHRcXHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cXHR7IFxcXCJodWdldGxiXFxcIixcXHRcXHRcXHROUl9IVUdFVExCXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEwLVxcdHsgXFxcInBncmVmaWxsXFxcIixcXHRcXHRcXHRQR1JFRklMTFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTE6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVxcdHsgXFxcInBncHJvbW90ZV9zdWNjZXNzXFxcIixcXHRcXHRQR1BST01PVEVfU1VDQ0VTU1xcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTYzMz1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cXHRjYXNlIFBHUkVGSUxMOlxcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cXHRjYXNlIFBHUFJPTU9URV9TVUNDRVNTOlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2NzctXFxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNjc5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoxNjg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3MTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpKyspIHtcXG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE3NDYtXFx0XFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MTctXFx0XFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XFxubW0vbWVtY29udHJvbC5jOjE4MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xODE5LVxcdGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjgxNy1cXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDctXFxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzE2LVxcbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxubW0vbWVtY29udHJvbC5jOjQxOTQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTQxOTUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM0LVxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI0My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDUtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3OS1cXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MTktXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0MjA6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDIxLVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQyNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0MjUtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDUzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDg4LVxcbm1tL21lbWNvbnRyb2wuYzo0NDg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5NzU9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODktXFxubW0vbWVtY29udHJvbC5jOjQ5OTA6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI1LVxcdH0sXFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTUxMjctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTctXFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYzo1MTU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0MC1cXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODk0LVxcbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA5OC1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYzo2MDk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjM4LjYzNzEyNjAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNDgzNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBNZW1vcnkgQ29udHJvbCBhbmQgU3dhcCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzbid0IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkuIE5vdywgdGhhdCdzIG1ha2luZyBtZSByZWNvbnNpZGVyIHRoZSBhcmNoaXRlY3R1cmUuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgYWN0dWFsIHN3YXBvdXQgZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLCBgX19tZW1jZzFfc3dhcG91dGAsIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEFuZCB0aGF0IGZpbGUncyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB0aWVkIHRvIGBDT05GSUdfTUVNQ0dfVjFgLiBJJ20gc3RhcnRpbmcgdG8gcHV0IHRoZSBwaWVjZXMgdG9nZXRoZXIuIFRoZSB2MSBtZW1vcnkgY2dyb3VwIGltcGxlbWVudGF0aW9uIG1pZ2h0IGhhbmRsZSB0aGlzIHN3YXAgaW50ZXJhY3Rpb24gZGlmZmVyZW50bHkgb3IgZW5jYXBzdWxhdGUgcmVsYXRlZCBsb2dpYy5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cCBhIHN0ZXAuIFRvIGNvbmZpcm0gdGhpcyBsaW5lIG9mIHRoaW5raW5nIGFuZCBnZXQgdGhlIHdob2xlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjbGVhciB2aWV3IG9mIGhvdyB0aGVzZSBmaWxlcyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGludGVyY29ubmVjdGVkIGF0IHRoZSBidWlsZCBsZXZlbC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBob3cgZXZlcnl0aGluZyBpcyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTo0Mi43Nzk2MTM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NTk4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbC12MVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6NDIuODI3NTc4MjQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTkzNDQ4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBzeW1ib2xzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb24gYF9fbWVtY2cxX3N3YXBvdXRgLiBUaGVuLCB3ZSBuZWVkIGBDT05GSUdfU1dBUGAgZm9yIGJvdGggYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX01FTUNHYCBpcyBmdW5kYW1lbnRhbCBmb3IgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFzIHdlbGwgYXMgYGxpc3RfbHJ1X3dhbGtfbm9kZWAgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBsaXN0X2xydV93YWxrX25vZGVgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgYXJlIGFsd2F5cyBpbmNsdWRlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHJlYXNvbmFibGUgY2lyY3Vtc3RhbmNlcy4gTGV0J3Mgc2VlLi4uIGBsaXN0X2xydV93YWxrX25vZGVgIHJlc2lkZXMgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgYGxpc3RfbHJ1Lm9gIGFuZCBgd29ya2luZ3NldC5vYCBhcmUgZ2V0dGluZyBidWlsdCwgdG8gY29uZmlybSBubyB1bmV4cGVjdGVkIGNvbmZpZyByZXF1aXJlbWVudHMgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjQ3LjY4NjkyNjMwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMjg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9scnVcXFxcLm98d29ya2luZ3NldFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU3OlxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxubW0vTWFrZWZpbGUtNTgtXFx0XFx0XFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjQ3LjczNDI2NTYzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE0Njg5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRoaW5raW5nIG9uIEZvY3VzaW5nIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGlzIHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgSSdtIGNvbXBpbGluZyB0aGUgaW5mb3JtYXRpb24gdW5jb25kaXRpb25hbGx5LiBUaGlzIG1lYW5zIEknbSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucywgYW5kIEknbSBsb29raW5nIGF0IGV2ZXJ5dGhpbmcuXG5cbkkndmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQsIHdoaWNoIGFyZSBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5SaWdodCBub3csIG15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBhcmU6IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNvbGlkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBpbmNsdWRpbmcgc29tZSBzbWFsbGVyIGhlbHBlciBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGNvbnNpZGVyaW5nIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAgYW5kIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLiBUaGV5J3JlIG5vbi1zdGF0aWMsIHRoZXkncmUgZXhwb3J0ZWQsIGFuZCB3aGlsZSBmdXp6aW5nIHRoZW0gKmRpcmVjdGx5KiBtaWdodCBub3QgeWllbGQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcmVzdWx0cyBjb21wYXJlZCB0byBmdXp6aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlbSwgaXQgZG9lc24ndCBodXJ0LiBNaWdodCBhcyB3ZWxsIGluY2x1ZGUgdGhlbSBmb3IgYnJvYWRlciBjb3ZlcmFnZS4gQWN0dWFsbHksIGhvbGQgb24uIEkgc2VlIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCBhbmQgYG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWRgLCB3aGljaCBhcmUgc3RhdGljIGFuZCByZWxhdGVkLCBzbyBsZXQncyBpbmNsdWRlIHRob3NlIHRvby4gVGhpcyBpcyBleHBhbmRpbmcgdGhlIHNjb3BlIGEgYml0LlxuXG5Pa2F5LCBsZXQncyB1cGRhdGUgdGhhdCBsaXN0OlxuLSAgIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGBcbi0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYFxuLSAgIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YFxuLSAgIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gXG4tICAgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgXG4tICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYFxuLSAgIGBfX21lbWNnMV9zd2Fwb3V0YFxuLSAgIGBsaXN0X2xydV93YWxrX25vZGVgXG4tICAgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgXG5cbk5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBJIGtub3cgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBpcyBub24tc3RhdGljIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgaXQncyBhY3R1YWxseSBleHBvcnRlZC4gSXQncyBlYXN5IHRvIG92ZXJsb29rIHNvbWV0aGluZyBpbiB0aGVzZSBzb3J0cyBvZiBldmFsdWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MDIuODgxMTYzMzkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA5MTkyNDQ3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MDQuOTkwMzY2NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzYyMjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFN5bWJvbCdzIFZpc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBhbmQgSSBzZWUgaXQncyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3Mgbm90IGBzdGF0aWNgIGVpdGhlci4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IG1lYW5zIGl0IGhhcyBhIGdsb2JhbGx5IHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhpcyBzdWdnZXN0cyBpdCAqY291bGQqIGJlIHVzZWQgb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYWN0dWFsbHkgYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBtb2R1bGVzPyBJIG5lZWQgdG8ga25vdyBpZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBhY3R1YWxseSBtYWRlIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBMZXQncyBkaWcgaW50byB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgb3Igbm90LCBhbmQgaG93IHdlIGNhbiBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjowOC4yMjM5OTE4MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMzMzE4NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MTAuMzU3MzMwMzI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDM5NjUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgTm9uLVN0YXRpYywgTm9uLUV4cG9ydGVkIEZ1bmN0aW9uIEJlaGF2aW9yKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCdzIGFsc28gKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLWV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgdHJpY2t5LCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgZW52aXJvbm1lbnQuIFRoZXkgbWlnaHQgYmUgc3ViamVjdCB0byBpbnRlcm5hbCBsaW5rYWdlIG9yLCBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHByb2Nlc3MsIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3IgbGlua2VkIG9iamVjdCBmaWxlcyBpbiB3YXlzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBhIHN0YW5kYXJkIGhlYWRlciBleGFtaW5hdGlvbi4gVGhpcyBzaXR1YXRpb24gcmFpc2VzIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jeSBjb25jZXJucyBkdXJpbmcgcmVmYWN0b3Jpbmcgb3IgZnV0dXJlIG1vZGlmaWNhdGlvbnMuXG5cblRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGltcGxpZXMgYSBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uLiBXaXRob3V0IG1vcmUgY29udGV4dCwgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyB0byB0aGlzLiBJcyB0aGUgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCB0aHJvdWdoIGEgbW9yZSBjb21wbGV4IGxpbmthZ2UgbWVjaGFuaXNtLCBwZXJoYXBzIHdpdGggYSBzaGFyZWQgbGlicmFyeSBvciBETEw/IE9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgZGVzaWduIHBhdHRlcm4gaW4gcGxheT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjYWxsaW5nIGNvbnRleHQsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBsaXN0X2xydV93YWxrX25vZGVgLiBFeGFtaW5pbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIGhvdyB0aGlzIG9uZSBpcyB1c2VkLCB3aGljaCBjYW4gcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXQgd2lsbCBpbmRpY2F0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1ldGhvZHMgYmVpbmcgdXNlZCBhbmQgaG93IHRoZSBmdW5jdGlvbiBmaXRzIGludG8gYSBsYXJnZXIgc3lzdGVtIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDYwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MTQuMTYxMjk4MTk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1MjczMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmxpc3RfbHJ1X3dhbGtfbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDQ4LX1cXG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoxNi4yNTY1Nzc4NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5ODQyMDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgb2YgQ3VycmVudCBTdGF0dXMgXHUwMDI2IEluaXRpYWwgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGF0YSBpcyAqZXhwb3J0ZWQqLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIHRvIGNoZWNrIHRoZSByZWNlbnQgZGF0YS4gSXQgc291bmRzIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYSBmb3IgYW5hbHlzaXMgYXQgdGhpcyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyMS4wNTUwMDIyNDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE0MTEzNjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjIzLjE1NjQxOTE4NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE4NDYzMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcGhyYXNlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOlxuXG4qKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBhIGNvcmUgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsOiBzcGVjaWZpY2FsbHksIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCwgb3IgbWVtY2csIHN1YnN5c3RlbS4gQW5kIEknbSBzZWVpbmcgdGhhdCB0aGUgY29kZSBpcyAqbm90KiBleHBvcnRlZCwgYnV0IGl0IGFsc28gaXMgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgbGF0ZXIgY29uc2lkZXJhdGlvbi5cblxuVGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGlzIHRvdWNoZXMsIGFuZCB0aGVyZWZvcmUgZGVwZW5kcyB1cG9uLCBhcmUgcHJldHR5IGNsZWFyOiBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0J3Mgbm90IHVuZXhwZWN0ZWQ7IGFueSBzaWduaWZpY2FudCBtZW1jZyBjaGFuZ2UgaXMgZ29pbmcgdG8gcmlwcGxlIG91dCB0byB0aGUgc3dhcCBoYW5kbGluZy5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSByZWZhY3RvcmluZyBvZiBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIGhhbmRsZWQuIEl0J3MgbW92aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZXNlIElEcyBpbnRvIHRoZSBgc3RydWN0IG9ial9jZ3JvdXBgLiBUaGlzIGltcGxpZXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIG1hbmFnZXMgdGhlc2UgbWVtY2cgSURzIHRocm91Z2hvdXQgdGhlIHN5c3RlbS4gSSdtIG5vdGluZyB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBJRCBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGF0IG1lYW5zLCBvZiBjb3Vyc2UsIHRoYXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyDigJMgc3dhcCwgd29ya2luZ3NldCwgYW5kIGxpc3RfbHJ1IOKAkyBhcmUgKmFsbCogYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgSUQgbWFuYWdlbWVudCBwYXJhZGlnbS4gVGhlc2UgYXJlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGNoYW5nZXMgaGVyZSBjYW4gaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cy4gSXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyBnb2luZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuXG5cbkxldCdzIHRlcm0gdGhpcyBjaGFuZ2UgYXMgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NzMsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjI5Ljc3NDg4NTg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3MzE3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyOS44NDY2MjQ4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMzA1NTY1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyOS44NDcxNDU5MTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEwMzAwMzE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gSXQgY2hhbmdlcyBob3cgbWVtY2dzIGFyZSBsb29rZWQgdXAgZnJvbSB0aGVzZSBJRHMgYW5kIGhvdyB0aGVpciByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuXFxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTk1ZjU1ZDUyN2VkNDRjZjIyZDY1OTM5NzJhYzg2MjhlODJjZTI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6MzQ6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkxLDYgKzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdH07XG4gXHRib29sIGlzX3Jvb3Q7XG4rXHRyZWZjb3VudF90IGlkX3JlZjtcbiB9O1xuIFxuIC8qXG5AQCAtMjAyLDggKzIwMyw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7XG4gXG4tXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XG4rXHQvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqL1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO1xuIFxuIFx0LyogQWNjb3VudGVkIHJlc291cmNlcyAqL1xuIFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XHRcdC8qIEJvdGggdjEgXHUwMDI2IHYyICovXG5AQCAtMjcwLDYgKzI3MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjZW5kaWZcbiBcdGludCBrbWVtY2dfaWQ7XG4gXG4rXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbitcdGludCBpZDtcbitcbiBcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5AQCAtODIwLDkgKzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdHJldHVybiBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4rXHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKi9cbiB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gXG5AQCAtNjM4LDE5ICs2MzgsMjAgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRpZiAoIW9iamNnKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIFx0LypcbiBcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxuIFx0ICogaGF2ZSBhbiBJRCBhbGxvY2F0ZWQgdG8gaXQgYW55bW9yZSwgY2hhcmdlIHRoZSBjbG9zZXN0IG9ubGluZVxuLVx0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQgYW5kIHRyYW5zZmVyIHRoZSBtZW1vcnkrc3dhcCBjaGFyZ2UuXG4rXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC5cbiBcdCAqL1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRzd2FwX21lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX2VudHJpZXMpO1xuLVx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xuK1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbitcbitcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTtcbiBcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpO1xuK1x0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4gXG4gXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbiBcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuQEAgLTY1OCwxMiArNjU5LDYgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4gXHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIG5yX2VudHJpZXMpO1xuIFxuLVx0aWYgKG1lbWNnICE9IHN3YXBfbWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3Qoc3dhcF9tZW1jZykpXG4tXHRcdFx0cGFnZV9jb3VudGVyX2NoYXJnZShcdTAwMjZzd2FwX21lbWNnLVx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcbi1cdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2sgd2l0aCBJUlEgb2ZmLiBJdCBpc1xuIFx0ICogaW1wb3J0YW50IGhlcmUgdG8gaGF2ZSB0aGUgaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIGl0IGlzIHRoZVxuQEAgLTY3NSw3ICs2NzAsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xuIFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAwZjcwM2YyMzljODBmLi45Yzc0NDAwYWE3ZGRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0yMSw4ICsyMSw3IEBAIHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcbiBcbiBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIFxuLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG4gXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM2OTcsNyArMzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTM5NTYsMzYgKzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbitcdGlmIChtZW1jZy1cdTAwM2VpZCBcdTAwM2UgMCkge1xuK1x0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCk7XG4rXHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbisvKipcbisgKiBAb2JqY2c6IHRoZSBvYmpjZyByZXR1cm5lZCBieSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfb2JqY2dcbisgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcbisgKi9cbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuK1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbitcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2b2JqY2ctXHUwMDNlaWRfcmVmKSkge1xuK1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0XHRWTV9XQVJOX09OKG9iamNnX2ZyZWUgIT0gb2JqY2cpO1xuK1xuK1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XG4tXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG4tXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0fVxuLVx0cmV0dXJuIG1lbWNnO1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVx1MDAzZWlkX29iamNnLCBtZW1jZy1cdTAwM2VpZCwgbik7XG4rfVxuK1xuK3ZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdGJvb2wgc3VjY2VzcztcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLVx1MDAzZWlkX29iamNnO1xuK1xuK1x0c3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpO1xuK1x0Vk1fV0FSTl9PTighc3VjY2Vzcyk7XG4gfVxuIFxuIC8qKlxuQEAgLTM5OTMsMTEgKzM5OTksNTUgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4gICpcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS5cbisgKlxuKyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLlxuICAqL1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbiB7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcbitcdG9iamNnID0geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRpZiAoIW9iamNnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHRpZiAobWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSAhPSBpZClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWVtY2c7XG4rfVxuK1xuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhbiBvbmxpbmUgbWVtY2cgZnJvbSBhIG1lbWNnIGlkXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxuKyAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbisgKi9cbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxuK3tcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcbitcdG9iamNnID0geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRpZiAoIW9iamNnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuK1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG9iamNnLCBpZCwgbik7XG4rXHRyZXR1cm4gbWVtY2c7XG4gfVxuIFxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZClcbkBAIC00MDk4LDcgKzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGlmICghbWVtY2cpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbitcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG4gXHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC00MjQzLDkgKzQyOTMsMTAgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0XHRcdCAgIEZMVVNIX1RJTUUpO1xuIFx0bHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuLVx0LyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRyZWZjb3VudF9zZXQoXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmLCAxKTtcbi1cdGNzc19nZXQoY3NzKTtcbitcdC8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi9cbitcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bMF0tXHUwMDNlb2JqY2c7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bWVtY2ctXHUwMDNlaWRfb2JqY2ctXHUwMDNlaWRfcmVmLCAxKTtcbitcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cbkBAIC00MjU3LDcgKzQzMDgsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBvYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzMDgsOCArNDM1OSw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdGxydV9nZW5fb2ZmbGluZV9tZW1jZyhtZW1jZyk7XG4gXG4gXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuLVxuLVx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNDMxOCw2ICs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xuIFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbitcbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuK1x0bWVtY2ctXHUwMDNlaWRfb2JqY2cgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNTIxOSwxMSArNTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xuLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbitcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKGlkKTtcbitcdGlmICghbWVtY2cpXG4gXHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG4gXG5AQCAtNTYyMSwyNCArNTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuK1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XG4gXG4rXHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuK1x0bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfcGFnZXMpO1xuK1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuIFx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NjUxLDE5ICs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbi1cdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbi1cdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuLVx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbi1cdFx0fVxuLVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdG1lbWNnID0gbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZChpZCwgbnJfcGFnZXMpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4rXHRcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4rXHRcdGVsc2VcbitcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gfVxuIFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi5iNmUyMjUzNmE1MjQwIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC0yODMsNiArMjgzLDEwIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG4gXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiBcbitcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbiBcdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbiBcbkBAIC00NzAsNyArNDc0LDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuIFx0ICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC5cbiBcdCAqL1xuIFx0ZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTtcbi1cdGlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuK1x0aWYgKCFldmljdGlvbl9tZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuIFx0XHRldmljdGlvbl9tZW1jZyA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjI5Ljg0NzE0NjYxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE5NjE4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFByaXZhdGUgSUQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgZ3V0cyBvZiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBob3cgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQgYW5kIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCB1c2luZyB0aG9zZSBJRHMuIEkgc2VlIGl0IGludHJvZHVjZXMgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLCBhbmQgaXQncyB0d2Vha2luZyBhIGJ1bmNoIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gTW9zdGx5LCBpdCBzZWVtcyB0byBiZSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgbWVtY2dzIGFuZCB0aGVpciBwcml2YXRlIElEcywgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIHN3YXAgYW5kIHdvcmtpbmdzZXQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgbmFpbCBkb3duIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGlzc3Vlcy4gVGhlIGJpZyB0aGluZyBJIGFsd2F5cyBjaGVjayBpcyB3aGV0aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCdzIHBvdGVudGlhbGx5IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIGJ1dCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCdzICpwdXJlbHkqIGludGVybmFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyDigJMgYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBvYmpfY2dyb3VwYCwgYnV0IG5vdGhpbmcgbmV3IGlzIGJlaW5nICpjb3BpZWQqIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlbid0IGFueSBuZXcgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhc3NlZCBiYWNrIGVpdGhlci4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCwgcmVmY291bnRzLCBwb2ludGVycywgYW5kIElEcy5cblxuVGhlIHR5cGVzIG9mIGJ1Z3MgdGhpcyBpcyBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYXJlIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MuIEtBU0FOIGlzIHRoZSB0b29sIGZvciBjYXRjaGluZyB0aG9zZSBraW5kcyBvZiBpc3N1ZXMsIHdoaWNoIGlzIGdyZWF0LiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIEtNU0FOIHdvdWxkIGNhdGNoP1xuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSBwYXRjaCBkb2VzIGNoYW5nZSBob3cgdGhlIElEIGlzIHN0b3JlZC4gYG1lbWNnLVx1MDAzZWlkYCBpcyBub3cgYW4gYGludGAsIHJlcGxhY2luZyB0aGUgb2xkIGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkYC4gQW5kIGBtZW1jZy1cdTAwM2VpZF9vYmpjZ2AgaXMgYSBwb2ludGVyLiBJdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBpbml0aWFsaXplZCBpbiBgbWVtX2Nncm91cF9hbGxvY2Agb3IgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAuICBBbmQsIGlmIGl0J3MgdXNpbmcgc3RhbmRhcmQgbWVtY2cgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHRoZW4gd2Ugc2hvdWxkIGJlIGZpbmUuIEknbGwgbmVlZCB0byBjaGVjayBgbWVtX2Nncm91cF9hbGxvY2AgY2FyZWZ1bGx5LCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCdzIGxpa2VseSB1c2luZyBga3phbGxvY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZSB0aGF0IEtNU0FOIHdvdWxkIHVuaXF1ZWx5IGNhdGNoLiBUaGUgS0FTQU4gY2hlY2tzIGFyZSBnb2luZyB0byBiZSBwZXJmZWN0IGZvciB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHRoYXQgY291bGQgc3RlbSBmcm9tIHNjcmV3ZWQtdXAgcmVmY291bnRpbmcuIFN0aWxsLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSSBzaG91bGQgbmV2ZXIgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MzguMTY2NzY5MjA2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1NzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDEzMT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxMzctXFxubW0vbWVtY29udHJvbC5jOjQxMzg6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQxMzkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxNS1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjQyMTY6XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTQyMTctXFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjozOC4yMTE2MzI3MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MDE4MTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBtZW1fY2dyb3VwX2FsbG9jYCwgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2FsbG9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCByaWdodCBpbnRvIHRoZSBndXRzIG9mIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3MuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGhlcmU/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IGNncm91cCBpdHNlbGYsIHRoZSBwZXItbm9kZSBhY2NvdW50aW5nIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYWxsb2NhdGlvbiBjaGVjayBhbmQgYWNjb3VudGluZyB1cGRhdGUsIG9yIGlzIHRoZXJlIGEgbW9yZSBjb21wbGV4IGJhbGFuY2luZyBhY3QgZ29pbmcgb24/IEknbSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLCBOVU1BIGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiByZXNvdXJjZSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlY2xhaW0sIHN3YXAsIGFuZCBPT00gaGFuZGxpbmc/IFdoYXQncyB0aGUgbG9jayBoaWVyYXJjaHkgbGlrZSwgYW5kIGhvdyBpcyBjb25jdXJyZW5jeSBtYW5hZ2VkPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBldmVuIGRlYWRsb2NrIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgdGhlIGNhbGxlciBleHBlY3RzIGluIHJldHVybi4gSSBleHBlY3QgdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24gdG8gYmUgaW50ZXJlc3RpbmcsIHNvIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmNpZXMuIEkgd29uZGVyIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBzaXR1YXRpb25zIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMgZHVlIHRvIG1lbW9yeSBsaW1pdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjo0Mi4yODE4MTc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMzgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxMzg6XFx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuNDEzOTpcXHR7XFxuNDE0MDpcXHRcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbjQxNDE6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG40MTQyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40MTQzOlxcdFxcdGludCBub2RlLCBjcHU7XFxuNDE0NDpcXHRcXHRpbnQgX19tYXliZV91bnVzZWQgaTtcXG40MTQ1OlxcdFxcdGxvbmcgZXJyb3I7XFxuNDE0NjpcXHRcXG40MTQ3OlxcdFxcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG40MTQ4OlxcdFxcdGlmICghbWVtY2cpXFxuNDE0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG40MTUwOlxcdFxcbjQxNTE6XFx0XFx0ZXJyb3IgPSB4YV9hbGxvYyhcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZCwgTlVMTCxcXG40MTUyOlxcdFxcdFxcdFxcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xcbjQxNTM6XFx0XFx0aWYgKGVycm9yKVxcbjQxNTQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNTU6XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjQxNTY6XFx0XFxuNDE1NzpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQxNTg6XFx0XFx0aWYgKCFtZW1jZy1cXHUwMDNldm1zdGF0cylcXG40MTU5OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTYwOlxcdFxcbjQxNjE6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXFxuNDE2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MTYzOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1KVxcbjQxNjQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNjU6XFx0XFxuNDE2NjpcXHRcXHRpZiAoIW1lbWNnMV9hbGxvY19ldmVudHMobWVtY2cpKVxcbjQxNjc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNjg6XFx0XFxuNDE2OTpcXHRcXHRwc3RhdGNfcGNwdSA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xcbjQxNzA6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjQxNzE6XFx0XFx0XFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDE3MjpcXHRcXHRcXHRzdGF0Yy1cXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcXG40MTczOlxcdFxcdFxcdHN0YXRjLVxcdTAwM2V2bXN0YXRzID0gbWVtY2ctXFx1MDAzZXZtc3RhdHM7XFxuNDE3NDpcXHRcXHR9XFxuNDE3NTpcXHRcXG40MTc2OlxcdFxcdGZvcl9lYWNoX25vZGUobm9kZSlcXG40MTc3OlxcdFxcdFxcdGlmICghYWxsb2NfbWVtX2Nncm91cF9wZXJfbm9kZV9pbmZvKG1lbWNnLCBub2RlKSlcXG40MTc4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTc5OlxcdFxcbjQxODA6XFx0XFx0aWYgKG1lbWNnX3diX2RvbWFpbl9pbml0KG1lbWNnLCBHRlBfS0VSTkVMKSlcXG40MTgxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTgyOlxcdFxcbjQxODM6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrLCBoaWdoX3dvcmtfZnVuYyk7XFxuNDE4NDpcXHRcXHR2bXByZXNzdXJlX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2V2bXByZXNzdXJlKTtcXG40MTg1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X3BlYWtzKTtcXG40MTg2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcF9wZWFrcyk7XFxuNDE4NzpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjo0Mi4yODIwNjA4MzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5NTA5NDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2gsIGRlYWxpbmcgd2l0aCBgbWVtY2dgIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBpc24ndCBnb2luZyB0byByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIG1hbmFnZSBhbmQgdHJhY2sgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgYm9va2tlZXBpbmcsIG1haW5seSBjZW50ZXJlZCBhcm91bmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cblxuQ3J1Y2lhbGx5LCB0aGUgYG1lbV9jZ3JvdXBgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCB3aGljaCBtZWFucyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gVGhhdCBhbG9uZSBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZS4gVGhlIHByaW1hcnkgcmlzayBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnM6IHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MgbGVhZGluZyB0byBsZWFrcyBvciBwcmVtYXR1cmUgZnJlZS1pbmcuXG5cbkNvbnNpZGVyaW5nIHRoZSB0eXBlcyBvZiBjaGFuZ2VzIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGxpa2VseSBsaWUsIEtBU0FOIHNlZW1zIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgZXJyb3JzLiBXZSdyZSB0YWxraW5nIGFib3V0IGNsYXNzaWMga2VybmVsIG1lbW9yeSBidWdzLCBub3QgdGhlIHR5cGUgb2YgZGF0YSBsZWFrYWdlIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdXNlci1zcGFjZSBkYXRhIGNvcHlpbmcgb3IgbWFuaXB1bGF0aW9uIHRoYXQgd291bGQgZXhwb3NlIG5ldywgcG9zc2libHkgdW5pbml0aWFsaXplZCwgbWVtb3J5IGFyZWFzIHRvIHVzZXIgcHJvY2Vzc2VzLiBHaXZlbiB0aGF0IEtBU0FOJ3MgY292ZXJhZ2Ugb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGlzIGV4Y2VsbGVudCBhbmQgdGhhdCB0aGUgbmV3IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgSSBkb24ndCBzZWUgYW55IG5lZWQgdG8gcHVzaCBmb3IgYSBLTVNBTiBzZXNzaW9uLiBUaGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgYE5lZWRzS01TQU5gIGxhYmVsIHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTEyLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjUwLjg3NzE1ODUxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG5cXG5BbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MgZHVlIHRvIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gSXQgY2hhbmdlcyBob3cgbWVtY2dzIGFyZSBsb29rZWQgdXAgZnJvbSB0aGVzZSBJRHMgYW5kIGhvdyB0aGVpciByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuXFxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd4shr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:33:37 +0000 UTC FinishedAt: 2026-08-13 09:36:51 +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": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "SWAP" ], "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": "288058d8db5d35623228d84f48d9bea3707d5c85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "SWAP" ], "series_id": "3a8a2a5f-8b6d-4abf-954e-a1a18ee62748" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_from_private_id", "mem_cgroup_from_private_id_online", "mem_cgroup_private_id_get", "mem_cgroup_swapin_charge_folio", "__mem_cgroup_try_charge_swap", "__mem_cgroup_uncharge_swap", "__memcg1_swapout", "list_lru_walk_node", "workingset_test_recent" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG5cbkFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcyBkdWUgdG8gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLmZlZjhhMWM0MTkxYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xOTEsNiAmIzQzOzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdH07XG4gXHRib29sIGlzX3Jvb3Q7XG4mIzQzO1x0cmVmY291bnRfdCBpZF9yZWY7XG4gfTtcbiBcbiAvKlxuQEAgLTIwMiw4ICYjNDM7MjAzLDggQEAgc3RydWN0IG9ial9jZ3JvdXAge1xuIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzcztcbiBcbi1cdC8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqL1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZDtcbiYjNDM7XHQvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqL1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI3MCw2ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNlbmRpZlxuIFx0aW50IGttZW1jZ19pZDtcbiBcbiYjNDM7XHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbiYjNDM7XHRpbnQgaWQ7XG4mIzQzO1xuIFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICp2bXN0YXRzX3BlcmNwdTtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbkBAIC04MjAsOSAmIzQzOzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBtZW1jZy1cdTAwM2VpZC5pZDtcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4mIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmNcbkBAIC00MjgsNyAmIzQzOzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4mIzQzO1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAyZGM1OTk0ODRkMDA2Li5lNTE2MWUwNjFiZDExIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC02MTgsNyAmIzQzOzYxOCw3IEBAIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqL1xuIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gXG5AQCAtNjM4LDE5ICYjNDM7NjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpjZylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdC8qXG4gXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJiMzOTt0XG4gXHQgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lXG4tXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZCBhbmQgdHJhbnNmZXIgdGhlIG1lbW9yeSYjNDM7c3dhcCBjaGFyZ2UuXG4mIzQzO1x0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQuXG4gXHQgKi9cbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuIFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4tXHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4mIzQzO1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTtcbiBcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpO1xuJiM0MztcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFxuIFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4gXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbkBAIC02NTgsMTIgJiM0Mzs2NTksNiBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbiBcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgbnJfZW50cmllcyk7XG4gXG4tXHRpZiAobWVtY2cgIT0gc3dhcF9tZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChzd2FwX21lbWNnKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNnN3YXBfbWVtY2ctXHUwMDNlbWVtc3csIG5yX2VudHJpZXMpO1xuLVx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX2VudHJpZXMpO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jayB3aXRoIElSUSBvZmYuIEl0IGlzXG4gXHQgKiBpbXBvcnRhbnQgaGVyZSB0byBoYXZlIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdGhlXG5AQCAtNjc1LDcgJiM0Mzs2NzAsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xuIFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjEsOCAmIzQzOzIxLDcgQEAgdm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xuIFxuIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG4gXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG4pO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG4gXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM2OTcsNyAmIzQzOzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4mIzQzO1x0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtMzk1NiwzNiAmIzQzOzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbiYjNDM7XHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkKTtcbiYjNDM7XHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7LyoqXG4mIzQzOyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZ1xuJiM0MzsgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4mIzQzO1x0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpKSB7XG4mIzQzO1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuJiM0MztcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiB7XG4tXHR3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0XG4tXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG4tXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0fVxuLVx0cmV0dXJuIG1lbWNnO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIG4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbiYjNDM7e1xuJiM0MztcdGJvb2wgc3VjY2VzcztcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbiYjNDM7XG4mIzQzO1x0c3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpO1xuJiM0MztcdFZNX1dBUk5fT04oIXN1Y2Nlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTkzLDExICYjNDM7Mzk5OSw1NSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1blxuICAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWNnO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWRcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxuJiM0MzsgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuJiM0MztcbiYjNDM7XHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuJiM0MztcdGlmICghb2JqY2cpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XG4mIzQzO1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4mIzQzO1xuJiM0MztcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiB9XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQodTY0IGlkKVxuQEAgLTQwOTgsNyAmIzQzOzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGlmICghbWVtY2cpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbiYjNDM7XHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDI0Myw5ICYjNDM7NDI5MywxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0XHRcdFx0ICAgRkxVU0hfVElNRSk7XG4gXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XG4gXG4tXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cbi1cdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYsIDEpO1xuLVx0Y3NzX2dldChjc3MpO1xuJiM0MztcdC8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi9cbiYjNDM7XHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvWzBdLVx1MDAzZW9iamNnO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZtZW1jZy1cdTAwM2VpZF9vYmpjZy1cdTAwM2VpZF9yZWYsIDEpO1xuJiM0MztcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJiMzOTtyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDI1Nyw3ICYjNDM7NDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHQgKiBwdWJsaXNoIGl0IGhlcmUgYXQgdGhlIGVuZCBvZiBvbmxpbmluZy4gVGhpcyBtYXRjaGVzIHRoZVxuIFx0ICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLlxuIFx0ICovXG4tXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCwgbWVtY2csIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBvYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzMDgsOCAmIzQzOzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbi1cbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTQzMTgsNiAmIzQzOzQzNjcsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0aW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhtZW1jZyk7XG4gXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbiYjNDM7XHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbkBAIC01MjE5LDExICYjNDM7NTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xuLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbiYjNDM7XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbiBcbkBAIC01NjIxLDI0ICYjNDM7NTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbiBcbiYjNDM7XHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuJiM0MztcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcbiYjNDM7XG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXG4gXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NjUxLDE5ICYjNDM7NTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4tXHRpZiAobWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4tXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4tXHRcdH1cbi1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4mIzQzO1x0bWVtY2cgPSBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKGlkLCBucl9wYWdlcyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4mIzQzO1x0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuJiM0MztcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMjgzLDYgJiM0MzsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcbiBcdCpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFxuJiM0MztcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbiBcdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbiBcbkBAIC00NzAsNyAmIzQzOzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiYjNDM7XHRpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXG4gXHRcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExOTVmNTVkNTI3ZWQ0NGNmMjJkNjU5Mzk3MmFjODYyOGU4MmNlMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTozNDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggODE3MGJiODA2NmEyMi4uZmVmOGExYzQxOTFiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgc3RydWN0IG9ial9jZ3JvdXAgewogCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCX07CiAJYm9vbCBpc19yb290OwomIzQzOwlyZWZjb3VudF90IGlkX3JlZjsKIH07CiAKIC8qCkBAIC0yMDIsOCAmIzQzOzIwMyw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHsKIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAKLQkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkOwomIzQzOwkvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqLwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqaWRfb2JqY2c7CiAKIAkvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovCiAJc3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7CQkvKiBCb3RoIHYxICZhbXA7IHYyICovCkBAIC0yNzAsNiAmIzQzOzI3MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKICNlbmRpZgogCWludCBrbWVtY2dfaWQ7CiAKJiM0MzsJLyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovCiYjNDM7CWludCBpZDsKJiM0MzsKIAlzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnZtc3RhdHNfcGVyY3B1OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKQEAgLTgyMCw5ICYjNDM7ODI0LDEwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7aWQ7CiB9CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpOwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpOwogCiBzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jCmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0Ci0tLSBhL21tL2xpc3RfbHJ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbGlzdF9scnUuYwpAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwKIAkJeGFfZm9yX2VhY2goJmFtcDtscnUtJmd0O3hhLCBpbmRleCwgbWxydSkgewogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpbmRleCk7Ci0JCQlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewomIzQzOwkJCWlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTYxOCw3ICYjNDM7NjE4LDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKi8KIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAKQEAgLTYzOCwxOSAmIzQzOzYzOCwyMCBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIAlpZiAoIW9iamNnKQogCQlyZXR1cm47CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKIAkvKgogCSAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3QKIAkgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lCi0JICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQgYW5kIHRyYW5zZmVyIHRoZSBtZW1vcnkmIzQzO3N3YXAgY2hhcmdlLgomIzQzOwkgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC4KIAkgKi8KJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTsKIAlucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCXN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7Ci0JbW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpOwomIzQzOwltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpOwomIzQzOwomIzQzOwkvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqLwomIzQzOwltZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTsKIAogCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9lbnRyaWVzLAotCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpOwomIzQzOwkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiAKIAlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKIAlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CkBAIC02NTgsMTIgJiM0Mzs2NTksNiBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIAlpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpCiAJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1vcnksIG5yX2VudHJpZXMpOwogCi0JaWYgKG1lbWNnICE9IHN3YXBfbWVtY2cpIHsKLQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3Qoc3dhcF9tZW1jZykpCi0JCQlwYWdlX2NvdW50ZXJfY2hhcmdlKCZhbXA7c3dhcF9tZW1jZy0mZ3Q7bWVtc3csIG5yX2VudHJpZXMpOwotCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX2VudHJpZXMpOwotCX0KLQogCS8qCiAJICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXMKIAkgKiBpbXBvcnRhbnQgaGVyZSB0byBoYXZlIHRoZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdGhlCkBAIC02NzUsNyAmIzQzOzY3MCw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwogCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaAppbmRleCAwZjcwM2YyMzljODBmLi45Yzc0NDAwYWE3ZGRiIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLXYxLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5oCkBAIC0yMSw4ICYjNDM7MjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7CiAKIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IG4pOwomIzQzO3ZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKTsKIAogLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqLwogI2lmZGVmIENPTkZJR19NRU1DR19WMQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM2OTcsNyAmIzQzOzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO21lbWNnX2ttZW1fb25saW5lX2tleSk7CiAKLQltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkLmlkOwomIzQzOwltZW1jZy0mZ3Q7a21lbWNnX2lkID0gbWVtY2ctJmd0O2lkOwogfQogCiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpAQCAtMzk1NiwzNiAmIzQzOzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpOwogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAobWVtY2ctJmd0O2lkLmlkICZndDsgMCkgewotCQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZC5pZCk7Ci0JCW1lbWNnLSZndDtpZC5pZCA9IDA7CiYjNDM7CWlmIChtZW1jZy0mZ3Q7aWQgJmd0OyAwKSB7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLSZndDtpZCk7CiYjNDM7CQltZW1jZy0mZ3Q7aWQgPSAwOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MzsvKioKJiM0MzsgKiBAb2JqY2c6IHRoZSBvYmpjZyByZXR1cm5lZCBieSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfb2JqY2cKJiM0MzsgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAomIzQzOwkJdW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQogewotCWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDttZW1jZy0mZ3Q7aWQucmVmKSkgewotCQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7CiAKLQkJLyogTWVtY2cgSUQgcGlucyBDU1MgKi8KLQkJY3NzX3B1dCgmYW1wO21lbWNnLSZndDtjc3MpOwomIzQzOwlpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sICZhbXA7b2JqY2ctJmd0O2lkX3JlZikpIHsKJiM0MzsJCW9iamNnX2ZyZWUgPSB4YV9lcmFzZSgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJCVZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7CiYjNDM7CiYjNDM7CQkvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqLwomIzQzOwkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwogCX0KIH0KIAotc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKIHsKLQl3aGlsZSAoIXJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7Ci0JCS8qCi0JCSAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCYjMzk7cyByZWZjb3VudCBtdXN0Ci0JCSAqIGFsd2F5cyBiZSAmZ3Q7PSAxLgotCQkgKi8KLQkJaWYgKFdBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkgewotCQkJVk1fQlVHX09OKDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7Ci0JfQotCXJldHVybiBtZW1jZzsKJiM0MzsJX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLSZndDtpZF9vYmpjZywgbWVtY2ctJmd0O2lkLCBuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwlib29sIHN1Y2Nlc3M7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLSZndDtpZF9vYmpjZzsKJiM0MzsKJiM0MzsJc3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCAmYW1wO29iamNnLSZndDtpZF9yZWYpOwomIzQzOwlWTV9XQVJOX09OKCFzdWNjZXNzKTsKIH0KIAogLyoqCkBAIC0zOTkzLDExICYjNDM7Mzk5OSw1NSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bgogICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cAogICoKICAqIENhbGxlciBtdXN0IGhvbGQgcmN1X3JlYWRfbG9jaygpLgomIzQzOyAqCiYjNDM7ICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuCiAgKi8KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCkKIHsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJV0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7Ci0JcmV0dXJuIHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwomIzQzOwlpZiAobWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSAhPSBpZCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhbiBvbmxpbmUgbWVtY2cgZnJvbSBhIG1lbWNnIGlkCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLgomIzQzOyAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXAKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwomIzQzOwlvYmpjZyA9IHhhX2xvYWQoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKQomIzQzO3sKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwomIzQzOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTsKJiM0MzsJcmV0dXJuIG1lbWNnOwogfQogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpCkBAIC00MDk4LDcgJiM0Mzs0MTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJaWYgKCFtZW1jZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQllcnJvciA9IHhhX2FsbG9jKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgJmFtcDttZW1jZy0mZ3Q7aWQuaWQsIE5VTEwsCiYjNDM7CWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZCwgTlVMTCwKIAkJCSBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtNDI0Myw5ICYjNDM7NDI5MywxMCBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCQkJCSAgIEZMVVNIX1RJTUUpOwogCWxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTsKIAotCS8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqLwotCXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZC5yZWYsIDEpOwotCWNzc19nZXQoY3NzKTsKJiM0MzsJLyogQ1NTIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgb2JqIGNncm91cCAqLwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBtZW1jZy0mZ3Q7bm9kZWluZm9bMF0tJmd0O29iamNnOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDttZW1jZy0mZ3Q7aWRfb2JqY2ctJmd0O2lkX3JlZiwgMSk7CiYjNDM7CW9ial9jZ3JvdXBfZ2V0KG1lbWNnLSZndDtpZF9vYmpjZyk7CiAKIAkvKgogCSAqIEVuc3VyZSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCgpIHdvcmtzIG9uY2Ugd2UmIzM5O3JlIGZ1bGx5IG9ubGluZS4KQEAgLTQyNTcsNyAmIzQzOzQzMDgsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCSAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlCiAJICogcmVndWxhciBJRCBkZXN0cnVjdGlvbiBkdXJpbmcgb2ZmbGluaW5nLgogCSAqLwotCXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3N0b3JlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLCBvYmpjZywgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gMDsKIGZyZWVfb2JqY2c6CkBAIC00MzA4LDggJiM0Mzs0MzU5LDYgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWxydV9nZW5fb2ZmbGluZV9tZW1jZyhtZW1jZyk7CiAKIAlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwotCi0JbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC00MzE4LDYgJiM0Mzs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIAogCWludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpOwogCWxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpOwomIzQzOwltZW1jZy0mZ3Q7aWRfb2JqY2cgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC01MjE5LDExICYjNDM7NTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7Ci0JaWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoJmFtcDttZW1jZy0mZ3Q7Y3NzKSkKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUoaWQpOwomIzQzOwlpZiAoIW1lbWNnKQogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTsKIApAQCAtNTYyMSwyNCAmIzQzOzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuIDA7CiAJfQogCi0JbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpOwotCS8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqLwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpICZhbXA7JmFtcDsKIAkgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzLCAmYW1wO2NvdW50ZXIpKSB7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpOwogCQltZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpOwogCiYjNDM7CS8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovCiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCV9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tJmd0O3N3YXApLCBucl9wYWdlcywKIAkJCSAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCXJldHVybiAwOwogfQogCkBAIC01NjUxLDE5ICYjNDM7NTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpOwotCWlmIChtZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKLQkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCi0JCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbXN3LCBucl9wYWdlcyk7Ci0JCQllbHNlCi0JCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O3N3YXAsIG5yX3BhZ2VzKTsKLQkJfQotCQltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTsKJiM0MzsJbWVtY2cgPSBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKGlkLCBucl9wYWdlcyk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewomIzQzOwkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKJiM0MzsJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtMjgzLDYgJiM0MzsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsCiAJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7CiAJKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAKJiM0MzsJLyogcmVwYXJlbnRlZCBtZW1jZyBsb3NlcyBpdHMgbWF4X3NlcSAqLwomIzQzOwlpZiAoIW1lbWNnKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCW1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7CiAJbWF4X3NlcSAmYW1wOz0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSAmZ3Q7Jmd0OyBMUlVfUkVGU19XSURUSDsKIApAQCAtNDcwLDcgJiM0Mzs0NzQsNyBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC4KIAkgKi8KIAlldmljdGlvbl9tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnaWQpOwotCWlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKQomIzQzOwlpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiAJCWV2aWN0aW9uX21lbWNnID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY1CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDY3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBNZW1jZyBJRCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyB0aGUgYG1lbWNnLSZndDtpZGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgc3Vic3lzdGVtIChtZW1jZykuIEl0JiMzOTtzIGEgcHJldHR5IHN1YnN0YW50aWFsIGNoYW5nZSwgbW92aW5nIHRoZSBgcmVmY291bnRfdCBpZF9yZWZgIGZyb20gYG1lbWNnYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWZhY3RvcmluZyBob3cgdGhlIElEIGlzIG1hbmFnZWQsIGVzc2VudGlhbGx5LiBUaGlzIGFsc28gaW52b2x2ZXMgcmVuYW1pbmcgYSBmZXcgdGhpbmdzOyBgbWVtY2ctJmd0O2lkLmlkYCBpcyBub3cgc2ltcGx5IGBtZW1jZy0mZ3Q7aWRgLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgaGFuZGxlZCB0aHJvdWdoIGBtZW1jZy0mZ3Q7aWRfb2JqY2ctJmd0O2lkX3JlZmAuCgpUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjb2RlLCBtZWFuaW5nIGl0IGhhcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCZWNhdXNlIG9mIHRoYXQsIGFuZCBrbm93aW5nIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGluIHJlZmNvdW50aW5nIGNoYW5nZXMgbGlrZSB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUsIG5vIHF1ZXN0aW9uKS4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBhcmVhcyB0byB0YXJnZXQgd2l0aCBvdXIgZnV6emVycy4gQmFzZWQgb24gdGhlIGRpZmYsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgYWRkZWQ6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAsIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXRgLCBgbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZGAsIGBtZW1fY2dyb3VwX2Nzc19vbmxpbmVgLCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3Rlc3RfcmVjZW50YC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBwcmlvcml0aXplIGJhc2VkIG9uIGFjY2Vzc2liaWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgKnB1YmxpYyogZW50cnlwb2ludHMuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2Agc2luY2UgdGhlIGRpZmYgdG91Y2hlcyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAsIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIG1ha2VzIHRoZW0gbGlrZWx5IGVudHJ5IHBvaW50cy4KCknigJltIHRoaW5raW5nIEkgd2lsbCB1dGlsaXplIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoZXNlIGRlZmluaXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBsaWtlbHkgZ2l2ZSB1cyB0aGUgaW5mb3JtYXRpb24gdG8gZmluZCB0ZXN0IGhhcm5lc3MgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdvIGZyb20gdGhlcmUsIGFuZCBjb25zdHJ1Y3QgYW4gZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfHN0cnVjdCBtZW1fY2dyb3VwIFxcKnxpbnR8dW5zaWduZWQgbG9uZ3xib29sKSAobWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWR8bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lfG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXR8bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvfF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXB8X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXB8X19tZW1jZzFfc3dhcG91dHxsaXN0X2xydV93YWxrX25vZGV8d29ya2luZ3NldF90ZXN0X3JlY2VudClcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXN0X2xydS5oPTMyMD11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMzIzLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjMyNDp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC0zMjUtXHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY0PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjUtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ny1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NzM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5ODE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTAxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA2LSNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01MDgtc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oPTI4PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4tLVxubW0vaW50ZXJuYWwuaC0zNC0vKiBtbS93b3JraW5nc2V0LmMgKi9cbm1tL2ludGVybmFsLmg6MzU6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxubW0vaW50ZXJuYWwuaC0zNi1cdFx0XHQgICAgYm9vbCBmbHVzaCk7XG4tLVxubW0vbGlzdF9scnUuYz00MDU9bGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy00MTItXG5tbS9saXN0X2xydS5jOjQxMzp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtNDE0LVx0XHRcdFx0IGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz01OTc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYxOC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzo2MTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtNjIwLXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjI9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbm1tL21lbWNvbnRyb2wtdjEuaC0yMy1cbm1tL21lbWNvbnRyb2wtdjEuaDoyNDp2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG5tbS9tZW1jb250cm9sLXYxLmgtMjUtXG4tLVxubW0vbWVtY29udHJvbC5jPTM5ODM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk4Ny1cbm1tL21lbWNvbnRyb2wuYzozOTg4OnZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxubW0vbWVtY29udHJvbC5jLTM5ODkte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjMxPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2NC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjY1OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG5tbS9tZW1jb250cm9sLmMtNTI2Ni1cdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jPTU2MDU9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY0OS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NjUwOmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTY1MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3MDItICovXG5tbS9tZW1jb250cm9sLmM6NTcwMzp2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5tbS9tZW1jb250cm9sLmMtNTcwNC17XG4tLVxubW0vd29ya2luZ3NldC5jPTM5Nj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4tLVxubW0vd29ya2luZ3NldC5jLTQzMy0gKi9cbm1tL3dvcmtpbmdzZXQuYzo0MzQ6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxubW0vd29ya2luZ3NldC5jLTQzNS1cdFx0XHRcdGJvb2wgZmx1c2gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDZ3JvdXAgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgbXkgcmVnZXggZGlkbiYjMzk7dCBjYXRjaCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgLiBIbW0sIEkgd29uZGVyIHdoeS4uLiBBaCwgcmlnaHQsIGl0IHJldHVybnMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKmAuIFRoYXQmIzM5O3Mgd2h5IHRoZSByZWdleCBtaXNzZWQgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSB0aGF0IG9uZSBpbiBvdXIgZXZhbHVhdGlvbi4KCkkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBhIGZldyBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGggZm9yIGV4cGxvcmluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBtZW1vcnkgY2dyb3Vwcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscyBvZiBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZXRyaWV2ZSB0aGUgbWVtb3J5IGNncm91cCBiYXNlZCBvbiBhIHByaXZhdGUgSUQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG1lbV9jZ3JvdXAgXFwqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjgtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODI5OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MzA6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mzk4OD12b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDAwNC0gKi9cbm1tL21lbWNvbnRyb2wuYzo0MDA1OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbm1tL21lbWNvbnRyb2wuYy00MDA2LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDAyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo0MDI3OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpXG5tbS9tZW1jb250cm9sLmMtNDAyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODQKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGVzZSB0d28gZnVuY3Rpb25zLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBpdHMgb25saW5lIGNvdW50ZXJwYXJ0LCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUuIEJ1dCB0aGV5IHByaW1hcmlseSBzZWVtIHRvIGZ1bmN0aW9uIGFzIGhlbHBlciByb3V0aW5lcywgd2hpY2ggcmFpc2VzIGEgcXVlc3Rpb24gb2YgdGhlaXIgd2lkZXIgaW1wYWN0IGFuZCBob3cgdGhleSBhcmUgdXNlZC4gVGhlIGtleSBlbnRyeSBwb2ludHMgdGhhdCByZWx5IG9uIHRoZW0gYXBwZWFyIHRvIGJlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFRoaXMgZ2l2ZXMgbWUgc29tZSBkaXJlY3Rpb24gYXMgdG8gd2hlcmUgdG8gbG9vayB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dCBvZiB0aGVpciB1c2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGVpciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19NRU1DR2AgaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gV2hhdCBJJiMzOTttIGxlc3MgY2VydGFpbiBhYm91dCBpcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1NXQVBgLiBHaXZlbiB0aGF0IGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBzd2FwLXJlbGF0ZWQsIHRoZXJlIGlzIGEgc3Ryb25nIHBvc3NpYmlsaXR5IHRoYXQgYENPTkZJR19TV0FQYCB3aWxsIGFsc28gYmUgYSBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHNvdXJjZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYm90aCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGxvb2sgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oI2lmZGVmfCNpZm5kZWYpIENPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcbm1tL21lbWNvbnRyb2wuYy0xMDMtXG5tbS9tZW1jb250cm9sLmM6MTA0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzMtXG5tbS9tZW1jb250cm9sLmM6MjM0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3Nz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDQtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TV0FQQ0FDSEUsXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjQwODojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtNDA5LVx0UEdQUk9NT1RFX1NVQ0NFU1MsXG4tLVxubW0vbWVtY29udHJvbC5jLTQyNy1cdFBHUkVGSUxMLFxubW0vbWVtY29udHJvbC5jOjQyODojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTQyOS1cdE5SX0hVR0VUTEIsXG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTUwMi1cdHggPSBSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo1MDM6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy01MDQtXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjUtXHR4ID0gUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG5tbS9tZW1jb250cm9sLmM6NTI2OiNpZmRlZiBDT05GSUdfU01QXG5tbS9tZW1jb250cm9sLmMtNTI3LVx0aWYgKHggXHUwMDNjIDApXG4tLVxubW0vbWVtY29udHJvbC5jLTUzMi1cbm1tL21lbWNvbnRyb2wuYzo1MzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTUzNC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTU5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01NjAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MC1cdFBHTEFaWUZSRUVELFxubW0vbWVtY29udHJvbC5jOjU3MTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NzItXHRTV1BJTl9aRVJPLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01NzYtXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTU4MS1cdFRIUF9GQVVMVF9BTExPQyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg1LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU4NjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtNTg3LVx0TlVNQV9QQUdFX01JR1JBVEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy03NzAtXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTc3Mi1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYz03OTI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04MDctXG5tbS9tZW1jb250cm9sLmM6ODA4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy04MDktLypcbi0tXG5tbS9tZW1jb250cm9sLmM9ODc2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy04ODgtXG5tbS9tZW1jb250cm9sLmM6ODg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xubW0vbWVtY29udHJvbC5jPTg5MT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy04OTktXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jOjkwMDojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTkwMS1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDcxLVxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTEwNzMtdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2MS1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NjMtXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTY5LVx0eyBcJiMzNDtmaWxlX3dyaXRlYmFja1wmIzM0OyxcdFx0TlJfV1JJVEVCQUNLXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NzEtXHR7IFwmIzM0O3N3YXBjYWNoZWRcJiMzNDssXHRcdFx0TlJfU1dBUENBQ0hFXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTcyLSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTE1NzQtXHR7IFwmIzM0O2Fub25fdGhwXCYjMzQ7LFx0XHRcdE5SX0FOT05fVEhQU1x0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1ODQtXHR7IFwmIzM0O3NsYWJfdW5yZWNsYWltYWJsZVwmIzM0OyxcdFx0TlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0JcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTg1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cdHsgXCYjMzQ7aHVnZXRsYlwmIzM0OyxcdFx0XHROUl9IVUdFVExCXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYxMC1cdHsgXCYjMzQ7cGdyZWZpbGxcJiMzNDssXHRcdFx0UEdSRUZJTExcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNjExOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVx0eyBcJiMzNDtwZ3Byb21vdGVfc3VjY2Vzc1wmIzM0OyxcdFx0UEdQUk9NT1RFX1NVQ0NFU1NcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTE2MzM9c3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjYyLVx0Y2FzZSBQR1JFRklMTDpcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbm1tL21lbWNvbnRyb2wuYy0xNjY0LVx0Y2FzZSBQR1BST01PVEVfU1VDQ0VTUzpcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY3Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE2NzctXG5tbS9tZW1jb250cm9sLmM6MTY3ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTY3OS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE2ODUtXG5tbS9tZW1jb250cm9sLmM6MTY4NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjk4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTYtXG5tbS9tZW1jb250cm9sLmM6MTcxNzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE3MTgtXHRcdGlmICh1bmxpa2VseShtZW1vcnlfc3RhdHNbaV0uaWR4ID09IE5SX0hVR0VUTEIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzQ2LVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODE3LVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODE5LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MTctXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjgxOS1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDQ3LVxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMwNDktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzcxNi1cbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTM3MTgtXG4tLVxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTMtXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbm1tL21lbWNvbnRyb2wuYzo0MTk0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTQxOTUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjA5PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjIyLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTQyMjQtXHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjMyLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyMzQtXHRcdG1lbWNnLVx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDI0My1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNDQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNDUtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNzktXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MzgxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbi0tXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDE5LVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fZ3JvdXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0NDIwOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00NDIxLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2V6c3dhcF9tYXgsIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NDIzLSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjQ0MjQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQ0MjUtXHRwYWdlX2NvdW50ZXJfc2V0X21heChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDQ1Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0ODgtXG5tbS9tZW1jb250cm9sLmM6NDQ4OTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjE5PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MzUtXG5tbS9tZW1jb250cm9sLmM6NDYzNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00OTc1PWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk4OS1cbm1tL21lbWNvbnRyb2wuYzo0OTkwOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jPTUwNzI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMjUtXHR9LFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9tZW1jb250cm9sLmMtNTEyNy1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE0Nj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNTctXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG5tbS9tZW1jb250cm9sLmM6NTE1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NDAtXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NjQyLS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg5NC1cbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODk2LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYwOTgtXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmM6NjA5OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MTAyOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MTAzLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz05ND1lbnVtIHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTAxLVxubW0vbWVtY29udHJvbC12MS5jOjEwMjojaWZkZWYgQ09ORklHX0xPQ0tERVBcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDMtc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz00MDU9c3RhdGljIHU2NCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNDEwLVxubW0vbWVtY29udHJvbC12MS5jOjQxMTojaWZkZWYgQ09ORklHX01NVVxubW0vbWVtY29udHJvbC12MS5jLTQxMi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NTk3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02MDYtXG5tbS9tZW1jb250cm9sLXYxLmM6NjA3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTYwOC0vKipcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjAzMz1zdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX3Jlc2V0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDY5LVxubW0vbWVtY29udHJvbC12MS5jOjIwNzA6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9tZW1jb250cm9sLXYxLmMtMjA3MS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjE2MD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTYyLVx0TlJfQU5PTl9NQVBQRUQsXG5tbS9tZW1jb250cm9sLXYxLmM6MjE2MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2NC1cdE5SX0FOT05fVEhQUyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3MS1cdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFLFxubW0vbWVtY29udHJvbC12MS5jOjIxNzI6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3My1cdE1FTUNHX1NXQVAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIxNzg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxODAtXHRcJiMzNDtyc3NcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4MTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4Mi1cdFwmIzM0O3Jzc19odWdlXCYjMzQ7LFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg5LVx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjE5MDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTkxLVx0XCYjMzQ7c3dhcFwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjIyMD12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjc0LVxubW0vbWVtY29udHJvbC12MS5jOjIyNzU6I2lmZGVmIENPTkZJR19ERUJVR19WTVxubW0vbWVtY29udHJvbC12MS5jLTIyNzYtXHR7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIzMzE9c3RhdGljIGludCBtZW1fY2dyb3VwX29vbV9jb250cm9sX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIzNTAtXG5tbS9tZW1jb250cm9sLXYxLmM6MjM1MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zbGFiX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMzYyPXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjQyOC1cdH0sXG5tbS9tZW1jb250cm9sLXYxLmM6MjQyOTojaWZkZWYgQ09ORklHX05VTUFcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDMwLVx0e1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNDU3LVx0fSxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vbWVtY29udHJvbC12MS5jLTI0NTktXHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwLVJlbGF0ZWQgTWVtb3J5IENncm91cCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgY2dyb3VwIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMuIEkgc2VlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgYWxsIGNsZWFybHkgZ3VhcmRlZCBieSBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEkgaW5pdGlhbGx5IHRob3VnaHQgaXQgKnNob3VsZCogYWxzbyBiZSB1bmRlciBgQ09ORklHX1NXQVBgIGdpdmVuIGl0cyBuYW1lLCBhbmQgdGhhdCBpdCYjMzk7cyBpbiBgbW0vbWVtY29udHJvbC5jYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQgKmlzbiYjMzk7dCogZGlyZWN0bHkgdW5kZXIgYSBgI2lmZGVmIENPTkZJR19TV0FQYCBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCB3aGljaCBpcyBzdHJhbmdlLiBJIG5lZWQgdG8gYmUgc3VyZS4gQWxyaWdodCwgbm93IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGRlZmluZWQgdW5kZXIgc29tZSBvdGhlciBjb25kaXRpb25hbC4gQWgsIGZvdW5kIGl0LiBMb29raW5nIGF0IGxpbmUgNTY0MSBJIGNhbiBzZWUgdGhhdCBgI2lmZGVmIENPTkZJR19TV0FQYCBpcyB1c2VkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyMzE9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjY0LSAqL1xubW0vbWVtY29udHJvbC5jOjUyNjU6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MjY2LVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgZnVuY3Rpb24sIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB0aGluZyBldmVuICphbHdheXMqIGVuYWJsZWQ/IE9yIGlzIGl0IHR1Y2tlZCBhd2F5IGJlaGluZCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmU/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwsIG1heWJlIG9ubHkgY29tcGlsZWQgaW4gZm9yIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucywgb3IgcGVyaGFwcyBhIGZlYXR1cmUgZmxhZyB0aGF0JiMzOTtzIG9ubHkgYWN0aXZlIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBxdWljayBzY2FuIGZvciBgI2lmZGVmYCBzdGF0ZW1lbnRzIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvciB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBuZWNlc3NhcnkgZmlyc3Qgc3RlcC4gVGhhdCYjMzk7bGwgc2F2ZSBtZSBmcm9tIGNoYXNpbmcgYSBnaG9zdCBsYXRlciwgeW91IGtub3c/IEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHdhc3RlZCBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xMDI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7XG5tbS9tZW1jb250cm9sLmMtMTAzLVxubW0vbWVtY29udHJvbC5jOjEwNDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy0xMDUtc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjMzLVxubW0vbWVtY29udHJvbC5jOjIzNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM1LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDA0LVx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo0MDU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNDA2LVx0TlJfU1dBUENBQ0hFLFxubW0vbWVtY29udHJvbC5jLTQwNy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtY29udHJvbC5jLTQwOS1cdFBHUFJPTU9URV9TVUNDRVNTLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjctXHRQR1JFRklMTCxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy00MjktXHROUl9IVUdFVExCLFxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODg9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDItXHR4ID0gUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG5tbS9tZW1jb250cm9sLmM6NTAzOiNpZmRlZiBDT05GSUdfU01QXG5tbS9tZW1jb250cm9sLmMtNTA0LVx0aWYgKHggXHUwMDNjIDApXG4tLVxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1LVx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxubW0vbWVtY29udHJvbC5jLTUyNy1cdGlmICh4IFx1MDAzYyAwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MzItXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MzQtc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xubW0vbWVtY29udHJvbC5jOjU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTYwLVx0UEdQR0lOLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzAtXHRQR0xBWllGUkVFRCxcbm1tL21lbWNvbnRyb2wuYzo1NzE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNTcyLVx0U1dQSU5fWkVSTyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc0LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTc2LVx0WlNXUElOLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzktI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTgwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy01ODEtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo1ODY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xubW0vbWVtY29udHJvbC5jLTU4Ny1cdE5VTUFfUEFHRV9NSUdSQVRFLFxuLS1cbm1tL21lbWNvbnRyb2wuYz03NjI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtNzcwLVx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo3NzE6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy03NzItXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9NzkyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODA3LVxubW0vbWVtY29udHJvbC5jOjgwODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODA5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTg3Nj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtODg4LVxubW0vbWVtY29udHJvbC5jOjg4OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODkwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtODk5LVx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcbm1tL21lbWNvbnRyb2wuYy05MDEtXHRpZiAoeCBcdTAwM2MgMClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTA2ND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA3MS1cbm1tL21lbWNvbnRyb2wuYzoxMDcyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NjEtXHR7IFwmIzM0O3NobWVtXCYjMzQ7LFx0XHRcdE5SX1NITUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTYyOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2OS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU3MDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG5tbS9tZW1jb250cm9sLmMtMTU3Mi0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNTczOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTg0LVx0eyBcJiMzNDtzbGFiX3VucmVjbGFpbWFibGVcJiMzNDssXHRcdE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTU4NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE1ODYtXHR7IFwmIzM0O2h1Z2V0bGJcJiMzNDssXHRcdFx0TlJfSFVHRVRMQlx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jLTE2MTAtXHR7IFwmIzM0O3BncmVmaWxsXCYjMzQ7LFx0XHRcdFBHUkVGSUxMXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtMTYxMi1cdHsgXCYjMzQ7cGdwcm9tb3RlX3N1Y2Nlc3NcJiMzNDssXHRcdFBHUFJPTU9URV9TVUNDRVNTXHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjMzPXN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cdGNhc2UgUEdSRUZJTEw6XG5tbS9tZW1jb250cm9sLmM6MTY2MzojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cdGNhc2UgUEdQUk9NT1RFX1NVQ0NFU1M6XG4tLVxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjc3LVxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTE2NzktdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxubW0vbWVtY29udHJvbC5jOjE2ODY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjg3LXN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5OD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxubW0vbWVtY29udHJvbC5jOjE3MTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNzE4LVx0XHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc0NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc0Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE3OTY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTgxNy1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTgxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTgxOS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yODA1PXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODE3LVxubW0vbWVtY29udHJvbC5jOjI4MTg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jPTMwMzc9c3RydWN0IG9ial9jZ3JvdXAgKmdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA0Ny1cbm1tL21lbWNvbnRyb2wuYzozMDQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzAzPXN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTM3MTYtXG5tbS9tZW1jb250cm9sLmM6MzcxNzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTkzLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG5tbS9tZW1jb250cm9sLmM6NDE5NDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MTk1LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwOT1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYzo0MjIzOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00MjI0LVx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIzMi1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjM0LVx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNDMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjQ0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjQ1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNzU9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00Mzc5LVxubW0vbWVtY29udHJvbC5jOjQzODA6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0MTM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQxOS1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDQyMDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNDQyMS1cdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfbWF4LCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0NDI0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00NDI1LVx0cGFnZV9jb3VudGVyX3NldF9tYXgoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0NTM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDg4LVxubW0vbWVtY29udHJvbC5jOjQ0ODk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTQ0OTAtc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDYxOT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM1LVxubW0vbWVtY29udHJvbC5jOjQ2MzY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDYzNy1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk3NT1pbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5ODktXG5tbS9tZW1jb250cm9sLmM6NDk5MDojaWZkZWYgQ09ORklHX05VTUFcbm1tL21lbWNvbnRyb2wuYy00OTkxLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDcyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTI1LVx0fSxcbm1tL21lbWNvbnRyb2wuYzo1MTI2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vbWVtY29udHJvbC5jLTUxMjctXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTU3LVx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxubW0vbWVtY29udHJvbC5jOjUxNTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTUxNTktXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTYwNT1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjQwLVxubW0vbWVtY29udHJvbC5jOjU2NDE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NTg2MD1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4OTQtXG5tbS9tZW1jb250cm9sLmM6NTg5NTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NjA5Mz1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDk4LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jOjYwOTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYxMDAtXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYxMDEtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNjEwMy1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGFuZCBTd2FwIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkuIE5vdywgdGhhdCYjMzk7cyBtYWtpbmcgbWUgcmVjb25zaWRlciB0aGUgYXJjaGl0ZWN0dXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIElmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgYWN0dWFsIHN3YXBvdXQgZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLCBgX19tZW1jZzFfc3dhcG91dGAsIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEFuZCB0aGF0IGZpbGUmIzM5O3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgdGllZCB0byBgQ09ORklHX01FTUNHX1YxYC4gSSYjMzk7bSBzdGFydGluZyB0byBwdXQgdGhlIHBpZWNlcyB0b2dldGhlci4gVGhlIHYxIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24gbWlnaHQgaGFuZGxlIHRoaXMgc3dhcCBpbnRlcmFjdGlvbiBkaWZmZXJlbnRseSBvciBlbmNhcHN1bGF0ZSByZWxhdGVkIGxvZ2ljLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJhY2sgdXAgYSBzdGVwLiBUbyBjb25maXJtIHRoaXMgbGluZSBvZiB0aGlua2luZyBhbmQgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdmlldyBvZiBob3cgdGhlc2UgZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlcmNvbm5lY3RlZCBhdCB0aGUgYnVpbGQgbGV2ZWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgaG93IGV2ZXJ5dGhpbmcgaXMgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wtdjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxOTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIHN5bWJvbHMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX01FTUNHX1YxYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbiBgX19tZW1jZzFfc3dhcG91dGAuIFRoZW4sIHdlIG5lZWQgYENPTkZJR19TV0FQYCBmb3IgYm90aCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAgYW5kIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAuIEFuZCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfTUVNQ0dgIGlzIGZ1bmRhbWVudGFsIGZvciBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYXMgd2VsbCBhcyBgbGlzdF9scnVfd2Fsa19ub2RlYCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBsaXN0X2xydV93YWxrX25vZGVgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgYXJlIGFsd2F5cyBpbmNsdWRlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHJlYXNvbmFibGUgY2lyY3Vtc3RhbmNlcy4gTGV0JiMzOTtzIHNlZS4uLiBgbGlzdF9scnVfd2Fsa19ub2RlYCByZXNpZGVzIGluIGBtbS9saXN0X2xydS5jYCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGlzIGluIGBtbS93b3JraW5nc2V0LmNgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBgbGlzdF9scnUub2AgYW5kIGB3b3JraW5nc2V0Lm9gIGFyZSBnZXR0aW5nIGJ1aWx0LCB0byBjb25maXJtIG5vIHVuZXhwZWN0ZWQgY29uZmlnIHJlcXVpcmVtZW50cyBhcmUgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlzdF9scnVcXC5vfHdvcmtpbmdzZXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtNTYtXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbm1tL01ha2VmaWxlOjU3Olx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxubW0vTWFrZWZpbGUtNTgtXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcgb24gRm9jdXNpbmcgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBhbmQgdGhpcyBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IEkmIzM5O20gY29tcGlsaW5nIHRoZSBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgbWVhbnMgSSYjMzk7bSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucywgYW5kIEkmIzM5O20gbG9va2luZyBhdCBldmVyeXRoaW5nLgoKSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQsIHdoaWNoIGFyZSBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KClJpZ2h0IG5vdywgbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gU29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaW5jbHVkaW5nIHNvbWUgc21hbGxlciBoZWxwZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uc2lkZXJpbmcgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAuIFRoZXkmIzM5O3JlIG5vbi1zdGF0aWMsIHRoZXkmIzM5O3JlIGV4cG9ydGVkLCBhbmQgd2hpbGUgZnV6emluZyB0aGVtICpkaXJlY3RseSogbWlnaHQgbm90IHlpZWxkIHRoZSBtb3N0IGludGVyZXN0aW5nIHJlc3VsdHMgY29tcGFyZWQgdG8gZnV6emluZyB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZW0sIGl0IGRvZXNuJiMzOTt0IGh1cnQuIE1pZ2h0IGFzIHdlbGwgaW5jbHVkZSB0aGVtIGZvciBicm9hZGVyIGNvdmVyYWdlLiBBY3R1YWxseSwgaG9sZCBvbi4gSSBzZWUgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgIGFuZCBgbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZGAsIHdoaWNoIGFyZSBzdGF0aWMgYW5kIHJlbGF0ZWQsIHNvIGxldCYjMzk7cyBpbmNsdWRlIHRob3NlIHRvby4gVGhpcyBpcyBleHBhbmRpbmcgdGhlIHNjb3BlIGEgYml0LgoKT2theSwgbGV0JiMzOTtzIHVwZGF0ZSB0aGF0IGxpc3Q6Ci0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgCi0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYAotICAgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgCi0gICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYAotICAgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgCi0gICBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgCi0gICBgX19tZW1jZzFfc3dhcG91dGAKLSAgIGBsaXN0X2xydV93YWxrX25vZGVgCi0gICBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAKCk5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBJIGtub3cgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBpcyBub24tc3RhdGljIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIEl0JiMzOTtzIGVhc3kgdG8gb3Zlcmxvb2sgc29tZXRoaW5nIGluIHRoZXNlIHNvcnRzIG9mIGV2YWx1YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3ltYm9sJiMzOTtzIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGFuZCBJIHNlZSBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIG5vdCBgc3RhdGljYCBlaXRoZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQgaGFzIGEgZ2xvYmFsbHkgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGlzIHN1Z2dlc3RzIGl0ICpjb3VsZCogYmUgdXNlZCBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBpdCBhY3R1YWxseSBiZSBhY2Nlc3NlZCBmcm9tIG90aGVyIG1vZHVsZXM/IEkgbmVlZCB0byBrbm93IGlmIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IG1hZGUgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UuIExldCYjMzk7cyBkaWcgaW50byB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIG9yIG5vdCwgYW5kIGhvdyB3ZSBjYW4gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNjAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBGdW5jdGlvbiBCZWhhdmlvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBhbHNvICpub3QqIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1leHBvcnRlZCwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIHRyaWNreSwgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciBhbmQgbGlua2VyIGVudmlyb25tZW50LiBUaGV5IG1pZ2h0IGJlIHN1YmplY3QgdG8gaW50ZXJuYWwgbGlua2FnZSBvciwgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBwcm9jZXNzLCBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0IG9yIGxpbmtlZCBvYmplY3QgZmlsZXMgaW4gd2F5cyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgc3RhbmRhcmQgaGVhZGVyIGV4YW1pbmF0aW9uLiBUaGlzIHNpdHVhdGlvbiByYWlzZXMgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmN5IGNvbmNlcm5zIGR1cmluZyByZWZhY3RvcmluZyBvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy4KClRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGltcGxpZXMgYSBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uLiBXaXRob3V0IG1vcmUgY29udGV4dCwgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyB0byB0aGlzLiBJcyB0aGUgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCB0aHJvdWdoIGEgbW9yZSBjb21wbGV4IGxpbmthZ2UgbWVjaGFuaXNtLCBwZXJoYXBzIHdpdGggYSBzaGFyZWQgbGlicmFyeSBvciBETEw/IE9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgZGVzaWduIHBhdHRlcm4gaW4gcGxheT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUuCgpUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FsbGluZyBjb250ZXh0LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbGlzdF9scnVfd2Fsa19ub2RlYC4gRXhhbWluaW5nIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhpcyBvbmUgaXMgdXNlZCwgd2hpY2ggY2FuIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHBvdGVudGlhbCBpbXBhY3QuIEl0IHdpbGwgaW5kaWNhdGUgdGhlIGRhdGEgc3RydWN0dXJlcyBvciBtZXRob2RzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIGEgbGFyZ2VyIHN5c3RlbSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipsaXN0X2xydV93YWxrX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00NDgtfVxubW0vbGlzdF9scnUuYzo0NDk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiBDdXJyZW50IFN0YXR1cyAmYW1wOyBJbml0aWFsIEFwcHJvYWNoKioKCkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzICpleHBvcnRlZCouIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgYnJhc3MgdGFja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCwgdG8gY2hlY2sgdGhlIHJlY2VudCBkYXRhLiBJdCBzb3VuZHMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIGZvciBhbmFseXNpcyBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfdGVzdF9yZWNlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3MwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcGhyYXNlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOgoKKipNeSBBbmFseXNpcyBvZiB0aGlzIEtlcm5lbCBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjb3JlIGFzcGVjdCBvZiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbDogc3BlY2lmaWNhbGx5LCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAsIG9yIG1lbWNnLCBzdWJzeXN0ZW0uIEFuZCBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb2RlIGlzICpub3QqIGV4cG9ydGVkLCBidXQgaXQgYWxzbyBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciBsYXRlciBjb25zaWRlcmF0aW9uLgoKVGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGlzIHRvdWNoZXMsIGFuZCB0aGVyZWZvcmUgZGVwZW5kcyB1cG9uLCBhcmUgcHJldHR5IGNsZWFyOiBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkOyBhbnkgc2lnbmlmaWNhbnQgbWVtY2cgY2hhbmdlIGlzIGdvaW5nIHRvIHJpcHBsZSBvdXQgdG8gdGhlIHN3YXAgaGFuZGxpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHJlZmFjdG9yaW5nIG9mIGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbW92aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZXNlIElEcyBpbnRvIHRoZSBgc3RydWN0IG9ial9jZ3JvdXBgLiBUaGlzIGltcGxpZXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIG1hbmFnZXMgdGhlc2UgbWVtY2cgSURzIHRocm91Z2hvdXQgdGhlIHN5c3RlbS4gSSYjMzk7bSBub3RpbmcgdGhpcyBpcyBhIGNoYW5nZSB0byB0aGUgSUQgbWFuYWdlbWVudCBsb2dpYy4KClRoYXQgbWVhbnMsIG9mIGNvdXJzZSwgdGhhdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIOKAkyBzd2FwLCB3b3JraW5nc2V0LCBhbmQgbGlzdF9scnUg4oCTIGFyZSAqYWxsKiBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBJRCBtYW5hZ2VtZW50IHBhcmFkaWdtLiBUaGVzZSBhcmUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgY2hhbmdlcyBoZXJlIGNhbiBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLiBJdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyBnb2luZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKTGV0JiMzOTtzIHRlcm0gdGhpcyBjaGFuZ2UgYXMgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCYjMzQ7LAogICAgJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X3dhbGtfbm9kZSYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3Rlc3RfcmVjZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIEl0IGNoYW5nZXMgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIGZyb20gdGhlc2UgSURzIGFuZCBob3cgdGhlaXIgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGR1cmluZyBzd2FwIGFuZCB3b3JraW5nc2V0IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cblxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTkxLDYgJiM0MzsxOTEsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJfTsKIAlib29sIGlzX3Jvb3Q7CiYjNDM7CXJlZmNvdW50X3QgaWRfcmVmOwogfTsKIAogLyoKQEAgLTIwMiw4ICYjNDM7MjAzLDggQEAgc3RydWN0IG9ial9jZ3JvdXAgewogc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAotCS8qIFByaXZhdGUgbWVtY2cgSUQuIFVzZWQgdG8gSUQgb2JqZWN0cyB0aGF0IG91dGxpdmUgdGhlIGNncm91cCAqLwotCXN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7CiYjNDM7CS8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovCiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZzsKIAogCS8qIEFjY291bnRlZCByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbW9yeTsJCS8qIEJvdGggdjEgJmFtcDsgdjIgKi8KQEAgLTI3MCw2ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogI2VuZGlmCiAJaW50IGttZW1jZ19pZDsKIAomIzQzOwkvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi8KJiM0MzsJaW50IGlkOwomIzQzOwogCXN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwpAQCAtODIwLDkgJiM0Mzs4MjQsMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1lbWNnLSZndDtpZC5pZDsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDtpZDsKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC00MjgsNyAmIzQzOzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLAogCQl4YV9mb3JfZWFjaCgmYW1wO2xydS0mZ3Q7eGEsIGluZGV4LCBtbHJ1KSB7CiAJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTsKLQkJCWlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7CiYjNDM7CQkJaWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmMKaW5kZXggMmRjNTk5NDg0ZDAwNi4uZTUxNjFlMDYxYmQxMSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtNjE4LDcgJiM0Mzs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqLwogdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAl1bnNpZ25lZCBpbnQgbnJfZW50cmllczsKIApAQCAtNjM4LDE5ICYjNDM7NjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCWlmICghb2JqY2cpCiAJCXJldHVybjsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwogCS8qCiAJICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2VzbiYjMzk7dAogCSAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmUKLQkgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZCBhbmQgdHJhbnNmZXIgdGhlIG1lbW9yeSYjNDM7c3dhcCBjaGFyZ2UuCiYjNDM7CSAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkLgogCSAqLwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwogCW5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0Jc3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTsKLQltb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7CiYjNDM7CW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovCiYjNDM7CW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX2VudHJpZXMpOwogCiAJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX2VudHJpZXMsCi0JCQkgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzd2FwX21lbWNnKSk7CiYjNDM7CQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKIAogCWZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pOwogCWZvbGlvLSZndDttZW1jZ19kYXRhID0gMDsKQEAgLTY1OCwxMiAmIzQzOzY1OSw2IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogCWlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSkKIAkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgbnJfZW50cmllcyk7CiAKLQlpZiAobWVtY2cgIT0gc3dhcF9tZW1jZykgewotCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChzd2FwX21lbWNnKSkKLQkJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDtzd2FwX21lbWNnLSZndDttZW1zdywgbnJfZW50cmllcyk7Ci0JCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgbnJfZW50cmllcyk7Ci0JfQotCiAJLyoKIAkgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2sgd2l0aCBJUlEgb2ZmLiBJdCBpcwogCSAqIGltcG9ydGFudCBoZXJlIHRvIGhhdmUgdGhlIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBpdCBpcyB0aGUKQEAgLTY3NSw3ICYjNDM7NjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJcHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7CiAJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDBmNzAzZjIzOWM4MGYuLjljNzQ0MDBhYTdkZGIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTIxLDggJiM0MzsyMSw3IEBAIHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTsKIAogaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgbik7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pOwogCiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggODMxOWFkOGM1YzIzYS4uZTc1NTVlY2E3NzAxOSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzY5Nyw3ICYjNDM7MzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAogCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7bWVtY2dfa21lbV9vbmxpbmVfa2V5KTsKIAotCW1lbWNnLSZndDtrbWVtY2dfaWQgPSBtZW1jZy0mZ3Q7aWQuaWQ7CiYjNDM7CW1lbWNnLSZndDtrbWVtY2dfaWQgPSBtZW1jZy0mZ3Q7aWQ7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbWNnX29mZmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCkBAIC0zOTU2LDM2ICYjNDM7Mzk1Niw0MiBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQzEobWVtX2Nncm91cF9wcml2YXRlX2lkcyk7CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewotCWlmIChtZW1jZy0mZ3Q7aWQuaWQgJmd0OyAwKSB7Ci0JCXhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkLmlkKTsKLQkJbWVtY2ctJmd0O2lkLmlkID0gMDsKJiM0MzsJaWYgKG1lbWNnLSZndDtpZCAmZ3Q7IDApIHsKJiM0MzsJCXhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctJmd0O2lkKTsKJiM0MzsJCW1lbWNnLSZndDtpZCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKQomIzQzOy8qKgomIzQzOyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZwomIzQzOyAqIEBpZDogdGhlIGNvcnJlc3BvbmRpbmcgbWVtY2cgcHJpdmF0ZSBpZAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csCiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pCiB7Ci0JaWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCAmYW1wO21lbWNnLSZndDtpZC5yZWYpKSB7Ci0JCW1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2dfZnJlZTsKIAotCQkvKiBNZW1jZyBJRCBwaW5zIENTUyAqLwotCQljc3NfcHV0KCZhbXA7bWVtY2ctJmd0O2Nzcyk7CiYjNDM7CWlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgJmFtcDtvYmpjZy0mZ3Q7aWRfcmVmKSkgewomIzQzOwkJb2JqY2dfZnJlZSA9IHhhX2VyYXNlKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwkJVk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTsKJiM0MzsKJiM0MzsJCS8qIE1lbWNnIElEIHBpbnMgdGhlIG9iamNnICovCiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiAJfQogfQogCi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKQogewotCXdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7bWVtY2ctJmd0O2lkLnJlZikpIHsKLQkJLyoKLQkJICogVGhlIHJvb3QgY2dyb3VwIGNhbm5vdCBiZSBkZXN0cm95ZWQsIHNvIGl0JiMzOTtzIHJlZmNvdW50IG11c3QKLQkJICogYWx3YXlzIGJlICZndDs9IDEuCi0JCSAqLwotCQlpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7Ci0JCQlWTV9CVUdfT04oMSk7Ci0JCQlicmVhazsKLQkJfQotCQltZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTsKLQl9Ci0JcmV0dXJuIG1lbWNnOwomIzQzOwlfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctJmd0O2lkX29iamNnLCBtZW1jZy0mZ3Q7aWQsIG4pOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbikKJiM0Mzt7CiYjNDM7CWJvb2wgc3VjY2VzczsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gbWVtY2ctJmd0O2lkX29iamNnOwomIzQzOwomIzQzOwlzdWNjZXNzID0gcmVmY291bnRfYWRkX25vdF96ZXJvKG4sICZhbXA7b2JqY2ctJmd0O2lkX3JlZik7CiYjNDM7CVZNX1dBUk5fT04oIXN1Y2Nlc3MpOwogfQogCiAvKioKQEAgLTM5OTMsMTEgJiM0MzszOTk5LDU1IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuCiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuCiYjNDM7ICoKJiM0MzsgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC4KICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKQogewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTsKLQlyZXR1cm4geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiYjNDM7CWlmIChtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpICE9IGlkKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWQKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBnZXQgYSByZWZlcmVuY2UuCiYjNDM7ICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cAomIzQzOyAqLwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CiYjNDM7CW9iamNnID0geGFfbG9hZCgmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJb2JqY2cgPSB4YV9sb2FkKCZhbXA7bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpOwomIzQzOwlpZiAoIW9iamNnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiYjNDM7CiYjNDM7CV9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pOwomIzQzOwlyZXR1cm4gbWVtY2c7CiB9CiAKIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZCkKQEAgLTQwOTgsNyAmIzQzOzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAlpZiAoIW1lbWNnKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWVycm9yID0geGFfYWxsb2MoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCAmYW1wO21lbWNnLSZndDtpZC5pZCwgTlVMTCwKJiM0MzsJZXJyb3IgPSB4YV9hbGxvYygmYW1wO21lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsICZhbXA7bWVtY2ctJmd0O2lkLCBOVUxMLAogCQkJIFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CkBAIC00MjQzLDkgJiM0Mzs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJCQkJICAgRkxVU0hfVElNRSk7CiAJbHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpOwogCi0JLyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovCi0JcmVmY291bnRfc2V0KCZhbXA7bWVtY2ctJmd0O2lkLnJlZiwgMSk7Ci0JY3NzX2dldChjc3MpOwomIzQzOwkvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovCiYjNDM7CW1lbWNnLSZndDtpZF9vYmpjZyA9IG1lbWNnLSZndDtub2RlaW5mb1swXS0mZ3Q7b2JqY2c7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO21lbWNnLSZndDtpZF9vYmpjZy0mZ3Q7aWRfcmVmLCAxKTsKJiM0MzsJb2JqX2Nncm91cF9nZXQobWVtY2ctJmd0O2lkX29iamNnKTsKIAogCS8qCiAJICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSYjMzk7cmUgZnVsbHkgb25saW5lLgpAQCAtNDI1Nyw3ICYjNDM7NDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGUKIAkgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuCiAJICovCi0JeGFfc3RvcmUoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFfc3RvcmUoJmFtcDttZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy0mZ3Q7aWQsIG9iamNnLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiAwOwogZnJlZV9vYmpjZzoKQEAgLTQzMDgsOCAmIzQzOzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJbHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTsKIAogCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7Ci0KLQltZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTQzMTgsNiAmIzQzOzQzNjcsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCiAJaW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhtZW1jZyk7CiAJbHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7CiYjNDM7CW1lbWNnLSZndDtpZF9vYmpjZyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKQEAgLTUyMTksMTEgJiM0Mzs1MjcxLDkgQEAgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gMDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTsKLQlpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZSgmYW1wO21lbWNnLSZndDtjc3MpKQomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7CiYjNDM7CWlmICghbWVtY2cpCiAJCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApOwogCkBAIC01NjIxLDI0ICYjNDM7NTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm4gMDsKIAl9CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7Ci0JLyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovCiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgJmFtcDsmYW1wOwogCSAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMsICZhbXA7Y291bnRlcikpIHsKIAkJbWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7CiAJCW1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7CiAKJiM0MzsJLyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi8KJiM0MzsJbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7CiAJX19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby0mZ3Q7c3dhcCksIG5yX3BhZ2VzLAogCQkJICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NTEsMTkgJiM0Mzs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7Ci0JaWYgKG1lbWNnKSB7Ci0JCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgewotCQkJaWYgKGRvX21lbXN3X2FjY291bnQoKSkKLQkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKLQkJCWVsc2UKLQkJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgbnJfcGFnZXMpOwotCQl9Ci0JCW1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTsKLQkJbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpOwomIzQzOwltZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7CiYjNDM7CQlpZiAoZG9fbWVtc3dfYWNjb3VudCgpKQomIzQzOwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgbnJfcGFnZXMpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDtzd2FwLCBucl9wYWdlcyk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwltb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIH0KIAogbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi5iNmUyMjUzNmE1MjQwIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC0yODMsNiAmIzQzOzI4MywxMCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYywKIAltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTsKIAkqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKIAomIzQzOwkvKiByZXBhcmVudGVkIG1lbWNnIGxvc2VzIGl0cyBtYXhfc2VxICovCiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJbWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKIAltYXhfc2VxICZhbXA7PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIOwogCkBAIC00NzAsNyAmIzQzOzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCwKIAkgKiBjb25maWd1cmF0aW9ucyBpbnN0ZWFkLgogCSAqLwogCWV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7Ci0JaWYgKCFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpCiYjNDM7CWlmICghZXZpY3Rpb25fbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSkKIAkJZXZpY3Rpb25fbWVtY2cgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFByaXZhdGUgSUQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGhvdyBwcml2YXRlIElEcyBhcmUgaGFuZGxlZCBhbmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRob3NlIElEcy4gSSBzZWUgaXQgaW50cm9kdWNlcyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAsIGFuZCBpdCYjMzk7cyB0d2Vha2luZyBhIGJ1bmNoIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gTW9zdGx5LCBpdCBzZWVtcyB0byBiZSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgbWVtY2dzIGFuZCB0aGVpciBwcml2YXRlIElEcywgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIHN3YXAgYW5kIHdvcmtpbmdzZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHBvdGVudGlhbCBzZWN1cml0eSBvciBzdGFiaWxpdHkgaXNzdWVzLiBUaGUgYmlnIHRoaW5nIEkgYWx3YXlzIGNoZWNrIGlzIHdoZXRoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIGJ1dCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyAqcHVyZWx5KiBpbnRlcm5hbC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgc3RydWN0IG9ial9jZ3JvdXBgLCBidXQgbm90aGluZyBuZXcgaXMgYmVpbmcgKmNvcGllZCogdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhc3NlZCBiYWNrIGVpdGhlci4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCwgcmVmY291bnRzLCBwb2ludGVycywgYW5kIElEcy4KClRoZSB0eXBlcyBvZiBidWdzIHRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gaW50cm9kdWNlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLiBLQVNBTiBpcyB0aGUgdG9vbCBmb3IgY2F0Y2hpbmcgdGhvc2Uga2luZHMgb2YgaXNzdWVzLCB3aGljaCBpcyBncmVhdC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBLTVNBTiB3b3VsZCBjYXRjaD8KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBwYXRjaCBkb2VzIGNoYW5nZSBob3cgdGhlIElEIGlzIHN0b3JlZC4gYG1lbWNnLSZndDtpZGAgaXMgbm93IGFuIGBpbnRgLCByZXBsYWNpbmcgdGhlIG9sZCBgc3RydWN0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZCBpZGAuIEFuZCBgbWVtY2ctJmd0O2lkX29iamNnYCBpcyBhIHBvaW50ZXIuIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGluaXRpYWxpemVkIGluIGBtZW1fY2dyb3VwX2FsbG9jYCBvciBgbWVtX2Nncm91cF9jc3Nfb25saW5lYC4gIEFuZCwgaWYgaXQmIzM5O3MgdXNpbmcgc3RhbmRhcmQgbWVtY2cgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHRoZW4gd2Ugc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIGNhcmVmdWxseSwganVzdCB0byBiZSBzdXJlLCBidXQgaXQmIzM5O3MgbGlrZWx5IHVzaW5nIGBremFsbG9jYCBvciBzb21ldGhpbmcgc2ltaWxhciwgZW5zdXJpbmcgaW5pdGlhbGl6YXRpb24uCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCB1bmlxdWVseSBjYXRjaC4gVGhlIEtBU0FOIGNoZWNrcyBhcmUgZ29pbmcgdG8gYmUgcGVyZmVjdCBmb3IgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB0aGF0IGNvdWxkIHN0ZW0gZnJvbSBzY3Jld2VkLXVwIHJlZmNvdW50aW5nLiBTdGlsbCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGBtZW1fY2dyb3VwX2FsbG9jYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEkgc2hvdWxkIG5ldmVyIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDEzMT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTM3LVxubW0vbWVtY29udHJvbC5jOjQxMzg6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDEzOS17XG4tLVxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMTUtXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6NDIxNjpcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTQyMTctXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgbWVtX2Nncm91cF9hbGxvY2AsIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfYWxsb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgZ3V0cyBvZiB0aGUgYG1lbV9jZ3JvdXBfYWxsb2NgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBoZXJlPyBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgY2dyb3VwIGl0c2VsZiwgdGhlIHBlci1ub2RlIGFjY291bnRpbmcgc3RydWN0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBhbGxvY2F0aW9uIGNoZWNrIGFuZCBhY2NvdW50aW5nIHVwZGF0ZSwgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggYmFsYW5jaW5nIGFjdCBnb2luZyBvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLCBOVU1BIGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiByZXNvdXJjZSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlY2xhaW0sIHN3YXAsIGFuZCBPT00gaGFuZGxpbmc/IFdoYXQmIzM5O3MgdGhlIGxvY2sgaGllcmFyY2h5IGxpa2UsIGFuZCBob3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgZXZlbiBkZWFkbG9jayBzY2VuYXJpb3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUgY2FsbGVyIGV4cGVjdHMgaW4gcmV0dXJuLiBJIGV4cGVjdCB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiB0byBiZSBpbnRlcmVzdGluZywgc28gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmNpZXMuIEkgd29uZGVyIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBzaXR1YXRpb25zIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMgZHVlIHRvIG1lbW9yeSBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTM4Olx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG40MTM5Olx0e1xuNDE0MDpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcbjQxNDE6XHRcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XG40MTQyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MTQzOlx0XHRpbnQgbm9kZSwgY3B1O1xuNDE0NDpcdFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG40MTQ1Olx0XHRsb25nIGVycm9yO1xuNDE0NjpcdFxuNDE0NzpcdFx0bWVtY2cgPSBrbWVtX2NhY2hlX3phbGxvYyhtZW1jZ19jYWNoZXAsIEdGUF9LRVJORUwpO1xuNDE0ODpcdFx0aWYgKCFtZW1jZylcbjQxNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG40MTUwOlx0XG40MTUxOlx0XHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuNDE1MjpcdFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuNDE1MzpcdFx0aWYgKGVycm9yKVxuNDE1NDpcdFx0XHRnb3RvIGZhaWw7XG40MTU1Olx0XHRlcnJvciA9IC1FTk9NRU07XG40MTU2Olx0XG40MTU3Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTU4Olx0XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHMpXG40MTU5Olx0XHRcdGdvdG8gZmFpbDtcbjQxNjA6XHRcbjQxNjE6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXG40MTYyOlx0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG40MTYzOlx0XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1KVxuNDE2NDpcdFx0XHRnb3RvIGZhaWw7XG40MTY1Olx0XG40MTY2Olx0XHRpZiAoIW1lbWNnMV9hbGxvY19ldmVudHMobWVtY2cpKVxuNDE2NzpcdFx0XHRnb3RvIGZhaWw7XG40MTY4Olx0XG40MTY5Olx0XHRwc3RhdGNfcGNwdSA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XG40MTcwOlx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG40MTcxOlx0XHRcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG40MTcyOlx0XHRcdHN0YXRjLVx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XG40MTczOlx0XHRcdHN0YXRjLVx1MDAzZXZtc3RhdHMgPSBtZW1jZy1cdTAwM2V2bXN0YXRzO1xuNDE3NDpcdFx0fVxuNDE3NTpcdFxuNDE3NjpcdFx0Zm9yX2VhY2hfbm9kZShub2RlKVxuNDE3NzpcdFx0XHRpZiAoIWFsbG9jX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhtZW1jZywgbm9kZSkpXG40MTc4Olx0XHRcdFx0Z290byBmYWlsO1xuNDE3OTpcdFxuNDE4MDpcdFx0aWYgKG1lbWNnX3diX2RvbWFpbl9pbml0KG1lbWNnLCBHRlBfS0VSTkVMKSlcbjQxODE6XHRcdFx0Z290byBmYWlsO1xuNDE4MjpcdFxuNDE4MzpcdFx0SU5JVF9XT1JLKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yaywgaGlnaF93b3JrX2Z1bmMpO1xuNDE4NDpcdFx0dm1wcmVzc3VyZV9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmUpO1xuNDE4NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X3BlYWtzKTtcbjQxODY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXBfcGVha3MpO1xuNDE4NzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTIKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoLCBkZWFsaW5nIHdpdGggYG1lbWNnYCBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgaXNuJiMzOTt0IGdvaW5nIHRvIHJlcXVpcmUgS01TQU4uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSByZWZpbmluZyBob3cgd2UgbWFuYWdlIGFuZCB0cmFjayBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgYm9va2tlZXBpbmcsIG1haW5seSBjZW50ZXJlZCBhcm91bmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy4KCkNydWNpYWxseSwgdGhlIGBtZW1fY2dyb3VwYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGF0IGFsb25lIHNpZ25pZmljYW50bHkgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGUgcHJpbWFyeSByaXNrIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yczogdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgcGVyaGFwcyBzb21lIHN1YnRsZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBsZWFkaW5nIHRvIGxlYWtzIG9yIHByZW1hdHVyZSBmcmVlLWluZy4KCkNvbnNpZGVyaW5nIHRoZSB0eXBlcyBvZiBjaGFuZ2VzIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGxpa2VseSBsaWUsIEtBU0FOIHNlZW1zIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgZXJyb3JzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjbGFzc2ljIGtlcm5lbCBtZW1vcnkgYnVncywgbm90IHRoZSB0eXBlIG9mIGRhdGEgbGVha2FnZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmUmIzM5O3Mgbm8gaW5kaWNhdGlvbiBvZiB1c2VyLXNwYWNlIGRhdGEgY29weWluZyBvciBtYW5pcHVsYXRpb24gdGhhdCB3b3VsZCBleHBvc2UgbmV3LCBwb3NzaWJseSB1bmluaXRpYWxpemVkLCBtZW1vcnkgYXJlYXMgdG8gdXNlciBwcm9jZXNzZXMuIEdpdmVuIHRoYXQgS0FTQU4mIzM5O3MgY292ZXJhZ2Ugb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGlzIGV4Y2VsbGVudCBhbmQgdGhhdCB0aGUgbmV3IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIHB1c2ggZm9yIGEgS01TQU4gc2Vzc2lvbi4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGBOZWVkc0tNU0FOYCBsYWJlbCBzZWVtcyB1bm5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXG5cbkFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcyBkdWUgdG8gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIEl0IGNoYW5nZXMgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIGZyb20gdGhlc2UgSURzIGFuZCBob3cgdGhlaXIgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGR1cmluZyBzd2FwIGFuZCB3b3JraW5nc2V0IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cblxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6MDEuMTM5MDE4MTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzM4MTcyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG5cXG5BbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MgZHVlIHRvIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMS4xMzkwMjQ2OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODA4NDU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMTk1ZjU1ZDUyN2VkNDRjZjIyZDY1OTM5NzJhYzg2MjhlODJjZTI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTkxLDYgKzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcXG4gXFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gXFx0fTtcXG4gXFx0Ym9vbCBpc19yb290O1xcbitcXHRyZWZjb3VudF90IGlkX3JlZjtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTIwMiw4ICsyMDMsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XFxuIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xcbiBcXG4tXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XFxuK1xcdC8qIFRoZSBvYmpjZyBob2xkaW5nIHByaXZhdGUgbWVtY2cgSUQuICovXFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcXG4gXFxuIFxcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cXG4gXFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XFx0XFx0LyogQm90aCB2MSBcXHUwMDI2IHYyICovXFxuQEAgLTI3MCw2ICsyNzEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuICNlbmRpZlxcbiBcXHRpbnQga21lbWNnX2lkO1xcbiBcXG4rXFx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXFxuK1xcdGludCBpZDtcXG4rXFxuIFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5AQCAtODIwLDkgKzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0cmV0dXJuIG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXFxuaW5kZXggMzY2NjJkMDJmZjk2My4uYmM5NTYyNjdmNjgzNSAxMDA2NDRcXG4tLS0gYS9tbS9saXN0X2xydS5jXFxuKysrIGIvbW0vbGlzdF9scnUuY1xcbkBAIC00MjgsNyArNDI4LDcgQEAgdW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuIFxcdFxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xcbiBcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xcbi1cXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xcbitcXHRcXHRcXHRpZiAoIW1lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG4gXFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXFxuQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gICovXFxuIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiB7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcXG4gXFxuQEAgLTYzOCwxOSArNjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiBcXHRpZiAoIW9iamNnKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIFxcdC8qXFxuIFxcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxcbiBcXHQgKiBoYXZlIGFuIElEIGFsbG9jYXRlZCB0byBpdCBhbnltb3JlLCBjaGFyZ2UgdGhlIGNsb3Nlc3Qgb25saW5lXFxuLVxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbitcXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC5cXG4gXFx0ICovXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuIFxcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuLVxcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XFxuLVxcdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4rXFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4rXFxuK1xcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXFxuK1xcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX2VudHJpZXMpO1xcbiBcXG4gXFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXFxuLVxcdFxcdFxcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcXG4rXFx0XFx0XFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcXG4gXFxuIFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbiBcXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuQEAgLTY1OCwxMiArNjU5LDYgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIFxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG4gXFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBucl9lbnRyaWVzKTtcXG4gXFxuLVxcdGlmIChtZW1jZyAhPSBzd2FwX21lbWNnKSB7XFxuLVxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KHN3YXBfbWVtY2cpKVxcbi1cXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2hhcmdlKFxcdTAwMjZzd2FwX21lbWNnLVxcdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XFxuLVxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXNcXG4gXFx0ICogaW1wb3J0YW50IGhlcmUgdG8gaGF2ZSB0aGUgaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIGl0IGlzIHRoZVxcbkBAIC02NzUsNyArNjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIFxcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xcbiBcXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcXG5AQCAtMjEsOCArMjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XFxuIFxcbiBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbiBcXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBuKTtcXG4rdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pO1xcbiBcXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM2OTcsNyArMzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFxuIFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xcbiBcXG4tXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVxcdTAwM2VpZC5pZDtcXG4rXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVxcdTAwM2VpZDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5AQCAtMzk1NiwzNiArMzk1Niw0MiBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWV9BTExPQzEobWVtX2Nncm91cF9wcml2YXRlX2lkcyk7XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbi1cXHRpZiAobWVtY2ctXFx1MDAzZWlkLmlkIFxcdTAwM2UgMCkge1xcbi1cXHRcXHR4YV9lcmFzZShcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXFx1MDAzZWlkLmlkKTtcXG4tXFx0XFx0bWVtY2ctXFx1MDAzZWlkLmlkID0gMDtcXG4rXFx0aWYgKG1lbWNnLVxcdTAwM2VpZCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0eGFfZXJhc2UoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVxcdTAwM2VpZCk7XFxuK1xcdFxcdG1lbWNnLVxcdTAwM2VpZCA9IDA7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4rLyoqXFxuKyAqIEBvYmpjZzogdGhlIG9iamNnIHJldHVybmVkIGJ5IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9vYmpjZ1xcbisgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuK1xcdFxcdHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcXG4ge1xcbi1cXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQucmVmKSkge1xcbi1cXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XFxuIFxcbi1cXHRcXHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xcbi1cXHRcXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4rXFx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcXHUwMDI2b2JqY2ctXFx1MDAzZWlkX3JlZikpIHtcXG4rXFx0XFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdFxcdFZNX1dBUk5fT04ob2JqY2dfZnJlZSAhPSBvYmpjZyk7XFxuK1xcbitcXHRcXHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xcbitcXHRcXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4tXFx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZC5yZWYpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFRoZSByb290IGNncm91cCBjYW5ub3QgYmUgZGVzdHJveWVkLCBzbyBpdCdzIHJlZmNvdW50IG11c3RcXG4tXFx0XFx0ICogYWx3YXlzIGJlIFxcdTAwM2U9IDEuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XFxuLVxcdFxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIG1lbWNnO1xcbitcXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2ctXFx1MDAzZWlkX29iamNnLCBtZW1jZy1cXHUwMDNlaWQsIG4pO1xcbit9XFxuK1xcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRib29sIHN1Y2Nlc3M7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLVxcdTAwM2VpZF9vYmpjZztcXG4rXFxuK1xcdHN1Y2Nlc3MgPSByZWZjb3VudF9hZGRfbm90X3plcm8obiwgXFx1MDAyNm9iamNnLVxcdTAwM2VpZF9yZWYpO1xcbitcXHRWTV9XQVJOX09OKCFzdWNjZXNzKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTM5OTMsMTEgKzM5OTksNTUgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxcbiAgKlxcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS5cXG4rICpcXG4rICogQHJldHVybjogdGhlIG1lbWNnLCBvciBOVUxMIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IHJlcGFyZW50ZWQuXFxuICAqL1xcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuIHtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xcbi1cXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXG4rXFx0b2JqY2cgPSB4YV9sb2FkKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbisvKipcXG4rICogbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQgLSBsb29rIHVwIGFuIG9ubGluZSBtZW1jZyBmcm9tIGEgbWVtY2cgaWRcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxcbisgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXFxuKyAqL1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxcbit7XFxuK1xcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcXG4re1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFxuK1xcdG9iamNnID0geGFfbG9hZChcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xcbitcXHRpZiAoIW9iamNnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuK1xcbitcXHRfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQob2JqY2csIGlkLCBuKTtcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXFxuQEAgLTQwOTgsNyArNDE0OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiBcXHRpZiAoIW1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuLVxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQuaWQsIE5VTEwsXFxuK1xcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQsIE5VTEwsXFxuIFxcdFxcdFxcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG5AQCAtNDI0Myw5ICs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdFxcdFxcdFxcdCAgIEZMVVNIX1RJTUUpO1xcbiBcXHRscnVfZ2VuX29ubGluZV9tZW1jZyhtZW1jZyk7XFxuIFxcbi1cXHQvKiBPbmxpbmUgc3RhdGUgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBDU1MgKi9cXG4tXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQucmVmLCAxKTtcXG4tXFx0Y3NzX2dldChjc3MpO1xcbitcXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXFxuK1xcdG1lbWNnLVxcdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1swXS1cXHUwMDNlb2JqY2c7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZWlkX29iamNnLVxcdTAwM2VpZF9yZWYsIDEpO1xcbitcXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cXHUwMDNlaWRfb2JqY2cpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXFxuQEAgLTQyNTcsNyArNDMwOCw3IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIFxcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXFxuIFxcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cXG4gXFx0ICovXFxuLVxcdHhhX3N0b3JlKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfc3RvcmUoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVxcdTAwM2VpZCwgb2JqY2csIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGZyZWVfb2JqY2c6XFxuQEAgLTQzMDgsOCArNDM1OSw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG4gXFxuIFxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxuLVxcbi1cXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5AQCAtNDMxOCw2ICs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFxuIFxcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xcbiBcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbitcXG4rXFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XFxuK1xcdG1lbWNnLVxcdTAwM2VpZF9vYmpjZyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5AQCAtNTIxOSwxMSArNTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuIFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcXG4tXFx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpKVxcbitcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XFxuK1xcdGlmICghbWVtY2cpXFxuIFxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG4gXFxuQEAgLTU2MjEsMjQgKzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcXG4tXFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxuIFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcbiBcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XFxuLVxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcXG4gXFxuK1xcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXFxuK1xcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcXG4rXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuIFxcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXFx1MDAzZXN3YXApLCBucl9wYWdlcyxcXG4gXFx0XFx0XFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQobWVtY2cpKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC01NjUxLDE5ICs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xcbi1cXHRpZiAobWVtY2cpIHtcXG4tXFx0XFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxuLVxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuLVxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgLW5yX3BhZ2VzKTtcXG4tXFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xcbitcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxuK1xcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIH1cXG4gXFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IGYzNTE3OThlNzIzYWMuLmI2ZTIyNTM2YTUyNDAgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTI4Myw2ICsyODMsMTAgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxuIFxcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xcbiBcXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gXFxuK1xcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0bWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG4gXFx0bWF4X3NlcSBcXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1dJRFRIO1xcbiBcXG5AQCAtNDcwLDcgKzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4gXFx0ICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC5cXG4gXFx0ICovXFxuIFxcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XFxuLVxcdGlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxcbitcXHRpZiAoIWV2aWN0aW9uX21lbWNnIHx8ICFtZW1fY2dyb3VwX3RyeWdldChldmljdGlvbl9tZW1jZykpXFxuIFxcdFxcdGV2aWN0aW9uX21lbWNnID0gTlVMTDtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMi42MjA2NDMxMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzIyNTk3NzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiLFxuICAgIFwibWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lXCIsXG4gICAgXCJtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0XCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIl9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIG1hbmFnZWQgYW5kIHJlZmVyZW5jZWQuIEl0IG1vdmVzIHRoZSBJRCByZWZlcmVuY2UgY291bnRpbmcgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKHN3YXAsIHdvcmtpbmdzZXQsIGxpc3RfbHJ1KSB0byB1c2UgdGhlIG5ldyBJRCBtYW5hZ2VtZW50IGxvZ2ljLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgd2l0aCBmdW5jdGlvbmFsIGltcGFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTE5NWY1NWQ1MjdlZDQ0Y2YyMmQ2NTkzOTcyYWM4NjI4ZTgyY2UyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjM0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggODE3MGJiODA2NmEyMi4uZmVmOGExYzQxOTFiMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTE5MSw2ICsxOTEsNyBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHR9O1xuIFx0Ym9vbCBpc19yb290O1xuK1x0cmVmY291bnRfdCBpZF9yZWY7XG4gfTtcbiBcbiAvKlxuQEAgLTIwMiw4ICsyMDMsOCBAQCBzdHJ1Y3Qgb2JqX2Nncm91cCB7XG4gc3RydWN0IG1lbV9jZ3JvdXAge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzO1xuIFxuLVx0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkO1xuK1x0LyogVGhlIG9iamNnIGhvbGRpbmcgcHJpdmF0ZSBtZW1jZyBJRC4gKi9cbitcdHN0cnVjdCBvYmpfY2dyb3VwICppZF9vYmpjZztcbiBcbiBcdC8qIEFjY291bnRlZCByZXNvdXJjZXMgKi9cbiBcdHN0cnVjdCBwYWdlX2NvdW50ZXIgbWVtb3J5O1x0XHQvKiBCb3RoIHYxIFx1MDAyNiB2MiAqL1xuQEAgLTI3MCw2ICsyNzEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2VuZGlmXG4gXHRpbnQga21lbWNnX2lkO1xuIFxuK1x0LyogUHJpdmF0ZSBtZW1jZyBJRC4gVXNlZCB0byBJRCBvYmplY3RzIHRoYXQgb3V0bGl2ZSB0aGUgY2dyb3VwICovXG4rXHRpbnQgaWQ7XG4rXG4gXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnZtc3RhdHNfcGVyY3B1O1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuQEAgLTgyMCw5ICs4MjQsMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNlaWQ7XG4gfVxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7XG4rc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG4gXG4gc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2xpc3RfbHJ1LmMgYi9tbS9saXN0X2xydS5jXG5pbmRleCAzNjY2MmQwMmZmOTYzLi5iYzk1NjI2N2Y2ODM1IDEwMDY0NFxuLS0tIGEvbW0vbGlzdF9scnUuY1xuKysrIGIvbW0vbGlzdF9scnUuY1xuQEAgLTQyOCw3ICs0MjgsNyBAQCB1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbiBcdFx0eGFfZm9yX2VhY2goXHUwMDI2bHJ1LVx1MDAzZXhhLCBpbmRleCwgbWxydSkge1xuIFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGluZGV4KTtcbi1cdFx0XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuK1x0XHRcdGlmICghbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkge1xuIFx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAyZGM1OTk0ODRkMDA2Li5lNTE2MWUwNjFiZDExIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC02MTgsNyArNjE4LDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICovXG4gdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4ge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xuIFxuQEAgLTYzOCwxOSArNjM4LDIwIEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpjZylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdC8qXG4gXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcbiBcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbi1cdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxuK1x0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQuXG4gXHQgKi9cbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcbi1cdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbitcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4rXG4rXHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuK1x0bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfZW50cmllcyk7XG4gXG4gXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9lbnRyaWVzLFxuLVx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcbitcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFxuIFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4gXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbkBAIC02NTgsMTIgKzY1OSw2IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxuIFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBucl9lbnRyaWVzKTtcbiBcbi1cdGlmIChtZW1jZyAhPSBzd2FwX21lbWNnKSB7XG4tXHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KHN3YXBfbWVtY2cpKVxuLVx0XHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2c3dhcF9tZW1jZy1cdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XG4tXHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfZW50cmllcyk7XG4tXHR9XG4tXG4gXHQvKlxuIFx0ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrIHdpdGggSVJRIG9mZi4gSXQgaXNcbiBcdCAqIGltcG9ydGFudCBoZXJlIHRvIGhhdmUgdGhlIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBpdCBpcyB0aGVcbkBAIC02NzUsNyArNjcwLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcbiBcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMGY3MDNmMjM5YzgwZi4uOWM3NDQwMGFhN2RkYiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjEsOCArMjEsNyBAQCB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XG4gXG4gaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbik7XG4rdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pO1xuIFxuIC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5lNzU1NWVjYTc3MDE5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0zNjk3LDcgKzM2OTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1jZ19vbmxpbmVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIFxuLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gbWVtY2ctXHUwMDNlaWQuaWQ7XG4rXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbkBAIC0zOTU2LDM2ICszOTU2LDQyIEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DMShtZW1fY2dyb3VwX3ByaXZhdGVfaWRzKTtcbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4tXHRpZiAobWVtY2ctXHUwMDNlaWQuaWQgXHUwMDNlIDApIHtcbi1cdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQpO1xuLVx0XHRtZW1jZy1cdTAwM2VpZC5pZCA9IDA7XG4rXHRpZiAobWVtY2ctXHUwMDNlaWQgXHUwMDNlIDApIHtcbitcdFx0eGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQpO1xuK1x0XHRtZW1jZy1cdTAwM2VpZCA9IDA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4rLyoqXG4rICogQG9iamNnOiB0aGUgb2JqY2cgcmV0dXJuZWQgYnkgbWVtX2Nncm91cF9wcml2YXRlX2lkX29iamNnXG4rICogQGlkOiB0aGUgY29ycmVzcG9uZGluZyBtZW1jZyBwcml2YXRlIGlkXG4rICovXG4rc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbitcdFx0dW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZ19mcmVlO1xuIFxuLVx0XHQvKiBNZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4rXHRpZiAocmVmY291bnRfc3ViX2FuZF90ZXN0KG4sIFx1MDAyNm9iamNnLVx1MDAzZWlkX3JlZikpIHtcbitcdFx0b2JqY2dfZnJlZSA9IHhhX2VyYXNlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdFx0Vk1fV0FSTl9PTihvYmpjZ19mcmVlICE9IG9iamNnKTtcbitcbitcdFx0LyogTWVtY2cgSUQgcGlucyB0aGUgb2JqY2cgKi9cbitcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuIHtcbi1cdHdoaWxlICghcmVmY291bnRfYWRkX25vdF96ZXJvKG4sIFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZikpIHtcbi1cdFx0Lypcbi1cdFx0ICogVGhlIHJvb3QgY2dyb3VwIGNhbm5vdCBiZSBkZXN0cm95ZWQsIHNvIGl0J3MgcmVmY291bnQgbXVzdFxuLVx0XHQgKiBhbHdheXMgYmUgXHUwMDNlPSAxLlxuLVx0XHQgKi9cbi1cdFx0aWYgKFdBUk5fT05fT05DRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSkge1xuLVx0XHRcdFZNX0JVR19PTigxKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbi1cdH1cbi1cdHJldHVybiBtZW1jZztcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZy1cdTAwM2VpZF9vYmpjZywgbWVtY2ctXHUwMDNlaWQsIG4pO1xuK31cbitcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRib29sIHN1Y2Nlc3M7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBtZW1jZy1cdTAwM2VpZF9vYmpjZztcbitcbitcdHN1Y2Nlc3MgPSByZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2b2JqY2ctXHUwMDNlaWRfcmVmKTtcbitcdFZNX1dBUk5fT04oIXN1Y2Nlc3MpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTkzLDExICszOTk5LDU1IEBAIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuXG4gICogQGlkOiB0aGUgbWVtY2cgaWQgdG8gbG9vayB1cFxuICAqXG4gICogQ2FsbGVyIG11c3QgaG9sZCByY3VfcmVhZF9sb2NrKCkuXG4rICpcbisgKiBAcmV0dXJuOiB0aGUgbWVtY2csIG9yIE5VTEwgaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgcmVwYXJlbnRlZC5cbiAgKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4ge1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0V0FSTl9PTl9PTkNFKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSk7XG4tXHRyZXR1cm4geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuK1x0aWYgKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykgIT0gaWQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisvKipcbisgKiBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCAtIGxvb2sgdXAgYW4gb25saW5lIG1lbWNnIGZyb20gYSBtZW1jZyBpZFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGdldCBhIHJlZmVyZW5jZS5cbisgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4rICovXG4rc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZSh1bnNpZ25lZCBzaG9ydCBpZClcbit7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4re1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0b2JqY2cgPSB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbitcbitcdF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChvYmpjZywgaWQsIG4pO1xuK1x0cmV0dXJuIG1lbWNnO1xuIH1cbiBcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfZnJvbV9pZCh1NjQgaWQpXG5AQCAtNDA5OCw3ICs0MTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRpZiAoIW1lbWNnKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQuaWQsIE5VTEwsXG4rXHRlcnJvciA9IHhhX2FsbG9jKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFx1MDAyNm1lbWNnLVx1MDAzZWlkLCBOVUxMLFxuIFx0XHRcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGZhaWw7XG5AQCAtNDI0Myw5ICs0MjkzLDEwIEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRcdFx0XHQgICBGTFVTSF9USU1FKTtcbiBcdGxydV9nZW5fb25saW5lX21lbWNnKG1lbWNnKTtcbiBcbi1cdC8qIE9ubGluZSBzdGF0ZSBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIENTUyAqL1xuLVx0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkLnJlZiwgMSk7XG4tXHRjc3NfZ2V0KGNzcyk7XG4rXHQvKiBDU1MgcGlucyBtZW1jZyBJRCwgbWVtY2cgSUQgcGlucyBvYmogY2dyb3VwICovXG4rXHRtZW1jZy1cdTAwM2VpZF9vYmpjZyA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvWzBdLVx1MDAzZW9iamNnO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNm1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZWlkX3JlZiwgMSk7XG4rXHRvYmpfY2dyb3VwX2dldChtZW1jZy1cdTAwM2VpZF9vYmpjZyk7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKCkgd29ya3Mgb25jZSB3ZSdyZSBmdWxseSBvbmxpbmUuXG5AQCAtNDI1Nyw3ICs0MzA4LDcgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdCAqIHB1Ymxpc2ggaXQgaGVyZSBhdCB0aGUgZW5kIG9mIG9ubGluaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gXHQgKiByZWd1bGFyIElEIGRlc3RydWN0aW9uIGR1cmluZyBvZmZsaW5pbmcuXG4gXHQgKi9cbi1cdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLmlkLCBtZW1jZywgR0ZQX0tFUk5FTCk7XG4rXHR4YV9zdG9yZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCwgb2JqY2csIEdGUF9LRVJORUwpO1xuIFxuIFx0cmV0dXJuIDA7XG4gZnJlZV9vYmpjZzpcbkBAIC00MzA4LDggKzQzNTksNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuIFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbi1cbi1cdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTQzMTgsNiArNDM2Nyw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHRpbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKG1lbWNnKTtcbiBcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XG4rXG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCAxKTtcbitcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuQEAgLTUyMTksMTEgKzUyNzEsOSBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbi1cdGlmICghbWVtY2cgfHwgIWNzc190cnlnZXRfb25saW5lKFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZShpZCk7XG4rXHRpZiAoIW1lbWNnKVxuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xuIFxuQEAgLTU2MjEsMjQgKzU2NzEsMjcgQEAgaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XG4tXHQvKiBtZW1jZyBpcyBwaW5lZCBieSBtZW1jZyBJRC4gKi9cbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuIFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU1dBUCwgbnJfcGFnZXMpO1xuIFxuK1x0Lyogd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgc28gd2Ugc2hvdWxkIGdldCBleGFjdCBtZW1jZyBpdHNlbGYgKi9cbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQobWVtY2csIG5yX3BhZ2VzKTtcbitcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcyxcbiBcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTY1MSwxOSArNTcwNCwxOSBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XG4tXHRpZiAobWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4tXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcyk7XG4tXHRcdH1cbi1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuLVx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XG4rXHRtZW1jZyA9IG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWQoaWQsIG5yX3BhZ2VzKTtcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xuK1x0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbiBcdH1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCAtbnJfcGFnZXMpO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uYjZlMjI1MzZhNTI0MCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMjgzLDYgKzI4MywxMCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbiBcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xuIFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXG4rXHQvKiByZXBhcmVudGVkIG1lbWNnIGxvc2VzIGl0cyBtYXhfc2VxICovXG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4gXHRtYXhfc2VxIFx1MDAyNj0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XG4gXG5AQCAtNDcwLDcgKzQ3NCw3IEBAIGJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbiBcdCAqIGNvbmZpZ3VyYXRpb25zIGluc3RlYWQuXG4gXHQgKi9cbiBcdGV2aWN0aW9uX21lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dpZCk7XG4tXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbitcdGlmICghZXZpY3Rpb25fbWVtY2cgfHwgIW1lbV9jZ3JvdXBfdHJ5Z2V0KGV2aWN0aW9uX21lbWNnKSlcbiBcdFx0ZXZpY3Rpb25fbWVtY2cgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTowMi42MjA2NDQzMjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc4NDEyMTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBNZW1jZyBJRCBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBXZSd2ZSBnb3QgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgdGhlIGBtZW1jZy1cdTAwM2VpZGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgc3Vic3lzdGVtIChtZW1jZykuIEl0J3MgYSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlLCBtb3ZpbmcgdGhlIGByZWZjb3VudF90IGlkX3JlZmAgZnJvbSBgbWVtY2dgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVmYWN0b3JpbmcgaG93IHRoZSBJRCBpcyBtYW5hZ2VkLCBlc3NlbnRpYWxseS4gVGhpcyBhbHNvIGludm9sdmVzIHJlbmFtaW5nIGEgZmV3IHRoaW5nczsgYG1lbWNnLVx1MDAzZWlkLmlkYCBpcyBub3cgc2ltcGx5IGBtZW1jZy1cdTAwM2VpZGAsIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIG5vdyBoYW5kbGVkIHRocm91Z2ggYG1lbWNnLVx1MDAzZWlkX29iamNnLVx1MDAzZWlkX3JlZmAuXG5cblRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNvZGUsIG1lYW5pbmcgaXQgaGFzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQmVjYXVzZSBvZiB0aGF0LCBhbmQga25vd2luZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBpbiByZWZjb3VudGluZyBjaGFuZ2VzIGxpa2UgdGhpcywgSSdtIGNvbmZpZGVudCB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZyAoV29ydGhGdXp6aW5nPXRydWUsIG5vIHF1ZXN0aW9uKS5cblxuTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGFyZWFzIHRvIHRhcmdldCB3aXRoIG91ciBmdXp6ZXJzLiBCYXNlZCBvbiB0aGUgZGlmZiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBhZGRlZDogYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAsIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCwgYF9fbWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dGAsIGBtZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkYCwgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fdGVzdF9yZWNlbnRgLlxuXG5Ob3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcHJpb3JpdGl6ZSBiYXNlZCBvbiBhY2Nlc3NpYmlsaXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlICpwdWJsaWMqIGVudHJ5cG9pbnRzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2Agc2luY2UgdGhlIGRpZmYgdG91Y2hlcyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYCwgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLCBgX19tZW1jZzFfc3dhcG91dGAsIGBsaXN0X2xydV93YWxrX25vZGVgLCBhbmQgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgdGhlbSBsaWtlbHkgZW50cnkgcG9pbnRzLlxuXG5J4oCZbSB0aGlua2luZyBJIHdpbGwgdXRpbGl6ZSBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGVzZSBkZWZpbml0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgbGlrZWx5IGdpdmUgdXMgdGhlIGluZm9ybWF0aW9uIHRvIGZpbmQgdGVzdCBoYXJuZXNzIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYmUgYWJsZSB0byBnbyBmcm9tIHRoZXJlLCBhbmQgY29uc3RydWN0IGFuIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY1LCJPdXRwdXRUb2tlbnMiOjEyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjEzLjQwNDc2ODI0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU0MjQxODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxzdHJ1Y3QgbWVtX2Nncm91cCBcXFxcKnxpbnR8dW5zaWduZWQgbG9uZ3xib29sKSAobWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWR8bWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lfG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXR8bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvfF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXB8X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXB8X19tZW1jZzFfc3dhcG91dHxsaXN0X2xydV93YWxrX25vZGV8d29ya2luZ3NldF90ZXN0X3JlY2VudClcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9MzIwPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTMyMy1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2Fsayk7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjMyNDp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMzI1LVxcdFxcdFxcdFxcdCBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2ND1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjY6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTczPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk4MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTgxOnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTgyLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTUwMT1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA2LSNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1MDc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTA4LXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTI4PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTM0LS8qIG1tL3dvcmtpbmdzZXQuYyAqL1xcbm1tL2ludGVybmFsLmg6MzU6Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbm1tL2ludGVybmFsLmgtMzYtXFx0XFx0XFx0ICAgIGJvb2wgZmx1c2gpO1xcbi0tXFxubW0vbGlzdF9scnUuYz00MDU9bGlzdF9scnVfd2Fsa19vbmVfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9saXN0X2xydS5jLTQxMi1cXG5tbS9saXN0X2xydS5jOjQxMzp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTQxNC1cXHRcXHRcXHRcXHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NTk3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYxOC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6NjE5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy02MjAte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTIyPWludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XFxubW0vbWVtY29udHJvbC12MS5oLTIzLVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyNDp2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XFxubW0vbWVtY29udHJvbC12MS5oLTI1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5ODM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zOTg3LVxcbm1tL21lbWNvbnRyb2wuYzozOTg4OnZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbm1tL21lbWNvbnRyb2wuYy0zOTg5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjMxPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjY0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjY1OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxubW0vbWVtY29udHJvbC5jLTUyNjYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0OS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTY1MDppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy01NjUxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzAyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzAzOnZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLmMtNTcwNC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9Mzk2PXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00MzMtICovXFxubW0vd29ya2luZ3NldC5jOjQzNDpib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxubW0vd29ya2luZ3NldC5jLTQzNS1cXHRcXHRcXHRcXHRib29sIGZsdXNoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToxNi44NTkwMTUwNTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA3MDk4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZWQgaXMgdGhhdCBteSByZWdleCBkaWRuJ3QgY2F0Y2ggYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gSG1tLCBJIHdvbmRlciB3aHkuLi4gQWgsIHJpZ2h0LCBpdCByZXR1cm5zIGEgYHN0cnVjdCBtZW1fY2dyb3VwICpgLiBUaGF0J3Mgd2h5IHRoZSByZWdleCBtaXNzZWQgaXQuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoYXQgb25lIGluIG91ciBldmFsdWF0aW9uLlxuXG5JJ3ZlIGFsc28gaWRlbnRpZmllZCBhIGZldyBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLCBgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldGAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGggZm9yIGV4cGxvcmluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBtZW1vcnkgY2dyb3Vwcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMgb2YgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkX29ubGluZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgcmV0cmlldmUgdGhlIG1lbW9yeSBjZ3JvdXAgYmFzZWQgb24gYSBwcml2YXRlIElELlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyMS4xNjYxMTc4NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjUxOTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtX2Nncm91cCBcXFxcKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgyMj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjgtfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgyOTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjgzMDpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MzEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMDEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTMwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zOTg4PXZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwMDQtICovXFxubW0vbWVtY29udHJvbC5jOjQwMDU6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxcbm1tL21lbWNvbnRyb2wuYy00MDA2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MDI2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MDI3OnN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmUodW5zaWduZWQgc2hvcnQgaWQpXFxubW0vbWVtY29udHJvbC5jLTQwMjgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyMy43NTg2NDI4NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc1ODU3NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGVzZSB0d28gZnVuY3Rpb25zLCBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRgIGFuZCBpdHMgb25saW5lIGNvdW50ZXJwYXJ0LCBhcmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIHRoZXkncmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBzY29wZS4gQnV0IHRoZXkgcHJpbWFyaWx5IHNlZW0gdG8gZnVuY3Rpb24gYXMgaGVscGVyIHJvdXRpbmVzLCB3aGljaCByYWlzZXMgYSBxdWVzdGlvbiBvZiB0aGVpciB3aWRlciBpbXBhY3QgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBUaGUga2V5IGVudHJ5IHBvaW50cyB0aGF0IHJlbHkgb24gdGhlbSBhcHBlYXIgdG8gYmUgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC4gVGhpcyBnaXZlcyBtZSBzb21lIGRpcmVjdGlvbiBhcyB0byB3aGVyZSB0byBsb29rIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0IG9mIHRoZWlyIHVzZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIENsZWFybHksIGBDT05GSUdfTUVNQ0dgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuIFdoYXQgSSdtIGxlc3MgY2VydGFpbiBhYm91dCBpcyB0aGUgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1NXQVBgLiBHaXZlbiB0aGF0IGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBzd2FwLXJlbGF0ZWQsIHRoZXJlIGlzIGEgc3Ryb25nIHBvc3NpYmlsaXR5IHRoYXQgYENPTkZJR19TV0FQYCB3aWxsIGFsc28gYmUgYSBkZXBlbmRlbmN5LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgc291cmNlIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEknbSBnb2luZyB0byBsb29rIGF0IGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBsb29rIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4NCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNToyOS41MzQ1MDQxMDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NDI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXigjaWZkZWZ8I2lmbmRlZikgQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG5tbS9tZW1jb250cm9sLmMtMTAzLVxcbm1tL21lbWNvbnRyb2wuYzoxMDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMzLVxcbm1tL21lbWNvbnRyb2wuYzoyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA0LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NXQVBDQUNIRSxcXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy00MDktXFx0UEdQUk9NT1RFX1NVQ0NFU1MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI3LVxcdFBHUkVGSUxMLFxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtNDI5LVxcdE5SX0hVR0VUTEIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg4PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDItXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUwMzojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MDQtXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUtXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MjctXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMi1cXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTM0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1NTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NjAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy01ODEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTg2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtNTg3LVxcdE5VTUFfUEFHRV9NSUdSQVRFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc3MC1cXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy03NzItXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc5Mj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODA3LVxcbm1tL21lbWNvbnRyb2wuYzo4MDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04MDktLypcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NzY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg4LVxcbm1tL21lbWNvbnRyb2wuYzo4ODk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04OTktXFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcXG5tbS9tZW1jb250cm9sLmMtOTAxLVxcdGlmICh4IFxcdTAwM2MgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEwNzEtXFxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTYxLVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1NzItI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVxcdHsgXFxcImFub25fdGhwXFxcIixcXHRcXHRcXHROUl9BTk9OX1RIUFNcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1ODQtXFx0eyBcXFwic2xhYl91bnJlY2xhaW1hYmxlXFxcIixcXHRcXHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cXHR7IFxcXCJodWdldGxiXFxcIixcXHRcXHRcXHROUl9IVUdFVExCXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEwLVxcdHsgXFxcInBncmVmaWxsXFxcIixcXHRcXHRcXHRQR1JFRklMTFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTE6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVxcdHsgXFxcInBncHJvbW90ZV9zdWNjZXNzXFxcIixcXHRcXHRQR1BST01PVEVfU1VDQ0VTU1xcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTYzMz1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cXHRjYXNlIFBHUkVGSUxMOlxcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cXHRjYXNlIFBHUFJPTU9URV9TVUNDRVNTOlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2NzctXFxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNjc5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoxNjg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3MTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpKyspIHtcXG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE3NDYtXFx0XFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MTctXFx0XFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XFxubW0vbWVtY29udHJvbC5jOjE4MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xODE5LVxcdGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjgxNy1cXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDctXFxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzE2LVxcbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxubW0vbWVtY29udHJvbC5jOjQxOTQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTQxOTUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM0LVxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI0My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDUtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3OS1cXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MTktXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0MjA6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDIxLVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQyNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0MjUtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDUzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDg4LVxcbm1tL21lbWNvbnRyb2wuYzo0NDg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5NzU9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODktXFxubW0vbWVtY29udHJvbC5jOjQ5OTA6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI1LVxcdH0sXFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTUxMjctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTctXFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYzo1MTU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0MC1cXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODk0LVxcbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA5OC1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYzo2MDk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjI5LjU4MTQ1MTcxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg0OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKCNpZmRlZnwjaWZuZGVmKSBDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9OTQ9ZW51bSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTAxLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMDI6I2lmZGVmIENPTkZJR19MT0NLREVQXFxubW0vbWVtY29udHJvbC12MS5jLTEwMy1zdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NDA1PXN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNDEwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzo0MTE6I2lmZGVmIENPTkZJR19NTVVcXG5tbS9tZW1jb250cm9sLXYxLmMtNDEyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTU5Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy02MDYtXFxubW0vbWVtY29udHJvbC12MS5jOjYwNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtNjA4LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwMzM9c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9yZXNldChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDY5LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDcwOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDcxLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNjA9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTYyLVxcdE5SX0FOT05fTUFQUEVELFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTYzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2NC1cXHROUl9BTk9OX1RIUFMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3MS1cXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE3MjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3My1cXHRNRU1DR19TV0FQLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNzg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4MC1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4MTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxODItXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg5LVxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIxOTA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTIxOTEtXFx0XFxcInN3YXBcXFwiLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIyMjA9dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjc0LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjc1OiNpZmRlZiBDT05GSUdfREVCVUdfVk1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjI3Ni1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjMzMT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfb29tX2NvbnRyb2xfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMzUxOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzUyLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zbGFiX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIzNjI9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI0MjgtXFx0fSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjQyOTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9tZW1jb250cm9sLXYxLmMtMjQzMC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjQ1Ny1cXHR9LFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDU4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDU5LVxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6MjkuNjI4MzA4OTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTQ0OTExNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAtUmVsYXRlZCBNZW1vcnkgQ2dyb3VwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgY2dyb3VwIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMuIEkgc2VlIGBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwYCwgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgYWxsIGNsZWFybHkgZ3VhcmRlZCBieSBgQ09ORklHX1NXQVBgLiBNYWtlcyBzZW5zZS4gQnV0IGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCAqc2hvdWxkKiBhbHNvIGJlIHVuZGVyIGBDT05GSUdfU1dBUGAgZ2l2ZW4gaXRzIG5hbWUsIGFuZCB0aGF0IGl0J3MgaW4gYG1tL21lbWNvbnRyb2wuY2AuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQgKmlzbid0KiBkaXJlY3RseSB1bmRlciBhIGAjaWZkZWYgQ09ORklHX1NXQVBgIGluIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIHdoaWNoIGlzIHN0cmFuZ2UuIEkgbmVlZCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBub3cgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYG1tL21lbWNvbnRyb2wuY2AgbW9yZSBicm9hZGx5IHRvIHNlZSBpZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBkZWZpbmVkIHVuZGVyIHNvbWUgb3RoZXIgY29uZGl0aW9uYWwuIEFoLCBmb3VuZCBpdC4gTG9va2luZyBhdCBsaW5lIDU2NDEgSSBjYW4gc2VlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgaXMgdXNlZC4gTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIGFjdHVhbGx5IGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTozNC43ODI4MDIzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUyMzE9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjQtICovXFxubW0vbWVtY29udHJvbC5jOjUyNjU6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG5tbS9tZW1jb250cm9sLmMtNTI2Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTozNC44Njg1NzY4MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDUzNTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHRoaW5nIGV2ZW4gKmFsd2F5cyogZW5hYmxlZD8gT3IgaXMgaXQgdHVja2VkIGF3YXkgYmVoaW5kIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZT9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHBvdGVudGlhbGx5IGNvbmRpdGlvbmFsLCBtYXliZSBvbmx5IGNvbXBpbGVkIGluIGZvciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBmZWF0dXJlIGZsYWcgdGhhdCdzIG9ubHkgYWN0aXZlIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gQSBxdWljayBzY2FuIGZvciBgI2lmZGVmYCBzdGF0ZW1lbnRzIGFyb3VuZCB0aGUgZGVmaW5pdGlvbiBvciB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBuZWNlc3NhcnkgZmlyc3Qgc3RlcC4gVGhhdCdsbCBzYXZlIG1lIGZyb20gY2hhc2luZyBhIGdob3N0IGxhdGVyLCB5b3Uga25vdz8gSXQncyBhIGZ1bmRhbWVudGFsIHNhbml0eSBjaGVjayB0byBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHdhc3RlZCBteSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjM4LjU4OTExNTA1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXigjaWZkZWZ8I2lmbmRlZikgQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG5tbS9tZW1jb250cm9sLmMtMTAzLVxcbm1tL21lbWNvbnRyb2wuYzoxMDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTEwNS1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMzLVxcbm1tL21lbWNvbnRyb2wuYzoyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0yMzUtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc3PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA0LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NXQVBDQUNIRSxcXG5tbS9tZW1jb250cm9sLmMtNDA3LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MDg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy00MDktXFx0UEdQUk9NT1RFX1NVQ0NFU1MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI3LVxcdFBHUkVGSUxMLFxcbm1tL21lbWNvbnRyb2wuYzo0Mjg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtNDI5LVxcdE5SX0hVR0VUTEIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg4PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDItXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUwMzojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MDQtXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUtXFx0eCA9IFJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jOjUyNjojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy01MjctXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUzMi1cXG5tbS9tZW1jb250cm9sLmM6NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTM0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1NTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NjAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3NTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1ODA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy01ODEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTg2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtNTg3LVxcdE5VTUFfUEFHRV9NSUdSQVRFLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc2Mj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc3MC1cXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxubW0vbWVtY29udHJvbC5jOjc3MTojaWZkZWYgQ09ORklHX1NNUFxcbm1tL21lbWNvbnRyb2wuYy03NzItXFx0aWYgKHggXFx1MDAzYyAwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTc5Mj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODA3LVxcbm1tL21lbWNvbnRyb2wuYzo4MDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04MDktLypcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NzY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg4LVxcbm1tL21lbWNvbnRyb2wuYzo4ODk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy04OTAtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYz04OTE9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04OTktXFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYzo5MDA6I2lmZGVmIENPTkZJR19TTVBcXG5tbS9tZW1jb250cm9sLmMtOTAxLVxcdGlmICh4IFxcdTAwM2MgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMDY0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEwNzEtXFxubW0vbWVtY29udHJvbC5jOjEwNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMDczLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTYxLVxcdHsgXFxcInNobWVtXFxcIixcXHRcXHRcXHROUl9TSE1FTVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1NjI6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTYzLVxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTcwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTcxLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jLTE1NzItI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjE1NzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNTc0LVxcdHsgXFxcImFub25fdGhwXFxcIixcXHRcXHRcXHROUl9BTk9OX1RIUFNcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1ODQtXFx0eyBcXFwic2xhYl91bnJlY2xhaW1hYmxlXFxcIixcXHRcXHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1jb250cm9sLmMtMTU4Ni1cXHR7IFxcXCJodWdldGxiXFxcIixcXHRcXHRcXHROUl9IVUdFVExCXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEwLVxcdHsgXFxcInBncmVmaWxsXFxcIixcXHRcXHRcXHRQR1JFRklMTFxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE2MTE6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbm1tL21lbWNvbnRyb2wuYy0xNjEyLVxcdHsgXFxcInBncHJvbW90ZV9zdWNjZXNzXFxcIixcXHRcXHRQR1BST01PVEVfU1VDQ0VTU1xcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTYzMz1zdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTY2Mi1cXHRjYXNlIFBHUkVGSUxMOlxcbm1tL21lbWNvbnRyb2wuYzoxNjYzOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5tbS9tZW1jb250cm9sLmMtMTY2NC1cXHRjYXNlIFBHUFJPTU9URV9TVUNDRVNTOlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2NzI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE2NzctXFxubW0vbWVtY29udHJvbC5jOjE2Nzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNjc5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoxNjg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2ODctc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE2OTg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3MTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzQ0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnX3ZtX2V2ZW50X3N0YXQpOyBpKyspIHtcXG5tbS9tZW1jb250cm9sLmM6MTc0NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE3NDYtXFx0XFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MTctXFx0XFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XFxubW0vbWVtY29udHJvbC5jOjE4MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xODE5LVxcdGVsc2Uge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4MDU9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjgxNy1cXG5tbS9tZW1jb250cm9sLmM6MjgxODojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxubW0vbWVtY29udHJvbC5jLTI4MTktc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzNz1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDctXFxubW0vbWVtY29udHJvbC5jOjMwNDg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ5LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3MDM9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNzE2LVxcbm1tL21lbWNvbnRyb2wuYzozNzE3OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL21lbWNvbnRyb2wuYy0zNzE4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxMzg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRtZW1jZy1cXHUwMDNla21lbWNnX2lkID0gLTE7XFxubW0vbWVtY29udHJvbC5jOjQxOTQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTQxOTUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQyMjM6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM0LVxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI0My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDUtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM3NT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3OS1cXG5tbS9tZW1jb250cm9sLmM6NDM4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQxMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MTktXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2dyb3VwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQ0MjA6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00NDIxLVxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX21heCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQyMy0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQyNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0MjUtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDUzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDg4LVxcbm1tL21lbWNvbnRyb2wuYzo0NDg5OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtNDQ5MC1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM3LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5NzU9aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5ODktXFxubW0vbWVtY29udHJvbC5jOjQ5OTA6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTQ5OTEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI1LVxcdH0sXFxubW0vbWVtY29udHJvbC5jOjUxMjY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vbWVtY29udHJvbC5jLTUxMjctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDY9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTctXFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYzo1MTU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTE1OS1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjA1PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0MC1cXG5tbS9tZW1jb250cm9sLmM6NTY0MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNTY0Mi0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODYwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODk0LVxcbm1tL21lbWNvbnRyb2wuYzo1ODk1OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTg5Ni0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjA5OC1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYzo2MDk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjEwMC1cXHRXQVJOX09OKGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjEwMS0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjEwMjojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjM4LjYzNzEyNjAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNDgzNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBNZW1vcnkgQ29udHJvbCBhbmQgU3dhcCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIEl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzbid0IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkuIE5vdywgdGhhdCdzIG1ha2luZyBtZSByZWNvbnNpZGVyIHRoZSBhcmNoaXRlY3R1cmUuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJZiBJJ20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCB0aGUgYWN0dWFsIHN3YXBvdXQgZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLCBgX19tZW1jZzFfc3dhcG91dGAsIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEFuZCB0aGF0IGZpbGUncyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB0aWVkIHRvIGBDT05GSUdfTUVNQ0dfVjFgLiBJJ20gc3RhcnRpbmcgdG8gcHV0IHRoZSBwaWVjZXMgdG9nZXRoZXIuIFRoZSB2MSBtZW1vcnkgY2dyb3VwIGltcGxlbWVudGF0aW9uIG1pZ2h0IGhhbmRsZSB0aGlzIHN3YXAgaW50ZXJhY3Rpb24gZGlmZmVyZW50bHkgb3IgZW5jYXBzdWxhdGUgcmVsYXRlZCBsb2dpYy5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cCBhIHN0ZXAuIFRvIGNvbmZpcm0gdGhpcyBsaW5lIG9mIHRoaW5raW5nIGFuZCBnZXQgdGhlIHdob2xlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjbGVhciB2aWV3IG9mIGhvdyB0aGVzZSBmaWxlcyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGludGVyY29ubmVjdGVkIGF0IHRoZSBidWlsZCBsZXZlbC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBob3cgZXZlcnl0aGluZyBpcyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNTo0Mi43Nzk2MTM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NTk4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbC12MVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzU6NDIuODI3NTc4MjQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTkzNDQ4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBzeW1ib2xzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb24gYF9fbWVtY2cxX3N3YXBvdXRgLiBUaGVuLCB3ZSBuZWVkIGBDT05GSUdfU1dBUGAgZm9yIGJvdGggYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgIGFuZCBgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBgLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX01FTUNHYCBpcyBmdW5kYW1lbnRhbCBmb3IgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFzIHdlbGwgYXMgYGxpc3RfbHJ1X3dhbGtfbm9kZWAgYW5kIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBsaXN0X2xydV93YWxrX25vZGVgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgYXJlIGFsd2F5cyBpbmNsdWRlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHJlYXNvbmFibGUgY2lyY3Vtc3RhbmNlcy4gTGV0J3Mgc2VlLi4uIGBsaXN0X2xydV93YWxrX25vZGVgIHJlc2lkZXMgaW4gYG1tL2xpc3RfbHJ1LmNgIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgYGxpc3RfbHJ1Lm9gIGFuZCBgd29ya2luZ3NldC5vYCBhcmUgZ2V0dGluZyBidWlsdCwgdG8gY29uZmlybSBubyB1bmV4cGVjdGVkIGNvbmZpZyByZXF1aXJlbWVudHMgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjQ3LjY4NjkyNjMwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMjg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlzdF9scnVcXFxcLm98d29ya2luZ3NldFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU3OlxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxubW0vTWFrZWZpbGUtNTgtXFx0XFx0XFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM1OjQ3LjczNDI2NTYzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE0Njg5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRoaW5raW5nIG9uIEZvY3VzaW5nIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGlzIHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgSSdtIGNvbXBpbGluZyB0aGUgaW5mb3JtYXRpb24gdW5jb25kaXRpb25hbGx5LiBUaGlzIG1lYW5zIEknbSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucywgYW5kIEknbSBsb29raW5nIGF0IGV2ZXJ5dGhpbmcuXG5cbkkndmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIGRlZmluZWQsIHdoaWNoIGFyZSBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5SaWdodCBub3csIG15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBhcmU6IGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGAsIGBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGFuZCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFNvbGlkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBpbmNsdWRpbmcgc29tZSBzbWFsbGVyIGhlbHBlciBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGNvbnNpZGVyaW5nIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGAgYW5kIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVgLiBUaGV5J3JlIG5vbi1zdGF0aWMsIHRoZXkncmUgZXhwb3J0ZWQsIGFuZCB3aGlsZSBmdXp6aW5nIHRoZW0gKmRpcmVjdGx5KiBtaWdodCBub3QgeWllbGQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcmVzdWx0cyBjb21wYXJlZCB0byBmdXp6aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlbSwgaXQgZG9lc24ndCBodXJ0LiBNaWdodCBhcyB3ZWxsIGluY2x1ZGUgdGhlbSBmb3IgYnJvYWRlciBjb3ZlcmFnZS4gQWN0dWFsbHksIGhvbGQgb24uIEkgc2VlIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YCBhbmQgYG1lbV9jZ3JvdXBfdGFrZV9mcm9tX3ByaXZhdGVfaWRgLCB3aGljaCBhcmUgc3RhdGljIGFuZCByZWxhdGVkLCBzbyBsZXQncyBpbmNsdWRlIHRob3NlIHRvby4gVGhpcyBpcyBleHBhbmRpbmcgdGhlIHNjb3BlIGEgYml0LlxuXG5Pa2F5LCBsZXQncyB1cGRhdGUgdGhhdCBsaXN0OlxuLSAgIGBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZGBcbi0gICBgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lYFxuLSAgIGBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0YFxuLSAgIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gXG4tICAgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgXG4tICAgYF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwYFxuLSAgIGBfX21lbWNnMV9zd2Fwb3V0YFxuLSAgIGBsaXN0X2xydV93YWxrX25vZGVgXG4tICAgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgXG5cbk5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVja+KApiBJIGtub3cgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYCBpcyBub24tc3RhdGljIGFuZCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IGxldCBtZSBkb3VibGUtY2hlY2sgaXQncyBhY3R1YWxseSBleHBvcnRlZC4gSXQncyBlYXN5IHRvIG92ZXJsb29rIHNvbWV0aGluZyBpbiB0aGVzZSBzb3J0cyBvZiBldmFsdWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MDIuODgxMTYzMzkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA5MTkyNDQ3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MDQuOTkwMzY2NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzYyMjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFN5bWJvbCdzIFZpc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBhbmQgSSBzZWUgaXQncyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3Mgbm90IGBzdGF0aWNgIGVpdGhlci4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IG1lYW5zIGl0IGhhcyBhIGdsb2JhbGx5IHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhpcyBzdWdnZXN0cyBpdCAqY291bGQqIGJlIHVzZWQgb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYWN0dWFsbHkgYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBtb2R1bGVzPyBJIG5lZWQgdG8ga25vdyBpZiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBhY3R1YWxseSBtYWRlIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgdXNlLiBMZXQncyBkaWcgaW50byB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgb3Igbm90LCBhbmQgaG93IHdlIGNhbiBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjowOC4yMjM5OTE4MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMzMzE4NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MTAuMzU3MzMwMzI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDM5NjUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgTm9uLVN0YXRpYywgTm9uLUV4cG9ydGVkIEZ1bmN0aW9uIEJlaGF2aW9yKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzbid0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJ1dCBpdCdzIGFsc28gKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLWV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgdHJpY2t5LCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgZW52aXJvbm1lbnQuIFRoZXkgbWlnaHQgYmUgc3ViamVjdCB0byBpbnRlcm5hbCBsaW5rYWdlIG9yLCBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHByb2Nlc3MsIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3IgbGlua2VkIG9iamVjdCBmaWxlcyBpbiB3YXlzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBhIHN0YW5kYXJkIGhlYWRlciBleGFtaW5hdGlvbi4gVGhpcyBzaXR1YXRpb24gcmFpc2VzIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jeSBjb25jZXJucyBkdXJpbmcgcmVmYWN0b3Jpbmcgb3IgZnV0dXJlIG1vZGlmaWNhdGlvbnMuXG5cblRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGltcGxpZXMgYSBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uLiBXaXRob3V0IG1vcmUgY29udGV4dCwgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyB0byB0aGlzLiBJcyB0aGUgZnVuY3Rpb24gcG90ZW50aWFsbHkgdXNlZCB0aHJvdWdoIGEgbW9yZSBjb21wbGV4IGxpbmthZ2UgbWVjaGFuaXNtLCBwZXJoYXBzIHdpdGggYSBzaGFyZWQgbGlicmFyeSBvciBETEw/IE9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgZGVzaWduIHBhdHRlcm4gaW4gcGxheT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjYWxsaW5nIGNvbnRleHQsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBsaXN0X2xydV93YWxrX25vZGVgLiBFeGFtaW5pbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIGhvdyB0aGlzIG9uZSBpcyB1c2VkLCB3aGljaCBjYW4gcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXQgd2lsbCBpbmRpY2F0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1ldGhvZHMgYmVpbmcgdXNlZCBhbmQgaG93IHRoZSBmdW5jdGlvbiBmaXRzIGludG8gYSBsYXJnZXIgc3lzdGVtIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDYwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MTQuMTYxMjk4MTk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1MjczMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmxpc3RfbHJ1X3dhbGtfbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDQ4LX1cXG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoxNi4yNTY1Nzc4NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5ODQyMDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgb2YgQ3VycmVudCBTdGF0dXMgXHUwMDI2IEluaXRpYWwgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZGF0YSBpcyAqZXhwb3J0ZWQqLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIHRvIGNoZWNrIHRoZSByZWNlbnQgZGF0YS4gSXQgc291bmRzIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYSBmb3IgYW5hbHlzaXMgYXQgdGhpcyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyMS4wNTUwMDIyNDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE0MTEzNjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjIzLjE1NjQxOTE4NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE4NDYzMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcGhyYXNlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOlxuXG4qKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBhIGNvcmUgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsOiBzcGVjaWZpY2FsbHksIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCwgb3IgbWVtY2csIHN1YnN5c3RlbS4gQW5kIEknbSBzZWVpbmcgdGhhdCB0aGUgY29kZSBpcyAqbm90KiBleHBvcnRlZCwgYnV0IGl0IGFsc28gaXMgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgbGF0ZXIgY29uc2lkZXJhdGlvbi5cblxuVGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGlzIHRvdWNoZXMsIGFuZCB0aGVyZWZvcmUgZGVwZW5kcyB1cG9uLCBhcmUgcHJldHR5IGNsZWFyOiBgTUVNQ0dgLCBgTUVNQ0dfVjFgLCBhbmQgYFNXQVBgLiBUaGF0J3Mgbm90IHVuZXhwZWN0ZWQ7IGFueSBzaWduaWZpY2FudCBtZW1jZyBjaGFuZ2UgaXMgZ29pbmcgdG8gcmlwcGxlIG91dCB0byB0aGUgc3dhcCBoYW5kbGluZy5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSByZWZhY3RvcmluZyBvZiBob3cgcHJpdmF0ZSBtZW1jZyBJRHMgYXJlIGhhbmRsZWQuIEl0J3MgbW92aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZXNlIElEcyBpbnRvIHRoZSBgc3RydWN0IG9ial9jZ3JvdXBgLiBUaGlzIGltcGxpZXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIGtlcm5lbCB0cmFja3MgYW5kIG1hbmFnZXMgdGhlc2UgbWVtY2cgSURzIHRocm91Z2hvdXQgdGhlIHN5c3RlbS4gSSdtIG5vdGluZyB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBJRCBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5UaGF0IG1lYW5zLCBvZiBjb3Vyc2UsIHRoYXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyDigJMgc3dhcCwgd29ya2luZ3NldCwgYW5kIGxpc3RfbHJ1IOKAkyBhcmUgKmFsbCogYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgSUQgbWFuYWdlbWVudCBwYXJhZGlnbS4gVGhlc2UgYXJlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGNoYW5nZXMgaGVyZSBjYW4gaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cy4gSXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyBnb2luZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuXG5cbkxldCdzIHRlcm0gdGhpcyBjaGFuZ2UgYXMgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NzMsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjI5Ljc3NDg4NTg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3MzE3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZF9vbmxpbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcFwiLFxuICAgIFwiX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBwcml2YXRlIG1lbWNnIElEcyBhcmUgbWFuYWdlZCBhbmQgcmVmZXJlbmNlZC4gSXQgbW92ZXMgdGhlIElEIHJlZmVyZW5jZSBjb3VudGluZyB0byBgc3RydWN0IG9ial9jZ3JvdXBgIGFuZCB1cGRhdGVzIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoc3dhcCwgd29ya2luZ3NldCwgbGlzdF9scnUpIHRvIHVzZSB0aGUgbmV3IElEIG1hbmFnZW1lbnQgbG9naWMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyOS44NDY2MjQ4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMzA1NTY1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjoyOS44NDcxNDU5MTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEwMzAwMzE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gSXQgY2hhbmdlcyBob3cgbWVtY2dzIGFyZSBsb29rZWQgdXAgZnJvbSB0aGVzZSBJRHMgYW5kIGhvdyB0aGVpciByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuXFxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTk1ZjU1ZDUyN2VkNDRjZjIyZDY1OTM5NzJhYzg2MjhlODJjZTI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6MzQ6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA4MTcwYmI4MDY2YTIyLi5mZWY4YTFjNDE5MWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkxLDYgKzE5MSw3IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBcdFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdH07XG4gXHRib29sIGlzX3Jvb3Q7XG4rXHRyZWZjb3VudF90IGlkX3JlZjtcbiB9O1xuIFxuIC8qXG5AQCAtMjAyLDggKzIwMyw4IEBAIHN0cnVjdCBvYmpfY2dyb3VwIHtcbiBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7XG4gXG4tXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQgaWQ7XG4rXHQvKiBUaGUgb2JqY2cgaG9sZGluZyBwcml2YXRlIG1lbWNnIElELiAqL1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKmlkX29iamNnO1xuIFxuIFx0LyogQWNjb3VudGVkIHJlc291cmNlcyAqL1xuIFx0c3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7XHRcdC8qIEJvdGggdjEgXHUwMDI2IHYyICovXG5AQCAtMjcwLDYgKzI3MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjZW5kaWZcbiBcdGludCBrbWVtY2dfaWQ7XG4gXG4rXHQvKiBQcml2YXRlIG1lbWNnIElELiBVc2VkIHRvIElEIG9iamVjdHMgdGhhdCBvdXRsaXZlIHRoZSBjZ3JvdXAgKi9cbitcdGludCBpZDtcbitcbiBcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqdm1zdGF0c19wZXJjcHU7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5AQCAtODIwLDkgKzgyNCwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdHJldHVybiBtZW1jZy1cdTAwM2VpZDtcbiB9XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLmJjOTU2MjY3ZjY4MzUgMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuIFx0XHR4YV9mb3JfZWFjaChcdTAwMjZscnUtXHUwMDNleGEsIGluZGV4LCBtbHJ1KSB7XG4gXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaW5kZXgpO1xuLVx0XHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4rXHRcdFx0aWYgKCFtZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG4gXHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDJkYzU5OTQ4NGQwMDYuLmU1MTYxZTA2MWJkMTEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKi9cbiB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gXG5AQCAtNjM4LDE5ICs2MzgsMjAgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRpZiAoIW9iamNnKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIFx0LypcbiBcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24ndFxuIFx0ICogaGF2ZSBhbiBJRCBhbGxvY2F0ZWQgdG8gaXQgYW55bW9yZSwgY2hhcmdlIHRoZSBjbG9zZXN0IG9ubGluZVxuLVx0ICogYW5jZXN0b3IgZm9yIHRoZSBzd2FwIGluc3RlYWQgYW5kIHRyYW5zZmVyIHRoZSBtZW1vcnkrc3dhcCBjaGFyZ2UuXG4rXHQgKiBhbmNlc3RvciBmb3IgdGhlIHN3YXAgaW5zdGVhZC5cbiBcdCAqL1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcdG5yX2VudHJpZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRzd2FwX21lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX2VudHJpZXMpO1xuLVx0bW9kX21lbWNnX3N0YXRlKHN3YXBfbWVtY2csIE1FTUNHX1NXQVAsIG5yX2VudHJpZXMpO1xuK1x0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcbitcbitcdC8qIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQsIHNvIHdlIHNob3VsZCBnZXQgZXhhY3QgbWVtY2cgaXRzZWxmICovXG4rXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0KG1lbWNnLCBucl9lbnRyaWVzKTtcbiBcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXG4tXHRcdFx0ICBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3dhcF9tZW1jZykpO1xuK1x0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4gXG4gXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbiBcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuQEAgLTY1OCwxMiArNjU5LDYgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4gXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG4gXHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIG5yX2VudHJpZXMpO1xuIFxuLVx0aWYgKG1lbWNnICE9IHN3YXBfbWVtY2cpIHtcbi1cdFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3Qoc3dhcF9tZW1jZykpXG4tXHRcdFx0cGFnZV9jb3VudGVyX2NoYXJnZShcdTAwMjZzd2FwX21lbWNnLVx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcbi1cdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9lbnRyaWVzKTtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2sgd2l0aCBJUlEgb2ZmLiBJdCBpc1xuIFx0ICogaW1wb3J0YW50IGhlcmUgdG8gaGF2ZSB0aGUgaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIGl0IGlzIHRoZVxuQEAgLTY3NSw3ICs2NzAsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdHByZWVtcHRfZW5hYmxlX25lc3RlZCgpO1xuIFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAwZjcwM2YyMzljODBmLi45Yzc0NDAwYWE3ZGRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0yMSw4ICsyMSw3IEBAIHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcbiBcbiBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIFxuLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbit2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbik7XG4gXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmU3NTU1ZWNhNzcwMTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM2OTcsNyArMzY5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWNnX29ubGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNm1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gXG4tXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSBtZW1jZy1cdTAwM2VpZC5pZDtcbitcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IG1lbWNnLVx1MDAzZWlkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTM5NTYsMzYgKzM5NTYsNDIgQEAgc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MxKG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMpO1xuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbi1cdGlmIChtZW1jZy1cdTAwM2VpZC5pZCBcdTAwM2UgMCkge1xuLVx0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZC5pZCk7XG4tXHRcdG1lbWNnLVx1MDAzZWlkLmlkID0gMDtcbitcdGlmIChtZW1jZy1cdTAwM2VpZCBcdTAwM2UgMCkge1xuK1x0XHR4YV9lcmFzZShcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBtZW1jZy1cdTAwM2VpZCk7XG4rXHRcdG1lbWNnLVx1MDAzZWlkID0gMDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbilcbisvKipcbisgKiBAb2JqY2c6IHRoZSBvYmpjZyByZXR1cm5lZCBieSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfb2JqY2dcbisgKiBAaWQ6IHRoZSBjb3JyZXNwb25kaW5nIG1lbWNnIHByaXZhdGUgaWRcbisgKi9cbitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuK1x0XHR1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0aWYgKHJlZmNvdW50X3N1Yl9hbmRfdGVzdChuLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5yZWYpKSB7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnX2ZyZWU7XG4gXG4tXHRcdC8qIE1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRcdGNzc19wdXQoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKTtcbitcdGlmIChyZWZjb3VudF9zdWJfYW5kX3Rlc3QobiwgXHUwMDI2b2JqY2ctXHUwMDNlaWRfcmVmKSkge1xuK1x0XHRvYmpjZ19mcmVlID0geGFfZXJhc2UoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0XHRWTV9XQVJOX09OKG9iamNnX2ZyZWUgIT0gb2JqY2cpO1xuK1xuK1x0XHQvKiBNZW1jZyBJRCBwaW5zIHRoZSBvYmpjZyAqL1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG4pXG4ge1xuLVx0d2hpbGUgKCFyZWZjb3VudF9hZGRfbm90X3plcm8obiwgXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgcm9vdCBjZ3JvdXAgY2Fubm90IGJlIGRlc3Ryb3llZCwgc28gaXQncyByZWZjb3VudCBtdXN0XG4tXHRcdCAqIGFsd2F5cyBiZSBcdTAwM2U9IDEuXG4tXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpKSB7XG4tXHRcdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuLVx0fVxuLVx0cmV0dXJuIG1lbWNnO1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLVx1MDAzZWlkX29iamNnLCBtZW1jZy1cdTAwM2VpZCwgbik7XG4rfVxuK1xuK3ZvaWQgbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBuKVxuK3tcbitcdGJvb2wgc3VjY2VzcztcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG1lbWNnLVx1MDAzZWlkX29iamNnO1xuK1xuK1x0c3VjY2VzcyA9IHJlZmNvdW50X2FkZF9ub3RfemVybyhuLCBcdTAwMjZvYmpjZy1cdTAwM2VpZF9yZWYpO1xuK1x0Vk1fV0FSTl9PTighc3VjY2Vzcyk7XG4gfVxuIFxuIC8qKlxuQEAgLTM5OTMsMTEgKzM5OTksNTUgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5cbiAgKiBAaWQ6IHRoZSBtZW1jZyBpZCB0byBsb29rIHVwXG4gICpcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9yZWFkX2xvY2soKS5cbisgKlxuKyAqIEByZXR1cm46IHRoZSBtZW1jZywgb3IgTlVMTCBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSByZXBhcmVudGVkLlxuICAqL1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZClcbiB7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbi1cdHJldHVybiB4YV9sb2FkKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIGlkKTtcbitcbitcdG9iamNnID0geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRpZiAoIW9iamNnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXHRpZiAobWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSAhPSBpZClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWVtY2c7XG4rfVxuK1xuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkIC0gbG9vayB1cCBhbiBvbmxpbmUgbWVtY2cgZnJvbSBhIG1lbWNnIGlkXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZ2V0IGEgcmVmZXJlbmNlLlxuKyAqIEBpZDogdGhlIG1lbWNnIGlkIHRvIGxvb2sgdXBcbisgKi9cbitzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKHVuc2lnbmVkIHNob3J0IGlkKVxuK3tcbitcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbitcbitcdG9iamNnID0geGFfbG9hZChcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBpZCk7XG4rXHRpZiAoIW9iamNnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3Rha2VfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbilcbit7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRvYmpjZyA9IHhhX2xvYWQoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgaWQpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuK1xuK1x0X19tZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG9iamNnLCBpZCwgbik7XG4rXHRyZXR1cm4gbWVtY2c7XG4gfVxuIFxuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9mcm9tX2lkKHU2NCBpZClcbkBAIC00MDk4LDcgKzQxNDgsNyBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGlmICghbWVtY2cpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbitcdGVycm9yID0geGFfYWxsb2MoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXHUwMDI2bWVtY2ctXHUwMDNlaWQsIE5VTEwsXG4gXHRcdFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC00MjQzLDkgKzQyOTMsMTAgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdFx0XHRcdCAgIEZMVVNIX1RJTUUpO1xuIFx0bHJ1X2dlbl9vbmxpbmVfbWVtY2cobWVtY2cpO1xuIFxuLVx0LyogT25saW5lIHN0YXRlIHBpbnMgbWVtY2cgSUQsIG1lbWNnIElEIHBpbnMgQ1NTICovXG4tXHRyZWZjb3VudF9zZXQoXHUwMDI2bWVtY2ctXHUwMDNlaWQucmVmLCAxKTtcbi1cdGNzc19nZXQoY3NzKTtcbitcdC8qIENTUyBwaW5zIG1lbWNnIElELCBtZW1jZyBJRCBwaW5zIG9iaiBjZ3JvdXAgKi9cbitcdG1lbWNnLVx1MDAzZWlkX29iamNnID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bMF0tXHUwMDNlb2JqY2c7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bWVtY2ctXHUwMDNlaWRfb2JqY2ctXHUwMDNlaWRfcmVmLCAxKTtcbitcdG9ial9jZ3JvdXBfZ2V0KG1lbWNnLVx1MDAzZWlkX29iamNnKTtcbiBcbiBcdC8qXG4gXHQgKiBFbnN1cmUgbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoKSB3b3JrcyBvbmNlIHdlJ3JlIGZ1bGx5IG9ubGluZS5cbkBAIC00MjU3LDcgKzQzMDgsNyBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0ICogcHVibGlzaCBpdCBoZXJlIGF0IHRoZSBlbmQgb2Ygb25saW5pbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiBcdCAqIHJlZ3VsYXIgSUQgZGVzdHJ1Y3Rpb24gZHVyaW5nIG9mZmxpbmluZy5cbiBcdCAqL1xuLVx0eGFfc3RvcmUoXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgbWVtY2ctXHUwMDNlaWQuaWQsIG1lbWNnLCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlKFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIG1lbWNnLVx1MDAzZWlkLCBvYmpjZywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBmcmVlX29iamNnOlxuQEAgLTQzMDgsOCArNDM1OSw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdGxydV9nZW5fb2ZmbGluZV9tZW1jZyhtZW1jZyk7XG4gXG4gXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuLVxuLVx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNDMxOCw2ICs0MzY3LDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xuIFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbitcbitcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuK1x0bWVtY2ctXHUwMDNlaWRfb2JqY2cgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5AQCAtNTIxOSwxMSArNTI3MSw5IEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQoaWQpO1xuLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbitcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWRfb25saW5lKGlkKTtcbitcdGlmICghbWVtY2cpXG4gXHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG4gXG5AQCAtNTYyMSwyNCArNTY3MSwyNyBAQCBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdG1lbWNnID0gbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUobWVtY2csIG5yX3BhZ2VzKTtcbi1cdC8qIG1lbWNnIGlzIHBpbmVkIGJ5IG1lbWNnIElELiAqL1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBucl9wYWdlcywgXHUwMDI2Y291bnRlcikpIHtcbiBcdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4gXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbi1cdFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgbnJfcGFnZXMpO1xuK1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XG4gXG4rXHQvKiB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LCBzbyB3ZSBzaG91bGQgZ2V0IGV4YWN0IG1lbWNnIGl0c2VsZiAqL1xuK1x0bWVtX2Nncm91cF9wcml2YXRlX2lkX2dldChtZW1jZywgbnJfcGFnZXMpO1xuK1xuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdF9fc3dhcF9jZ3JvdXBfc2V0KGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZm9saW8tXHUwMDNlc3dhcCksIG5yX3BhZ2VzLFxuIFx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKG1lbWNnKSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NjUxLDE5ICs1NzA0LDE5IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbi1cdGlmIChtZW1jZykge1xuLVx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbi1cdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuLVx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbi1cdFx0fVxuLVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4tXHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbitcdG1lbWNnID0gbWVtX2Nncm91cF90YWtlX2Zyb21fcHJpdmF0ZV9pZChpZCwgbnJfcGFnZXMpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XG4rXHRcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4rXHRcdGVsc2VcbitcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gfVxuIFxuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi5iNmUyMjUzNmE1MjQwIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC0yODMsNiArMjgzLDEwIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG4gXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiBcbitcdC8qIHJlcGFyZW50ZWQgbWVtY2cgbG9zZXMgaXRzIG1heF9zZXEgKi9cbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbiBcdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbiBcbkBAIC00NzAsNyArNDc0LDcgQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuIFx0ICogY29uZmlndXJhdGlvbnMgaW5zdGVhZC5cbiBcdCAqL1xuIFx0ZXZpY3Rpb25fbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ2lkKTtcbi1cdGlmICghbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuK1x0aWYgKCFldmljdGlvbl9tZW1jZyB8fCAhbWVtX2Nncm91cF90cnlnZXQoZXZpY3Rpb25fbWVtY2cpKVxuIFx0XHRldmljdGlvbl9tZW1jZyA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjI5Ljg0NzE0NjYxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE5NjE4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFByaXZhdGUgSUQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgZ3V0cyBvZiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBob3cgcHJpdmF0ZSBJRHMgYXJlIGhhbmRsZWQgYW5kIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCB1c2luZyB0aG9zZSBJRHMuIEkgc2VlIGl0IGludHJvZHVjZXMgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLCBhbmQgaXQncyB0d2Vha2luZyBhIGJ1bmNoIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lYCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkYC4gTW9zdGx5LCBpdCBzZWVtcyB0byBiZSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgbWVtY2dzIGFuZCB0aGVpciBwcml2YXRlIElEcywgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIHN3YXAgYW5kIHdvcmtpbmdzZXQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgbmFpbCBkb3duIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGlzc3Vlcy4gVGhlIGJpZyB0aGluZyBJIGFsd2F5cyBjaGVjayBpcyB3aGV0aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciBpZiBpdCdzIHBvdGVudGlhbGx5IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIGJ1dCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCdzICpwdXJlbHkqIGludGVybmFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyDigJMgYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBvYmpfY2dyb3VwYCwgYnV0IG5vdGhpbmcgbmV3IGlzIGJlaW5nICpjb3BpZWQqIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlbid0IGFueSBuZXcgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhc3NlZCBiYWNrIGVpdGhlci4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCwgcmVmY291bnRzLCBwb2ludGVycywgYW5kIElEcy5cblxuVGhlIHR5cGVzIG9mIGJ1Z3MgdGhpcyBpcyBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYXJlIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MuIEtBU0FOIGlzIHRoZSB0b29sIGZvciBjYXRjaGluZyB0aG9zZSBraW5kcyBvZiBpc3N1ZXMsIHdoaWNoIGlzIGdyZWF0LiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIEtNU0FOIHdvdWxkIGNhdGNoP1xuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoZSBwYXRjaCBkb2VzIGNoYW5nZSBob3cgdGhlIElEIGlzIHN0b3JlZC4gYG1lbWNnLVx1MDAzZWlkYCBpcyBub3cgYW4gYGludGAsIHJlcGxhY2luZyB0aGUgb2xkIGBzdHJ1Y3QgbWVtX2Nncm91cF9wcml2YXRlX2lkIGlkYC4gQW5kIGBtZW1jZy1cdTAwM2VpZF9vYmpjZ2AgaXMgYSBwb2ludGVyLiBJdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBpbml0aWFsaXplZCBpbiBgbWVtX2Nncm91cF9hbGxvY2Agb3IgYG1lbV9jZ3JvdXBfY3NzX29ubGluZWAuICBBbmQsIGlmIGl0J3MgdXNpbmcgc3RhbmRhcmQgbWVtY2cgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHRoZW4gd2Ugc2hvdWxkIGJlIGZpbmUuIEknbGwgbmVlZCB0byBjaGVjayBgbWVtX2Nncm91cF9hbGxvY2AgY2FyZWZ1bGx5LCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCdzIGxpa2VseSB1c2luZyBga3phbGxvY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZSB0aGF0IEtNU0FOIHdvdWxkIHVuaXF1ZWx5IGNhdGNoLiBUaGUgS0FTQU4gY2hlY2tzIGFyZSBnb2luZyB0byBiZSBwZXJmZWN0IGZvciB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHRoYXQgY291bGQgc3RlbSBmcm9tIHNjcmV3ZWQtdXAgcmVmY291bnRpbmcuIFN0aWxsLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSSBzaG91bGQgbmV2ZXIgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6MzY6MzguMTY2NzY5MjA2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1NzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDEzMT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxMzctXFxubW0vbWVtY29udHJvbC5jOjQxMzg6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQxMzkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDk9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxNS1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjQyMTY6XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTQyMTctXFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjozOC4yMTE2MzI3MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MDE4MTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBtZW1fY2dyb3VwX2FsbG9jYCwgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2FsbG9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCByaWdodCBpbnRvIHRoZSBndXRzIG9mIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3MuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGhlcmU/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IGNncm91cCBpdHNlbGYsIHRoZSBwZXItbm9kZSBhY2NvdW50aW5nIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYWxsb2NhdGlvbiBjaGVjayBhbmQgYWNjb3VudGluZyB1cGRhdGUsIG9yIGlzIHRoZXJlIGEgbW9yZSBjb21wbGV4IGJhbGFuY2luZyBhY3QgZ29pbmcgb24/IEknbSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLCBOVU1BIGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiByZXNvdXJjZSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHJlY2xhaW0sIHN3YXAsIGFuZCBPT00gaGFuZGxpbmc/IFdoYXQncyB0aGUgbG9jayBoaWVyYXJjaHkgbGlrZSwgYW5kIGhvdyBpcyBjb25jdXJyZW5jeSBtYW5hZ2VkPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBldmVuIGRlYWRsb2NrIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgdGhlIGNhbGxlciBleHBlY3RzIGluIHJldHVybi4gSSBleHBlY3QgdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24gdG8gYmUgaW50ZXJlc3RpbmcsIHNvIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpZGVudGlmeSBhbnkgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmNpZXMuIEkgd29uZGVyIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBzaXR1YXRpb25zIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMgZHVlIHRvIG1lbW9yeSBsaW1pdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjo0Mi4yODE4MTc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMzgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxMzg6XFx0c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuNDEzOTpcXHR7XFxuNDE0MDpcXHRcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbjQxNDE6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG40MTQyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40MTQzOlxcdFxcdGludCBub2RlLCBjcHU7XFxuNDE0NDpcXHRcXHRpbnQgX19tYXliZV91bnVzZWQgaTtcXG40MTQ1OlxcdFxcdGxvbmcgZXJyb3I7XFxuNDE0NjpcXHRcXG40MTQ3OlxcdFxcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG40MTQ4OlxcdFxcdGlmICghbWVtY2cpXFxuNDE0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG40MTUwOlxcdFxcbjQxNTE6XFx0XFx0ZXJyb3IgPSB4YV9hbGxvYyhcXHUwMDI2bWVtX2Nncm91cF9wcml2YXRlX2lkcywgXFx1MDAyNm1lbWNnLVxcdTAwM2VpZCwgTlVMTCxcXG40MTUyOlxcdFxcdFxcdFxcdCBYQV9MSU1JVCgxLCBNRU1fQ0dST1VQX0lEX01BWCksIEdGUF9LRVJORUwpO1xcbjQxNTM6XFx0XFx0aWYgKGVycm9yKVxcbjQxNTQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNTU6XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjQxNTY6XFx0XFxuNDE1NzpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQxNTg6XFx0XFx0aWYgKCFtZW1jZy1cXHUwMDNldm1zdGF0cylcXG40MTU5OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTYwOlxcdFxcbjQxNjE6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXFxuNDE2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MTYzOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1KVxcbjQxNjQ6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNjU6XFx0XFxuNDE2NjpcXHRcXHRpZiAoIW1lbWNnMV9hbGxvY19ldmVudHMobWVtY2cpKVxcbjQxNjc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQxNjg6XFx0XFxuNDE2OTpcXHRcXHRwc3RhdGNfcGNwdSA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xcbjQxNzA6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjQxNzE6XFx0XFx0XFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDE3MjpcXHRcXHRcXHRzdGF0Yy1cXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcXG40MTczOlxcdFxcdFxcdHN0YXRjLVxcdTAwM2V2bXN0YXRzID0gbWVtY2ctXFx1MDAzZXZtc3RhdHM7XFxuNDE3NDpcXHRcXHR9XFxuNDE3NTpcXHRcXG40MTc2OlxcdFxcdGZvcl9lYWNoX25vZGUobm9kZSlcXG40MTc3OlxcdFxcdFxcdGlmICghYWxsb2NfbWVtX2Nncm91cF9wZXJfbm9kZV9pbmZvKG1lbWNnLCBub2RlKSlcXG40MTc4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTc5OlxcdFxcbjQxODA6XFx0XFx0aWYgKG1lbWNnX3diX2RvbWFpbl9pbml0KG1lbWNnLCBHRlBfS0VSTkVMKSlcXG40MTgxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTgyOlxcdFxcbjQxODM6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrLCBoaWdoX3dvcmtfZnVuYyk7XFxuNDE4NDpcXHRcXHR2bXByZXNzdXJlX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2V2bXByZXNzdXJlKTtcXG40MTg1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X3BlYWtzKTtcXG40MTg2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcF9wZWFrcyk7XFxuNDE4NzpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTozNjo0Mi4yODIwNjA4MzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5NTA5NDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2gsIGRlYWxpbmcgd2l0aCBgbWVtY2dgIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBpc24ndCBnb2luZyB0byByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIG1hbmFnZSBhbmQgdHJhY2sgYG1lbV9jZ3JvdXBgIHByaXZhdGUgSURzLCBpbnRyb2R1Y2luZyBgaWRfb2JqY2dgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBpZF9yZWZgIHRvIGBzdHJ1Y3Qgb2JqX2Nncm91cGAuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgYm9va2tlZXBpbmcsIG1haW5seSBjZW50ZXJlZCBhcm91bmQgaG93IG1lbWNncyBhcmUgbG9va2VkIHVwIHVzaW5nIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cblxuQ3J1Y2lhbGx5LCB0aGUgYG1lbV9jZ3JvdXBgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCB3aGljaCBtZWFucyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gVGhhdCBhbG9uZSBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZS4gVGhlIHByaW1hcnkgcmlzayBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnM6IHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MgbGVhZGluZyB0byBsZWFrcyBvciBwcmVtYXR1cmUgZnJlZS1pbmcuXG5cbkNvbnNpZGVyaW5nIHRoZSB0eXBlcyBvZiBjaGFuZ2VzIGFuZCB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGxpa2VseSBsaWUsIEtBU0FOIHNlZW1zIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgZXJyb3JzLiBXZSdyZSB0YWxraW5nIGFib3V0IGNsYXNzaWMga2VybmVsIG1lbW9yeSBidWdzLCBub3QgdGhlIHR5cGUgb2YgZGF0YSBsZWFrYWdlIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdXNlci1zcGFjZSBkYXRhIGNvcHlpbmcgb3IgbWFuaXB1bGF0aW9uIHRoYXQgd291bGQgZXhwb3NlIG5ldywgcG9zc2libHkgdW5pbml0aWFsaXplZCwgbWVtb3J5IGFyZWFzIHRvIHVzZXIgcHJvY2Vzc2VzLiBHaXZlbiB0aGF0IEtBU0FOJ3MgY292ZXJhZ2Ugb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGlzIGV4Y2VsbGVudCBhbmQgdGhhdCB0aGUgbmV3IGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgSSBkb24ndCBzZWUgYW55IG5lZWQgdG8gcHVzaCBmb3IgYSBLTVNBTiBzZXNzaW9uLiBUaGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgYE5lZWRzS01TQU5gIGxhYmVsIHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTEyLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjM2OjUwLjg3NzE1ODUxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBtZW1fY2dyb3VwYCBwcml2YXRlIElEcywgaW50cm9kdWNpbmcgYGlkX29iamNnYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgaWRfcmVmYCB0byBgc3RydWN0IG9ial9jZ3JvdXBgLiBJdCBjaGFuZ2VzIGhvdyBtZW1jZ3MgYXJlIGxvb2tlZCB1cCBmcm9tIHRoZXNlIElEcyBhbmQgaG93IHRoZWlyIHJlZmVyZW5jZXMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgc3dhcCBhbmQgd29ya2luZ3NldCBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBvciBidWZmZXJzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYG1lbV9jZ3JvdXBgIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGFzIHNlZW4gaW4gYG1lbV9jZ3JvdXBfYWxsb2NgKSwgZW5zdXJpbmcgaXQgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG5cXG5BbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MgZHVlIHRvIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgbWVtX2Nncm91cGAgcHJpdmF0ZSBJRHMsIGludHJvZHVjaW5nIGBpZF9vYmpjZ2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYGlkX3JlZmAgdG8gYHN0cnVjdCBvYmpfY2dyb3VwYC4gSXQgY2hhbmdlcyBob3cgbWVtY2dzIGFyZSBsb29rZWQgdXAgZnJvbSB0aGVzZSBJRHMgYW5kIGhvdyB0aGVpciByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHN3YXAgYW5kIHdvcmtpbmdzZXQgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChhcyBzZWVuIGluIGBtZW1fY2dyb3VwX2FsbG9jYCksIGVuc3VyaW5nIGl0IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuXFxuQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzIGR1ZSB0byBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd4shr[1] Phase: Succeeded StartedAt: 2026-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 09:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 09:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2] Phase: Succeeded StartedAt: 2026-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 09:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:01 +0000 UTC FinishedAt: 2026-08-13 09:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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-workflowd4shr/series-workflowd4shr-convert-artifact-1420140621/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:11 +0000 UTC FinishedAt: 2026-08-13 09:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:11 +0000 UTC FinishedAt: 2026-08-13 09:53:53 +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:*dfc8e782-2637-4142-b598-9c5cc45fef2e,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-workflowd4shr/series-workflowd4shr-convert-artifact-1420140621/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": "33ac2b6e-7f9f-4a25-b53d-df5d403ec8f5", "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-workflowd4shr/series-workflowd4shr-build-action-3600408771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:37:11 +0000 UTC FinishedAt: 2026-08-13 09:53:43 +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:*dfc8e782-2637-4142-b598-9c5cc45fef2e,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-workflowd4shr/series-workflowd4shr-convert-artifact-1420140621/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": "33ac2b6e-7f9f-4a25-b53d-df5d403ec8f5", "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-workflowd4shr/series-workflowd4shr-build-action-3600408771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:53:53 +0000 UTC FinishedAt: 2026-08-13 09:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:53:53 +0000 UTC FinishedAt: 2026-08-13 09:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:53:53 +0000 UTC FinishedAt: 2026-08-13 09:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:53:53 +0000 UTC FinishedAt: 2026-08-13 09:53:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-workflowd4shr/series-workflowd4shr-convert-artifact-2203073960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:54:03 +0000 UTC FinishedAt: 2026-08-13 09:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:54:03 +0000 UTC FinishedAt: 2026-08-13 09:55:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33ac2b6e-7f9f-4a25-b53d-df5d403ec8f5,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-workflowd4shr/series-workflowd4shr-build-action-3600408771/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-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:56:03 +0000 UTC FinishedAt: 2026-08-13 09:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:56:03 +0000 UTC FinishedAt: 2026-08-13 09:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:56:03 +0000 UTC FinishedAt: 2026-08-13 10:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:56:03 +0000 UTC FinishedAt: 2026-08-13 10:16:24 +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:*dfc8e782-2637-4142-b598-9c5cc45fef2e,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-workflowd4shr/series-workflowd4shr-convert-artifact-2203073960/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": "35dac6f6-b44a-4ea8-9adf-2cdda5584e45", "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-workflowd4shr/series-workflowd4shr-build-action-848902996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 09:56:03 +0000 UTC FinishedAt: 2026-08-13 10:16:14 +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:*dfc8e782-2637-4142-b598-9c5cc45fef2e,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-workflowd4shr/series-workflowd4shr-convert-artifact-2203073960/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": "35dac6f6-b44a-4ea8-9adf-2cdda5584e45", "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-workflowd4shr/series-workflowd4shr-build-action-848902996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:16:24 +0000 UTC FinishedAt: 2026-08-13 10:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:16:24 +0000 UTC FinishedAt: 2026-08-13 10:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:16:24 +0000 UTC FinishedAt: 2026-08-13 10:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:16:24 +0000 UTC FinishedAt: 2026-08-13 10:18:33 +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:*35dac6f6-b44a-4ea8-9adf-2cdda5584e45,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-workflowd4shr/series-workflowd4shr-build-action-848902996/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-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"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:*33ac2b6e-7f9f-4a25-b53d-df5d403ec8f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35dac6f6-b44a-4ea8-9adf-2cdda5584e45,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-workflowd4shr/series-workflowd4shr-build-action-3600408771/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-workflowd4shr/series-workflowd4shr-build-action-848902996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 10:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 10:18:48 +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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"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-workflowd4shr/series-workflowd4shr-convert-artifact-2485598945/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 10:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 10:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:42 +0000 UTC FinishedAt: 2026-08-13 10:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:52 +0000 UTC FinishedAt: 2026-08-13 13:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4shr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"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":["mem_cgroup_from_private_id","mem_cgroup_from_private_id_online","mem_cgroup_private_id_get","mem_cgroup_swapin_charge_folio","__mem_cgroup_try_charge_swap","__mem_cgroup_uncharge_swap","__memcg1_swapout","list_lru_walk_node","workingset_test_recent"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"288058d8db5d35623228d84f48d9bea3707d5c85","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","SWAP"],"series_id":"3a8a2a5f-8b6d-4abf-954e-a1a18ee62748","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-08-13 10:18:52 +0000 UTC FinishedAt: 2026-08-13 13:23:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33ac2b6e-7f9f-4a25-b53d-df5d403ec8f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35dac6f6-b44a-4ea8-9adf-2cdda5584e45,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-workflowd4shr/series-workflowd4shr-build-action-3600408771/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-workflowd4shr/series-workflowd4shr-build-action-848902996/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-workflowd4shr/series-workflowd4shr-convert-artifact-2485598945/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,}