Name: series-workflowrxv52 Phase: Succeeded StartedAt: 2026-08-03 17:32:01 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[0] Phase: Succeeded StartedAt: 2026-08-03 17:32:01 +0000 UTC FinishedAt: 2026-08-03 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 17:32:01 +0000 UTC FinishedAt: 2026-08-03 17:36:16 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "MEMCG" ], "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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "MEMCG" ], "series_id": "b5959410-1a55-4ff3-b7b1-e4dc36e2f46b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmQwNGI1MjhmNjNjNjUzMzg5NTJmOWFjNGIyMWI1NDlhNTdjMjcyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG5pbmRleCA2Yzk2MmQ4NjZlODY0Li43ZjZmYzk1OTk2OTNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQFxuICAqL1xuIFxuIC8qIFBvbGljaWVzICovXG4tZW51bSB7XG4mIzQzO2VudW0gbWVtcG9saWN5X21vZGUge1xuIFx0TVBPTF9ERUZBVUxULFxuIFx0TVBPTF9QUkVGRVJSRUQsXG4gXHRNUE9MX0JJTkQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0xMzE3LDQzICYjNDM7MTMxNywzMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmFpbGFibGVfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxuIFx0cmV0dXJuIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBsb25nIGdibF9jaGcpXG4te1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuLVx0Z2ZwX3QgZ2ZwX21hc2s7XG4tXHRub2RlbWFza190ICpub2RlbWFzaztcbiYjNDM7c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCB7XG4gXHRpbnQgbmlkO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdGVudW0gbWVtcG9saWN5X21vZGUgbW9kZTtcbiYjNDM7fTtcbiBcbi1cdC8qXG4tXHQgKiBnYmxfY2hnPT0xIG1lYW5zIHRoZSBhbGxvY2F0aW9uIHJlcXVpcmVzIGEgbmV3IHBhZ2UgdGhhdCB3YXMgbm90XG4tXHQgKiByZXNlcnZlZCBiZWZvcmUuICBNYWtpbmcgc3VyZSB0aGVyZSYjMzk7cyBhdCBsZWFzdCBvbmUgZnJlZSBwYWdlLlxuLVx0ICovXG4tXHRpZiAoZ2JsX2NoZyBcdTAwMjZcdTAwMjYgIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkcmVzcywgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGkpXG4mIzQzO3tcbiYjNDM7XHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVx1MDAzZW5vZGVtYXNrO1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIFxuLVx0aWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHtcbiYjNDM7XHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0bmlkLCBub2RlbWFzayk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtcG9saS1cdTAwM2VuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBub2RlbWFzayk7XG4gXG4gXHRcdC8qIEZhbGxiYWNrIHRvIGFsbCBub2RlcyBpZiBwYWdlPT1OVUxMICovXG4gXHRcdG5vZGVtYXNrID0gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICghZm9saW8pXG4mIzQzO1x0aWYgKCFmb2xpbykge1xuIFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdG5pZCwgbm9kZW1hc2spO1xuLVxuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG1wb2xpLVx1MDAzZW5pZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG5vZGVtYXNrKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZm9saW87XG4tXG4tZXJyOlxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuQEAgLTIxNDgsMzIgJiM0MzsyMTM4LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuLS8qXG4tICogVXNlIHRoZSBWTUEmIzM5O3MgbXBvbGljeSB0byBhbGxvY2F0ZSBhIGh1Z2UgcGFnZSBmcm9tIHRoZSBidWRkeS5cbi0gKi9cbiBzdGF0aWNcbi1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKHN0cnVjdCBoc3RhdGUgKmgsXG4tXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3N0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuJiM0MztcdFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuLVx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbi1cdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0aW50IG5pZDtcbi1cdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnBfbWFzaywgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuLVx0aWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHtcbiYjNDM7XHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGdmcF90IGdmcCA9IGdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfTk9GQUlMKTtcbiBcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdGZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGktXHUwMDNlbmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbm9kZW1hc2spO1xuIFxuIFx0XHQvKiBGYWxsYmFjayB0byBhbGwgbm9kZXMgaWYgcGFnZT09TlVMTCAqL1xuIFx0XHRub2RlbWFzayA9IE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvKVxuLVx0XHRmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG4tXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuJiM0MztcdGlmICghZm9saW8pIHtcbiYjNDM7XHRcdGZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBtcG9saS1cdTAwM2VuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBub2RlbWFzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG5AQCAtMjg2Myw3ICYjNDM7Mjg0OSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpbnQgcmV0LCBpZHg7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuLVx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfUkVUUllfTUFZRkFJTDtcbiYjNDM7XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuJiM0MztcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdGludCBuaWQ7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG4gXG5AQCAtMjkyMiwyNCAmIzQzOzI5MTIsNDYgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uO1xuIFxuJiM0MztcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuJiM0MztcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuJiM0MztcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xuJiM0MztcdFx0Lm5pZCA9IG5pZCxcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO1x0XHQubW9kZSA9IG1wb2wgPyBtcG9sLVx1MDAzZW1vZGUgOiBNUE9MX0RFRkFVTFQsXG4mIzQzOyNlbHNlXG4mIzQzO1x0XHQubW9kZSA9IE1QT0xfREVGQVVMVCxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiYjNDM7XG4gXHQvKlxuLVx0ICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW5cbi1cdCAqIGZyb20gdGhlIGdsb2JhbCBmcmVlIHBvb2wgKGdsb2JhbCBjaGFuZ2UpLiAgZ2JsX2NoZyA9PSAwIGluZGljYXRlc1xuLVx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIFRyeSB0byBkZXF1ZXVlIGZyb20gdGhlIHBvb2wgaWYgZWl0aGVyOlxuJiM0MztcdCAqIDEpIEEgcmVzZXJ2YXRpb24gZXhpc3RzIChnYmxfY2hnID09IDApLlxuJiM0MztcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXG4mIzQzO1x0ICogICAgcGFnZXMgaW4gdGhlIHBvb2w7IHRoaXMgcHJlZmVycyB1c2luZyBwcmUtYWxsb2NhdGVkIHBvb2xcbiYjNDM7XHQgKiAgICBwYWdlcyBvdmVyIGFsbG9jYXRpbmcgZnJlc2ggb25lcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IuXG4gXHQgKi9cbi1cdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShoLCB2bWEsIGFkZHIsIGdibF9jaGcpO1xuJiM0MztcdGZvbGlvID0gTlVMTDtcbiYjNDM7XHRpZiAoIWdibF9jaGcgfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4mIzQzO1x0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIFx1MDAyNm1wb2xpKTtcbiYjNDM7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4tXHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcdTAwMjZtcG9saSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKSB7XG4mIzQzO1x0XHRcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcdFx0fVxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbiBcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbiBcdFx0LyogRmFsbCB0aHJvdWdoICovXG4gXHR9XG4gXG4mIzQzO1x0bXBvbF9jb25kX3B1dChtcG9sKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogRWl0aGVyIGRlcXVldWVkIG9yIGJ1ZGR5LWFsbG9jYXRlZCBmb2xpbyBuZWVkcyB0byBhZGQgc3BlY2lhbFxuIFx0ICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi5cbkBAIC0yOTg3LDcgJiM0MzsyOTk5LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xuJiM0MztcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdFxuIFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZDA0YjUyOGY2M2M2NTMzODk1MmY5YWM0YjIxYjU0OWE1N2MyNzJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxNzozNToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaAppbmRleCA2Yzk2MmQ4NjZlODY0Li43ZjZmYzk1OTk2OTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oCkBAIC0xNiw3ICYjNDM7MTYsNyBAQAogICovCiAKIC8qIFBvbGljaWVzICovCi1lbnVtIHsKJiM0MztlbnVtIG1lbXBvbGljeV9tb2RlIHsKIAlNUE9MX0RFRkFVTFQsCiAJTVBPTF9QUkVGRVJSRUQsCiAJTVBPTF9CSU5ELApkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGU5M2M0ZDI0NTZhYTQuLmExMWNiOTE5ZTAwZmUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEzMTcsNDMgJiM0MzsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpCiAJcmV0dXJuIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcyAtIGgtJmd0O3Jlc3ZfaHVnZV9wYWdlczsKIH0KIAotc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgbG9uZyBnYmxfY2hnKQotewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwotCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7Ci0JZ2ZwX3QgZ2ZwX21hc2s7Ci0Jbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCB7CiAJaW50IG5pZDsKJiM0MzsJbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CWVudW0gbWVtcG9saWN5X21vZGUgbW9kZTsKJiM0Mzt9OwogCi0JLyoKLQkgKiBnYmxfY2hnPT0xIG1lYW5zIHRoZSBhbGxvY2F0aW9uIHJlcXVpcmVzIGEgbmV3IHBhZ2UgdGhhdCB3YXMgbm90Ci0JICogcmVzZXJ2ZWQgYmVmb3JlLiAgTWFraW5nIHN1cmUgdGhlcmUmIzM5O3MgYXQgbGVhc3Qgb25lIGZyZWUgcGFnZS4KLQkgKi8KLQlpZiAoZ2JsX2NoZyAmYW1wOyZhbXA7ICFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSkKLQkJZ290byBlcnI7Ci0KLQlnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKLQluaWQgPSBodWdlX25vZGUodm1hLCBhZGRyZXNzLCBnZnBfbWFzaywgJmFtcDttcG9sLCAmYW1wO25vZGVtYXNrKTsKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSkKJiM0Mzt7CiYjNDM7CW5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktJmd0O25vZGVtYXNrOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAotCWlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7CiYjNDM7CWlmIChtcG9saS0mZ3Q7bW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7CiAJCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLAotCQkJCQkJCW5pZCwgbm9kZW1hc2spOwomIzQzOwkJCQkJCSAgICAgICBtcG9saS0mZ3Q7bmlkLAomIzQzOwkJCQkJCSAgICAgICBub2RlbWFzayk7CiAKIAkJLyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi8KIAkJbm9kZW1hc2sgPSBOVUxMOwogCX0KIAotCWlmICghZm9saW8pCiYjNDM7CWlmICghZm9saW8pIHsKIAkJZm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssCi0JCQkJCQkJbmlkLCBub2RlbWFzayk7Ci0KLQltcG9sX2NvbmRfcHV0KG1wb2wpOwomIzQzOwkJCQkJCSAgICAgICBtcG9saS0mZ3Q7bmlkLAomIzQzOwkJCQkJCSAgICAgICBub2RlbWFzayk7CiYjNDM7CX0KIAlyZXR1cm4gZm9saW87Ci0KLWVycjoKLQlyZXR1cm4gTlVMTDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKQpAQCAtMjE0OCwzMiAmIzQzOzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXMKIAlyZXR1cm4gZm9saW87CiB9CiAKLS8qCi0gKiBVc2UgdGhlIFZNQSYjMzk7cyBtcG9saWN5IHRvIGFsbG9jYXRlIGEgaHVnZSBwYWdlIGZyb20gdGhlIGJ1ZGR5LgotICovCiBzdGF0aWMKLXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0MztzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKJiM0MzsJCWdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOwotCWdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpOwotCWludCBuaWQ7Ci0Jbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CW5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktJmd0O25vZGVtYXNrOwogCi0JbmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssICZhbXA7bXBvbCwgJmFtcDtub2RlbWFzayk7Ci0JaWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHsKJiM0MzsJaWYgKG1wb2xpLSZndDttb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpIHsKIAkJZ2ZwX3QgZ2ZwID0gZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7CiAKLQkJZm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTsKJiM0MzsJCWZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGktJmd0O25pZCwKJiM0MzsJCQkJCQkgICAgbm9kZW1hc2spOwogCiAJCS8qIEZhbGxiYWNrIHRvIGFsbCBub2RlcyBpZiBwYWdlPT1OVUxMICovCiAJCW5vZGVtYXNrID0gTlVMTDsKIAl9CiAKLQlpZiAoIWZvbGlvKQotCQlmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7Ci0JbXBvbF9jb25kX3B1dChtcG9sKTsKJiM0MzsJaWYgKCFmb2xpbykgewomIzQzOwkJZm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLSZndDtuaWQsCiYjNDM7CQkJCQkJICAgIG5vZGVtYXNrKTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBmb2xpbzsKIH0KIApAQCAtMjg2Myw3ICYjNDM7Mjg0OSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaW50IHJldCwgaWR4OwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMOwotCWdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7CiYjNDM7CXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7CiYjNDM7CWdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTsKJiM0MzsJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKJiM0MzsJbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CWludCBuaWQ7CiAKIAlpZHggPSBoc3RhdGVfaW5kZXgoaCk7CiAKQEAgLTI5MjIsMjQgJiM0MzsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb247CiAKJiM0MzsJLyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovCiYjNDM7CW5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgJmFtcDttcG9sLCAmYW1wO25vZGVtYXNrKTsKJiM0MzsJbXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7CiYjNDM7CQkubmlkID0gbmlkLAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzOwkJLm1vZGUgPSBtcG9sID8gbXBvbC0mZ3Q7bW9kZSA6IE1QT0xfREVGQVVMVCwKJiM0MzsjZWxzZQomIzQzOwkJLm1vZGUgPSBNUE9MX0RFRkFVTFQsCiYjNDM7I2VuZGlmCiYjNDM7CQkubm9kZW1hc2sgPSBub2RlbWFzaywKJiM0MzsJfTsKJiM0MzsKIAlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKJiM0MzsKIAkvKgotCSAqIGdsYl9jaGcgaXMgcGFzc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IGEgcGFnZSBtdXN0IGJlIHRha2VuCi0JICogZnJvbSB0aGUgZ2xvYmFsIGZyZWUgcG9vbCAoZ2xvYmFsIGNoYW5nZSkuICBnYmxfY2hnID09IDAgaW5kaWNhdGVzCi0JICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLgomIzQzOwkgKiBUcnkgdG8gZGVxdWV1ZSBmcm9tIHRoZSBwb29sIGlmIGVpdGhlcjoKJiM0MzsJICogMSkgQSByZXNlcnZhdGlvbiBleGlzdHMgKGdibF9jaGcgPT0gMCkuCiYjNDM7CSAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpCiYjNDM7CSAqICAgIHBhZ2VzIGluIHRoZSBwb29sOyB0aGlzIHByZWZlcnMgdXNpbmcgcHJlLWFsbG9jYXRlZCBwb29sCiYjNDM7CSAqICAgIHBhZ2VzIG92ZXIgYWxsb2NhdGluZyBmcmVzaCBvbmVzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvci4KIAkgKi8KLQlmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoaCwgdm1hLCBhZGRyLCBnYmxfY2hnKTsKJiM0MzsJZm9saW8gPSBOVUxMOwomIzQzOwlpZiAoIWdibF9jaGcgfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpCiYjNDM7CQlmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsICZhbXA7bXBvbGkpOwomIzQzOwogCWlmICghZm9saW8pIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJZm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChoLCB2bWEsIGFkZHIpOwotCQlpZiAoIWZvbGlvKQomIzQzOwkJZm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgJmFtcDttcG9saSk7CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbXBvbF9jb25kX3B1dChtcG9sKTsKIAkJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKJiM0MzsJCX0KIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtoLSZndDtodWdlcGFnZV9hY3RpdmVsaXN0KTsKIAkJZm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTsKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJfQogCiYjNDM7CW1wb2xfY29uZF9wdXQobXBvbCk7CiYjNDM7CiAJLyoKIAkgKiBFaXRoZXIgZGVxdWV1ZWQgb3IgYnVkZHktYWxsb2NhdGVkIGZvbGlvIG5lZWRzIHRvIGFkZCBzcGVjaWFsCiAJICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi4KQEAgLTI5ODcsNyAmIzQzOzI5OTksNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCX0KIAl9CiAKLQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApOwomIzQzOwlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKIAkvKgogCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdAogCSAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIE1lbXBvbGljeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGhvdyBtZW1wb2xpY3kgaW50ZXJhY3RzIHdpdGggaHVnZXRsYiBhbGxvY2F0aW9ucy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCByZWZhY3RvcmluZyBzb21lIGtleSBhbGxvY2F0aW9uIGZ1bmN0aW9uczogYGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWFgIGlzIG5vdyBzcGxpdCBpbnRvIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gIGFuZCwgY3J1Y2lhbGx5LCBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2xgIGludG8gYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gLiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaXRzZWxmIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBldmVuICp3b3JrcyouIEZyb20gdGhlIGluaXRpYWwgZ2xhbmNlLCBpdCBzZWVtcyBsaWtlIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGh1Z2V0bGIgcGFnZSBhbGxvY2F0aW9uIGxvZ2ljLCBkZWFsaW5nIHdpdGggbWVtcG9saWN5IGFwcGxpY2F0aW9uIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gcGFnZSBkZXF1ZXVlaW5nIGFuZCBidWRkeSBhbGxvY2F0aW9uLiBJIHNlZSBhIGNoYW5nZSB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIG5vdyBpbmNsdWRpbmcgYF9fR0ZQX1JFVFJZX01BWUZBSUxgIGV4cGxpY2l0bHksIHdoaWNoIHVzZWQgdG8gYmUgaW1wbGljaXRseSBwYXJ0IG9mIHRoZSBgZ2ZwYCB2YXJpYWJsZS4KCk5leHQsIGlzIGl0IHJlYWNoYWJsZT8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGxvb2tzIGxpa2UgYSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNvIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS4gQW5kLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlLiBVc2VyIHNwYWNlIGNhbiByZWFjaCBpdCB0aHJvdWdoIGBtbWFwYCBvZiBodWdldGxiZnMgb3IgYHNobWdldGAgd2l0aCBgU0hNX0hVR0VUTEJgLiBHb29kLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgaW52ZXN0aWdhdGlvbi4gT2theSwgdGhlIGluc3RydWN0aW9ucyBhcmUgdGVsbGluZyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgd2hpbGUgYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvYCBtaWdodCBiZSBpbnRlcmVzdGluZywgYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBub3QgaWRlYWwgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyBvbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnJvbSBgbW0vaHVnZXRsYi5jYCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCB0byB0aGUga2VybmVsJiMzOTtzIEFQSXMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdHJ1Y3QgZm9saW8gXFwqYWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5NDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTUtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Ny1cdFx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5OC1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIxNjUtXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTY3LVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE4OC1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yODE1PXR5cGVkZWYgZW51bSB7XG4tLVxubW0vaHVnZXRsYi5jLTI4NDAtICovXG5tbS9odWdldGxiLmM6Mjg0MTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjg0Mi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHNpbXVsYXRpb24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKgoKUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvci4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkLCBhZ2Fpbj8gQWgsIHllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYG1tL2h1Z2V0bGIuY2AuIE9rYXksIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgZGlyZWN0b3J5LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBXZWIqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX0hVR0VUTEJGU2AuIEkga25vdyB0aGF0JiMzOTtzIGEga2V5IHBpZWNlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBwcmVjb25kaXRpb25zLiBNeSBmaXJzdCBwcmlvcml0eSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfSFVHRVRMQkZTYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSB0b2dnbGUsIG9yIGFyZSB0aGVyZSBzZXZlcmFsIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIGNhbiBldmVuIGNvbnNpZGVyIGVuYWJsaW5nIHRoaXM/IFRoaXMgaXMgc3RlcCBvbmUsIGJlZm9yZSBJIHN0YXJ0IHRvIGxvb2sgYXQgYW55IG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFyb3VuZCBsaW5lIDI1MCwgZ2l2ZSBvciB0YWtlLiBUaGUgYGZzL2AgcGF0aCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgZmlsZSBzeXN0ZW0gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBwcm9iYWJseSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBUaW1lIHRvIGdldCBteSBncmVwIG9uLCBvciBtYXliZSBqdXN0IHNjcm9sbOKApiBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGhhcyB0byBvZmZlci4gSSBoYXZlIGEgaHVuY2guLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBJdCByZWxpZXMgb24gYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYCwgd2hpY2ggaXMgYSBgZGVmX2Jvb2wgbmAsIHNlbGVjdGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWcgZGVwZW5kZW5jaWVzLCBzbyBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseS4KCkluIHRoZSBwcm92aWRlZCBwYXRjaCBzbmlwcGV0LCBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgbWVtb3J5IHBvbGljeSBtb2RlLiBUaGF0JiMzOTtzIGdvb2QgdG8gbm90ZTsgaXQgbWlnaHQgY29tZSBpbnRvIHBsYXkgbGF0ZXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gVGhhdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gQW55IG90aGVyIGNvbmZpZ3MgY29tZSBpbnRvIHBsYXk/IEhtbSwgYENPTkZJR19DR1JPVVBfSFVHRVRMQmAgc2VlbXMgKnZlcnkqIHJlbGV2YW50IGhlcmUsIGFzIGl0IGxpa2VseSBpbXBhY3RzIGhvdyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZnVuY3Rpb25zLiBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLCBwcm9iYWJseSBpbiBgbW0vbWVtY29udHJvbC5jYCBvciBwZXJoYXBzIGBtbS9odWdldGxiX2Nncm91cC5jYCwgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjZ3JvdXAgaW50ZWdyYXRpb24gYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NTI9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYwOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTUyOnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1My17XG4tLVxubW0vaHVnZXRsYi5jPTI4NDE9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDAxLVxubW0vaHVnZXRsYi5jOjMwMDI6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0zMDAzLVx0Lypcbm1tL2h1Z2V0bGIuYy0zMDA0LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XG5tbS9odWdldGxiLmM6MzAwNTpcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG5tbS9odWdldGxiLmMtMzAwNi1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTM3PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNDktLyoqXG5tbS9tZW1jb250cm9sLmM6NTE1MDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTE1MS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE2MC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MTYxOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MTYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGNncm91cHMgYW5kIEh1Z2VUTEIgcGFnZXMuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3Mgc2l0dGluZyByaWdodCB0aGVyZSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbXMgcmVzaWRlLiBBbmQgYXMgYSBxdWljayBtZW50YWwgY2hlY2ssIGBtbS9tZW1jb250cm9sLmNgIG9mIGNvdXJzZSBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gdGhhdCBgQ09ORklHX01FTUNHYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIG1lbWNnIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIHlvdSBkb24mIzM5O3QgbmVlZCB0aGUgcmVsYXRlZCBjb2RlLiBTbyB0aGlzIGltcGxpZXMgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIGhhbmRsaW5nIG1lbW9yeSBjaGFyZ2VzLCBsaWtlbHkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBtZW1vcnkgY2dyb3VwLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIG1lbW9yeSBjaGFyZ2luZyBhY2NvdW50aW5nIGZvciBIdWdlVExCIHBhZ2VzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjZ3JvdXAgYWNjb3VudGluZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgxCgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgcmlnaHQgYXdheSBJIHNlZSB0aGF0IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX05VTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBhbGwga2V5IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaXRzIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZ1bmN0aW9uYWwsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIGhvdyBtZW1vcnkgcG9saWNpZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbiB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gaW5jbHVkZSBgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTGAgc2VlbXMgbGlrZSBhIHNvbGlkLCByZWFjaGFibGUgY2hhbmdlLCBpbmRpY2F0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIGJlaW5nIGFkZHJlc3NlZC4KCk15IG1haW4gZm9jdXMgc3ltYm9sIGhlcmUgaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gYWZmZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2suIEkgc2VlIG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgdG91Y2hlZDogYGF2YWlsYWJsZV9odWdlX3BhZ2VzYCwgYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb2AuIEhvd2V2ZXIsIHRob3NlIG90aGVycyBzZWVtIHRvIGJlIHN0YXRpYyBhbmQvb3IgaW5saW5lIGZ1bmN0aW9ucy4gT2theSwgc28gYGFsbG9jX2h1Z2V0bGJfZm9saW9gICppcyogdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcHJvY2VzcywgaW5jb3Jwb3JhdGluZyB0aGUgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgYWx0ZXJpbmcgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkLiBUaGUgY2hhbmdlIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBsb29rcyBsaWtlIGEgdGhvdWdodGZ1bCBhZGRpdGlvbi4gQWxsIG9mIHRoaXMgcG9pbnRzIHRvIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFyZSBhbHNvIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHNlcnZlcyBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfZmF1bHRgLCBgaHVnZXRsYl9ub19wYWdlYCwgYW5kIGBodWdldGxiX3dwYC4gVGhpcyBjb25maXJtcyBpdHMgcm9sZSBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgaHVnZXRsYiBwYWdlIGFsbG9jYXRpb24uIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MTkuODUwMjEyODE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTU1OTIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNToxOS44NTAyMjIzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg1NTU2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDA0YjUyOGY2M2M2NTMzODk1MmY5YWM0YjIxYjU0OWE1N2MyNzJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXFxuaW5kZXggNmM5NjJkODY2ZTg2NC4uN2Y2ZmM5NTk5NjkzYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG5AQCAtMTYsNyArMTYsNyBAQFxcbiAgKi9cXG4gXFxuIC8qIFBvbGljaWVzICovXFxuLWVudW0ge1xcbitlbnVtIG1lbXBvbGljeV9tb2RlIHtcXG4gXFx0TVBPTF9ERUZBVUxULFxcbiBcXHRNUE9MX1BSRUZFUlJFRCxcXG4gXFx0TVBPTF9CSU5ELFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0xMzE3LDQzICsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuIFxcdHJldHVybiBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgLSBoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgbG9uZyBnYmxfY2hnKVxcbi17XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbi1cXHRnZnBfdCBnZnBfbWFzaztcXG4tXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK3N0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQge1xcbiBcXHRpbnQgbmlkO1xcbitcXHRub2RlbWFza190ICpub2RlbWFzaztcXG4rXFx0ZW51bSBtZW1wb2xpY3lfbW9kZSBtb2RlO1xcbit9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogZ2JsX2NoZz09MSBtZWFucyB0aGUgYWxsb2NhdGlvbiByZXF1aXJlcyBhIG5ldyBwYWdlIHRoYXQgd2FzIG5vdFxcbi1cXHQgKiByZXNlcnZlZCBiZWZvcmUuICBNYWtpbmcgc3VyZSB0aGVyZSdzIGF0IGxlYXN0IG9uZSBmcmVlIHBhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpZiAoZ2JsX2NoZyBcXHUwMDI2XFx1MDAyNiAhYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuLVxcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHJlc3MsIGdmcF9tYXNrLCBcXHUwMDI2bXBvbCwgXFx1MDAyNm5vZGVtYXNrKTtcXG4rc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSlcXG4re1xcbitcXHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVxcdTAwM2Vub2RlbWFzaztcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuIFxcbi1cXHRpZiAobXBvbF9pc19wcmVmZXJyZWRfbWFueShtcG9sKSkge1xcbitcXHRpZiAobXBvbGktXFx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSkge1xcbiBcXHRcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0bmlkLCBub2RlbWFzayk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbm9kZW1hc2spO1xcbiBcXG4gXFx0XFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cXG4gXFx0XFx0bm9kZW1hc2sgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvKVxcbitcXHRpZiAoIWZvbGlvKSB7XFxuIFxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIG5vZGVtYXNrKTtcXG4tXFxuLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbm9kZW1hc2spO1xcbitcXHR9XFxuIFxcdHJldHVybiBmb2xpbztcXG4tXFxuLWVycjpcXG4tXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxuQEAgLTIxNDgsMzIgKzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBVc2UgdGhlIFZNQSdzIG1wb2xpY3kgdG8gYWxsb2NhdGUgYSBodWdlIHBhZ2UgZnJvbSB0aGUgYnVkZHkuXFxuLSAqL1xcbiBzdGF0aWNcXG4tc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChzdHJ1Y3QgaHN0YXRlICpoLFxcbi1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4rXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4tXFx0aW50IG5pZDtcXG4tXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK1xcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXFx1MDAzZW5vZGVtYXNrO1xcbiBcXG4tXFx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbi1cXHRpZiAobXBvbF9pc19wcmVmZXJyZWRfbWFueShtcG9sKSkge1xcbitcXHRpZiAobXBvbGktXFx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSkge1xcbiBcXHRcXHRnZnBfdCBnZnAgPSBnZnBfbWFzayBcXHUwMDI2IH4oX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBfX0dGUF9OT0ZBSUwpO1xcbiBcXG4tXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbm9kZW1hc2spO1xcbiBcXG4gXFx0XFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cXG4gXFx0XFx0bm9kZW1hc2sgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvKVxcbi1cXHRcXHRmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxuLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcdGlmICghZm9saW8pIHtcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLVxcdTAwM2VuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBub2RlbWFzayk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbiBcXG5AQCAtMjg2Myw3ICsyODQ5LDExIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aW50IHJldCwgaWR4O1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7XFxuLVxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XFxuK1xcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XFxuK1xcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4rXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4rXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XFxuIFxcbkBAIC0yOTIyLDI0ICsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uO1xcbiBcXG4rXFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuK1xcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXFx1MDAyNm1wb2wsIFxcdTAwMjZub2RlbWFzayk7XFxuK1xcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xcbitcXHRcXHQubmlkID0gbmlkLFxcbisjaWZkZWYgQ09ORklHX05VTUFcXG4rXFx0XFx0Lm1vZGUgPSBtcG9sID8gbXBvbC1cXHUwMDNlbW9kZSA6IE1QT0xfREVGQVVMVCxcXG4rI2Vsc2VcXG4rXFx0XFx0Lm1vZGUgPSBNUE9MX0RFRkFVTFQsXFxuKyNlbmRpZlxcbitcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4rXFx0fTtcXG4rXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuK1xcbiBcXHQvKlxcbi1cXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxcbi1cXHQgKiBmcm9tIHRoZSBnbG9iYWwgZnJlZSBwb29sIChnbG9iYWwgY2hhbmdlKS4gIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXNcXG4tXFx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxcbitcXHQgKiBUcnkgdG8gZGVxdWV1ZSBmcm9tIHRoZSBwb29sIGlmIGVpdGhlcjpcXG4rXFx0ICogMSkgQSByZXNlcnZhdGlvbiBleGlzdHMgKGdibF9jaGcgPT0gMCkuXFxuK1xcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXFxuK1xcdCAqICAgIHBhZ2VzIGluIHRoZSBwb29sOyB0aGlzIHByZWZlcnMgdXNpbmcgcHJlLWFsbG9jYXRlZCBwb29sXFxuK1xcdCAqICAgIHBhZ2VzIG92ZXIgYWxsb2NhdGluZyBmcmVzaCBvbmVzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG4gXFx0ICovXFxuLVxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShoLCB2bWEsIGFkZHIsIGdibF9jaGcpO1xcbitcXHRmb2xpbyA9IE5VTEw7XFxuK1xcdGlmICghZ2JsX2NoZyB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcXG4rXFx0XFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcXHUwMDI2bXBvbGkpO1xcbitcXG4gXFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTtcXG4tXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgXFx1MDAyNm1wb2xpKTtcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4gXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4gXFx0XFx0LyogRmFsbCB0aHJvdWdoICovXFxuIFxcdH1cXG4gXFxuK1xcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBFaXRoZXIgZGVxdWV1ZWQgb3IgYnVkZHktYWxsb2NhdGVkIGZvbGlvIG5lZWRzIHRvIGFkZCBzcGVjaWFsXFxuIFxcdCAqIG1hcmsgdG8gdGhlIGZvbGlvIHdoZW4gaXQgY29uc3VtZXMgYSBnbG9iYWwgcmVzZXJ2YXRpb24uXFxuQEAgLTI5ODcsNyArMjk5OSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xcbitcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4gXFx0LypcXG4gXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxuIFxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjIxLjAxOTM5MzM2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTI2MzkyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgYWxsb2NhdGlvbiB0byB1c2UgYSBuZXcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCBjaGFuZ2VzIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYF9fR0ZQX1JFVFJZX01BWUZBSUxgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQwNGI1MjhmNjNjNjUzMzg5NTJmOWFjNGIyMWI1NDlhNTdjMjcyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbmluZGV4IDZjOTYyZDg2NmU4NjQuLjdmNmZjOTU5OTY5M2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaFxuQEAgLTE2LDcgKzE2LDcgQEBcbiAgKi9cbiBcbiAvKiBQb2xpY2llcyAqL1xuLWVudW0ge1xuK2VudW0gbWVtcG9saWN5X21vZGUge1xuIFx0TVBPTF9ERUZBVUxULFxuIFx0TVBPTF9QUkVGRVJSRUQsXG4gXHRNUE9MX0JJTkQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzE3LDQzICsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXG4gXHRyZXR1cm4gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgLSBoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcztcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGxvbmcgZ2JsX2NoZylcbi17XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbi1cdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4tXHRnZnBfdCBnZnBfbWFzaztcbi1cdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK3N0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQge1xuIFx0aW50IG5pZDtcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK1x0ZW51bSBtZW1wb2xpY3lfbW9kZSBtb2RlO1xuK307XG4gXG4tXHQvKlxuLVx0ICogZ2JsX2NoZz09MSBtZWFucyB0aGUgYWxsb2NhdGlvbiByZXF1aXJlcyBhIG5ldyBwYWdlIHRoYXQgd2FzIG5vdFxuLVx0ICogcmVzZXJ2ZWQgYmVmb3JlLiAgTWFraW5nIHN1cmUgdGhlcmUncyBhdCBsZWFzdCBvbmUgZnJlZSBwYWdlLlxuLVx0ICovXG4tXHRpZiAoZ2JsX2NoZyBcdTAwMjZcdTAwMjYgIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkcmVzcywgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbitzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxuK3tcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXHUwMDNlbm9kZW1hc2s7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcbi1cdGlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7XG4rXHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0bmlkLCBub2RlbWFzayk7XG4rXHRcdFx0XHRcdFx0ICAgICAgIG1wb2xpLVx1MDAzZW5pZCxcbitcdFx0XHRcdFx0XHQgICAgICAgbm9kZW1hc2spO1xuIFxuIFx0XHQvKiBGYWxsYmFjayB0byBhbGwgbm9kZXMgaWYgcGFnZT09TlVMTCAqL1xuIFx0XHRub2RlbWFzayA9IE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvKVxuK1x0aWYgKCFmb2xpbykge1xuIFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdG5pZCwgbm9kZW1hc2spO1xuLVxuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbitcdFx0XHRcdFx0XHQgICAgICAgbXBvbGktXHUwMDNlbmlkLFxuK1x0XHRcdFx0XHRcdCAgICAgICBub2RlbWFzayk7XG4rXHR9XG4gXHRyZXR1cm4gZm9saW87XG4tXG4tZXJyOlxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuQEAgLTIxNDgsMzIgKzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4tLypcbi0gKiBVc2UgdGhlIFZNQSdzIG1wb2xpY3kgdG8gYWxsb2NhdGUgYSBodWdlIHBhZ2UgZnJvbSB0aGUgYnVkZHkuXG4tICovXG4gc3RhdGljXG4tc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3N0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuK1x0XHRnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGkpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4tXHRpbnQgbmlkO1xuLVx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XG4rXHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVx1MDAzZW5vZGVtYXNrO1xuIFxuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbi1cdGlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7XG4rXHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGdmcF90IGdmcCA9IGdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfTk9GQUlMKTtcbiBcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcbitcdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saS1cdTAwM2VuaWQsXG4rXHRcdFx0XHRcdFx0ICAgIG5vZGVtYXNrKTtcbiBcbiBcdFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cbiBcdFx0bm9kZW1hc2sgPSBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpbylcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbitcdGlmICghZm9saW8pIHtcbitcdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLVx1MDAzZW5pZCxcbitcdFx0XHRcdFx0XHQgICAgbm9kZW1hc2spO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbkBAIC0yODYzLDcgKzI4NDksMTEgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJldCwgaWR4O1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbi1cdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4rXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuK1x0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuK1x0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK1x0aW50IG5pZDtcbiBcbiBcdGlkeCA9IGhzdGF0ZV9pbmRleChoKTtcbiBcbkBAIC0yOTIyLDI0ICsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcbiBcbitcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuK1x0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwLCBcdTAwMjZtcG9sLCBcdTAwMjZub2RlbWFzayk7XG4rXHRtcG9saSA9IChzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkKXtcbitcdFx0Lm5pZCA9IG5pZCxcbisjaWZkZWYgQ09ORklHX05VTUFcbitcdFx0Lm1vZGUgPSBtcG9sID8gbXBvbC1cdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxuKyNlbHNlXG4rXHRcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxuKyNlbmRpZlxuK1x0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbitcdH07XG4rXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4rXG4gXHQvKlxuLVx0ICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW5cbi1cdCAqIGZyb20gdGhlIGdsb2JhbCBmcmVlIHBvb2wgKGdsb2JhbCBjaGFuZ2UpLiAgZ2JsX2NoZyA9PSAwIGluZGljYXRlc1xuLVx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxuK1x0ICogVHJ5IHRvIGRlcXVldWUgZnJvbSB0aGUgcG9vbCBpZiBlaXRoZXI6XG4rXHQgKiAxKSBBIHJlc2VydmF0aW9uIGV4aXN0cyAoZ2JsX2NoZyA9PSAwKS5cbitcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXG4rXHQgKiAgICBwYWdlcyBpbiB0aGUgcG9vbDsgdGhpcyBwcmVmZXJzIHVzaW5nIHByZS1hbGxvY2F0ZWQgcG9vbFxuK1x0ICogICAgcGFnZXMgb3ZlciBhbGxvY2F0aW5nIGZyZXNoIG9uZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuIFx0ICovXG4tXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoaCwgdm1hLCBhZGRyLCBnYmxfY2hnKTtcbitcdGZvbGlvID0gTlVMTDtcbitcdGlmICghZ2JsX2NoZyB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcbitcdFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcdTAwMjZtcG9saSk7XG4rXG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4tXHRcdGlmICghZm9saW8pXG4rXHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIFx1MDAyNm1wb2xpKTtcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuK1x0XHR9XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZoLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuIFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuIFx0XHQvKiBGYWxsIHRocm91Z2ggKi9cbiBcdH1cbiBcbitcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4rXG4gXHQvKlxuIFx0ICogRWl0aGVyIGRlcXVldWVkIG9yIGJ1ZGR5LWFsbG9jYXRlZCBmb2xpbyBuZWVkcyB0byBhZGQgc3BlY2lhbFxuIFx0ICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi5cbkBAIC0yOTg3LDcgKzI5OTksNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCk7XG4rXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbiBcdC8qXG4gXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXRcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNToyMS4wMTkzOTQzNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDk0MzYwNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBNZW1wb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBtbS9odWdldGxiLmNgIGFuZCBgaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIGhvdyBtZW1wb2xpY3kgaW50ZXJhY3RzIHdpdGggaHVnZXRsYiBhbGxvY2F0aW9ucy4gVGhleSdyZSBpbnRyb2R1Y2luZyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIHJlZmFjdG9yaW5nIHNvbWUga2V5IGFsbG9jYXRpb24gZnVuY3Rpb25zOiBgZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYWAgaXMgbm93IHNwbGl0IGludG8gYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AgYW5kLCBjcnVjaWFsbHksIGBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbGAgaW50byBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb2AuIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpdHNlbGYgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlc2UgbmV3IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZXZlbiAqd29ya3MqLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBodWdldGxiIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYywgZGVhbGluZyB3aXRoIG1lbXBvbGljeSBhcHBsaWNhdGlvbiBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHBhZ2UgZGVxdWV1ZWluZyBhbmQgYnVkZHkgYWxsb2NhdGlvbi4gSSBzZWUgYSBjaGFuZ2UgdG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBub3cgaW5jbHVkaW5nIGBfX0dGUF9SRVRSWV9NQVlGQUlMYCBleHBsaWNpdGx5LCB3aGljaCB1c2VkIHRvIGJlIGltcGxpY2l0bHkgcGFydCBvZiB0aGUgYGdmcGAgdmFyaWFibGUuXG5cbk5leHQsIGlzIGl0IHJlYWNoYWJsZT8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGxvb2tzIGxpa2UgYSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNvIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS4gQW5kLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlLiBVc2VyIHNwYWNlIGNhbiByZWFjaCBpdCB0aHJvdWdoIGBtbWFwYCBvZiBodWdldGxiZnMgb3IgYHNobWdldGAgd2l0aCBgU0hNX0hVR0VUTEJgLiBHb29kLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLiBPa2F5LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFNvLCB3aGlsZSBgZGVxdWV1ZV9odWdldGxiX2ZvbGlvYCBhbmQgYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gIG1pZ2h0IGJlIGludGVyZXN0aW5nLCBiZWluZyBzdGF0aWMsIHRoZXkgYXJlIG5vdCBpZGVhbCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIG9uIGBhbGxvY19odWdldGxiX2ZvbGlvYCBmcm9tIGBtbS9odWdldGxiLmNgIGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCdzIEFQSXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjI5LjExMzc1Njg0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwNzc5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZm9saW8gXFxcXCphbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5NDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTctXFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5OC1cXHRcXHRcXHRcXHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2OTk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjUtXFxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjctXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODE1PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5tbS9odWdldGxiLmMtMjg0MC0gKi9cXG5tbS9odWdldGxiLmM6Mjg0MTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTI4NDItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzEuNjY0NTQyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQyMTI2MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc2ltdWxhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKipcblxuUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQsIGFnYWluPyBBaCwgeWVzLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBtbS9odWdldGxiLmNgLiBPa2F5LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGF0IGRpcmVjdG9yeS4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzUuNzA2NjcxMjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU0Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTozNS44MTIyMTgyODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUzNTM4MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBXZWIqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19IVUdFVExCRlNgLiBJIGtub3cgdGhhdCdzIGEga2V5IHBpZWNlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBwcmVjb25kaXRpb25zLiBNeSBmaXJzdCBwcmlvcml0eSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19IVUdFVExCRlNgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHRvZ2dsZSwgb3IgYXJlIHRoZXJlIHNldmVyYWwgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgZW5hYmxpbmcgdGhpcz8gVGhpcyBpcyBzdGVwIG9uZSwgYmVmb3JlIEkgc3RhcnQgdG8gbG9vayBhdCBhbnkgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzkuMTY1NzU4ODc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDYyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTozOS4yMjQyMjcwMzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2NjE5MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgaXQncyBhcm91bmQgbGluZSAyNTAsIGdpdmUgb3IgdGFrZS4gVGhlIGBmcy9gIHBhdGggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzbyBJJ20gbG9va2luZyBmb3IgZmlsZSBzeXN0ZW0gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBwcm9iYWJseSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBUaW1lIHRvIGdldCBteSBncmVwIG9uLCBvciBtYXliZSBqdXN0IHNjcm9sbOKApiBsZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gaGFzIHRvIG9mZmVyLiBJIGhhdmUgYSBodW5jaC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6NDIuNDgwODQ5NTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjQyLjQ4MDk0NDAwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc0ODcxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIGFuZCBSZWxhdGVkIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEl0IHJlbGllcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLCB3aGljaCBpcyBhIGBkZWZfYm9vbCBuYCwgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlnIGRlcGVuZGVuY2llcywgc28gSSBzaG91bGQgbG9vayBtb3JlIGNsb3NlbHkuXG5cbkluIHRoZSBwcm92aWRlZCBwYXRjaCBzbmlwcGV0LCBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgbWVtb3J5IHBvbGljeSBtb2RlLiBUaGF0J3MgZ29vZCB0byBub3RlOyBpdCBtaWdodCBjb21lIGludG8gcGxheSBsYXRlci5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gVGhhdCdzIGNhbGxlZCB3aXRoaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBBbnkgb3RoZXIgY29uZmlncyBjb21lIGludG8gcGxheT8gSG1tLCBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBzZWVtcyAqdmVyeSogcmVsZXZhbnQgaGVyZSwgYXMgaXQgbGlrZWx5IGltcGFjdHMgaG93IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmdW5jdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHRoZSBzb3VyY2UsIHByb2JhYmx5IGluIGBtbS9tZW1jb250cm9sLmNgIG9yIHBlcmhhcHMgYG1tL2h1Z2V0bGJfY2dyb3VwLmNgLCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBhZmZlY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6NDguNTU1ODE4OTYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NzkzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjUyPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNDY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MjpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODQxPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDAxLVxcbm1tL2h1Z2V0bGIuYzozMDAyOlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0zMDAzLVxcdC8qXFxubW0vaHVnZXRsYi5jLTMwMDQtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxubW0vaHVnZXRsYi5jOjMwMDU6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcXG5tbS9odWdldGxiLmMtMzAwNi1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTM3PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0OS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTE1MDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUxNTEtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE2MC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE2MTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUxNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTo1MC44NDM2MjA2NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MDM3MzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgY2dyb3VwcyBhbmQgSHVnZVRMQiBwYWdlcy4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCB0aGF0IGZ1bmN0aW9uLCBpdCdzIHNpdHRpbmcgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbXMgcmVzaWRlLiBBbmQgYXMgYSBxdWljayBtZW50YWwgY2hlY2ssIGBtbS9tZW1jb250cm9sLmNgIG9mIGNvdXJzZSBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gdGhhdCBgQ09ORklHX01FTUNHYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIG1lbWNnIGlzbid0IGVuYWJsZWQsIHRoZW4geW91IGRvbid0IG5lZWQgdGhlIHJlbGF0ZWQgY29kZS4gU28gdGhpcyBpbXBsaWVzIHRoZSBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBoYW5kbGluZyBtZW1vcnkgY2hhcmdlcywgbGlrZWx5IHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbWVtb3J5IGNncm91cC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIG1lbW9yeSBjaGFyZ2luZyBhY2NvdW50aW5nIGZvciBIdWdlVExCIHBhZ2VzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjZ3JvdXAgYWNjb3VudGluZyBzY2hlbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTo1NC41MzM5OTYwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQ1MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjU0LjYyMDU0NzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTg4MDc3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCByaWdodCBhd2F5IEkgc2VlIHRoYXQgYENPTkZJR19NRU1DR2AsIGBDT05GSUdfTlVNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBrZXkgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBpdHMgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgZnVuY3Rpb25hbCwgZ2l2ZW4gdGhlIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBwb2xpY2llcyBhcmUgaGFuZGxlZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBpbmNsdWRlIGBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMYCBzZWVtcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjaGFuZ2UsIGluZGljYXRpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgYmVpbmcgYWRkcmVzc2VkLlxuXG5NeSBtYWluIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFmZmVjdGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNlZSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIHRvdWNoZWQ6IGBhdmFpbGFibGVfaHVnZV9wYWdlc2AsIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gLiBIb3dldmVyLCB0aG9zZSBvdGhlcnMgc2VlbSB0byBiZSBzdGF0aWMgYW5kL29yIGlubGluZSBmdW5jdGlvbnMuIE9rYXksIHNvIGBhbGxvY19odWdldGxiX2ZvbGlvYCAqaXMqIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGUgaHVnZXRsYiBhbGxvY2F0aW9uIHByb2Nlc3MsIGluY29ycG9yYXRpbmcgdGhlIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGFsdGVyaW5nIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZC4gVGhlIGNoYW5nZSB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbG9va3MgbGlrZSBhIHRob3VnaHRmdWwgYWRkaXRpb24uIEFsbCBvZiB0aGlzIHBvaW50cyB0byBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhcmUgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHNlcnZlcyBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIHllcywgaXQncyBjYWxsZWQgZnJvbSBmdW5jdGlvbnMgbGlrZSBgaHVnZXRsYl9mYXVsdGAsIGBodWdldGxiX25vX3BhZ2VgLCBhbmQgYGh1Z2V0bGJfd3BgLiBUaGlzIGNvbmZpcm1zIGl0cyByb2xlIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBodWdldGxiIHBhZ2UgYWxsb2NhdGlvbi4gSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM2OjA0LjQxOTM1NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MjE5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgYWxsb2NhdGlvbiB0byB1c2UgYSBuZXcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCBjaGFuZ2VzIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYF9fR0ZQX1JFVFJZX01BWUZBSUxgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 17:32:01 +0000 UTC FinishedAt: 2026-08-03 17:36:06 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "MEMCG" ], "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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "MEMCG" ], "series_id": "b5959410-1a55-4ff3-b7b1-e4dc36e2f46b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_hugetlb_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmQwNGI1MjhmNjNjNjUzMzg5NTJmOWFjNGIyMWI1NDlhNTdjMjcyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG5pbmRleCA2Yzk2MmQ4NjZlODY0Li43ZjZmYzk1OTk2OTNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQFxuICAqL1xuIFxuIC8qIFBvbGljaWVzICovXG4tZW51bSB7XG4mIzQzO2VudW0gbWVtcG9saWN5X21vZGUge1xuIFx0TVBPTF9ERUZBVUxULFxuIFx0TVBPTF9QUkVGRVJSRUQsXG4gXHRNUE9MX0JJTkQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0xMzE3LDQzICYjNDM7MTMxNywzMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmFpbGFibGVfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxuIFx0cmV0dXJuIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBsb25nIGdibF9jaGcpXG4te1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuLVx0Z2ZwX3QgZ2ZwX21hc2s7XG4tXHRub2RlbWFza190ICpub2RlbWFzaztcbiYjNDM7c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCB7XG4gXHRpbnQgbmlkO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdGVudW0gbWVtcG9saWN5X21vZGUgbW9kZTtcbiYjNDM7fTtcbiBcbi1cdC8qXG4tXHQgKiBnYmxfY2hnPT0xIG1lYW5zIHRoZSBhbGxvY2F0aW9uIHJlcXVpcmVzIGEgbmV3IHBhZ2UgdGhhdCB3YXMgbm90XG4tXHQgKiByZXNlcnZlZCBiZWZvcmUuICBNYWtpbmcgc3VyZSB0aGVyZSYjMzk7cyBhdCBsZWFzdCBvbmUgZnJlZSBwYWdlLlxuLVx0ICovXG4tXHRpZiAoZ2JsX2NoZyBcdTAwMjZcdTAwMjYgIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkcmVzcywgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGkpXG4mIzQzO3tcbiYjNDM7XHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVx1MDAzZW5vZGVtYXNrO1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIFxuLVx0aWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHtcbiYjNDM7XHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0bmlkLCBub2RlbWFzayk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtcG9saS1cdTAwM2VuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBub2RlbWFzayk7XG4gXG4gXHRcdC8qIEZhbGxiYWNrIHRvIGFsbCBub2RlcyBpZiBwYWdlPT1OVUxMICovXG4gXHRcdG5vZGVtYXNrID0gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICghZm9saW8pXG4mIzQzO1x0aWYgKCFmb2xpbykge1xuIFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdG5pZCwgbm9kZW1hc2spO1xuLVxuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG1wb2xpLVx1MDAzZW5pZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIG5vZGVtYXNrKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZm9saW87XG4tXG4tZXJyOlxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuQEAgLTIxNDgsMzIgJiM0MzsyMTM4LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzXG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuLS8qXG4tICogVXNlIHRoZSBWTUEmIzM5O3MgbXBvbGljeSB0byBhbGxvY2F0ZSBhIGh1Z2UgcGFnZSBmcm9tIHRoZSBidWRkeS5cbi0gKi9cbiBzdGF0aWNcbi1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKHN0cnVjdCBoc3RhdGUgKmgsXG4tXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3N0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuJiM0MztcdFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuLVx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbi1cdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0aW50IG5pZDtcbi1cdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXHUwMDNlbm9kZW1hc2s7XG4gXG4tXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnBfbWFzaywgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuLVx0aWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHtcbiYjNDM7XHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGdmcF90IGdmcCA9IGdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfTk9GQUlMKTtcbiBcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdGZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGktXHUwMDNlbmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbm9kZW1hc2spO1xuIFxuIFx0XHQvKiBGYWxsYmFjayB0byBhbGwgbm9kZXMgaWYgcGFnZT09TlVMTCAqL1xuIFx0XHRub2RlbWFzayA9IE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvKVxuLVx0XHRmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG4tXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuJiM0MztcdGlmICghZm9saW8pIHtcbiYjNDM7XHRcdGZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBtcG9saS1cdTAwM2VuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBub2RlbWFzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG5AQCAtMjg2Myw3ICYjNDM7Mjg0OSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpbnQgcmV0LCBpZHg7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuLVx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfUkVUUllfTUFZRkFJTDtcbiYjNDM7XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuJiM0MztcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuJiM0MztcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuJiM0MztcdGludCBuaWQ7XG4gXG4gXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG4gXG5AQCAtMjkyMiwyNCAmIzQzOzI5MTIsNDYgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uO1xuIFxuJiM0MztcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuJiM0MztcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXHUwMDI2bXBvbCwgXHUwMDI2bm9kZW1hc2spO1xuJiM0MztcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xuJiM0MztcdFx0Lm5pZCA9IG5pZCxcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO1x0XHQubW9kZSA9IG1wb2wgPyBtcG9sLVx1MDAzZW1vZGUgOiBNUE9MX0RFRkFVTFQsXG4mIzQzOyNlbHNlXG4mIzQzO1x0XHQubW9kZSA9IE1QT0xfREVGQVVMVCxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiYjNDM7XG4gXHQvKlxuLVx0ICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW5cbi1cdCAqIGZyb20gdGhlIGdsb2JhbCBmcmVlIHBvb2wgKGdsb2JhbCBjaGFuZ2UpLiAgZ2JsX2NoZyA9PSAwIGluZGljYXRlc1xuLVx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIFRyeSB0byBkZXF1ZXVlIGZyb20gdGhlIHBvb2wgaWYgZWl0aGVyOlxuJiM0MztcdCAqIDEpIEEgcmVzZXJ2YXRpb24gZXhpc3RzIChnYmxfY2hnID09IDApLlxuJiM0MztcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXG4mIzQzO1x0ICogICAgcGFnZXMgaW4gdGhlIHBvb2w7IHRoaXMgcHJlZmVycyB1c2luZyBwcmUtYWxsb2NhdGVkIHBvb2xcbiYjNDM7XHQgKiAgICBwYWdlcyBvdmVyIGFsbG9jYXRpbmcgZnJlc2ggb25lcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IuXG4gXHQgKi9cbi1cdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShoLCB2bWEsIGFkZHIsIGdibF9jaGcpO1xuJiM0MztcdGZvbGlvID0gTlVMTDtcbiYjNDM7XHRpZiAoIWdibF9jaGcgfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4mIzQzO1x0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIFx1MDAyNm1wb2xpKTtcbiYjNDM7XG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4tXHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcdTAwMjZtcG9saSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKSB7XG4mIzQzO1x0XHRcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuJiM0MztcdFx0fVxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbiBcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbiBcdFx0LyogRmFsbCB0aHJvdWdoICovXG4gXHR9XG4gXG4mIzQzO1x0bXBvbF9jb25kX3B1dChtcG9sKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogRWl0aGVyIGRlcXVldWVkIG9yIGJ1ZGR5LWFsbG9jYXRlZCBmb2xpbyBuZWVkcyB0byBhZGQgc3BlY2lhbFxuIFx0ICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi5cbkBAIC0yOTg3LDcgJiM0MzsyOTk5LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xuJiM0MztcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdFxuIFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZDA0YjUyOGY2M2M2NTMzODk1MmY5YWM0YjIxYjU0OWE1N2MyNzJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxNzozNToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaAppbmRleCA2Yzk2MmQ4NjZlODY0Li43ZjZmYzk1OTk2OTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oCkBAIC0xNiw3ICYjNDM7MTYsNyBAQAogICovCiAKIC8qIFBvbGljaWVzICovCi1lbnVtIHsKJiM0MztlbnVtIG1lbXBvbGljeV9tb2RlIHsKIAlNUE9MX0RFRkFVTFQsCiAJTVBPTF9QUkVGRVJSRUQsCiAJTVBPTF9CSU5ELApkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGU5M2M0ZDI0NTZhYTQuLmExMWNiOTE5ZTAwZmUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEzMTcsNDMgJiM0MzsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpCiAJcmV0dXJuIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcyAtIGgtJmd0O3Jlc3ZfaHVnZV9wYWdlczsKIH0KIAotc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgbG9uZyBnYmxfY2hnKQotewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwotCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7Ci0JZ2ZwX3QgZ2ZwX21hc2s7Ci0Jbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCB7CiAJaW50IG5pZDsKJiM0MzsJbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CWVudW0gbWVtcG9saWN5X21vZGUgbW9kZTsKJiM0Mzt9OwogCi0JLyoKLQkgKiBnYmxfY2hnPT0xIG1lYW5zIHRoZSBhbGxvY2F0aW9uIHJlcXVpcmVzIGEgbmV3IHBhZ2UgdGhhdCB3YXMgbm90Ci0JICogcmVzZXJ2ZWQgYmVmb3JlLiAgTWFraW5nIHN1cmUgdGhlcmUmIzM5O3MgYXQgbGVhc3Qgb25lIGZyZWUgcGFnZS4KLQkgKi8KLQlpZiAoZ2JsX2NoZyAmYW1wOyZhbXA7ICFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSkKLQkJZ290byBlcnI7Ci0KLQlnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKLQluaWQgPSBodWdlX25vZGUodm1hLCBhZGRyZXNzLCBnZnBfbWFzaywgJmFtcDttcG9sLCAmYW1wO25vZGVtYXNrKTsKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSkKJiM0Mzt7CiYjNDM7CW5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktJmd0O25vZGVtYXNrOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAotCWlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7CiYjNDM7CWlmIChtcG9saS0mZ3Q7bW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7CiAJCWZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLAotCQkJCQkJCW5pZCwgbm9kZW1hc2spOwomIzQzOwkJCQkJCSAgICAgICBtcG9saS0mZ3Q7bmlkLAomIzQzOwkJCQkJCSAgICAgICBub2RlbWFzayk7CiAKIAkJLyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi8KIAkJbm9kZW1hc2sgPSBOVUxMOwogCX0KIAotCWlmICghZm9saW8pCiYjNDM7CWlmICghZm9saW8pIHsKIAkJZm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgZ2ZwX21hc2ssCi0JCQkJCQkJbmlkLCBub2RlbWFzayk7Ci0KLQltcG9sX2NvbmRfcHV0KG1wb2wpOwomIzQzOwkJCQkJCSAgICAgICBtcG9saS0mZ3Q7bmlkLAomIzQzOwkJCQkJCSAgICAgICBub2RlbWFzayk7CiYjNDM7CX0KIAlyZXR1cm4gZm9saW87Ci0KLWVycjoKLQlyZXR1cm4gTlVMTDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKQpAQCAtMjE0OCwzMiAmIzQzOzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXMKIAlyZXR1cm4gZm9saW87CiB9CiAKLS8qCi0gKiBVc2UgdGhlIFZNQSYjMzk7cyBtcG9saWN5IHRvIGFsbG9jYXRlIGEgaHVnZSBwYWdlIGZyb20gdGhlIGJ1ZGR5LgotICovCiBzdGF0aWMKLXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0MztzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKJiM0MzsJCWdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOwotCWdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpOwotCWludCBuaWQ7Ci0Jbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CW5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktJmd0O25vZGVtYXNrOwogCi0JbmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssICZhbXA7bXBvbCwgJmFtcDtub2RlbWFzayk7Ci0JaWYgKG1wb2xfaXNfcHJlZmVycmVkX21hbnkobXBvbCkpIHsKJiM0MzsJaWYgKG1wb2xpLSZndDttb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpIHsKIAkJZ2ZwX3QgZ2ZwID0gZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7CiAKLQkJZm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTsKJiM0MzsJCWZvbGlvID0gYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGktJmd0O25pZCwKJiM0MzsJCQkJCQkgICAgbm9kZW1hc2spOwogCiAJCS8qIEZhbGxiYWNrIHRvIGFsbCBub2RlcyBpZiBwYWdlPT1OVUxMICovCiAJCW5vZGVtYXNrID0gTlVMTDsKIAl9CiAKLQlpZiAoIWZvbGlvKQotCQlmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7Ci0JbXBvbF9jb25kX3B1dChtcG9sKTsKJiM0MzsJaWYgKCFmb2xpbykgewomIzQzOwkJZm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLSZndDtuaWQsCiYjNDM7CQkJCQkJICAgIG5vZGVtYXNrKTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBmb2xpbzsKIH0KIApAQCAtMjg2Myw3ICYjNDM7Mjg0OSwxMSBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaW50IHJldCwgaWR4OwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMOwotCWdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7CiYjNDM7CXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7CiYjNDM7CWdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTsKJiM0MzsJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKJiM0MzsJbm9kZW1hc2tfdCAqbm9kZW1hc2s7CiYjNDM7CWludCBuaWQ7CiAKIAlpZHggPSBoc3RhdGVfaW5kZXgoaCk7CiAKQEAgLTI5MjIsMjQgJiM0MzsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXBfcmVzZXJ2YXRpb247CiAKJiM0MzsJLyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovCiYjNDM7CW5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgJmFtcDttcG9sLCAmYW1wO25vZGVtYXNrKTsKJiM0MzsJbXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7CiYjNDM7CQkubmlkID0gbmlkLAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzOwkJLm1vZGUgPSBtcG9sID8gbXBvbC0mZ3Q7bW9kZSA6IE1QT0xfREVGQVVMVCwKJiM0MzsjZWxzZQomIzQzOwkJLm1vZGUgPSBNUE9MX0RFRkFVTFQsCiYjNDM7I2VuZGlmCiYjNDM7CQkubm9kZW1hc2sgPSBub2RlbWFzaywKJiM0MzsJfTsKJiM0MzsKIAlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKJiM0MzsKIAkvKgotCSAqIGdsYl9jaGcgaXMgcGFzc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IGEgcGFnZSBtdXN0IGJlIHRha2VuCi0JICogZnJvbSB0aGUgZ2xvYmFsIGZyZWUgcG9vbCAoZ2xvYmFsIGNoYW5nZSkuICBnYmxfY2hnID09IDAgaW5kaWNhdGVzCi0JICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLgomIzQzOwkgKiBUcnkgdG8gZGVxdWV1ZSBmcm9tIHRoZSBwb29sIGlmIGVpdGhlcjoKJiM0MzsJICogMSkgQSByZXNlcnZhdGlvbiBleGlzdHMgKGdibF9jaGcgPT0gMCkuCiYjNDM7CSAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpCiYjNDM7CSAqICAgIHBhZ2VzIGluIHRoZSBwb29sOyB0aGlzIHByZWZlcnMgdXNpbmcgcHJlLWFsbG9jYXRlZCBwb29sCiYjNDM7CSAqICAgIHBhZ2VzIG92ZXIgYWxsb2NhdGluZyBmcmVzaCBvbmVzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvci4KIAkgKi8KLQlmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoaCwgdm1hLCBhZGRyLCBnYmxfY2hnKTsKJiM0MzsJZm9saW8gPSBOVUxMOwomIzQzOwlpZiAoIWdibF9jaGcgfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpCiYjNDM7CQlmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsICZhbXA7bXBvbGkpOwomIzQzOwogCWlmICghZm9saW8pIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJZm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChoLCB2bWEsIGFkZHIpOwotCQlpZiAoIWZvbGlvKQomIzQzOwkJZm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgJmFtcDttcG9saSk7CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbXBvbF9jb25kX3B1dChtcG9sKTsKIAkJCWdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDsKJiM0MzsJCX0KIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtoLSZndDtodWdlcGFnZV9hY3RpdmVsaXN0KTsKIAkJZm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTsKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJfQogCiYjNDM7CW1wb2xfY29uZF9wdXQobXBvbCk7CiYjNDM7CiAJLyoKIAkgKiBFaXRoZXIgZGVxdWV1ZWQgb3IgYnVkZHktYWxsb2NhdGVkIGZvbGlvIG5lZWRzIHRvIGFkZCBzcGVjaWFsCiAJICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi4KQEAgLTI5ODcsNyAmIzQzOzI5OTksNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCX0KIAl9CiAKLQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApOwomIzQzOwlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKIAkvKgogCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlLiBJZiBpdCB0dXJucyBvdXQgdGhhdAogCSAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIE1lbXBvbGljeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGhvdyBtZW1wb2xpY3kgaW50ZXJhY3RzIHdpdGggaHVnZXRsYiBhbGxvY2F0aW9ucy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCByZWZhY3RvcmluZyBzb21lIGtleSBhbGxvY2F0aW9uIGZ1bmN0aW9uczogYGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWFgIGlzIG5vdyBzcGxpdCBpbnRvIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gIGFuZCwgY3J1Y2lhbGx5LCBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2xgIGludG8gYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gLiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaXRzZWxmIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIG5ldyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBldmVuICp3b3JrcyouIEZyb20gdGhlIGluaXRpYWwgZ2xhbmNlLCBpdCBzZWVtcyBsaWtlIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGh1Z2V0bGIgcGFnZSBhbGxvY2F0aW9uIGxvZ2ljLCBkZWFsaW5nIHdpdGggbWVtcG9saWN5IGFwcGxpY2F0aW9uIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gcGFnZSBkZXF1ZXVlaW5nIGFuZCBidWRkeSBhbGxvY2F0aW9uLiBJIHNlZSBhIGNoYW5nZSB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIG5vdyBpbmNsdWRpbmcgYF9fR0ZQX1JFVFJZX01BWUZBSUxgIGV4cGxpY2l0bHksIHdoaWNoIHVzZWQgdG8gYmUgaW1wbGljaXRseSBwYXJ0IG9mIHRoZSBgZ2ZwYCB2YXJpYWJsZS4KCk5leHQsIGlzIGl0IHJlYWNoYWJsZT8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGxvb2tzIGxpa2UgYSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNvIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS4gQW5kLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlLiBVc2VyIHNwYWNlIGNhbiByZWFjaCBpdCB0aHJvdWdoIGBtbWFwYCBvZiBodWdldGxiZnMgb3IgYHNobWdldGAgd2l0aCBgU0hNX0hVR0VUTEJgLiBHb29kLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgaW52ZXN0aWdhdGlvbi4gT2theSwgdGhlIGluc3RydWN0aW9ucyBhcmUgdGVsbGluZyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgd2hpbGUgYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvYCBtaWdodCBiZSBpbnRlcmVzdGluZywgYmVpbmcgc3RhdGljLCB0aGV5IGFyZSBub3QgaWRlYWwgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyBvbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnJvbSBgbW0vaHVnZXRsYi5jYCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCB0byB0aGUga2VybmVsJiMzOTtzIEFQSXMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdHJ1Y3QgZm9saW8gXFwqYWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5NDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTUtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Ny1cdFx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5OC1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIxNjUtXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTY3LVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE4OC1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yODE1PXR5cGVkZWYgZW51bSB7XG4tLVxubW0vaHVnZXRsYi5jLTI4NDAtICovXG5tbS9odWdldGxiLmM6Mjg0MTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjg0Mi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHNpbXVsYXRpb24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKgoKUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBuYWlsIGRvd24gYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvci4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkLCBhZ2Fpbj8gQWgsIHllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYG1tL2h1Z2V0bGIuY2AuIE9rYXksIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgZGlyZWN0b3J5LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBXZWIqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX0hVR0VUTEJGU2AuIEkga25vdyB0aGF0JiMzOTtzIGEga2V5IHBpZWNlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBwcmVjb25kaXRpb25zLiBNeSBmaXJzdCBwcmlvcml0eSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfSFVHRVRMQkZTYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSB0b2dnbGUsIG9yIGFyZSB0aGVyZSBzZXZlcmFsIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIGNhbiBldmVuIGNvbnNpZGVyIGVuYWJsaW5nIHRoaXM/IFRoaXMgaXMgc3RlcCBvbmUsIGJlZm9yZSBJIHN0YXJ0IHRvIGxvb2sgYXQgYW55IG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFyb3VuZCBsaW5lIDI1MCwgZ2l2ZSBvciB0YWtlLiBUaGUgYGZzL2AgcGF0aCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgZmlsZSBzeXN0ZW0gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBwcm9iYWJseSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBUaW1lIHRvIGdldCBteSBncmVwIG9uLCBvciBtYXliZSBqdXN0IHNjcm9sbOKApiBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGhhcyB0byBvZmZlci4gSSBoYXZlIGEgaHVuY2guLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBJdCByZWxpZXMgb24gYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYCwgd2hpY2ggaXMgYSBgZGVmX2Jvb2wgbmAsIHNlbGVjdGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWcgZGVwZW5kZW5jaWVzLCBzbyBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseS4KCkluIHRoZSBwcm92aWRlZCBwYXRjaCBzbmlwcGV0LCBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgbWVtb3J5IHBvbGljeSBtb2RlLiBUaGF0JiMzOTtzIGdvb2QgdG8gbm90ZTsgaXQgbWlnaHQgY29tZSBpbnRvIHBsYXkgbGF0ZXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gVGhhdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gQW55IG90aGVyIGNvbmZpZ3MgY29tZSBpbnRvIHBsYXk/IEhtbSwgYENPTkZJR19DR1JPVVBfSFVHRVRMQmAgc2VlbXMgKnZlcnkqIHJlbGV2YW50IGhlcmUsIGFzIGl0IGxpa2VseSBpbXBhY3RzIGhvdyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZnVuY3Rpb25zLiBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLCBwcm9iYWJseSBpbiBgbW0vbWVtY29udHJvbC5jYCBvciBwZXJoYXBzIGBtbS9odWdldGxiX2Nncm91cC5jYCwgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjZ3JvdXAgaW50ZWdyYXRpb24gYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NTI9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYwOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nj1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTUyOnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1My17XG4tLVxubW0vaHVnZXRsYi5jPTI4NDE9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDAxLVxubW0vaHVnZXRsYi5jOjMwMDI6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0zMDAzLVx0Lypcbm1tL2h1Z2V0bGIuYy0zMDA0LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XG5tbS9odWdldGxiLmM6MzAwNTpcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG5tbS9odWdldGxiLmMtMzAwNi1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTM3PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNDktLyoqXG5tbS9tZW1jb250cm9sLmM6NTE1MDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTE1MS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE2MC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MTYxOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MTYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGNncm91cHMgYW5kIEh1Z2VUTEIgcGFnZXMuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgdGhhdCBmdW5jdGlvbiwgaXQmIzM5O3Mgc2l0dGluZyByaWdodCB0aGVyZSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbXMgcmVzaWRlLiBBbmQgYXMgYSBxdWljayBtZW50YWwgY2hlY2ssIGBtbS9tZW1jb250cm9sLmNgIG9mIGNvdXJzZSBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gdGhhdCBgQ09ORklHX01FTUNHYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIG1lbWNnIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIHlvdSBkb24mIzM5O3QgbmVlZCB0aGUgcmVsYXRlZCBjb2RlLiBTbyB0aGlzIGltcGxpZXMgdGhlIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIGhhbmRsaW5nIG1lbW9yeSBjaGFyZ2VzLCBsaWtlbHkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBtZW1vcnkgY2dyb3VwLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIG1lbW9yeSBjaGFyZ2luZyBhY2NvdW50aW5nIGZvciBIdWdlVExCIHBhZ2VzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjZ3JvdXAgYWNjb3VudGluZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgxCgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgcmlnaHQgYXdheSBJIHNlZSB0aGF0IGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX05VTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBhbGwga2V5IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaXRzIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZ1bmN0aW9uYWwsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIGhvdyBtZW1vcnkgcG9saWNpZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbiB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gaW5jbHVkZSBgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTGAgc2VlbXMgbGlrZSBhIHNvbGlkLCByZWFjaGFibGUgY2hhbmdlLCBpbmRpY2F0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIGJlaW5nIGFkZHJlc3NlZC4KCk15IG1haW4gZm9jdXMgc3ltYm9sIGhlcmUgaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gYWZmZWN0ZWQuIExldCBtZSBkb3VibGUtY2hlY2suIEkgc2VlIG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgdG91Y2hlZDogYGF2YWlsYWJsZV9odWdlX3BhZ2VzYCwgYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb2AuIEhvd2V2ZXIsIHRob3NlIG90aGVycyBzZWVtIHRvIGJlIHN0YXRpYyBhbmQvb3IgaW5saW5lIGZ1bmN0aW9ucy4gT2theSwgc28gYGFsbG9jX2h1Z2V0bGJfZm9saW9gICppcyogdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBodWdldGxiIGFsbG9jYXRpb24gcHJvY2VzcywgaW5jb3Jwb3JhdGluZyB0aGUgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgYWx0ZXJpbmcgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkLiBUaGUgY2hhbmdlIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBsb29rcyBsaWtlIGEgdGhvdWdodGZ1bCBhZGRpdGlvbi4gQWxsIG9mIHRoaXMgcG9pbnRzIHRvIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFyZSBhbHNvIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHNlcnZlcyBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIHllcywgaXQmIzM5O3MgY2FsbGVkIGZyb20gZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfZmF1bHRgLCBgaHVnZXRsYl9ub19wYWdlYCwgYW5kIGBodWdldGxiX3dwYC4gVGhpcyBjb25maXJtcyBpdHMgcm9sZSBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgaHVnZXRsYiBwYWdlIGFsbG9jYXRpb24uIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MTkuODUwMjEyODE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTU1OTIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBhbGxvY2F0aW9uIHRvIHVzZSBhIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGNoYW5nZXMgaG93IG1lbXBvbGljeSBpcyBhcHBsaWVkIGR1cmluZyBodWdldGxiIGFsbG9jYXRpb24uIEl0IGFsc28gbW9kaWZpZXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgX19HRlBfUkVUUllfTUFZRkFJTGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaHVnZXRsYmZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNToxOS44NTAyMjIzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg1NTU2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDA0YjUyOGY2M2M2NTMzODk1MmY5YWM0YjIxYjU0OWE1N2MyNzJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oXFxuaW5kZXggNmM5NjJkODY2ZTg2NC4uN2Y2ZmM5NTk5NjkzYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcXG5AQCAtMTYsNyArMTYsNyBAQFxcbiAgKi9cXG4gXFxuIC8qIFBvbGljaWVzICovXFxuLWVudW0ge1xcbitlbnVtIG1lbXBvbGljeV9tb2RlIHtcXG4gXFx0TVBPTF9ERUZBVUxULFxcbiBcXHRNUE9MX1BSRUZFUlJFRCxcXG4gXFx0TVBPTF9CSU5ELFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0xMzE3LDQzICsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuIFxcdHJldHVybiBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgLSBoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgbG9uZyBnYmxfY2hnKVxcbi17XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbi1cXHRnZnBfdCBnZnBfbWFzaztcXG4tXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK3N0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQge1xcbiBcXHRpbnQgbmlkO1xcbitcXHRub2RlbWFza190ICpub2RlbWFzaztcXG4rXFx0ZW51bSBtZW1wb2xpY3lfbW9kZSBtb2RlO1xcbit9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogZ2JsX2NoZz09MSBtZWFucyB0aGUgYWxsb2NhdGlvbiByZXF1aXJlcyBhIG5ldyBwYWdlIHRoYXQgd2FzIG5vdFxcbi1cXHQgKiByZXNlcnZlZCBiZWZvcmUuICBNYWtpbmcgc3VyZSB0aGVyZSdzIGF0IGxlYXN0IG9uZSBmcmVlIHBhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpZiAoZ2JsX2NoZyBcXHUwMDI2XFx1MDAyNiAhYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuLVxcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHJlc3MsIGdmcF9tYXNrLCBcXHUwMDI2bXBvbCwgXFx1MDAyNm5vZGVtYXNrKTtcXG4rc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSlcXG4re1xcbitcXHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVxcdTAwM2Vub2RlbWFzaztcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuIFxcbi1cXHRpZiAobXBvbF9pc19wcmVmZXJyZWRfbWFueShtcG9sKSkge1xcbitcXHRpZiAobXBvbGktXFx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSkge1xcbiBcXHRcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0bmlkLCBub2RlbWFzayk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbm9kZW1hc2spO1xcbiBcXG4gXFx0XFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cXG4gXFx0XFx0bm9kZW1hc2sgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvKVxcbitcXHRpZiAoIWZvbGlvKSB7XFxuIFxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIG5vZGVtYXNrKTtcXG4tXFxuLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbm9kZW1hc2spO1xcbitcXHR9XFxuIFxcdHJldHVybiBmb2xpbztcXG4tXFxuLWVycjpcXG4tXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxuQEAgLTIxNDgsMzIgKzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBVc2UgdGhlIFZNQSdzIG1wb2xpY3kgdG8gYWxsb2NhdGUgYSBodWdlIHBhZ2UgZnJvbSB0aGUgYnVkZHkuXFxuLSAqL1xcbiBzdGF0aWNcXG4tc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChzdHJ1Y3QgaHN0YXRlICpoLFxcbi1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4rXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4tXFx0aW50IG5pZDtcXG4tXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK1xcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXFx1MDAzZW5vZGVtYXNrO1xcbiBcXG4tXFx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbi1cXHRpZiAobXBvbF9pc19wcmVmZXJyZWRfbWFueShtcG9sKSkge1xcbitcXHRpZiAobXBvbGktXFx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSkge1xcbiBcXHRcXHRnZnBfdCBnZnAgPSBnZnBfbWFzayBcXHUwMDI2IH4oX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBfX0dGUF9OT0ZBSUwpO1xcbiBcXG4tXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saS1cXHUwMDNlbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbm9kZW1hc2spO1xcbiBcXG4gXFx0XFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cXG4gXFx0XFx0bm9kZW1hc2sgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvKVxcbi1cXHRcXHRmb2xpbyA9IGFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxuLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcdGlmICghZm9saW8pIHtcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLVxcdTAwM2VuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBub2RlbWFzayk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbiBcXG5AQCAtMjg2Myw3ICsyODQ5LDExIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aW50IHJldCwgaWR4O1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7XFxuLVxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XFxuK1xcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XFxuK1xcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4rXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4rXFx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRpZHggPSBoc3RhdGVfaW5kZXgoaCk7XFxuIFxcbkBAIC0yOTIyLDI0ICsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwX3Jlc2VydmF0aW9uO1xcbiBcXG4rXFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuK1xcdG5pZCA9IGh1Z2Vfbm9kZSh2bWEsIGFkZHIsIGdmcCwgXFx1MDAyNm1wb2wsIFxcdTAwMjZub2RlbWFzayk7XFxuK1xcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xcbitcXHRcXHQubmlkID0gbmlkLFxcbisjaWZkZWYgQ09ORklHX05VTUFcXG4rXFx0XFx0Lm1vZGUgPSBtcG9sID8gbXBvbC1cXHUwMDNlbW9kZSA6IE1QT0xfREVGQVVMVCxcXG4rI2Vsc2VcXG4rXFx0XFx0Lm1vZGUgPSBNUE9MX0RFRkFVTFQsXFxuKyNlbmRpZlxcbitcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4rXFx0fTtcXG4rXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuK1xcbiBcXHQvKlxcbi1cXHQgKiBnbGJfY2hnIGlzIHBhc3NlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhIHBhZ2UgbXVzdCBiZSB0YWtlblxcbi1cXHQgKiBmcm9tIHRoZSBnbG9iYWwgZnJlZSBwb29sIChnbG9iYWwgY2hhbmdlKS4gIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXNcXG4tXFx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxcbitcXHQgKiBUcnkgdG8gZGVxdWV1ZSBmcm9tIHRoZSBwb29sIGlmIGVpdGhlcjpcXG4rXFx0ICogMSkgQSByZXNlcnZhdGlvbiBleGlzdHMgKGdibF9jaGcgPT0gMCkuXFxuK1xcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXFxuK1xcdCAqICAgIHBhZ2VzIGluIHRoZSBwb29sOyB0aGlzIHByZWZlcnMgdXNpbmcgcHJlLWFsbG9jYXRlZCBwb29sXFxuK1xcdCAqICAgIHBhZ2VzIG92ZXIgYWxsb2NhdGluZyBmcmVzaCBvbmVzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG4gXFx0ICovXFxuLVxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShoLCB2bWEsIGFkZHIsIGdibF9jaGcpO1xcbitcXHRmb2xpbyA9IE5VTEw7XFxuK1xcdGlmICghZ2JsX2NoZyB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcXG4rXFx0XFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcXHUwMDI2bXBvbGkpO1xcbitcXG4gXFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb193aXRoX21wb2woaCwgdm1hLCBhZGRyKTtcXG4tXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgXFx1MDAyNm1wb2xpKTtcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4gXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4gXFx0XFx0LyogRmFsbCB0aHJvdWdoICovXFxuIFxcdH1cXG4gXFxuK1xcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBFaXRoZXIgZGVxdWV1ZWQgb3IgYnVkZHktYWxsb2NhdGVkIGZvbGlvIG5lZWRzIHRvIGFkZCBzcGVjaWFsXFxuIFxcdCAqIG1hcmsgdG8gdGhlIGZvbGlvIHdoZW4gaXQgY29uc3VtZXMgYSBnbG9iYWwgcmVzZXJ2YXRpb24uXFxuQEAgLTI5ODcsNyArMjk5OSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnApO1xcbitcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4gXFx0LypcXG4gXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxuIFxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjIxLjAxOTM5MzM2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTI2MzkyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgYWxsb2NhdGlvbiB0byB1c2UgYSBuZXcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCBjaGFuZ2VzIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYF9fR0ZQX1JFVFJZX01BWUZBSUxgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQwNGI1MjhmNjNjNjUzMzg5NTJmOWFjNGIyMWI1NDlhNTdjMjcyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbmluZGV4IDZjOTYyZDg2NmU4NjQuLjdmNmZjOTU5OTY5M2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaFxuQEAgLTE2LDcgKzE2LDcgQEBcbiAgKi9cbiBcbiAvKiBQb2xpY2llcyAqL1xuLWVudW0ge1xuK2VudW0gbWVtcG9saWN5X21vZGUge1xuIFx0TVBPTF9ERUZBVUxULFxuIFx0TVBPTF9QUkVGRVJSRUQsXG4gXHRNUE9MX0JJTkQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li5hMTFjYjkxOWUwMGZlIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzE3LDQzICsxMzE3LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF2YWlsYWJsZV9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXG4gXHRyZXR1cm4gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgLSBoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcztcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGxvbmcgZ2JsX2NoZylcbi17XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbi1cdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4tXHRnZnBfdCBnZnBfbWFzaztcbi1cdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK3N0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQge1xuIFx0aW50IG5pZDtcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK1x0ZW51bSBtZW1wb2xpY3lfbW9kZSBtb2RlO1xuK307XG4gXG4tXHQvKlxuLVx0ICogZ2JsX2NoZz09MSBtZWFucyB0aGUgYWxsb2NhdGlvbiByZXF1aXJlcyBhIG5ldyBwYWdlIHRoYXQgd2FzIG5vdFxuLVx0ICogcmVzZXJ2ZWQgYmVmb3JlLiAgTWFraW5nIHN1cmUgdGhlcmUncyBhdCBsZWFzdCBvbmUgZnJlZSBwYWdlLlxuLVx0ICovXG4tXHRpZiAoZ2JsX2NoZyBcdTAwMjZcdTAwMjYgIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkcmVzcywgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbitzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpKVxuK3tcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrID0gbXBvbGktXHUwMDNlbm9kZW1hc2s7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcbi1cdGlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7XG4rXHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0bmlkLCBub2RlbWFzayk7XG4rXHRcdFx0XHRcdFx0ICAgICAgIG1wb2xpLVx1MDAzZW5pZCxcbitcdFx0XHRcdFx0XHQgICAgICAgbm9kZW1hc2spO1xuIFxuIFx0XHQvKiBGYWxsYmFjayB0byBhbGwgbm9kZXMgaWYgcGFnZT09TlVMTCAqL1xuIFx0XHRub2RlbWFzayA9IE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvKVxuK1x0aWYgKCFmb2xpbykge1xuIFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdG5pZCwgbm9kZW1hc2spO1xuLVxuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbitcdFx0XHRcdFx0XHQgICAgICAgbXBvbGktXHUwMDNlbmlkLFxuK1x0XHRcdFx0XHRcdCAgICAgICBub2RlbWFzayk7XG4rXHR9XG4gXHRyZXR1cm4gZm9saW87XG4tXG4tZXJyOlxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuQEAgLTIxNDgsMzIgKzIxMzgsMjggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4tLypcbi0gKiBVc2UgdGhlIFZNQSdzIG1wb2xpY3kgdG8gYWxsb2NhdGUgYSBodWdlIHBhZ2UgZnJvbSB0aGUgYnVkZHkuXG4tICovXG4gc3RhdGljXG4tc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbChzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3N0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuK1x0XHRnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGkpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4tXHRpbnQgbmlkO1xuLVx0bm9kZW1hc2tfdCAqbm9kZW1hc2s7XG4rXHRub2RlbWFza190ICpub2RlbWFzayA9IG1wb2xpLVx1MDAzZW5vZGVtYXNrO1xuIFxuLVx0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwX21hc2ssIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbi1cdGlmIChtcG9sX2lzX3ByZWZlcnJlZF9tYW55KG1wb2wpKSB7XG4rXHRpZiAobXBvbGktXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKSB7XG4gXHRcdGdmcF90IGdmcCA9IGdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfTk9GQUlMKTtcbiBcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBuaWQsIG5vZGVtYXNrKTtcbitcdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saS1cdTAwM2VuaWQsXG4rXHRcdFx0XHRcdFx0ICAgIG5vZGVtYXNrKTtcbiBcbiBcdFx0LyogRmFsbGJhY2sgdG8gYWxsIG5vZGVzIGlmIHBhZ2U9PU5VTEwgKi9cbiBcdFx0bm9kZW1hc2sgPSBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpbylcbi1cdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xuLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbitcdGlmICghZm9saW8pIHtcbitcdFx0Zm9saW8gPSBhbGxvY19zdXJwbHVzX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG1wb2xpLVx1MDAzZW5pZCxcbitcdFx0XHRcdFx0XHQgICAgbm9kZW1hc2spO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbkBAIC0yODYzLDcgKzI4NDksMTEgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJldCwgaWR4O1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbi1cdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4rXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuK1x0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuK1x0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbitcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuK1x0aW50IG5pZDtcbiBcbiBcdGlkeCA9IGhzdGF0ZV9pbmRleChoKTtcbiBcbkBAIC0yOTIyLDI0ICsyOTEyLDQ2IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cF9yZXNlcnZhdGlvbjtcbiBcbitcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuK1x0bmlkID0gaHVnZV9ub2RlKHZtYSwgYWRkciwgZ2ZwLCBcdTAwMjZtcG9sLCBcdTAwMjZub2RlbWFzayk7XG4rXHRtcG9saSA9IChzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkKXtcbitcdFx0Lm5pZCA9IG5pZCxcbisjaWZkZWYgQ09ORklHX05VTUFcbitcdFx0Lm1vZGUgPSBtcG9sID8gbXBvbC1cdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxuKyNlbHNlXG4rXHRcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxuKyNlbmRpZlxuK1x0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbitcdH07XG4rXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4rXG4gXHQvKlxuLVx0ICogZ2xiX2NoZyBpcyBwYXNzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBwYWdlIG11c3QgYmUgdGFrZW5cbi1cdCAqIGZyb20gdGhlIGdsb2JhbCBmcmVlIHBvb2wgKGdsb2JhbCBjaGFuZ2UpLiAgZ2JsX2NoZyA9PSAwIGluZGljYXRlc1xuLVx0ICogYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoZSBhbGxvY2F0aW9uLlxuK1x0ICogVHJ5IHRvIGRlcXVldWUgZnJvbSB0aGUgcG9vbCBpZiBlaXRoZXI6XG4rXHQgKiAxKSBBIHJlc2VydmF0aW9uIGV4aXN0cyAoZ2JsX2NoZyA9PSAwKS5cbitcdCAqIDIpIE5vIHJlc2VydmF0aW9uIGV4aXN0cywgYnV0IHRoZXJlIGFyZSB1bnJlc2VydmVkIChhdmFpbGFibGUpXG4rXHQgKiAgICBwYWdlcyBpbiB0aGUgcG9vbDsgdGhpcyBwcmVmZXJzIHVzaW5nIHByZS1hbGxvY2F0ZWQgcG9vbFxuK1x0ICogICAgcGFnZXMgb3ZlciBhbGxvY2F0aW5nIGZyZXNoIG9uZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuIFx0ICovXG4tXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoaCwgdm1hLCBhZGRyLCBnYmxfY2hnKTtcbitcdGZvbGlvID0gTlVMTDtcbitcdGlmICghZ2JsX2NoZyB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcbitcdFx0Zm9saW8gPSBkZXF1ZXVlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBcdTAwMjZtcG9saSk7XG4rXG4gXHRpZiAoIWZvbGlvKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9fd2l0aF9tcG9sKGgsIHZtYSwgYWRkcik7XG4tXHRcdGlmICghZm9saW8pXG4rXHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIFx1MDAyNm1wb2xpKTtcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXHRcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuK1x0XHR9XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZoLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuIFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuIFx0XHQvKiBGYWxsIHRocm91Z2ggKi9cbiBcdH1cbiBcbitcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4rXG4gXHQvKlxuIFx0ICogRWl0aGVyIGRlcXVldWVkIG9yIGJ1ZGR5LWFsbG9jYXRlZCBmb2xpbyBuZWVkcyB0byBhZGQgc3BlY2lhbFxuIFx0ICogbWFyayB0byB0aGUgZm9saW8gd2hlbiBpdCBjb25zdW1lcyBhIGdsb2JhbCByZXNlcnZhdGlvbi5cbkBAIC0yOTg3LDcgKzI5OTksNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCk7XG4rXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbiBcdC8qXG4gXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZS4gSWYgaXQgdHVybnMgb3V0IHRoYXRcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCB0aGVuIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHBhZ2UgYW5kXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNToyMS4wMTkzOTQzNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDk0MzYwNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBNZW1wb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBtbS9odWdldGxiLmNgIGFuZCBgaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIGhvdyBtZW1wb2xpY3kgaW50ZXJhY3RzIHdpdGggaHVnZXRsYiBhbGxvY2F0aW9ucy4gVGhleSdyZSBpbnRyb2R1Y2luZyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIHJlZmFjdG9yaW5nIHNvbWUga2V5IGFsbG9jYXRpb24gZnVuY3Rpb25zOiBgZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYWAgaXMgbm93IHNwbGl0IGludG8gYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AgYW5kLCBjcnVjaWFsbHksIGBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvX3dpdGhfbXBvbGAgaW50byBgYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpb2AuIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpdHNlbGYgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlc2UgbmV3IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZXZlbiAqd29ya3MqLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBodWdldGxiIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYywgZGVhbGluZyB3aXRoIG1lbXBvbGljeSBhcHBsaWNhdGlvbiBhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHBhZ2UgZGVxdWV1ZWluZyBhbmQgYnVkZHkgYWxsb2NhdGlvbi4gSSBzZWUgYSBjaGFuZ2UgdG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBub3cgaW5jbHVkaW5nIGBfX0dGUF9SRVRSWV9NQVlGQUlMYCBleHBsaWNpdGx5LCB3aGljaCB1c2VkIHRvIGJlIGltcGxpY2l0bHkgcGFydCBvZiB0aGUgYGdmcGAgdmFyaWFibGUuXG5cbk5leHQsIGlzIGl0IHJlYWNoYWJsZT8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGxvb2tzIGxpa2UgYSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNvIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS4gQW5kLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlLiBVc2VyIHNwYWNlIGNhbiByZWFjaCBpdCB0aHJvdWdoIGBtbWFwYCBvZiBodWdldGxiZnMgb3IgYHNobWdldGAgd2l0aCBgU0hNX0hVR0VUTEJgLiBHb29kLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLiBPa2F5LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFNvLCB3aGlsZSBgZGVxdWV1ZV9odWdldGxiX2ZvbGlvYCBhbmQgYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gIG1pZ2h0IGJlIGludGVyZXN0aW5nLCBiZWluZyBzdGF0aWMsIHRoZXkgYXJlIG5vdCBpZGVhbCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIG9uIGBhbGxvY19odWdldGxiX2ZvbGlvYCBmcm9tIGBtbS9odWdldGxiLmNgIGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCdzIEFQSXMuIExldCdzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjI5LjExMzc1Njg0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwNzc5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZm9saW8gXFxcXCphbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5NDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTctXFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5OC1cXHRcXHRcXHRcXHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2OTk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjUtXFxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjctXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODE1PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5tbS9odWdldGxiLmMtMjg0MC0gKi9cXG5tbS9odWdldGxiLmM6Mjg0MTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTI4NDItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzEuNjY0NTQyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQyMTI2MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc2ltdWxhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKipcblxuUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQsIGFnYWluPyBBaCwgeWVzLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBtbS9odWdldGxiLmNgLiBPa2F5LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGF0IGRpcmVjdG9yeS4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzUuNzA2NjcxMjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU0Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTozNS44MTIyMTgyODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUzNTM4MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBXZWIqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19IVUdFVExCRlNgLiBJIGtub3cgdGhhdCdzIGEga2V5IHBpZWNlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyBwcmVjb25kaXRpb25zLiBNeSBmaXJzdCBwcmlvcml0eSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19IVUdFVExCRlNgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHRvZ2dsZSwgb3IgYXJlIHRoZXJlIHNldmVyYWwgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgZW5hYmxpbmcgdGhpcz8gVGhpcyBpcyBzdGVwIG9uZSwgYmVmb3JlIEkgc3RhcnQgdG8gbG9vayBhdCBhbnkgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6MzkuMTY1NzU4ODc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDYyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTozOS4yMjQyMjcwMzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2NjE5MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgaXQncyBhcm91bmQgbGluZSAyNTAsIGdpdmUgb3IgdGFrZS4gVGhlIGBmcy9gIHBhdGggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBzbyBJJ20gbG9va2luZyBmb3IgZmlsZSBzeXN0ZW0gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBwcm9iYWJseSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBUaW1lIHRvIGdldCBteSBncmVwIG9uLCBvciBtYXliZSBqdXN0IHNjcm9sbOKApiBsZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gaGFzIHRvIG9mZmVyLiBJIGhhdmUgYSBodW5jaC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6NDIuNDgwODQ5NTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjQyLjQ4MDk0NDAwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc0ODcxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIGFuZCBSZWxhdGVkIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEhVR0VUTEJGU2AgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEl0IHJlbGllcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLCB3aGljaCBpcyBhIGBkZWZfYm9vbCBuYCwgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlnIGRlcGVuZGVuY2llcywgc28gSSBzaG91bGQgbG9vayBtb3JlIGNsb3NlbHkuXG5cbkluIHRoZSBwcm92aWRlZCBwYXRjaCBzbmlwcGV0LCBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgbWVtb3J5IHBvbGljeSBtb2RlLiBUaGF0J3MgZ29vZCB0byBub3RlOyBpdCBtaWdodCBjb21lIGludG8gcGxheSBsYXRlci5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gVGhhdCdzIGNhbGxlZCB3aXRoaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBBbnkgb3RoZXIgY29uZmlncyBjb21lIGludG8gcGxheT8gSG1tLCBgQ09ORklHX0NHUk9VUF9IVUdFVExCYCBzZWVtcyAqdmVyeSogcmVsZXZhbnQgaGVyZSwgYXMgaXQgbGlrZWx5IGltcGFjdHMgaG93IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmdW5jdGlvbnMuIEkgc2hvdWxkIGNoZWNrIHRoZSBzb3VyY2UsIHByb2JhYmx5IGluIGBtbS9tZW1jb250cm9sLmNgIG9yIHBlcmhhcHMgYG1tL2h1Z2V0bGJfY2dyb3VwLmNgLCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNncm91cCBpbnRlZ3JhdGlvbiBhZmZlY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MzU6NDguNTU1ODE4OTYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NzkzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjUyPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNDY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTEtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MjpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODQxPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDAxLVxcbm1tL2h1Z2V0bGIuYzozMDAyOlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0zMDAzLVxcdC8qXFxubW0vaHVnZXRsYi5jLTMwMDQtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUuIElmIGl0IHR1cm5zIG91dCB0aGF0XFxubW0vaHVnZXRsYi5jOjMwMDU6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIHRoZW4gaW1tZWRpYXRlbHkgZnJlZSB0aGUgcGFnZSBhbmRcXG5tbS9odWdldGxiLmMtMzAwNi1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTM3PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0OS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTE1MDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUxNTEtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE2MC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE2MTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUxNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTo1MC44NDM2MjA2NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MDM3MzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgY2dyb3VwcyBhbmQgSHVnZVRMQiBwYWdlcy4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCB0aGF0IGZ1bmN0aW9uLCBpdCdzIHNpdHRpbmcgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbXMgcmVzaWRlLiBBbmQgYXMgYSBxdWljayBtZW50YWwgY2hlY2ssIGBtbS9tZW1jb250cm9sLmNgIG9mIGNvdXJzZSBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gdGhhdCBgQ09ORklHX01FTUNHYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIG1lbWNnIGlzbid0IGVuYWJsZWQsIHRoZW4geW91IGRvbid0IG5lZWQgdGhlIHJlbGF0ZWQgY29kZS4gU28gdGhpcyBpbXBsaWVzIHRoZSBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBoYW5kbGluZyBtZW1vcnkgY2hhcmdlcywgbGlrZWx5IHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgbWVtb3J5IGNncm91cC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIG1lbW9yeSBjaGFyZ2luZyBhY2NvdW50aW5nIGZvciBIdWdlVExCIHBhZ2VzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjZ3JvdXAgYWNjb3VudGluZyBzY2hlbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzozNTo1NC41MzM5OTYwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQ1MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM1OjU0LjYyMDU0NzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTg4MDc3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCByaWdodCBhd2F5IEkgc2VlIHRoYXQgYENPTkZJR19NRU1DR2AsIGBDT05GSUdfTlVNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBrZXkgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBpdHMgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgZnVuY3Rpb25hbCwgZ2l2ZW4gdGhlIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBwb2xpY2llcyBhcmUgaGFuZGxlZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBpbmNsdWRlIGBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMYCBzZWVtcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjaGFuZ2UsIGluZGljYXRpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgYmVpbmcgYWRkcmVzc2VkLlxuXG5NeSBtYWluIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFmZmVjdGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNlZSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIHRvdWNoZWQ6IGBhdmFpbGFibGVfaHVnZV9wYWdlc2AsIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW9gLiBIb3dldmVyLCB0aG9zZSBvdGhlcnMgc2VlbSB0byBiZSBzdGF0aWMgYW5kL29yIGlubGluZSBmdW5jdGlvbnMuIE9rYXksIHNvIGBhbGxvY19odWdldGxiX2ZvbGlvYCAqaXMqIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGUgaHVnZXRsYiBhbGxvY2F0aW9uIHByb2Nlc3MsIGluY29ycG9yYXRpbmcgdGhlIG5ldyBgc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZGAgYW5kIGFsdGVyaW5nIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZC4gVGhlIGNoYW5nZSB0byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgbG9va3MgbGlrZSBhIHRob3VnaHRmdWwgYWRkaXRpb24uIEFsbCBvZiB0aGlzIHBvaW50cyB0byBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhcmUgYWxzbyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHNlcnZlcyBhcyBhbiBBUEkgZW50cnlwb2ludC4gQW5kIHllcywgaXQncyBjYWxsZWQgZnJvbSBmdW5jdGlvbnMgbGlrZSBgaHVnZXRsYl9mYXVsdGAsIGBodWdldGxiX25vX3BhZ2VgLCBhbmQgYGh1Z2V0bGJfd3BgLiBUaGlzIGNvbmZpcm1zIGl0cyByb2xlIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBodWdldGxiIHBhZ2UgYWxsb2NhdGlvbi4gSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjM2OjA0LjQxOTM1NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MjE5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgYWxsb2NhdGlvbiB0byB1c2UgYSBuZXcgYHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWRgIGFuZCBjaGFuZ2VzIGhvdyBtZW1wb2xpY3kgaXMgYXBwbGllZCBkdXJpbmcgaHVnZXRsYiBhbGxvY2F0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB0byBleHBsaWNpdGx5IGluY2x1ZGUgYF9fR0ZQX1JFVFJZX01BWUZBSUxgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGh1Z2V0bGJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIGFsbG9jYXRpb24gdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkYCBhbmQgY2hhbmdlcyBob3cgbWVtcG9saWN5IGlzIGFwcGxpZWQgZHVyaW5nIGh1Z2V0bGIgYWxsb2NhdGlvbi4gSXQgYWxzbyBtb2RpZmllcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdG8gZXhwbGljaXRseSBpbmNsdWRlIGBfX0dGUF9SRVRSWV9NQVlGQUlMYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBodWdldGxiZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[1] Phase: Succeeded StartedAt: 2026-08-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 17:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2] Phase: Succeeded StartedAt: 2026-08-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 17:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:16 +0000 UTC FinishedAt: 2026-08-03 17:36:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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-workflowrxv52/series-workflowrxv52-convert-artifact-2307588221/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:26 +0000 UTC FinishedAt: 2026-08-03 17:54:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:26 +0000 UTC FinishedAt: 2026-08-03 17:54:26 +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:*ace8cf28-5d6d-4495-a65f-7873beb6c93b,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-workflowrxv52/series-workflowrxv52-convert-artifact-2307588221/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": "a1fb2d40-c387-4784-8b98-1c862ff9274a", "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-workflowrxv52/series-workflowrxv52-build-action-3029330355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:36:26 +0000 UTC FinishedAt: 2026-08-03 17:54:16 +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:*ace8cf28-5d6d-4495-a65f-7873beb6c93b,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-workflowrxv52/series-workflowrxv52-convert-artifact-2307588221/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": "a1fb2d40-c387-4784-8b98-1c862ff9274a", "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-workflowrxv52/series-workflowrxv52-build-action-3029330355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:26 +0000 UTC FinishedAt: 2026-08-03 17:54:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:26 +0000 UTC FinishedAt: 2026-08-03 17:54:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:26 +0000 UTC FinishedAt: 2026-08-03 17:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:26 +0000 UTC FinishedAt: 2026-08-03 17:54:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-workflowrxv52/series-workflowrxv52-convert-artifact-1251482584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:36 +0000 UTC FinishedAt: 2026-08-03 17:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:54:36 +0000 UTC FinishedAt: 2026-08-03 17:56:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1fb2d40-c387-4784-8b98-1c862ff9274a,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-workflowrxv52/series-workflowrxv52-build-action-3029330355/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-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:56:43 +0000 UTC FinishedAt: 2026-08-03 17:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:56:43 +0000 UTC FinishedAt: 2026-08-03 17:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:56:43 +0000 UTC FinishedAt: 2026-08-03 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:56:43 +0000 UTC FinishedAt: 2026-08-03 18:17:15 +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:*ace8cf28-5d6d-4495-a65f-7873beb6c93b,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-workflowrxv52/series-workflowrxv52-convert-artifact-1251482584/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": "11f1de32-63fe-46e9-8cc9-744670c67197", "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-workflowrxv52/series-workflowrxv52-build-action-3007563076/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 17:56:43 +0000 UTC FinishedAt: 2026-08-03 18:16:37 +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:*ace8cf28-5d6d-4495-a65f-7873beb6c93b,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-workflowrxv52/series-workflowrxv52-convert-artifact-1251482584/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": "11f1de32-63fe-46e9-8cc9-744670c67197", "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-workflowrxv52/series-workflowrxv52-build-action-3007563076/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:17:15 +0000 UTC FinishedAt: 2026-08-03 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:17:15 +0000 UTC FinishedAt: 2026-08-03 18:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:17:15 +0000 UTC FinishedAt: 2026-08-03 18:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:17:15 +0000 UTC FinishedAt: 2026-08-03 18:18:54 +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:*11f1de32-63fe-46e9-8cc9-744670c67197,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-workflowrxv52/series-workflowrxv52-build-action-3007563076/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-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +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":["alloc_hugetlb_folio"],"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:*a1fb2d40-c387-4784-8b98-1c862ff9274a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11f1de32-63fe-46e9-8cc9-744670c67197,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-workflowrxv52/series-workflowrxv52-build-action-3029330355/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-workflowrxv52/series-workflowrxv52-build-action-3007563076/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 18:19:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 18:19:10 +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":["alloc_hugetlb_folio"],"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-workflowrxv52/series-workflowrxv52-convert-artifact-357192881/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 18:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:04 +0000 UTC FinishedAt: 2026-08-03 18:19:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:05 +0000 UTC FinishedAt: 2026-08-03 18:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:15 +0000 UTC FinishedAt: 2026-08-03 21:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxv52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"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":["alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","MEMCG"],"series_id":"b5959410-1a55-4ff3-b7b1-e4dc36e2f46b","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-03 18:19:15 +0000 UTC FinishedAt: 2026-08-03 21:21:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1fb2d40-c387-4784-8b98-1c862ff9274a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11f1de32-63fe-46e9-8cc9-744670c67197,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-workflowrxv52/series-workflowrxv52-build-action-3029330355/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-workflowrxv52/series-workflowrxv52-build-action-3007563076/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-workflowrxv52/series-workflowrxv52-convert-artifact-357192881/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,}