Name: series-workfloww24xr Phase: Succeeded StartedAt: 2026-06-29 20:35:54 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[0] Phase: Succeeded StartedAt: 2026-06-29 20:35:54 +0000 UTC FinishedAt: 2026-06-29 20:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 20:35:54 +0000 UTC FinishedAt: 2026-06-29 20:50:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "series_id": "c8a1c080-2e52-47df-bf1d-e5f2fdb213fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "napi_kthread_create", "napi_stop_kthread", "napi_set_threaded", "netif_set_threaded", "napi_save_config", "__netif_napi_del_locked", "napi_thread_wait", "netdev_napi_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV9rdGhyZWFkX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuYXBpX3N0b3Bfa3RocmVhZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmFwaV9zYXZlX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtfX25ldGlmX25hcGlfZGVsX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZF93YWl0JiMzNDssCiAgICAmIzM0O25ldGRldl9uYXBpX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTViMTAxMmM1MTUxMDQ4YWYwYWM1YjVhNTRiYWJhMTkxYzRiYmUyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDIwOjUwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RydWN0IGRzYV9wb3J0O1xuIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuO1xuIHN0cnVjdCBtYWNzZWNfY29udGV4dDtcbiBzdHJ1Y3QgbWFjc2VjX29wcztcbiYjNDM7c3RydWN0IG5hcGlfc3RydWN0O1xuIHN0cnVjdCBuZXRkZXZfY29uZmlnO1xuIHN0cnVjdCBuZXRkZXZfbmFtZV9ub2RlO1xuIHN0cnVjdCBzZF9mbG93X2xpbWl0O1xuQEAgLTM2Myw2ICYjNDM7MzY0LDEwIEBAIHN0cnVjdCBncm9fbm9kZSB7XG4gXHR1MzJcdFx0XHRjYWNoZWRfbmFwaV9pZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4mIzQzO307XG4mIzQzO1xuIC8qXG4gICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWdcbiAgKi9cbkBAIC0zNzEsNiAmIzQzOzM3NiwxMiBAQCBzdHJ1Y3QgbmFwaV9jb25maWcge1xuIFx0dTY0IGlycV9zdXNwZW5kX3RpbWVvdXQ7XG4gXHR1MzIgZGVmZXJfaGFyZF9pcnFzO1xuIFx0Y3B1bWFza190IGFmZmluaXR5X21hc2s7XG4mIzQzO1x0LyogdGhyZWFkIGFuZCB0aHJlYWRfY3R4IG1pcnJvcnMgZmllbGRzIG9mIG5hcGlfc3RydWN0IHdoZW4gbmFwaV9zdHJ1Y3RcbiYjNDM7XHQgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZVxuJiM0MztcdCAqIHNvbGUgcmVmZXJlbmNlIHRvIHRoZSBub3cgcGFya2VkIGt0aHJlYWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eDtcbiBcdHU4IHRocmVhZGVkO1xuIFx0dW5zaWduZWQgaW50IG5hcGlfaWQ7XG4gfTtcbkBAIC00MDQsNiAmIzQzOzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgaHJ0aW1lclx0XHR0aW1lcjtcbiBcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cbiBcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KnRocmVhZDtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4XHQqdGhyZWFkX2N0eDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0Z3JvX2ZsdXNoX3RpbWVvdXQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGlycV9zdXNwZW5kX3RpbWVvdXQ7XG4gXHR1MzJcdFx0XHRkZWZlcl9oYXJkX2lycXM7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNGIzZDVjZmRmNmUwMGYuLmM4MTk5MmM5MjlkOWQ1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTY0NywyMCAmIzQzOzE2NDcsNDUgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG4gXG4gc3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbiB7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IE5VTEw7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiYjNDM7XHRpZiAobi1cdTAwM2Vjb25maWcgXHUwMDI2XHUwMDI2IG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bi1cdTAwM2V0aHJlYWRfY3R4ID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eDtcbiYjNDM7XHRcdG4tXHUwMDNldGhyZWFkID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkO1xuJiM0MztcdFx0V1JJVEVfT05DRShuLVx1MDAzZXRocmVhZF9jdHgtXHUwMDNlbmFwaSwgbik7XG4mIzQzO1x0XHRrdGhyZWFkX3VucGFyayhuLVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRocmVhZF9jdHggPSBrdnphbGxvY19vYmooKnRocmVhZF9jdHgpO1xuJiM0MztcdGlmICghdGhyZWFkX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiBcdC8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpblxuIFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xuIFx0ICogd2FybmluZyBhbmQgd29yayB3aXRoIGxvYWRhdmcuXG4gXHQgKi9cbi1cdG4tXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcJiMzNDtuYXBpLyVzLSVkXCYjMzQ7LFxuJiM0MztcdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG4mIzQzO1x0bi1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFwmIzM0O25hcGkvJXMtJWRcJiMzNDssXG4gXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuIFx0aWYgKElTX0VSUihuLVx1MDAzZXRocmVhZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihuLVx1MDAzZXRocmVhZCk7XG4gXHRcdHByX2VycihcJiMzNDtrdGhyZWFkX3J1biBmYWlsZWQgd2l0aCBlcnIgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdG4tXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdGdvdG8gZnJlZV90aHJlYWRfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRuLVx1MDAzZXRocmVhZF9jdHggPSB0aHJlYWRfY3R4O1xuJiM0MztcdGlmIChuLVx1MDAzZWNvbmZpZykge1xuJiM0MztcdFx0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkID0gbi1cdTAwM2V0aHJlYWQ7XG4mIzQzO1x0XHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfdGhyZWFkX2N0eDpcbiYjNDM7XHRrdmZyZWUodGhyZWFkX2N0eCk7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtNzE4Myw3ICYjNDM7NzIwOCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHR9XG4gXG4gXHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuIFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdG5hcGktXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0aWYgKG5hcGktXHUwMDNlY29uZmlnKSB7XG4mIzQzO1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0bmFwaS1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5AQCAtNzE5OSwxMyAmIzQzOzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4ge1xuLVx0aWYgKHRocmVhZGVkKSB7XG4tXHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0XHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcbiYjNDM7XHRpZiAodGhyZWFkZWQgXHUwMDI2XHUwMDI2ICFuYXBpLVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0aW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7XG4gXG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdHJldHVybiBlcnI7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRpZiAobmFwaS1cdTAwM2Vjb25maWcpXG5AQCAtNzI1NSw4ICYjNDM7NzI4NCwxNSBAQCBpbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xuIFxuIFx0LyogT3ZlcnJpZGUgdGhlIGNvbmZpZyBmb3IgYWxsIE5BUElzIGV2ZW4gaWYgY3VycmVudGx5IG5vdCBsaXN0ZWQgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZGVkID0gdGhyZWFkZWQ7XG4mIzQzO1x0XHRpZiAoIXRocmVhZGVkIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XG4mIzQzO1x0XHRcdGt0aHJlYWRfc3RvcChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKTtcbiYjNDM7XHRcdFx0a3ZmcmVlKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4ID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC03NTAxLDYgJiM0Mzs3NTM3LDggQEAgc3RhdGljIHZvaWQgbmFwaV9zYXZlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4gXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVx1MDAzZWRlZmVyX2hhcmRfaXJxcztcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWdyb19mbHVzaF90aW1lb3V0ID0gbi1cdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQgPSBuLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQ7XG4mIzQzO1x0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkID0gbi1cdTAwM2V0aHJlYWQ7XG4mIzQzO1x0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IG4tXHUwMDNldGhyZWFkX2N0eDtcbiBcdG5hcGlfaGFzaF9kZWwobik7XG4gfVxuIFxuQEAgLTc2OTUsNiAmIzQzOzc3MzMsMjEgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5BUElfU1RBVEVfSEFTX05PVElGSUVSLCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSlcbiBcdFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVx1MDAzZWlycSwgTlVMTCk7XG4gXG4mIzQzO1x0aWYgKG5hcGktXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHRpZiAobmFwaS1cdTAwM2Vjb25maWcpIHtcbiYjNDM7XHRcdFx0a3RocmVhZF9wYXJrKG5hcGktXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdFx0LyogbmFwaS1cdTAwM2Vjb25maWcgaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWRcbiYjNDM7XHRcdFx0ICogZnJvbSBub3cgb24uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuYXBpLVx1MDAzZXRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IE5VTEw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRrdmZyZWUobmFwaS1cdTAwM2V0aHJlYWRfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdG5hcGktXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuIFx0XHRuYXBpLVx1MDAzZWluZGV4ID0gLTE7XG4gXHRcdG5hcGktXHUwMDNlY29uZmlnID0gTlVMTDtcbkBAIC03NzA0LDExICYjNDM7Nzc1Nyw2IEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xuIFxuIFx0Z3JvX2NsZWFudXAoXHUwMDI2bmFwaS1cdTAwM2Vncm8pO1xuLVxuLVx0aWYgKG5hcGktXHUwMDNldGhyZWFkKSB7XG4tXHRcdGt0aHJlYWRfc3RvcChuYXBpLVx1MDAzZXRocmVhZCk7XG4tXHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbi1cdH1cbiB9XG4gRVhQT1JUX1NZTUJPTChfX25ldGlmX25hcGlfZGVsX2xvY2tlZCk7XG4gXG5AQCAtNzgwNCwxMSAmIzQzOzc4NTIsMTggQEAgc3RhdGljIGludCBuYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvbGwpXG4gXHRyZXR1cm4gd29yaztcbiB9XG4gXG4tc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiYjNDM7c3RhdGljIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cdTAwM2VuYXBpKTtcbiBcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXG4gXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3BhcmsoKSkge1xuJiM0MztcdFx0XHRrdGhyZWFkX3BhcmttZSgpO1xuJiM0MztcdFx0XHRuYXBpID0gUkVBRF9PTkNFKHRocmVhZF9jdHgtXHUwMDNlbmFwaSk7XG4mIzQzO1x0XHRcdC8qIE1pZ2h0IGJlIGF3YWtlbmVkIGZvciBzdG9wcGluZyAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0LyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnRcbiBcdFx0ICoga3RocmVhZCBvd25zIHRoaXMgbmFwaSBhbmQgY291bGQgcG9sbCBvbiB0aGlzIG5hcGkuXG4gXHRcdCAqIFRlc3RpbmcgU0NIRUQgYml0IGlzIG5vdCBlbm91Z2ggYmVjYXVzZSBTQ0hFRCBiaXQgbWlnaHQgYmVcbkBAIC03ODE3LDcgJiM0Mzs3ODcyLDcgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiBcdFx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpKSB7XG4gXHRcdFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZuYXBpLVx1MDAzZXBvbGxfbGlzdCkpO1xuIFx0XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbi1cdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIG5hcGk7XG4gXHRcdH1cbiBcbiBcdFx0c2NoZWR1bGUoKTtcbkBAIC03ODI1LDcgJiM0Mzs3ODgwLDcgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiBcdH1cbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuQEAgLTc4ODIsMTMgJiM0Mzs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcbiBcdGJvb2wgd2FudF9idXN5X3BvbGw7XG4gXHRib29sIGluX2J1c3lfcG9sbDtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuIFxuLVx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdG5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpO1xuJiM0MztcdFx0aWYgKCFuYXBpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHZhbCA9IFJFQURfT05DRShuYXBpLVx1MDAzZXN0YXRlKTtcbiBcbiBcdFx0d2FudF9idXN5X3BvbGwgPSB2YWwgXHUwMDI2IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDtcbkBAIC0xMjEyOCwxMSAmIzQzOzEyMTg4LDExIEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0Z290byBmcmVlX2FsbDtcbiBcdGRldi1cdTAwM2VjZmdfcGVuZGluZyA9IGRldi1cdTAwM2VjZmc7XG4gXG4tXHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFx0bmFwaV9jb25maWdfc3ogPSBhcnJheV9zaXplKG1heHFzLCBzaXplb2YoKmRldi1cdTAwM2VuYXBpX2NvbmZpZykpO1xuIFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnID0ga3Z6YWxsb2MobmFwaV9jb25maWdfc3osIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRldi1cdTAwM2VuYXBpX2NvbmZpZylcbiBcdFx0Z290byBmcmVlX2FsbDtcbiYjNDM7XHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFxuIFx0c3Ryc2NweShkZXYtXHUwMDNlbmFtZSwgbmFtZSk7XG4gXHRkZXYtXHUwMDNlbmFtZV9hc3NpZ25fdHlwZSA9IG5hbWVfYXNzaWduX3R5cGU7XG5AQCAtMTIxNjAsNiAmIzQzOzEyMjIwLDggQEAgRVhQT1JUX1NZTUJPTChhbGxvY19uZXRkZXZfbXFzKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0KSkge1xuIFx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xuIFxuQEAgLTEyMTcxLDYgJiM0MzsxMjIzMywxMiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHN5bmNocm9uaXplX25ldCgpO1xuIFx0fVxuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpIHtcbiYjNDM7XHRcdFx0a3RocmVhZF9zdG9wKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xuJiM0MztcdFx0XHRrdmZyZWUoZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuQEAgLTEyNyw2ICYjNDM7MTI3LDQ0IEBAIGRlZiBjaGFuZ2VfbnVtX3F1ZXVlcyhjZmcsIG5sKSAtXHUwMDNlIE5vbmU6XG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbiAgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkxX2lkKVxuIFxuJiM0MztkZWYgbmljX2xpbmtfZmxhcChjZmcsIG5sKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFRlc3QgdGhhdCBpZiB0aHJlYWRlZCBpcyBlbmFibGVkLCBhbmQgTklDIGdvZXMgdGhyb3VnaFxuJiM0MzsgICAgYSByZXNldCwgdGhlIGt0aHJlYWQgc3RheXMgdW5jaGFuZ2VkIGFjcm9zcyB0aGUgbGluayBmbGFwLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsmIzM5O2lmaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4mIzQzOyAgICBrc2Z0X2dlKGxlbihuYXBpcyksIDIpXG4mIzQzO1xuJiM0MzsgICAgbmFwaTBfaWQgPSBuYXBpc1swXVsmIzM5O2lkJiMzOTtdXG4mIzQzOyAgICBuYXBpMV9pZCA9IG5hcGlzWzFdWyYjMzk7aWQmIzM5O11cbiYjNDM7XG4mIzQzOyAgICBfc2V0dXBfZGVmZXJyZWRfY2xlYW51cChjZmcpXG4mIzQzO1xuJiM0MzsgICAgIyBzZXQgdGhyZWFkZWRcbiYjNDM7ICAgIF9zZXRfdGhyZWFkZWRfc3RhdGUoY2ZnLCAxKVxuJiM0MzsgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7JiMzOTtpZmluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxuJiM0MztcbiYjNDM7ICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcbiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcbiYjNDM7XG4mIzQzOyAgICBwaWQwID0gbmFwaXNbMF0uZ2V0KCYjMzk7cGlkJiMzOTspXG4mIzQzOyAgICBwaWQxID0gbmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgY21kKGZcJiMzNDtpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93blwmIzM0OylcbiYjNDM7ICAgIGNtZChmXCYjMzQ7aXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm9cbiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcbiYjNDM7ICAgIGtzZnRfZ2UobGVuKG5hcGlzKSwgMilcbiYjNDM7XG4mIzQzOyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXG4mIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpXG4mIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4mIzQzO1xuJiM0MzsgICAgIyBjaGVjayB0aGUga3RocmVhZCByZW1haW5zIHRoZSBzYW1lXG4mIzQzOyAgICBrc2Z0X2VxKG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KSwgcGlkMClcbiYjNDM7ICAgIGtzZnRfZXEobmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspLCBwaWQxKVxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcJiMzNDtcJiMzNDtcJiMzNDtcbkBAIC0xMzQsNyAmIzQzOzE3Miw4IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICB3aXRoIE5ldERydkVudihfX2ZpbGVfXywgcXVldWVfY291bnQ9MikgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oW25hcGlfaW5pdCxcbiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcyxcbi0gICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZF0sXG4mIzQzOyAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkLFxuJiM0MzsgICAgICAgICAgICAgICAgICBuaWNfbGlua19mbGFwXSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgTmV0ZGV2RmFtaWx5KCkpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxuaW5kZXggNWVjMWM4NWMxNjIzZTUuLjg5N2NlNjcwMDYwMWMwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsX3Rlc3Quc2hcbkBAIC0xMjQsNiAmIzQzOzEyNCwyMyBAQCB0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZCgpXG4gXHRyZXR1cm4gJD9cbiB9XG4gXG4mIzQzO3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXG4mIzQzO3tcbiYjNDM7XHQjIE9ubHkgZW5hYmxlIG5hcGkgdGhyZWFkZWQgcG9sbC4gU2V0IHN1c3BlbmQgdGltZW91dCBhbmQgcHJlZmVyIGJ1c3lcbiYjNDM7XHQjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLlxuJiM0MztcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAgfHwgcmV0dXJuICQ/XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgJE5TSU1fU1ZfTkFNRSBkb3duXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIGRvd25cbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIHVwXG4mIzQzO1xuJiM0MztcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDBcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICQ/XG4mIzQzO31cbiYjNDM7XG4gIyMjXG4gIyMjIENvZGUgc3RhcnRcbiAjIyNcbkBAIC0xNzYsNiAmIzQzOzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiBcdGV4aXQgMVxuIGZpXG4gXG4mIzQzO3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcFxuJiM0MztpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX25zXG4mIzQzO1x0ZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuIGVjaG8gXCYjMzQ7JE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFhcJiMzNDsgXHUwMDNlICROU0lNX0RFVl9TWVNfVU5MSU5LXG4gXG4gZWNobyAkTlNJTV9DTF9JRCBcdTAwM2UgJE5TSU1fREVWX1NZU19ERUxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hcGlfa3RocmVhZF9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmFwaV9zdG9wX2t0aHJlYWQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O25hcGlfc2F2ZV9jb25maWcmIzM0OywKICAgICYjMzQ7X19uZXRpZl9uYXBpX2RlbF9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmFwaV90aHJlYWRfd2FpdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmFwaV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSwgY2hhbmdpbmcgaG93IE5BUEkga3RocmVhZHMgYXJlIGNyZWF0ZWQsIHBhcmtlZCwgYW5kIGRlc3Ryb3llZCB0byBwZXJzaXN0IGFjcm9zcyBOQVBJIHJlc2V0cyAoZS5nLiwgbGluayBmbGFwcykuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTViMTAxMmM1MTUxMDQ4YWYwYWM1YjVhNTRiYWJhMTkxYzRiYmUyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDIwOjUwOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjA1ZTQzMGYxMGFiYTQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHN0cnVjdCBkc2FfcG9ydDsKIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuOwogc3RydWN0IG1hY3NlY19jb250ZXh0Owogc3RydWN0IG1hY3NlY19vcHM7CiYjNDM7c3RydWN0IG5hcGlfc3RydWN0Owogc3RydWN0IG5ldGRldl9jb25maWc7CiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTsKIHN0cnVjdCBzZF9mbG93X2xpbWl0OwpAQCAtMzYzLDYgJiM0MzszNjQsMTAgQEAgc3RydWN0IGdyb19ub2RlIHsKIAl1MzIJCQljYWNoZWRfbmFwaV9pZDsKIH07CiAKJiM0MztzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwomIzQzO307CiYjNDM7CiAvKgogICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWcKICAqLwpAQCAtMzcxLDYgJiM0MzszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHsKIAl1NjQgaXJxX3N1c3BlbmRfdGltZW91dDsKIAl1MzIgZGVmZXJfaGFyZF9pcnFzOwogCWNwdW1hc2tfdCBhZmZpbml0eV9tYXNrOwomIzQzOwkvKiB0aHJlYWQgYW5kIHRocmVhZF9jdHggbWlycm9ycyBmaWVsZHMgb2YgbmFwaV9zdHJ1Y3Qgd2hlbiBuYXBpX3N0cnVjdAomIzQzOwkgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZQomIzQzOwkgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CiYjNDM7CXN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7CiAJdTggdGhyZWFkZWQ7CiAJdW5zaWduZWQgaW50IG5hcGlfaWQ7CiB9OwpAQCAtNDA0LDYgJiM0Mzs0MTUsNyBAQCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgewogCXN0cnVjdCBocnRpbWVyCQl0aW1lcjsKIAkvKiBhbGwgZmllbGRzIHBhc3QgdGhpcyBwb2ludCBhcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IG5ldGRldl9sb2NrICovCiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiYjNDM7CXN0cnVjdCBuYXBpX3RocmVhZF9jdHgJKnRocmVhZF9jdHg7CiAJdW5zaWduZWQgbG9uZwkJZ3JvX2ZsdXNoX3RpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZwkJaXJxX3N1c3BlbmRfdGltZW91dDsKIAl1MzIJCQlkZWZlcl9oYXJkX2lycXM7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jODE5OTJjOTI5ZDlkNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2NDcsMjAgJiM0MzsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKQogewomIzQzOwlzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gTlVMTDsKIAlpbnQgZXJyID0gMDsKIAomIzQzOwlpZiAobi0mZ3Q7Y29uZmlnICZhbXA7JmFtcDsgbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWQpIHsKJiM0MzsJCW4tJmd0O3RocmVhZF9jdHggPSBuLSZndDtjb25maWctJmd0O3RocmVhZF9jdHg7CiYjNDM7CQluLSZndDt0aHJlYWQgPSBuLSZndDtjb25maWctJmd0O3RocmVhZDsKJiM0MzsJCVdSSVRFX09OQ0Uobi0mZ3Q7dGhyZWFkX2N0eC0mZ3Q7bmFwaSwgbik7CiYjNDM7CQlrdGhyZWFkX3VucGFyayhuLSZndDt0aHJlYWQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdGhyZWFkX2N0eCA9IGt2emFsbG9jX29iaigqdGhyZWFkX2N0eCk7CiYjNDM7CWlmICghdGhyZWFkX2N0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwogCS8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpbgogCSAqIFRBU0tfSU5URVJSVVBUSUJMRSBtb2RlIHRvIGF2b2lkIHRoZSBibG9ja2VkIHRhc2sKIAkgKiB3YXJuaW5nIGFuZCB3b3JrIHdpdGggbG9hZGF2Zy4KIAkgKi8KLQluLSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIG4sICYjMzQ7bmFwaS8lcy0lZCYjMzQ7LAomIzQzOwl0aHJlYWRfY3R4LSZndDtuYXBpID0gbjsKJiM0MzsJbi0mZ3Q7dGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCB0aHJlYWRfY3R4LCAmIzM0O25hcGkvJXMtJWQmIzM0OywKIAkJCQluLSZndDtkZXYtJmd0O25hbWUsIG4tJmd0O25hcGlfaWQpOwogCWlmIChJU19FUlIobi0mZ3Q7dGhyZWFkKSkgewogCQllcnIgPSBQVFJfRVJSKG4tJmd0O3RocmVhZCk7CiAJCXByX2VycigmIzM0O2t0aHJlYWRfcnVuIGZhaWxlZCB3aXRoIGVyciAlZFxuJiMzNDssIGVycik7CiAJCW4tJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQlnb3RvIGZyZWVfdGhyZWFkX2N0eDsKJiM0MzsJfQomIzQzOwluLSZndDt0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDsKJiM0MzsJaWYgKG4tJmd0O2NvbmZpZykgewomIzQzOwkJbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWQgPSBuLSZndDt0aHJlYWQ7CiYjNDM7CQluLSZndDtjb25maWctJmd0O3RocmVhZF9jdHggPSB0aHJlYWRfY3R4OwogCX0KIAomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3RocmVhZF9jdHg6CiYjNDM7CWt2ZnJlZSh0aHJlYWRfY3R4KTsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MTgzLDcgJiM0Mzs3MjA4LDEzIEBAIHN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKIAl9CiAKIAlrdGhyZWFkX3N0b3AobmFwaS0mZ3Q7dGhyZWFkKTsKJiM0MzsJa3ZmcmVlKG5hcGktJmd0O3RocmVhZF9jdHgpOwogCW5hcGktJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW5hcGktJmd0O3RocmVhZF9jdHggPSBOVUxMOwomIzQzOwlpZiAobmFwaS0mZ3Q7Y29uZmlnKSB7CiYjNDM7CQluYXBpLSZndDtjb25maWctJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQluYXBpLSZndDtjb25maWctJmd0O3RocmVhZF9jdHggPSBOVUxMOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKQEAgLTcxOTksMTMgJiM0Mzs3MjMwLDExIEBAIHN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCSAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpCiB7Ci0JaWYgKHRocmVhZGVkKSB7Ci0JCWlmICghbmFwaS0mZ3Q7dGhyZWFkKSB7Ci0JCQlpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTsKJiM0MzsJaWYgKHRocmVhZGVkICZhbXA7JmFtcDsgIW5hcGktJmd0O3RocmVhZCkgewomIzQzOwkJaW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7CiAKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmIChuYXBpLSZndDtjb25maWcpCkBAIC03MjU1LDggJiM0Mzs3Mjg0LDE1IEBAIGludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJV0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7CiAKIAkvKiBPdmVycmlkZSB0aGUgY29uZmlnIGZvciBhbGwgTkFQSXMgZXZlbiBpZiBjdXJyZW50bHkgbm90IGxpc3RlZCAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O251bV9uYXBpX2NvbmZpZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykgewogCQlkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZGVkID0gdGhyZWFkZWQ7CiYjNDM7CQlpZiAoIXRocmVhZGVkICZhbXA7JmFtcDsgZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWQpIHsKJiM0MzsJCQlrdGhyZWFkX3N0b3AoZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWQpOwomIzQzOwkJCWt2ZnJlZShkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpOwomIzQzOwkJCWRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkID0gTlVMTDsKJiM0MzsJCQlkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZF9jdHggPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzUwMSw2ICYjNDM7NzUzNyw4IEBAIHN0YXRpYyB2b2lkIG5hcGlfc2F2ZV9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuKQogCW4tJmd0O2NvbmZpZy0mZ3Q7ZGVmZXJfaGFyZF9pcnFzID0gbi0mZ3Q7ZGVmZXJfaGFyZF9pcnFzOwogCW4tJmd0O2NvbmZpZy0mZ3Q7Z3JvX2ZsdXNoX3RpbWVvdXQgPSBuLSZndDtncm9fZmx1c2hfdGltZW91dDsKIAluLSZndDtjb25maWctJmd0O2lycV9zdXNwZW5kX3RpbWVvdXQgPSBuLSZndDtpcnFfc3VzcGVuZF90aW1lb3V0OwomIzQzOwluLSZndDtjb25maWctJmd0O3RocmVhZCA9IG4tJmd0O3RocmVhZDsKJiM0MzsJbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWRfY3R4ID0gbi0mZ3Q7dGhyZWFkX2N0eDsKIAluYXBpX2hhc2hfZGVsKG4pOwogfQogCkBAIC03Njk1LDYgJiM0Mzs3NzMzLDIxIEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkFQSV9TVEFURV9IQVNfTk9USUZJRVIsICZhbXA7bmFwaS0mZ3Q7c3RhdGUpKQogCQlpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKG5hcGktJmd0O2lycSwgTlVMTCk7CiAKJiM0MzsJaWYgKG5hcGktJmd0O3RocmVhZCkgewomIzQzOwkJaWYgKG5hcGktJmd0O2NvbmZpZykgewomIzQzOwkJCWt0aHJlYWRfcGFyayhuYXBpLSZndDt0aHJlYWQpOwomIzQzOwkJCS8qIG5hcGktJmd0O2NvbmZpZyBob2xkcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZAomIzQzOwkJCSAqIGZyb20gbm93IG9uLgomIzQzOwkJCSAqLwomIzQzOwkJCW5hcGktJmd0O3RocmVhZF9jdHgtJmd0O25hcGkgPSBOVUxMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlrdGhyZWFkX3N0b3AobmFwaS0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlrdmZyZWUobmFwaS0mZ3Q7dGhyZWFkX2N0eCk7CiYjNDM7CQl9CiYjNDM7CQluYXBpLSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwkJbmFwaS0mZ3Q7dGhyZWFkX2N0eCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlpZiAobmFwaS0mZ3Q7Y29uZmlnKSB7CiAJCW5hcGktJmd0O2luZGV4ID0gLTE7CiAJCW5hcGktJmd0O2NvbmZpZyA9IE5VTEw7CkBAIC03NzA0LDExICYjNDM7Nzc1Nyw2IEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCW5hcGlfZnJlZV9mcmFncyhuYXBpKTsKIAogCWdyb19jbGVhbnVwKCZhbXA7bmFwaS0mZ3Q7Z3JvKTsKLQotCWlmIChuYXBpLSZndDt0aHJlYWQpIHsKLQkJa3RocmVhZF9zdG9wKG5hcGktJmd0O3RocmVhZCk7Ci0JCW5hcGktJmd0O3RocmVhZCA9IE5VTEw7Ci0JfQogfQogRVhQT1JUX1NZTUJPTChfX25ldGlmX25hcGlfZGVsX2xvY2tlZCk7CiAKQEAgLTc4MDQsMTEgJiM0Mzs3ODUyLDE4IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKQogCXJldHVybiB3b3JrOwogfQogCi1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCkKIHsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gUkVBRF9PTkNFKHRocmVhZF9jdHgtJmd0O25hcGkpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewomIzQzOwkJaWYgKGt0aHJlYWRfc2hvdWxkX3BhcmsoKSkgewomIzQzOwkJCWt0aHJlYWRfcGFya21lKCk7CiYjNDM7CQkJbmFwaSA9IFJFQURfT05DRSh0aHJlYWRfY3R4LSZndDtuYXBpKTsKJiM0MzsJCQkvKiBNaWdodCBiZSBhd2FrZW5lZCBmb3Igc3RvcHBpbmcgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJLyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQKIAkJICoga3RocmVhZCBvd25zIHRoaXMgbmFwaSBhbmQgY291bGQgcG9sbCBvbiB0aGlzIG5hcGkuCiAJCSAqIFRlc3RpbmcgU0NIRUQgYml0IGlzIG5vdCBlbm91Z2ggYmVjYXVzZSBTQ0hFRCBiaXQgbWlnaHQgYmUKQEAgLTc4MTcsNyAmIzQzOzc4NzIsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCQlpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgJmFtcDtuYXBpLSZndDtzdGF0ZSkpIHsKIAkJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDtuYXBpLSZndDtwb2xsX2xpc3QpKTsKIAkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCXJldHVybiAwOwomIzQzOwkJCXJldHVybiBuYXBpOwogCQl9CiAKIAkJc2NoZWR1bGUoKTsKQEAgLTc4MjUsNyAmIzQzOzc4ODAsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCkBAIC03ODgyLDEzICYjNDM7NzkzNywxOCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAKIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTsKJiM0MzsJc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3FzID0gamlmZmllczsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwogCWJvb2wgd2FudF9idXN5X3BvbGw7CiAJYm9vbCBpbl9idXN5X3BvbGw7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQl3aGlsZSAoIW5hcGlfdGhyZWFkX3dhaXQobmFwaSkpIHsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCW5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpOwomIzQzOwkJaWYgKCFuYXBpKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQl2YWwgPSBSRUFEX09OQ0UobmFwaS0mZ3Q7c3RhdGUpOwogCiAJCXdhbnRfYnVzeV9wb2xsID0gdmFsICZhbXA7IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDsKQEAgLTEyMTI4LDExICYjNDM7MTIxODgsMTEgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCQlnb3RvIGZyZWVfYWxsOwogCWRldi0mZ3Q7Y2ZnX3BlbmRpbmcgPSBkZXYtJmd0O2NmZzsKIAotCWRldi0mZ3Q7bnVtX25hcGlfY29uZmlncyA9IG1heHFzOwogCW5hcGlfY29uZmlnX3N6ID0gYXJyYXlfc2l6ZShtYXhxcywgc2l6ZW9mKCpkZXYtJmd0O25hcGlfY29uZmlnKSk7CiAJZGV2LSZndDtuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZGV2LSZndDtuYXBpX2NvbmZpZykKIAkJZ290byBmcmVlX2FsbDsKJiM0MzsJZGV2LSZndDtudW1fbmFwaV9jb25maWdzID0gbWF4cXM7CiAKIAlzdHJzY3B5KGRldi0mZ3Q7bmFtZSwgbmFtZSk7CiAJZGV2LSZndDtuYW1lX2Fzc2lnbl90eXBlID0gbmFtZV9hc3NpZ25fdHlwZTsKQEAgLTEyMTYwLDYgJiM0MzsxMjIyMCw4IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfbmV0ZGV2X21xcyk7CiAKIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDtuYXBpX2xpc3QpKSB7CiAJCXN0cnVjdCBuYXBpX3N0cnVjdCAqcCwgKm47CiAKQEAgLTEyMTcxLDYgJiM0MzsxMjIzMywxMiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXN5bmNocm9uaXplX25ldCgpOwogCX0KIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkKSB7CiYjNDM7CQkJa3RocmVhZF9zdG9wKGRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkKTsKJiM0MzsJCQlrdmZyZWUoZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTsKJiM0MzsJCX0KJiM0MzsJfQogCWt2ZnJlZShkZXYtJmd0O25hcGlfY29uZmlnKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHkKaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHkKQEAgLTEyNyw2ICYjNDM7MTI3LDQ0IEBAIGRlZiBjaGFuZ2VfbnVtX3F1ZXVlcyhjZmcsIG5sKSAtJmd0OyBOb25lOgogICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZCkKICAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpCiAKJiM0MztkZWYgbmljX2xpbmtfZmxhcChjZmcsIG5sKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVGVzdCB0aGF0IGlmIHRocmVhZGVkIGlzIGVuYWJsZWQsIGFuZCBOSUMgZ29lcyB0aHJvdWdoCiYjNDM7ICAgIGEgcmVzZXQsIHRoZSBrdGhyZWFkIHN0YXlzIHVuY2hhbmdlZCBhY3Jvc3MgdGhlIGxpbmsgZmxhcC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKQomIzQzOwomIzQzOyAgICBuYXBpMF9pZCA9IG5hcGlzWzBdWyYjMzk7aWQmIzM5O10KJiM0MzsgICAgbmFwaTFfaWQgPSBuYXBpc1sxXVsmIzM5O2lkJiMzOTtdCiYjNDM7CiYjNDM7ICAgIF9zZXR1cF9kZWZlcnJlZF9jbGVhbnVwKGNmZykKJiM0MzsKJiM0MzsgICAgIyBzZXQgdGhyZWFkZWQKJiM0MzsgICAgX3NldF90aHJlYWRlZF9zdGF0ZShjZmcsIDEpCiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSkKJiM0MzsKJiM0MzsgICAgIyBjaGVjayBuYXBpIHRocmVhZGVkIGlzIHNldCBmb3IgYm90aCBuYXBpcwomIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpCiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZCkKJiM0MzsKJiM0MzsgICAgcGlkMCA9IG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KQomIzQzOyAgICBwaWQxID0gbmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspCiYjNDM7CiYjNDM7ICAgIGNtZChmJiMzNDtpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93biYjMzQ7KQomIzQzOyAgICBjbWQoZiYjMzQ7aXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwJiMzNDspCiYjNDM7CiYjNDM7ICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm8KJiM0MzsgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7JiMzOTtpZmluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKQomIzQzOyAgICBrc2Z0X2dlKGxlbihuYXBpcyksIDIpCiYjNDM7CiYjNDM7ICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXMKJiM0MzsgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKQomIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpCiYjNDM7CiYjNDM7ICAgICMgY2hlY2sgdGhlIGt0aHJlYWQgcmVtYWlucyB0aGUgc2FtZQomIzQzOyAgICBrc2Z0X2VxKG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KSwgcGlkMCkKJiM0MzsgICAga3NmdF9lcShuYXBpc1sxXS5nZXQoJiMzOTtwaWQmIzM5OyksIHBpZDEpCiAKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKQEAgLTEzNCw3ICYjNDM7MTcyLDggQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgIHdpdGggTmV0RHJ2RW52KF9fZmlsZV9fLCBxdWV1ZV9jb3VudD0yKSBhcyBjZmc6CiAgICAgICAgIGtzZnRfcnVuKFtuYXBpX2luaXQsCiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcywKLSAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkXSwKJiM0MzsgICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZCwKJiM0MzsgICAgICAgICAgICAgICAgICBuaWNfbGlua19mbGFwXSwKICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpCiAgICAga3NmdF9leGl0KCkKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoCmluZGV4IDVlYzFjODVjMTYyM2U1Li44OTdjZTY3MDA2MDFjMCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaApAQCAtMTI0LDYgJiM0MzsxMjQsMjMgQEAgdGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWQoKQogCXJldHVybiAkPwogfQogCiYjNDM7dGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWRfbGlua19mbGFwKCkKJiM0Mzt7CiYjNDM7CSMgT25seSBlbmFibGUgbmFwaSB0aHJlYWRlZCBwb2xsLiBTZXQgc3VzcGVuZCB0aW1lb3V0IGFuZCBwcmVmZXIgYnVzeQomIzQzOwkjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLgomIzQzOwl0ZXN0X2J1c3lwb2xsIDAgJHtOQVBJX1RIUkVBREVEX01PREVfQlVTWV9QT0xMfSAwIHx8IHJldHVybiAkPwomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgZG93bgomIzQzOwlpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93bgomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgdXAKJiM0MzsJaXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIHVwCiYjNDM7CiYjNDM7CXRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAKJiM0MzsKJiM0MzsJcmV0dXJuICQ/CiYjNDM7fQomIzQzOwogIyMjCiAjIyMgQ29kZSBzdGFydAogIyMjCkBAIC0xNzYsNiAmIzQzOzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW4KIAlleGl0IDEKIGZpCiAKJiM0Mzt0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZF9saW5rX2ZsYXAKJiM0MztpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWQmIzM0OwomIzQzOwljbGVhbnVwX25zCiYjNDM7CWV4aXQgMQomIzQzO2ZpCiYjNDM7CiBlY2hvICYjMzQ7JE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFgmIzM0OyAmZ3Q7ICROU0lNX0RFVl9TWVNfVU5MSU5LCiAKIGVjaG8gJE5TSU1fQ0xfSUQgJmd0OyAkTlNJTV9ERVZfU1lTX0RFTAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkFQSSBUaHJlYWRlZCBQb2xsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGhvdyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgd29ya3Mgd2l0aGluIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIHJlZmFjdG9yIGhvdyB0aGUgTkFQSSBrdGhyZWFkIGlzIGhhbmRsZWTigJRjcmVhdGlvbiwgcGFya2luZywgZGVzdHJ1Y3Rpb24sIHlvdSBuYW1lIGl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbmFwaV90aHJlYWRfY3R4YCBzdHJ1Y3R1cmUgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGt0aHJlYWQgbGlmZWN5Y2xlIGFyZSB0aGUga2V5IGNoYW5nZXMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIE5BUEkga3RocmVhZCBwZXJzaXN0ZW50IGFjcm9zcyByZXNldHMsIGxpa2UgYSBsaW5rIGZsYXAsIGJ5IGhvbGRpbmcgb250byB0aGUgdGhyZWFkIHJlZmVyZW5jZSBpbiBgbmFwaV9jb25maWdgLiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBoYW5kbGUgdGhhdC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCwgYG5hcGlfc3RvcF9rdGhyZWFkYCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBuYXBpX3NhdmVfY29uZmlnYCwgYF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkYCwgYG5hcGlfdGhyZWFkX3dhaXRgLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYGFsbG9jX25ldGRldl9tcXNgIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSB0b3VjaCBvbiB0aGUgcmVsZXZhbnQgY29tcG9uZW50cywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBmdW5jdGlvbmFsLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBpdCYjMzk7cyB2ZXJ5IHJlYWNoYWJsZSwgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFllcCwgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgYmFzZSBjb2RlIGlzIGluIGBuZXQvY29yZS9kZXYuY2Agc28gaXQmIzM5O3MgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUga2VybmVsIGlmIGBDT05GSUdfTkVUYCBpcyBzZXQuIEhvd2V2ZXIsIGBDT05GSUdfTkVUYCBpcyBnZW5lcmljLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIGNvbmZpZyB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLiBMZXQmIzM5O3MgZ3JlcCBmb3IgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAgb3IgYG5hcGlfdGhyZWFkZWRfcG9sbGAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNTkxPXN0cnVjdCBzb2Z0bmV0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzYwNC1cdGJvb2xcdFx0XHRpbl9uZXRfcnhfYWN0aW9uO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNjA1Olx0Ym9vbFx0XHRcdGluX25hcGlfdGhyZWFkZWRfcG9sbDtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzYwNi1cbi0tXG5uZXQvY29yZS9kZXYuYz0xNjQ0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X25vdGlmeV9wZWVycyk7XG5uZXQvY29yZS9kZXYuYy0xNjQ1LVxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcbm5ldC9jb3JlL2Rldi5jLTE2NDctXG5uZXQvY29yZS9kZXYuYz0xNjQ4PXN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtMTY2OS1cdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG5uZXQvY29yZS9kZXYuYzoxNjcwOlx0bi1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFwmIzM0O25hcGkvJXMtJWRcJiMzNDssXG5uZXQvY29yZS9kZXYuYy0xNjcxLVx0XHRcdFx0bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSwgbi1cdTAwM2VuYXBpX2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01MzExPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUzMjQtXG5uZXQvY29yZS9kZXYuYzo1MzI1Olx0XHQvKiBJZiBub3QgY2FsbGVkIGZyb20gbmV0X3J4X2FjdGlvbigpIG9yIG5hcGlfdGhyZWFkZWRfcG9sbCgpXG5uZXQvY29yZS9kZXYuYy01MzI2LVx0XHQgKiB3ZSBoYXZlIHRvIHJhaXNlIE5FVF9SWF9TT0ZUSVJRLlxubmV0L2NvcmUvZGV2LmMtNTMyNy1cdFx0ICovXG5uZXQvY29yZS9kZXYuYzo1MzI4Olx0XHRpZiAoIW15c2QtXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcdTAwMjZcdTAwMjYgIW15c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxubmV0L2NvcmUvZGV2LmMtNTMyOS1cdFx0XHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTtcbi0tXG5uZXQvY29yZS9kZXYuYz03ODU1PXN0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcbi0tXG5uZXQvY29yZS9kZXYuYy03ODg1LVxubmV0L2NvcmUvZGV2LmM6Nzg4NjpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODg3LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MDAtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3OTAxOlx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzkwMi1cbi0tXG5uZXQvY29yZS9kZXYuYy03OTA2LVxubmV0L2NvcmUvZGV2LmM6NzkwNzpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03OTA4LVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzkzNy1cbm5ldC9jb3JlL2Rldi5jOjc5Mzg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc5Mzkte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5NjMtXG5uZXQvY29yZS9kZXYuYzo3OTY0Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5NjUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyNjg9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjcxLVxubmV0L2NvcmUvZGV2LmM6MTMyNzI6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzMjczLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz03MT1zdGF0aWMgdWludDY0X3QgY2ZnX2lycV9zdXNwZW5kX3RpbWVvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzo3MjpzdGF0aWMgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBjZmdfbmFwaV90aHJlYWRlZF9wb2xsID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jPTc0PXN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmZpbGVwYXRoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTc2LVx0ZXJyb3IoMSwgMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jOjc3Olx0ICAgICAgXCYjMzQ7VXNhZ2U6ICVzIC1wXHUwMDNjcG9ydFx1MDAzZSAtYlx1MDAzY2FkZHJcdTAwM2UgLW1cdTAwM2NtYXhfZXZlbnRzXHUwMDNlIC11XHUwMDNjYnVzeV9wb2xsX3VzZWNzXHUwMDNlIC1QXHUwMDNjcHJlZmVyX2J1c3lfcG9sbFx1MDAzZSAtZ1x1MDAzY2J1c3lfcG9sbF9idWRnZXRcdTAwM2UgLW9cdTAwM2NvdXRmaWxlXHUwMDNlIC1kXHUwMDNjZGVmZXJfaGFyZF9pcnFzXHUwMDNlIC1yXHUwMDNjZ3JvX2ZsdS4uLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtNzgtXHQgICAgICBmaWxlcGF0aCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9ODE9c3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMTc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MTc2Olx0XHRcdGNmZ19uYXBpX3RocmVhZGVkX3BvbGwgPSAoZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCl0bXA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy0xNzctXHRcdFx0YnJlYWs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9MjI2PXN0YXRpYyB2b2lkIHNldHVwX3F1ZXVlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMjU2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MjU3Olx0aWYgKGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoyNTg6XHRcdG5ldGRldl9uYXBpX3NldF9yZXFfc2V0X3RocmVhZGVkKHNldF9yZXEsIGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMjU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcmVsZXZhbnQgY29kZSYjMzk7cyBhbGwgaW4gYG5ldC9jb3JlL2Rldi5jYC4gTm90aGluZyB0b28gc3BlY2lmaWMgaW4gdGVybXMgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBzeXN0ZW07IHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN0dWZmLiBGb3IgdGhlIGBFbmFibGVDb25maWdzYCBhc3BlY3QsIGFuIGVtcHR5IGxpc3Qgc2VlbXMgYXBwcm9wcmlhdGUgZ2l2ZW4gdGhlIGNvbnRleHQuCgpJIHdlbnQgdGhyb3VnaCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgd2hldGhlciB0byBleGNsdWRlIGNlcnRhaW4gZnVuY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGhpZ2gtZnJlcXVlbmN5IHVzYWdlIGJ1dCBvbiBzZWNvbmQgdGhvdWdodCBJIHdpbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYG5hcGlfa3RocmVhZF9jcmVhdGVgLCBgbmFwaV9zdG9wX2t0aHJlYWRgLCBgbmFwaV9zZXRfdGhyZWFkZWRgLCBgbmV0aWZfc2V0X3RocmVhZGVkYCwgYG5hcGlfc2F2ZV9jb25maWdgLCBgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRgLCBgbmFwaV90aHJlYWRfd2FpdGAsIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aHMsIGxpa2UgZGV2aWNlIGFsbG9jYXRpb24gYW5kIHBvbGxpbmcsIHNvIEkgZGVjaWRlZCB0byBhdm9pZCB0aGVtLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgZmFpcmx5IGZ1bmN0aW9uYWwsIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIHdoaWNoIHdhcnJhbnRzIHNvbWUgY2FyZWZ1bCBmdXp6aW5nLiBJIGJlbGlldmUgdGhpcyBpcyBhIHZhbGlkIGFuZCBnb29kIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX2t0aHJlYWRfY3JlYXRlJiMzNDssCiAgICAmIzM0O25hcGlfc3RvcF9rdGhyZWFkJiMzNDssCiAgICAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O25ldGlmX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NhdmVfY29uZmlnJiMzNDssCiAgICAmIzM0O19fbmV0aWZfbmFwaV9kZWxfbG9ja2VkJiMzNDssCiAgICAmIzM0O25hcGlfdGhyZWFkX3dhaXQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25hcGlfZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIGNoYW5naW5nIGhvdyBOQVBJIGt0aHJlYWRzIGFyZSBjcmVhdGVkLCBwYXJrZWQsIGFuZCBkZXN0cm95ZWQgdG8gcGVyc2lzdCBhY3Jvc3MgTkFQSSByZXNldHMgKGUuZy4sIGxpbmsgZmxhcHMpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV9rdGhyZWFkX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuYXBpX3N0b3Bfa3RocmVhZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmFwaV9zYXZlX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtfX25ldGlmX25hcGlfZGVsX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZF93YWl0JiMzNDssCiAgICAmIzM0O25ldGRldl9uYXBpX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MTUuNjA1OTgwMTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMjIyNjEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQyMDo1MDoxNS42MDU5ODUwNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDkwNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1YjEwMTJjNTE1MTA0OGFmMGFjNWI1YTU0YmFiYTE5MWM0YmJlMmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6NTA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtNjMsNiArNjMsNyBAQCBzdHJ1Y3QgZHNhX3BvcnQ7XFxuIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuO1xcbiBzdHJ1Y3QgbWFjc2VjX2NvbnRleHQ7XFxuIHN0cnVjdCBtYWNzZWNfb3BzO1xcbitzdHJ1Y3QgbmFwaV9zdHJ1Y3Q7XFxuIHN0cnVjdCBuZXRkZXZfY29uZmlnO1xcbiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTtcXG4gc3RydWN0IHNkX2Zsb3dfbGltaXQ7XFxuQEAgLTM2Myw2ICszNjQsMTAgQEAgc3RydWN0IGdyb19ub2RlIHtcXG4gXFx0dTMyXFx0XFx0XFx0Y2FjaGVkX25hcGlfaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHtcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xcbit9O1xcbitcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWdcXG4gICovXFxuQEAgLTM3MSw2ICszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHtcXG4gXFx0dTY0IGlycV9zdXNwZW5kX3RpbWVvdXQ7XFxuIFxcdHUzMiBkZWZlcl9oYXJkX2lycXM7XFxuIFxcdGNwdW1hc2tfdCBhZmZpbml0eV9tYXNrO1xcbitcXHQvKiB0aHJlYWQgYW5kIHRocmVhZF9jdHggbWlycm9ycyBmaWVsZHMgb2YgbmFwaV9zdHJ1Y3Qgd2hlbiBuYXBpX3N0cnVjdFxcbitcXHQgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZVxcbitcXHQgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7XFxuK1xcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7XFxuIFxcdHU4IHRocmVhZGVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgbmFwaV9pZDtcXG4gfTtcXG5AQCAtNDA0LDYgKzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XFxuIFxcdHN0cnVjdCBocnRpbWVyXFx0XFx0dGltZXI7XFxuIFxcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0XFx0KnRocmVhZDtcXG4rXFx0c3RydWN0IG5hcGlfdGhyZWFkX2N0eFxcdCp0aHJlYWRfY3R4O1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0Z3JvX2ZsdXNoX3RpbWVvdXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRpcnFfc3VzcGVuZF90aW1lb3V0O1xcbiBcXHR1MzJcXHRcXHRcXHRkZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzgxOTkyYzkyOWQ5ZDUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC0xNjQ3LDIwICsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xcbiBcXG4gc3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4ge1xcbitcXHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gTlVMTDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRpZiAobi1cXHUwMDNlY29uZmlnIFxcdTAwMjZcXHUwMDI2IG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdG4tXFx1MDAzZXRocmVhZF9jdHggPSBuLVxcdTAwM2Vjb25maWctXFx1MDAzZXRocmVhZF9jdHg7XFxuK1xcdFxcdG4tXFx1MDAzZXRocmVhZCA9IG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkO1xcbitcXHRcXHRXUklURV9PTkNFKG4tXFx1MDAzZXRocmVhZF9jdHgtXFx1MDAzZW5hcGksIG4pO1xcbitcXHRcXHRrdGhyZWFkX3VucGFyayhuLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0dGhyZWFkX2N0eCA9IGt2emFsbG9jX29iaigqdGhyZWFkX2N0eCk7XFxuK1xcdGlmICghdGhyZWFkX2N0eClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHQvKiBDcmVhdGUgYW5kIHdha2UgdXAgdGhlIGt0aHJlYWQgb25jZSB0byBwdXQgaXQgaW5cXG4gXFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xcbiBcXHQgKiB3YXJuaW5nIGFuZCB3b3JrIHdpdGggbG9hZGF2Zy5cXG4gXFx0ICovXFxuLVxcdG4tXFx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXFxcIm5hcGkvJXMtJWRcXFwiLFxcbitcXHR0aHJlYWRfY3R4LVxcdTAwM2VuYXBpID0gbjtcXG4rXFx0bi1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCB0aHJlYWRfY3R4LCBcXFwibmFwaS8lcy0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuIFxcdGlmIChJU19FUlIobi1cXHUwMDNldGhyZWFkKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKG4tXFx1MDAzZXRocmVhZCk7XFxuIFxcdFxcdHByX2VycihcXFwia3RocmVhZF9ydW4gZmFpbGVkIHdpdGggZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRuLVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRnb3RvIGZyZWVfdGhyZWFkX2N0eDtcXG4rXFx0fVxcbitcXHRuLVxcdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcXG4rXFx0aWYgKG4tXFx1MDAzZWNvbmZpZykge1xcbitcXHRcXHRuLVxcdTAwM2Vjb25maWctXFx1MDAzZXRocmVhZCA9IG4tXFx1MDAzZXRocmVhZDtcXG4rXFx0XFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitmcmVlX3RocmVhZF9jdHg6XFxuK1xcdGt2ZnJlZSh0aHJlYWRfY3R4KTtcXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTcxODMsNyArNzIwOCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdH1cXG4gXFxuIFxcdGt0aHJlYWRfc3RvcChuYXBpLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRrdmZyZWUobmFwaS1cXHUwMDNldGhyZWFkX2N0eCk7XFxuIFxcdG5hcGktXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdG5hcGktXFx1MDAzZXRocmVhZF9jdHggPSBOVUxMO1xcbitcXHRpZiAobmFwaS1cXHUwMDNlY29uZmlnKSB7XFxuK1xcdFxcdG5hcGktXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0XFx0bmFwaS1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuQEAgLTcxOTksMTMgKzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBpbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbiB7XFxuLVxcdGlmICh0aHJlYWRlZCkge1xcbi1cXHRcXHRpZiAoIW5hcGktXFx1MDAzZXRocmVhZCkge1xcbi1cXHRcXHRcXHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcXG4rXFx0aWYgKHRocmVhZGVkIFxcdTAwMjZcXHUwMDI2ICFuYXBpLVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0aW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChuYXBpLVxcdTAwM2Vjb25maWcpXFxuQEAgLTcyNTUsOCArNzI4NCwxNSBAQCBpbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xcbiBcXG4gXFx0LyogT3ZlcnJpZGUgdGhlIGNvbmZpZyBmb3IgYWxsIE5BUElzIGV2ZW4gaWYgY3VycmVudGx5IG5vdCBsaXN0ZWQgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fbmFwaV9jb25maWdzOyBpKyspIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRlZCA9IHRocmVhZGVkO1xcbitcXHRcXHRpZiAoIXRocmVhZGVkIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfc3RvcChkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCk7XFxuK1xcdFxcdFxcdGt2ZnJlZShkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xcbitcXHRcXHRcXHRkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdFxcdGRldi1cXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkX2N0eCA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC03NTAxLDYgKzc1MzcsOCBAQCBzdGF0aWMgdm9pZCBuYXBpX3NhdmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4gXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVxcdTAwM2VkZWZlcl9oYXJkX2lycXM7XFxuIFxcdG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ3JvX2ZsdXNoX3RpbWVvdXQgPSBuLVxcdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcXG4gXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2VpcnFfc3VzcGVuZF90aW1lb3V0ID0gbi1cXHUwMDNlaXJxX3N1c3BlbmRfdGltZW91dDtcXG4rXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWQgPSBuLVxcdTAwM2V0aHJlYWQ7XFxuK1xcdG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkX2N0eCA9IG4tXFx1MDAzZXRocmVhZF9jdHg7XFxuIFxcdG5hcGlfaGFzaF9kZWwobik7XFxuIH1cXG4gXFxuQEAgLTc2OTUsNiArNzczMywyMSBAQCB2b2lkIF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4gXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQVBJX1NUQVRFX0hBU19OT1RJRklFUiwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVxcdTAwM2VpcnEsIE5VTEwpO1xcbiBcXG4rXFx0aWYgKG5hcGktXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRpZiAobmFwaS1cXHUwMDNlY29uZmlnKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfcGFyayhuYXBpLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRcXHQvKiBuYXBpLVxcdTAwM2Vjb25maWcgaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWRcXG4rXFx0XFx0XFx0ICogZnJvbSBub3cgb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWRfY3R4LVxcdTAwM2VuYXBpID0gTlVMTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3RocmVhZF9zdG9wKG5hcGktXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdGt2ZnJlZShuYXBpLVxcdTAwM2V0aHJlYWRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG5hcGktXFx1MDAzZWNvbmZpZykge1xcbiBcXHRcXHRuYXBpLVxcdTAwM2VpbmRleCA9IC0xO1xcbiBcXHRcXHRuYXBpLVxcdTAwM2Vjb25maWcgPSBOVUxMO1xcbkBAIC03NzA0LDExICs3NzU3LDYgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdG5hcGlfZnJlZV9mcmFncyhuYXBpKTtcXG4gXFxuIFxcdGdyb19jbGVhbnVwKFxcdTAwMjZuYXBpLVxcdTAwM2Vncm8pO1xcbi1cXG4tXFx0aWYgKG5hcGktXFx1MDAzZXRocmVhZCkge1xcbi1cXHRcXHRrdGhyZWFkX3N0b3AobmFwaS1cXHUwMDNldGhyZWFkKTtcXG4tXFx0XFx0bmFwaS1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4tXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQpO1xcbiBcXG5AQCAtNzgwNCwxMSArNzg1MiwxOCBAQCBzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sIHN0cnVjdCBsaXN0X2hlYWQgKnJlcG9sbClcXG4gXFx0cmV0dXJuIHdvcms7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuK3N0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcXG4ge1xcbitcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cXHUwMDNlbmFwaSk7XFxuIFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcbiBcXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xcbitcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfcGFyaygpKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfcGFya21lKCk7XFxuK1xcdFxcdFxcdG5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cXHUwMDNlbmFwaSk7XFxuK1xcdFxcdFxcdC8qIE1pZ2h0IGJlIGF3YWtlbmVkIGZvciBzdG9wcGluZyAqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBUZXN0aW5nIFNDSEVEX1RIUkVBREVEIGJpdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudFxcbiBcXHRcXHQgKiBrdGhyZWFkIG93bnMgdGhpcyBuYXBpIGFuZCBjb3VsZCBwb2xsIG9uIHRoaXMgbmFwaS5cXG4gXFx0XFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxcbkBAIC03ODE3LDcgKzc4NzIsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKSkge1xcbiBcXHRcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZuYXBpLVxcdTAwM2Vwb2xsX2xpc3QpKTtcXG4gXFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIG5hcGk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNjaGVkdWxlKCk7XFxuQEAgLTc4MjUsNyArNzg4MCw3IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdH1cXG4gXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiBcXG4tXFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbkBAIC03ODgyLDEzICs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFxuIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG4rXFx0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcXG4gXFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcXG4gXFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbiBcXG4tXFx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdG5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpO1xcbitcXHRcXHRpZiAoIW5hcGkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXFx1MDAzZXN0YXRlKTtcXG4gXFxuIFxcdFxcdHdhbnRfYnVzeV9wb2xsID0gdmFsIFxcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xcbkBAIC0xMjEyOCwxMSArMTIxODgsMTEgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRcXHRnb3RvIGZyZWVfYWxsO1xcbiBcXHRkZXYtXFx1MDAzZWNmZ19wZW5kaW5nID0gZGV2LVxcdTAwM2VjZmc7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZW51bV9uYXBpX2NvbmZpZ3MgPSBtYXhxcztcXG4gXFx0bmFwaV9jb25maWdfc3ogPSBhcnJheV9zaXplKG1heHFzLCBzaXplb2YoKmRldi1cXHUwMDNlbmFwaV9jb25maWcpKTtcXG4gXFx0ZGV2LVxcdTAwM2VuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWRldi1cXHUwMDNlbmFwaV9jb25maWcpXFxuIFxcdFxcdGdvdG8gZnJlZV9hbGw7XFxuK1xcdGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xcbiBcXG4gXFx0c3Ryc2NweShkZXYtXFx1MDAzZW5hbWUsIG5hbWUpO1xcbiBcXHRkZXYtXFx1MDAzZW5hbWVfYXNzaWduX3R5cGUgPSBuYW1lX2Fzc2lnbl90eXBlO1xcbkBAIC0xMjE2MCw2ICsxMjIyMCw4IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfbmV0ZGV2X21xcyk7XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlbmFwaV9saXN0KSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xcbiBcXG5AQCAtMTIxNzEsNiArMTIyMzMsMTIgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X25hcGlfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKSB7XFxuK1xcdFxcdGlmIChkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCkge1xcbitcXHRcXHRcXHRrdGhyZWFkX3N0b3AoZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xcbitcXHRcXHRcXHRrdmZyZWUoZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcdGt2ZnJlZShkZXYtXFx1MDAzZW5hcGlfY29uZmlnKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHlcXG5pbmRleCBmNGJlNzJiMjE0NWE5NS4uMjAxMTBmYjY5NDJlMTQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHlcXG5AQCAtMTI3LDYgKzEyNyw0NCBAQCBkZWYgY2hhbmdlX251bV9xdWV1ZXMoY2ZnLCBubCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcXG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcXG4gXFxuK2RlZiBuaWNfbGlua19mbGFwKGNmZywgbmwpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFRlc3QgdGhhdCBpZiB0aHJlYWRlZCBpcyBlbmFibGVkLCBhbmQgTklDIGdvZXMgdGhyb3VnaFxcbisgICAgYSByZXNldCwgdGhlIGt0aHJlYWQgc3RheXMgdW5jaGFuZ2VkIGFjcm9zcyB0aGUgbGluayBmbGFwLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsnaWZpbmRleCc6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxcbitcXG4rICAgIG5hcGkwX2lkID0gbmFwaXNbMF1bJ2lkJ11cXG4rICAgIG5hcGkxX2lkID0gbmFwaXNbMV1bJ2lkJ11cXG4rXFxuKyAgICBfc2V0dXBfZGVmZXJyZWRfY2xlYW51cChjZmcpXFxuK1xcbisgICAgIyBzZXQgdGhyZWFkZWRcXG4rICAgIF9zZXRfdGhyZWFkZWRfc3RhdGUoY2ZnLCAxKVxcbisgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7J2lmaW5kZXgnOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcXG4rXFxuKyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXFxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpXFxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXFxuK1xcbisgICAgcGlkMCA9IG5hcGlzWzBdLmdldCgncGlkJylcXG4rICAgIHBpZDEgPSBuYXBpc1sxXS5nZXQoJ3BpZCcpXFxuK1xcbisgICAgY21kKGZcXFwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IGRvd25cXFwiKVxcbisgICAgY21kKGZcXFwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXFxcIilcXG4rXFxuKyAgICAjIHJlLWFjcXVpcmUgbmFwaSBpbmZvXFxuKyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsnaWZpbmRleCc6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxcbitcXG4rICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcXG4rXFxuKyAgICAjIGNoZWNrIHRoZSBrdGhyZWFkIHJlbWFpbnMgdGhlIHNhbWVcXG4rICAgIGtzZnRfZXEobmFwaXNbMF0uZ2V0KCdwaWQnKSwgcGlkMClcXG4rICAgIGtzZnRfZXEobmFwaXNbMV0uZ2V0KCdwaWQnKSwgcGlkMSlcXG4gXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFxcXCJcXFwiXFxcIlxcbkBAIC0xMzQsNyArMTcyLDggQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgd2l0aCBOZXREcnZFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcXG4gICAgICAgICBrc2Z0X3J1bihbbmFwaV9pbml0LFxcbiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcyxcXG4tICAgICAgICAgICAgICAgICAgZW5hYmxlX2Rldl90aHJlYWRlZF9kaXNhYmxlX25hcGlfdGhyZWFkZWRdLFxcbisgICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZCxcXG4rICAgICAgICAgICAgICAgICAgbmljX2xpbmtfZmxhcF0sXFxuICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXFxuaW5kZXggNWVjMWM4NWMxNjIzZTUuLjg5N2NlNjcwMDYwMWMwIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxcbkBAIC0xMjQsNiArMTI0LDIzIEBAIHRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkKClcXG4gXFx0cmV0dXJuICQ/XFxuIH1cXG4gXFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXFxuK3tcXG4rXFx0IyBPbmx5IGVuYWJsZSBuYXBpIHRocmVhZGVkIHBvbGwuIFNldCBzdXNwZW5kIHRpbWVvdXQgYW5kIHByZWZlciBidXN5XFxuK1xcdCMgcG9sbCB0byAwLiBSdW4gYWdhaW4gYWZ0ZXIgYSBsaW5rIGZsYXAuXFxuK1xcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAgfHwgcmV0dXJuICQ/XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgZG93blxcbitcXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93blxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgJE5TSU1fQ0xfTkFNRSB1cFxcbitcXG4rXFx0dGVzdF9idXN5cG9sbCAwICR7TkFQSV9USFJFQURFRF9NT0RFX0JVU1lfUE9MTH0gMFxcbitcXG4rXFx0cmV0dXJuICQ/XFxuK31cXG4rXFxuICMjI1xcbiAjIyMgQ29kZSBzdGFydFxcbiAjIyNcXG5AQCAtMTc2LDYgKzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4gXFx0ZXhpdCAxXFxuIGZpXFxuIFxcbit0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZF9saW5rX2ZsYXBcXG4raWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcInRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcXFwiXFxuK1xcdGNsZWFudXBfbnNcXG4rXFx0ZXhpdCAxXFxuK2ZpXFxuK1xcbiBlY2hvIFxcXCIkTlNJTV9TVl9GRDokTlNJTV9TVl9JRklEWFxcXCIgXFx1MDAzZSAkTlNJTV9ERVZfU1lTX1VOTElOS1xcbiBcXG4gZWNobyAkTlNJTV9DTF9JRCBcXHUwMDNlICROU0lNX0RFVl9TWVNfREVMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjE2LjAzNzYzNzI0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2OTA1OTY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1YjEwMTJjNTE1MTA0OGFmMGFjNWI1YTU0YmFiYTE5MWM0YmJlMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAyMDo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtNjMsNiArNjMsNyBAQCBzdHJ1Y3QgZHNhX3BvcnQ7XG4gc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm47XG4gc3RydWN0IG1hY3NlY19jb250ZXh0O1xuIHN0cnVjdCBtYWNzZWNfb3BzO1xuK3N0cnVjdCBuYXBpX3N0cnVjdDtcbiBzdHJ1Y3QgbmV0ZGV2X2NvbmZpZztcbiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTtcbiBzdHJ1Y3Qgc2RfZmxvd19saW1pdDtcbkBAIC0zNjMsNiArMzY0LDEwIEBAIHN0cnVjdCBncm9fbm9kZSB7XG4gXHR1MzJcdFx0XHRjYWNoZWRfbmFwaV9pZDtcbiB9O1xuIFxuK3N0cnVjdCBuYXBpX3RocmVhZF9jdHgge1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuK307XG4rXG4gLypcbiAgKiBTdHJ1Y3R1cmUgZm9yIHBlci1OQVBJIGNvbmZpZ1xuICAqL1xuQEAgLTM3MSw2ICszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHtcbiBcdHU2NCBpcnFfc3VzcGVuZF90aW1lb3V0O1xuIFx0dTMyIGRlZmVyX2hhcmRfaXJxcztcbiBcdGNwdW1hc2tfdCBhZmZpbml0eV9tYXNrO1xuK1x0LyogdGhyZWFkIGFuZCB0aHJlYWRfY3R4IG1pcnJvcnMgZmllbGRzIG9mIG5hcGlfc3RydWN0IHdoZW4gbmFwaV9zdHJ1Y3RcbitcdCAqIGlzIGFsaXZlLiBXaGVuIHRoZSBuYXBpX3N0cnVjdCBnZXRzIGRlc3Ryb3llZCwgbmFwaV9jb25maWcgaG9sZHMgdGhlXG4rXHQgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLlxuK1x0ICovXG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDtcbitcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7XG4gXHR1OCB0aHJlYWRlZDtcbiBcdHVuc2lnbmVkIGludCBuYXBpX2lkO1xuIH07XG5AQCAtNDA0LDYgKzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgaHJ0aW1lclx0XHR0aW1lcjtcbiBcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cbiBcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KnRocmVhZDtcbitcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHhcdCp0aHJlYWRfY3R4O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRncm9fZmx1c2hfdGltZW91dDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0aXJxX3N1c3BlbmRfdGltZW91dDtcbiBcdHUzMlx0XHRcdGRlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzgxOTkyYzkyOWQ5ZDUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xNjQ3LDIwICsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xuIFxuIHN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4ge1xuK1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IE5VTEw7XG4gXHRpbnQgZXJyID0gMDtcbiBcbitcdGlmIChuLVx1MDAzZWNvbmZpZyBcdTAwMjZcdTAwMjYgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkKSB7XG4rXHRcdG4tXHUwMDNldGhyZWFkX2N0eCA9IG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZF9jdHg7XG4rXHRcdG4tXHUwMDNldGhyZWFkID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkO1xuK1x0XHRXUklURV9PTkNFKG4tXHUwMDNldGhyZWFkX2N0eC1cdTAwM2VuYXBpLCBuKTtcbitcdFx0a3RocmVhZF91bnBhcmsobi1cdTAwM2V0aHJlYWQpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRocmVhZF9jdHggPSBrdnphbGxvY19vYmooKnRocmVhZF9jdHgpO1xuK1x0aWYgKCF0aHJlYWRfY3R4KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbiBcdC8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpblxuIFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xuIFx0ICogd2FybmluZyBhbmQgd29yayB3aXRoIGxvYWRhdmcuXG4gXHQgKi9cbi1cdG4tXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcIm5hcGkvJXMtJWRcIixcbitcdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG4rXHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgdGhyZWFkX2N0eCwgXCJuYXBpLyVzLSVkXCIsXG4gXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuIFx0aWYgKElTX0VSUihuLVx1MDAzZXRocmVhZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihuLVx1MDAzZXRocmVhZCk7XG4gXHRcdHByX2VycihcImt0aHJlYWRfcnVuIGZhaWxlZCB3aXRoIGVyciAlZFxcblwiLCBlcnIpO1xuIFx0XHRuLVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdGdvdG8gZnJlZV90aHJlYWRfY3R4O1xuK1x0fVxuK1x0bi1cdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcbitcdGlmIChuLVx1MDAzZWNvbmZpZykge1xuK1x0XHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBuLVx1MDAzZXRocmVhZDtcbitcdFx0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IHRocmVhZF9jdHg7XG4gXHR9XG4gXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX3RocmVhZF9jdHg6XG4rXHRrdmZyZWUodGhyZWFkX2N0eCk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03MTgzLDcgKzcyMDgsMTMgQEAgc3RhdGljIHZvaWQgbmFwaV9zdG9wX2t0aHJlYWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0fVxuIFxuIFx0a3RocmVhZF9zdG9wKG5hcGktXHUwMDNldGhyZWFkKTtcbitcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuIFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0bmFwaS1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuK1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuQEAgLTcxOTksMTMgKzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4ge1xuLVx0aWYgKHRocmVhZGVkKSB7XG4tXHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0XHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcbitcdGlmICh0aHJlYWRlZCBcdTAwMjZcdTAwMjYgIW5hcGktXHUwMDNldGhyZWFkKSB7XG4rXHRcdGludCBlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xuIFxuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHR9XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZylcbkBAIC03MjU1LDggKzcyODQsMTUgQEAgaW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcbiBcbiBcdC8qIE92ZXJyaWRlIHRoZSBjb25maWcgZm9yIGFsbCBOQVBJcyBldmVuIGlmIGN1cnJlbnRseSBub3QgbGlzdGVkICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW51bV9uYXBpX2NvbmZpZ3M7IGkrKykge1xuIFx0XHRkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkZWQgPSB0aHJlYWRlZDtcbitcdFx0aWYgKCF0aHJlYWRlZCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCkge1xuK1x0XHRcdGt0aHJlYWRfc3RvcChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKTtcbitcdFx0XHRrdmZyZWUoZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xuK1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQgPSBOVUxMO1xuK1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4ID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNzUwMSw2ICs3NTM3LDggQEAgc3RhdGljIHZvaWQgbmFwaV9zYXZlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4gXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVx1MDAzZWRlZmVyX2hhcmRfaXJxcztcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWdyb19mbHVzaF90aW1lb3V0ID0gbi1cdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQgPSBuLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQ7XG4rXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBuLVx1MDAzZXRocmVhZDtcbitcdG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZF9jdHggPSBuLVx1MDAzZXRocmVhZF9jdHg7XG4gXHRuYXBpX2hhc2hfZGVsKG4pO1xuIH1cbiBcbkBAIC03Njk1LDYgKzc3MzMsMjEgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5BUElfU1RBVEVfSEFTX05PVElGSUVSLCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSlcbiBcdFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVx1MDAzZWlycSwgTlVMTCk7XG4gXG4rXHRpZiAobmFwaS1cdTAwM2V0aHJlYWQpIHtcbitcdFx0aWYgKG5hcGktXHUwMDNlY29uZmlnKSB7XG4rXHRcdFx0a3RocmVhZF9wYXJrKG5hcGktXHUwMDNldGhyZWFkKTtcbitcdFx0XHQvKiBuYXBpLVx1MDAzZWNvbmZpZyBob2xkcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZFxuK1x0XHRcdCAqIGZyb20gbm93IG9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG5hcGktXHUwMDNldGhyZWFkX2N0eC1cdTAwM2VuYXBpID0gTlVMTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuK1x0XHRcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuK1x0XHR9XG4rXHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0bmFwaS1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdH1cbitcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuIFx0XHRuYXBpLVx1MDAzZWluZGV4ID0gLTE7XG4gXHRcdG5hcGktXHUwMDNlY29uZmlnID0gTlVMTDtcbkBAIC03NzA0LDExICs3NzU3LDYgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRuYXBpX2ZyZWVfZnJhZ3MobmFwaSk7XG4gXG4gXHRncm9fY2xlYW51cChcdTAwMjZuYXBpLVx1MDAzZWdybyk7XG4tXG4tXHRpZiAobmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0a3RocmVhZF9zdG9wKG5hcGktXHUwMDNldGhyZWFkKTtcbi1cdFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkKTtcbiBcbkBAIC03ODA0LDExICs3ODUyLDE4IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKVxuIFx0cmV0dXJuIHdvcms7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4rc3RhdGljIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4KVxuIHtcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IFJFQURfT05DRSh0aHJlYWRfY3R4LVx1MDAzZW5hcGkpO1xuIFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbiBcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdGlmIChrdGhyZWFkX3Nob3VsZF9wYXJrKCkpIHtcbitcdFx0XHRrdGhyZWFkX3BhcmttZSgpO1xuK1x0XHRcdG5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cdTAwM2VuYXBpKTtcbitcdFx0XHQvKiBNaWdodCBiZSBhd2FrZW5lZCBmb3Igc3RvcHBpbmcgKi9cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHQvKiBUZXN0aW5nIFNDSEVEX1RIUkVBREVEIGJpdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudFxuIFx0XHQgKiBrdGhyZWFkIG93bnMgdGhpcyBuYXBpIGFuZCBjb3VsZCBwb2xsIG9uIHRoaXMgbmFwaS5cbiBcdFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxuQEAgLTc4MTcsNyArNzg3Miw3IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVEX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSkge1xuIFx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX2xpc3QpKTtcbiBcdFx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0cmV0dXJuIG5hcGk7XG4gXHRcdH1cbiBcbiBcdFx0c2NoZWR1bGUoKTtcbkBAIC03ODI1LDcgKzc4ODAsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0fVxuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFxuLVx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbkBAIC03ODgyLDEzICs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG4rXHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4gXHRib29sIHdhbnRfYnVzeV9wb2xsO1xuIFx0Ym9vbCBpbl9idXN5X3BvbGw7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcbi1cdHdoaWxlICghbmFwaV90aHJlYWRfd2FpdChuYXBpKSkge1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0bmFwaSA9IG5hcGlfdGhyZWFkX3dhaXQodGhyZWFkX2N0eCk7XG4rXHRcdGlmICghbmFwaSlcbitcdFx0XHRicmVhaztcbitcbiBcdFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXHUwMDNlc3RhdGUpO1xuIFxuIFx0XHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xuQEAgLTEyMTI4LDExICsxMjE4OCwxMSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gZnJlZV9hbGw7XG4gXHRkZXYtXHUwMDNlY2ZnX3BlbmRpbmcgPSBkZXYtXHUwMDNlY2ZnO1xuIFxuLVx0ZGV2LVx1MDAzZW51bV9uYXBpX2NvbmZpZ3MgPSBtYXhxcztcbiBcdG5hcGlfY29uZmlnX3N6ID0gYXJyYXlfc2l6ZShtYXhxcywgc2l6ZW9mKCpkZXYtXHUwMDNlbmFwaV9jb25maWcpKTtcbiBcdGRldi1cdTAwM2VuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFkZXYtXHUwMDNlbmFwaV9jb25maWcpXG4gXHRcdGdvdG8gZnJlZV9hbGw7XG4rXHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFxuIFx0c3Ryc2NweShkZXYtXHUwMDNlbmFtZSwgbmFtZSk7XG4gXHRkZXYtXHUwMDNlbmFtZV9hc3NpZ25fdHlwZSA9IG5hbWVfYXNzaWduX3R5cGU7XG5AQCAtMTIxNjAsNiArMTIyMjAsOCBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX25ldGRldl9tcXMpO1xuIFxuIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0KSkge1xuIFx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xuIFxuQEAgLTEyMTcxLDYgKzEyMjMzLDEyIEBAIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gXHR9XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKSB7XG4rXHRcdGlmIChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XG4rXHRcdFx0a3RocmVhZF9zdG9wKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xuK1x0XHRcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkX2N0eCk7XG4rXHRcdH1cbitcdH1cbiBcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuQEAgLTEyNyw2ICsxMjcsNDQgQEAgZGVmIGNoYW5nZV9udW1fcXVldWVzKGNmZywgbmwpIC1cdTAwM2UgTm9uZTpcbiAgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKVxuICAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4gXG4rZGVmIG5pY19saW5rX2ZsYXAoY2ZnLCBubCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVGVzdCB0aGF0IGlmIHRocmVhZGVkIGlzIGVuYWJsZWQsIGFuZCBOSUMgZ29lcyB0aHJvdWdoXG4rICAgIGEgcmVzZXQsIHRoZSBrdGhyZWFkIHN0YXlzIHVuY2hhbmdlZCBhY3Jvc3MgdGhlIGxpbmsgZmxhcC5cbisgICAgXCJcIlwiXG4rICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeydpZmluZGV4JzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4rICAgIGtzZnRfZ2UobGVuKG5hcGlzKSwgMilcbitcbisgICAgbmFwaTBfaWQgPSBuYXBpc1swXVsnaWQnXVxuKyAgICBuYXBpMV9pZCA9IG5hcGlzWzFdWydpZCddXG4rXG4rICAgIF9zZXR1cF9kZWZlcnJlZF9jbGVhbnVwKGNmZylcbitcbisgICAgIyBzZXQgdGhyZWFkZWRcbisgICAgX3NldF90aHJlYWRlZF9zdGF0ZShjZmcsIDEpXG4rICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeydpZmluZGV4JzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4rXG4rICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcbisgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKVxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4rXG4rICAgIHBpZDAgPSBuYXBpc1swXS5nZXQoJ3BpZCcpXG4rICAgIHBpZDEgPSBuYXBpc1sxXS5nZXQoJ3BpZCcpXG4rXG4rICAgIGNtZChmXCJpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93blwiKVxuKyAgICBjbWQoZlwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXCIpXG4rXG4rICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm9cbisgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7J2lmaW5kZXgnOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxuK1xuKyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbisgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkxX2lkKVxuK1xuKyAgICAjIGNoZWNrIHRoZSBrdGhyZWFkIHJlbWFpbnMgdGhlIHNhbWVcbisgICAga3NmdF9lcShuYXBpc1swXS5nZXQoJ3BpZCcpLCBwaWQwKVxuKyAgICBrc2Z0X2VxKG5hcGlzWzFdLmdldCgncGlkJyksIHBpZDEpXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuQEAgLTEzNCw3ICsxNzIsOCBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgd2l0aCBOZXREcnZFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGtzZnRfcnVuKFtuYXBpX2luaXQsXG4gICAgICAgICAgICAgICAgICAgY2hhbmdlX251bV9xdWV1ZXMsXG4tICAgICAgICAgICAgICAgICAgZW5hYmxlX2Rldl90aHJlYWRlZF9kaXNhYmxlX25hcGlfdGhyZWFkZWRdLFxuKyAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkLFxuKyAgICAgICAgICAgICAgICAgIG5pY19saW5rX2ZsYXBdLFxuICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpXG4gICAgIGtzZnRfZXhpdCgpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXG5pbmRleCA1ZWMxYzg1YzE2MjNlNS4uODk3Y2U2NzAwNjAxYzAgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsX3Rlc3Quc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxuQEAgLTEyNCw2ICsxMjQsMjMgQEAgdGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWQoKVxuIFx0cmV0dXJuICQ/XG4gfVxuIFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXG4re1xuK1x0IyBPbmx5IGVuYWJsZSBuYXBpIHRocmVhZGVkIHBvbGwuIFNldCBzdXNwZW5kIHRpbWVvdXQgYW5kIHByZWZlciBidXN5XG4rXHQjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLlxuK1x0dGVzdF9idXN5cG9sbCAwICR7TkFQSV9USFJFQURFRF9NT0RFX0JVU1lfUE9MTH0gMCB8fCByZXR1cm4gJD9cbitcbitcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgJE5TSU1fU1ZfTkFNRSBkb3duXG4rXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93blxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXG4rXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgdXBcbitcbitcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDBcbitcbitcdHJldHVybiAkP1xuK31cbitcbiAjIyNcbiAjIyMgQ29kZSBzdGFydFxuICMjI1xuQEAgLTE3Niw2ICsxOTMsMTMgQEAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4gXHRleGl0IDFcbiBmaVxuIFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcFxuK2lmIFsgJD8gLW5lIDAgXTsgdGhlblxuK1x0ZWNobyBcInRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcIlxuK1x0Y2xlYW51cF9uc1xuK1x0ZXhpdCAxXG4rZmlcbitcbiBlY2hvIFwiJE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFhcIiBcdTAwM2UgJE5TSU1fREVWX1NZU19VTkxJTktcbiBcbiBlY2hvICROU0lNX0NMX0lEIFx1MDAzZSAkTlNJTV9ERVZfU1lTX0RFTFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MTYuMDM3NjM5MTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NjQzMTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGhvdyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgd29ya3Mgd2l0aGluIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIHJlZmFjdG9yIGhvdyB0aGUgTkFQSSBrdGhyZWFkIGlzIGhhbmRsZWTigJRjcmVhdGlvbiwgcGFya2luZywgZGVzdHJ1Y3Rpb24sIHlvdSBuYW1lIGl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbmFwaV90aHJlYWRfY3R4YCBzdHJ1Y3R1cmUgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGt0aHJlYWQgbGlmZWN5Y2xlIGFyZSB0aGUga2V5IGNoYW5nZXMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIE5BUEkga3RocmVhZCBwZXJzaXN0ZW50IGFjcm9zcyByZXNldHMsIGxpa2UgYSBsaW5rIGZsYXAsIGJ5IGhvbGRpbmcgb250byB0aGUgdGhyZWFkIHJlZmVyZW5jZSBpbiBgbmFwaV9jb25maWdgLiBUaGF0J3MgYSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSB0aGF0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCwgYG5hcGlfc3RvcF9rdGhyZWFkYCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBuYXBpX3NhdmVfY29uZmlnYCwgYF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkYCwgYG5hcGlfdGhyZWFkX3dhaXRgLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYGFsbG9jX25ldGRldl9tcXNgIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIEl0J3MgYSBjb21wcmVoZW5zaXZlIHRvdWNoIG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGZ1bmN0aW9uYWwuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQncyB2ZXJ5IHJlYWNoYWJsZSwgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFllcCwgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiYXNlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCBzbyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIGtlcm5lbCBpZiBgQ09ORklHX05FVGAgaXMgc2V0LiBIb3dldmVyLCBgQ09ORklHX05FVGAgaXMgZ2VuZXJpYy4gSSB3b25kZXIgaWYgdGhlcmUgaXMgYSBjb25maWcgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbS4gTGV0J3MgZ3JlcCBmb3IgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAgb3IgYG5hcGlfdGhyZWFkZWRfcG9sbGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjIzLjE4NDA3Mjk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1NjAwMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfdGhyZWFkZWRfcG9sbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM1OTE9c3RydWN0IHNvZnRuZXRfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM2MDQtXFx0Ym9vbFxcdFxcdFxcdGluX25ldF9yeF9hY3Rpb247XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNjA1OlxcdGJvb2xcXHRcXHRcXHRpbl9uYXBpX3RocmVhZGVkX3BvbGw7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNjA2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xcbm5ldC9jb3JlL2Rldi5jLTE2NDUtXFxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcXG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxcbm5ldC9jb3JlL2Rldi5jPTE2NDg9c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE2NjktXFx0dGhyZWFkX2N0eC1cXHUwMDNlbmFwaSA9IG47XFxubmV0L2NvcmUvZGV2LmM6MTY3MDpcXHRuLVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFxcXCJuYXBpLyVzLSVkXFxcIixcXG5uZXQvY29yZS9kZXYuYy0xNjcxLVxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzExPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMyNC1cXG5uZXQvY29yZS9kZXYuYzo1MzI1OlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcXG5uZXQvY29yZS9kZXYuYy01MzI2LVxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxubmV0L2NvcmUvZGV2LmMtNTMyNy1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzI4OlxcdFxcdGlmICghbXlzZC1cXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcXHUwMDI2XFx1MDAyNiAhbXlzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxcbm5ldC9jb3JlL2Rldi5jLTUzMjktXFx0XFx0XFx0X19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03ODU1PXN0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc4ODUtXFxubmV0L2NvcmUvZGV2LmM6Nzg4NjpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzg4Ny1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYnVzeV9wb2xsX2xhc3RfcXMpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTAwLVxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbm5ldC9jb3JlL2Rldi5jOjc5MDE6XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxubmV0L2NvcmUvZGV2LmMtNzkwMi1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MDYtXFxubmV0L2NvcmUvZGV2LmM6NzkwNzpcXHRcXHRzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XFxubmV0L2NvcmUvZGV2LmMtNzkwOC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTM3LVxcbm5ldC9jb3JlL2Rldi5jOjc5Mzg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG5uZXQvY29yZS9kZXYuYy03OTM5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5NjMtXFxubmV0L2NvcmUvZGV2LmM6Nzk2NDpcXHRcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFxcdTAwMjZsYXN0X3FzIDogTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtNzk2NS1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI2OD1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzI3MS1cXG5uZXQvY29yZS9kZXYuYzoxMzI3MjpcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2csIE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMjczLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jPTcxPXN0YXRpYyB1aW50NjRfdCBjZmdfaXJxX3N1c3BlbmRfdGltZW91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzo3MjpzdGF0aWMgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBjZmdfbmFwaV90aHJlYWRlZF9wb2xsID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtNzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9NzQ9c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZmlsZXBhdGgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03Ni1cXHRlcnJvcigxLCAwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jOjc3OlxcdCAgICAgIFxcXCJVc2FnZTogJXMgLXBcXHUwMDNjcG9ydFxcdTAwM2UgLWJcXHUwMDNjYWRkclxcdTAwM2UgLW1cXHUwMDNjbWF4X2V2ZW50c1xcdTAwM2UgLXVcXHUwMDNjYnVzeV9wb2xsX3VzZWNzXFx1MDAzZSAtUFxcdTAwM2NwcmVmZXJfYnVzeV9wb2xsXFx1MDAzZSAtZ1xcdTAwM2NidXN5X3BvbGxfYnVkZ2V0XFx1MDAzZSAtb1xcdTAwM2NvdXRmaWxlXFx1MDAzZSAtZFxcdTAwM2NkZWZlcl9oYXJkX2lycXNcXHUwMDNlIC1yXFx1MDAzY2dyb19mbHUuLi5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03OC1cXHQgICAgICBmaWxlcGF0aCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz04MT1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTE3NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoxNzY6XFx0XFx0XFx0Y2ZnX25hcGlfdGhyZWFkZWRfcG9sbCA9IChlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkKXRtcDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy0xNzctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz0yMjY9c3RhdGljIHZvaWQgc2V0dXBfcXVldWUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTI1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoyNTc6XFx0aWYgKGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MjU4OlxcdFxcdG5ldGRldl9uYXBpX3NldF9yZXFfc2V0X3RocmVhZGVkKHNldF9yZXEsIGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTI1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MjUuMjc5Njc4NDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ0ODUxMDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGVkIFBvbGxpbmcgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSByZWxldmFudCBjb2RlJ3MgYWxsIGluIGBuZXQvY29yZS9kZXYuY2AuIE5vdGhpbmcgdG9vIHNwZWNpZmljIGluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgc3lzdGVtOyB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdHVmZi4gRm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXNwZWN0LCBhbiBlbXB0eSBsaXN0IHNlZW1zIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5JIHdlbnQgdGhyb3VnaCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgd2hldGhlciB0byBleGNsdWRlIGNlcnRhaW4gZnVuY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGhpZ2gtZnJlcXVlbmN5IHVzYWdlIGJ1dCBvbiBzZWNvbmQgdGhvdWdodCBJIHdpbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYG5hcGlfa3RocmVhZF9jcmVhdGVgLCBgbmFwaV9zdG9wX2t0aHJlYWRgLCBgbmFwaV9zZXRfdGhyZWFkZWRgLCBgbmV0aWZfc2V0X3RocmVhZGVkYCwgYG5hcGlfc2F2ZV9jb25maWdgLCBgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRgLCBgbmFwaV90aHJlYWRfd2FpdGAsIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aHMsIGxpa2UgZGV2aWNlIGFsbG9jYXRpb24gYW5kIHBvbGxpbmcsIHNvIEkgZGVjaWRlZCB0byBhdm9pZCB0aGVtLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBmYWlybHkgZnVuY3Rpb25hbCwgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSwgd2hpY2ggd2FycmFudHMgc29tZSBjYXJlZnVsIGZ1enppbmcuIEkgYmVsaWV2ZSB0aGlzIGlzIGEgdmFsaWQgYW5kIGdvb2QgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjM0LjcyODE5MDczNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYXBpX2t0aHJlYWRfY3JlYXRlXCIsXG4gICAgXCJuYXBpX3N0b3Bfa3RocmVhZFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwibmFwaV9zYXZlX2NvbmZpZ1wiLFxuICAgIFwiX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRcIixcbiAgICBcIm5hcGlfdGhyZWFkX3dhaXRcIixcbiAgICBcIm5ldGRldl9uYXBpX2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIGNoYW5naW5nIGhvdyBOQVBJIGt0aHJlYWRzIGFyZSBjcmVhdGVkLCBwYXJrZWQsIGFuZCBkZXN0cm95ZWQgdG8gcGVyc2lzdCBhY3Jvc3MgTkFQSSByZXNldHMgKGUuZy4sIGxpbmsgZmxhcHMpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 20:35:54 +0000 UTC FinishedAt: 2026-06-29 20:50:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "series_id": "c8a1c080-2e52-47df-bf1d-e5f2fdb213fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "napi_kthread_create", "napi_stop_kthread", "napi_set_threaded", "netif_set_threaded", "napi_save_config", "__netif_napi_del_locked", "napi_thread_wait", "netdev_napi_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV9rdGhyZWFkX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuYXBpX3N0b3Bfa3RocmVhZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmFwaV9zYXZlX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtfX25ldGlmX25hcGlfZGVsX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZF93YWl0JiMzNDssCiAgICAmIzM0O25ldGRldl9uYXBpX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTViMTAxMmM1MTUxMDQ4YWYwYWM1YjVhNTRiYWJhMTkxYzRiYmUyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDIwOjUwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEAgc3RydWN0IGRzYV9wb3J0O1xuIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuO1xuIHN0cnVjdCBtYWNzZWNfY29udGV4dDtcbiBzdHJ1Y3QgbWFjc2VjX29wcztcbiYjNDM7c3RydWN0IG5hcGlfc3RydWN0O1xuIHN0cnVjdCBuZXRkZXZfY29uZmlnO1xuIHN0cnVjdCBuZXRkZXZfbmFtZV9ub2RlO1xuIHN0cnVjdCBzZF9mbG93X2xpbWl0O1xuQEAgLTM2Myw2ICYjNDM7MzY0LDEwIEBAIHN0cnVjdCBncm9fbm9kZSB7XG4gXHR1MzJcdFx0XHRjYWNoZWRfbmFwaV9pZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4mIzQzO307XG4mIzQzO1xuIC8qXG4gICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWdcbiAgKi9cbkBAIC0zNzEsNiAmIzQzOzM3NiwxMiBAQCBzdHJ1Y3QgbmFwaV9jb25maWcge1xuIFx0dTY0IGlycV9zdXNwZW5kX3RpbWVvdXQ7XG4gXHR1MzIgZGVmZXJfaGFyZF9pcnFzO1xuIFx0Y3B1bWFza190IGFmZmluaXR5X21hc2s7XG4mIzQzO1x0LyogdGhyZWFkIGFuZCB0aHJlYWRfY3R4IG1pcnJvcnMgZmllbGRzIG9mIG5hcGlfc3RydWN0IHdoZW4gbmFwaV9zdHJ1Y3RcbiYjNDM7XHQgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZVxuJiM0MztcdCAqIHNvbGUgcmVmZXJlbmNlIHRvIHRoZSBub3cgcGFya2VkIGt0aHJlYWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eDtcbiBcdHU4IHRocmVhZGVkO1xuIFx0dW5zaWduZWQgaW50IG5hcGlfaWQ7XG4gfTtcbkBAIC00MDQsNiAmIzQzOzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgaHJ0aW1lclx0XHR0aW1lcjtcbiBcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cbiBcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KnRocmVhZDtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4XHQqdGhyZWFkX2N0eDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0Z3JvX2ZsdXNoX3RpbWVvdXQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGlycV9zdXNwZW5kX3RpbWVvdXQ7XG4gXHR1MzJcdFx0XHRkZWZlcl9oYXJkX2lycXM7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNGIzZDVjZmRmNmUwMGYuLmM4MTk5MmM5MjlkOWQ1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTY0NywyMCAmIzQzOzE2NDcsNDUgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG4gXG4gc3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbiB7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IE5VTEw7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiYjNDM7XHRpZiAobi1cdTAwM2Vjb25maWcgXHUwMDI2XHUwMDI2IG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bi1cdTAwM2V0aHJlYWRfY3R4ID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eDtcbiYjNDM7XHRcdG4tXHUwMDNldGhyZWFkID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkO1xuJiM0MztcdFx0V1JJVEVfT05DRShuLVx1MDAzZXRocmVhZF9jdHgtXHUwMDNlbmFwaSwgbik7XG4mIzQzO1x0XHRrdGhyZWFkX3VucGFyayhuLVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRocmVhZF9jdHggPSBrdnphbGxvY19vYmooKnRocmVhZF9jdHgpO1xuJiM0MztcdGlmICghdGhyZWFkX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiBcdC8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpblxuIFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xuIFx0ICogd2FybmluZyBhbmQgd29yayB3aXRoIGxvYWRhdmcuXG4gXHQgKi9cbi1cdG4tXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcJiMzNDtuYXBpLyVzLSVkXCYjMzQ7LFxuJiM0MztcdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG4mIzQzO1x0bi1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFwmIzM0O25hcGkvJXMtJWRcJiMzNDssXG4gXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuIFx0aWYgKElTX0VSUihuLVx1MDAzZXRocmVhZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihuLVx1MDAzZXRocmVhZCk7XG4gXHRcdHByX2VycihcJiMzNDtrdGhyZWFkX3J1biBmYWlsZWQgd2l0aCBlcnIgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdG4tXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdGdvdG8gZnJlZV90aHJlYWRfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRuLVx1MDAzZXRocmVhZF9jdHggPSB0aHJlYWRfY3R4O1xuJiM0MztcdGlmIChuLVx1MDAzZWNvbmZpZykge1xuJiM0MztcdFx0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkID0gbi1cdTAwM2V0aHJlYWQ7XG4mIzQzO1x0XHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfdGhyZWFkX2N0eDpcbiYjNDM7XHRrdmZyZWUodGhyZWFkX2N0eCk7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtNzE4Myw3ICYjNDM7NzIwOCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHR9XG4gXG4gXHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuIFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdG5hcGktXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0aWYgKG5hcGktXHUwMDNlY29uZmlnKSB7XG4mIzQzO1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0bmFwaS1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5AQCAtNzE5OSwxMyAmIzQzOzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4ge1xuLVx0aWYgKHRocmVhZGVkKSB7XG4tXHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0XHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcbiYjNDM7XHRpZiAodGhyZWFkZWQgXHUwMDI2XHUwMDI2ICFuYXBpLVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0aW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7XG4gXG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdHJldHVybiBlcnI7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRpZiAobmFwaS1cdTAwM2Vjb25maWcpXG5AQCAtNzI1NSw4ICYjNDM7NzI4NCwxNSBAQCBpbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xuIFxuIFx0LyogT3ZlcnJpZGUgdGhlIGNvbmZpZyBmb3IgYWxsIE5BUElzIGV2ZW4gaWYgY3VycmVudGx5IG5vdCBsaXN0ZWQgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZGVkID0gdGhyZWFkZWQ7XG4mIzQzO1x0XHRpZiAoIXRocmVhZGVkIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XG4mIzQzO1x0XHRcdGt0aHJlYWRfc3RvcChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKTtcbiYjNDM7XHRcdFx0a3ZmcmVlKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCA9IE5VTEw7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4ID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC03NTAxLDYgJiM0Mzs3NTM3LDggQEAgc3RhdGljIHZvaWQgbmFwaV9zYXZlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4gXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVx1MDAzZWRlZmVyX2hhcmRfaXJxcztcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWdyb19mbHVzaF90aW1lb3V0ID0gbi1cdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQgPSBuLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQ7XG4mIzQzO1x0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkID0gbi1cdTAwM2V0aHJlYWQ7XG4mIzQzO1x0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IG4tXHUwMDNldGhyZWFkX2N0eDtcbiBcdG5hcGlfaGFzaF9kZWwobik7XG4gfVxuIFxuQEAgLTc2OTUsNiAmIzQzOzc3MzMsMjEgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5BUElfU1RBVEVfSEFTX05PVElGSUVSLCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSlcbiBcdFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVx1MDAzZWlycSwgTlVMTCk7XG4gXG4mIzQzO1x0aWYgKG5hcGktXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHRpZiAobmFwaS1cdTAwM2Vjb25maWcpIHtcbiYjNDM7XHRcdFx0a3RocmVhZF9wYXJrKG5hcGktXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdFx0LyogbmFwaS1cdTAwM2Vjb25maWcgaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWRcbiYjNDM7XHRcdFx0ICogZnJvbSBub3cgb24uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuYXBpLVx1MDAzZXRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IE5VTEw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRrdmZyZWUobmFwaS1cdTAwM2V0aHJlYWRfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdG5hcGktXHUwMDNldGhyZWFkX2N0eCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuIFx0XHRuYXBpLVx1MDAzZWluZGV4ID0gLTE7XG4gXHRcdG5hcGktXHUwMDNlY29uZmlnID0gTlVMTDtcbkBAIC03NzA0LDExICYjNDM7Nzc1Nyw2IEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0bmFwaV9mcmVlX2ZyYWdzKG5hcGkpO1xuIFxuIFx0Z3JvX2NsZWFudXAoXHUwMDI2bmFwaS1cdTAwM2Vncm8pO1xuLVxuLVx0aWYgKG5hcGktXHUwMDNldGhyZWFkKSB7XG4tXHRcdGt0aHJlYWRfc3RvcChuYXBpLVx1MDAzZXRocmVhZCk7XG4tXHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbi1cdH1cbiB9XG4gRVhQT1JUX1NZTUJPTChfX25ldGlmX25hcGlfZGVsX2xvY2tlZCk7XG4gXG5AQCAtNzgwNCwxMSAmIzQzOzc4NTIsMTggQEAgc3RhdGljIGludCBuYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvbGwpXG4gXHRyZXR1cm4gd29yaztcbiB9XG4gXG4tc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiYjNDM7c3RhdGljIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cdTAwM2VuYXBpKTtcbiBcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXG4gXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3BhcmsoKSkge1xuJiM0MztcdFx0XHRrdGhyZWFkX3BhcmttZSgpO1xuJiM0MztcdFx0XHRuYXBpID0gUkVBRF9PTkNFKHRocmVhZF9jdHgtXHUwMDNlbmFwaSk7XG4mIzQzO1x0XHRcdC8qIE1pZ2h0IGJlIGF3YWtlbmVkIGZvciBzdG9wcGluZyAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0LyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnRcbiBcdFx0ICoga3RocmVhZCBvd25zIHRoaXMgbmFwaSBhbmQgY291bGQgcG9sbCBvbiB0aGlzIG5hcGkuXG4gXHRcdCAqIFRlc3RpbmcgU0NIRUQgYml0IGlzIG5vdCBlbm91Z2ggYmVjYXVzZSBTQ0hFRCBiaXQgbWlnaHQgYmVcbkBAIC03ODE3LDcgJiM0Mzs3ODcyLDcgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiBcdFx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpKSB7XG4gXHRcdFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZuYXBpLVx1MDAzZXBvbGxfbGlzdCkpO1xuIFx0XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbi1cdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIG5hcGk7XG4gXHRcdH1cbiBcbiBcdFx0c2NoZWR1bGUoKTtcbkBAIC03ODI1LDcgJiM0Mzs3ODgwLDcgQEAgc3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiBcdH1cbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuQEAgLTc4ODIsMTMgJiM0Mzs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcbiBcdGJvb2wgd2FudF9idXN5X3BvbGw7XG4gXHRib29sIGluX2J1c3lfcG9sbDtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuIFxuLVx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdG5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpO1xuJiM0MztcdFx0aWYgKCFuYXBpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHZhbCA9IFJFQURfT05DRShuYXBpLVx1MDAzZXN0YXRlKTtcbiBcbiBcdFx0d2FudF9idXN5X3BvbGwgPSB2YWwgXHUwMDI2IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDtcbkBAIC0xMjEyOCwxMSAmIzQzOzEyMTg4LDExIEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0Z290byBmcmVlX2FsbDtcbiBcdGRldi1cdTAwM2VjZmdfcGVuZGluZyA9IGRldi1cdTAwM2VjZmc7XG4gXG4tXHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFx0bmFwaV9jb25maWdfc3ogPSBhcnJheV9zaXplKG1heHFzLCBzaXplb2YoKmRldi1cdTAwM2VuYXBpX2NvbmZpZykpO1xuIFx0ZGV2LVx1MDAzZW5hcGlfY29uZmlnID0ga3Z6YWxsb2MobmFwaV9jb25maWdfc3osIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gXHRpZiAoIWRldi1cdTAwM2VuYXBpX2NvbmZpZylcbiBcdFx0Z290byBmcmVlX2FsbDtcbiYjNDM7XHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFxuIFx0c3Ryc2NweShkZXYtXHUwMDNlbmFtZSwgbmFtZSk7XG4gXHRkZXYtXHUwMDNlbmFtZV9hc3NpZ25fdHlwZSA9IG5hbWVfYXNzaWduX3R5cGU7XG5AQCAtMTIxNjAsNiAmIzQzOzEyMjIwLDggQEAgRVhQT1JUX1NZTUJPTChhbGxvY19uZXRkZXZfbXFzKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0KSkge1xuIFx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xuIFxuQEAgLTEyMTcxLDYgJiM0MzsxMjIzMywxMiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHN5bmNocm9uaXplX25ldCgpO1xuIFx0fVxuIFxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpIHtcbiYjNDM7XHRcdFx0a3RocmVhZF9zdG9wKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xuJiM0MztcdFx0XHRrdmZyZWUoZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuQEAgLTEyNyw2ICYjNDM7MTI3LDQ0IEBAIGRlZiBjaGFuZ2VfbnVtX3F1ZXVlcyhjZmcsIG5sKSAtXHUwMDNlIE5vbmU6XG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbiAgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkxX2lkKVxuIFxuJiM0MztkZWYgbmljX2xpbmtfZmxhcChjZmcsIG5sKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFRlc3QgdGhhdCBpZiB0aHJlYWRlZCBpcyBlbmFibGVkLCBhbmQgTklDIGdvZXMgdGhyb3VnaFxuJiM0MzsgICAgYSByZXNldCwgdGhlIGt0aHJlYWQgc3RheXMgdW5jaGFuZ2VkIGFjcm9zcyB0aGUgbGluayBmbGFwLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsmIzM5O2lmaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4mIzQzOyAgICBrc2Z0X2dlKGxlbihuYXBpcyksIDIpXG4mIzQzO1xuJiM0MzsgICAgbmFwaTBfaWQgPSBuYXBpc1swXVsmIzM5O2lkJiMzOTtdXG4mIzQzOyAgICBuYXBpMV9pZCA9IG5hcGlzWzFdWyYjMzk7aWQmIzM5O11cbiYjNDM7XG4mIzQzOyAgICBfc2V0dXBfZGVmZXJyZWRfY2xlYW51cChjZmcpXG4mIzQzO1xuJiM0MzsgICAgIyBzZXQgdGhyZWFkZWRcbiYjNDM7ICAgIF9zZXRfdGhyZWFkZWRfc3RhdGUoY2ZnLCAxKVxuJiM0MzsgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7JiMzOTtpZmluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxuJiM0MztcbiYjNDM7ICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcbiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcbiYjNDM7XG4mIzQzOyAgICBwaWQwID0gbmFwaXNbMF0uZ2V0KCYjMzk7cGlkJiMzOTspXG4mIzQzOyAgICBwaWQxID0gbmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgY21kKGZcJiMzNDtpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93blwmIzM0OylcbiYjNDM7ICAgIGNtZChmXCYjMzQ7aXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm9cbiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcbiYjNDM7ICAgIGtzZnRfZ2UobGVuKG5hcGlzKSwgMilcbiYjNDM7XG4mIzQzOyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXG4mIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpXG4mIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4mIzQzO1xuJiM0MzsgICAgIyBjaGVjayB0aGUga3RocmVhZCByZW1haW5zIHRoZSBzYW1lXG4mIzQzOyAgICBrc2Z0X2VxKG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KSwgcGlkMClcbiYjNDM7ICAgIGtzZnRfZXEobmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspLCBwaWQxKVxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcJiMzNDtcJiMzNDtcJiMzNDtcbkBAIC0xMzQsNyAmIzQzOzE3Miw4IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICB3aXRoIE5ldERydkVudihfX2ZpbGVfXywgcXVldWVfY291bnQ9MikgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oW25hcGlfaW5pdCxcbiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcyxcbi0gICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZF0sXG4mIzQzOyAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkLFxuJiM0MzsgICAgICAgICAgICAgICAgICBuaWNfbGlua19mbGFwXSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgTmV0ZGV2RmFtaWx5KCkpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxuaW5kZXggNWVjMWM4NWMxNjIzZTUuLjg5N2NlNjcwMDYwMWMwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsX3Rlc3Quc2hcbkBAIC0xMjQsNiAmIzQzOzEyNCwyMyBAQCB0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZCgpXG4gXHRyZXR1cm4gJD9cbiB9XG4gXG4mIzQzO3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXG4mIzQzO3tcbiYjNDM7XHQjIE9ubHkgZW5hYmxlIG5hcGkgdGhyZWFkZWQgcG9sbC4gU2V0IHN1c3BlbmQgdGltZW91dCBhbmQgcHJlZmVyIGJ1c3lcbiYjNDM7XHQjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLlxuJiM0MztcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAgfHwgcmV0dXJuICQ/XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgJE5TSU1fU1ZfTkFNRSBkb3duXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIGRvd25cbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIHVwXG4mIzQzO1xuJiM0MztcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDBcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICQ/XG4mIzQzO31cbiYjNDM7XG4gIyMjXG4gIyMjIENvZGUgc3RhcnRcbiAjIyNcbkBAIC0xNzYsNiAmIzQzOzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiBcdGV4aXQgMVxuIGZpXG4gXG4mIzQzO3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcFxuJiM0MztpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX25zXG4mIzQzO1x0ZXhpdCAxXG4mIzQzO2ZpXG4mIzQzO1xuIGVjaG8gXCYjMzQ7JE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFhcJiMzNDsgXHUwMDNlICROU0lNX0RFVl9TWVNfVU5MSU5LXG4gXG4gZWNobyAkTlNJTV9DTF9JRCBcdTAwM2UgJE5TSU1fREVWX1NZU19ERUxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hcGlfa3RocmVhZF9jcmVhdGUmIzM0OywKICAgICYjMzQ7bmFwaV9zdG9wX2t0aHJlYWQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O25hcGlfc2F2ZV9jb25maWcmIzM0OywKICAgICYjMzQ7X19uZXRpZl9uYXBpX2RlbF9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmFwaV90aHJlYWRfd2FpdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmFwaV9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSwgY2hhbmdpbmcgaG93IE5BUEkga3RocmVhZHMgYXJlIGNyZWF0ZWQsIHBhcmtlZCwgYW5kIGRlc3Ryb3llZCB0byBwZXJzaXN0IGFjcm9zcyBOQVBJIHJlc2V0cyAoZS5nLiwgbGluayBmbGFwcykuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTViMTAxMmM1MTUxMDQ4YWYwYWM1YjVhNTRiYWJhMTkxYzRiYmUyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDIwOjUwOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLjA1ZTQzMGYxMGFiYTQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHN0cnVjdCBkc2FfcG9ydDsKIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuOwogc3RydWN0IG1hY3NlY19jb250ZXh0Owogc3RydWN0IG1hY3NlY19vcHM7CiYjNDM7c3RydWN0IG5hcGlfc3RydWN0Owogc3RydWN0IG5ldGRldl9jb25maWc7CiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTsKIHN0cnVjdCBzZF9mbG93X2xpbWl0OwpAQCAtMzYzLDYgJiM0MzszNjQsMTAgQEAgc3RydWN0IGdyb19ub2RlIHsKIAl1MzIJCQljYWNoZWRfbmFwaV9pZDsKIH07CiAKJiM0MztzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwomIzQzO307CiYjNDM7CiAvKgogICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWcKICAqLwpAQCAtMzcxLDYgJiM0MzszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHsKIAl1NjQgaXJxX3N1c3BlbmRfdGltZW91dDsKIAl1MzIgZGVmZXJfaGFyZF9pcnFzOwogCWNwdW1hc2tfdCBhZmZpbml0eV9tYXNrOwomIzQzOwkvKiB0aHJlYWQgYW5kIHRocmVhZF9jdHggbWlycm9ycyBmaWVsZHMgb2YgbmFwaV9zdHJ1Y3Qgd2hlbiBuYXBpX3N0cnVjdAomIzQzOwkgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZQomIzQzOwkgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CiYjNDM7CXN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7CiAJdTggdGhyZWFkZWQ7CiAJdW5zaWduZWQgaW50IG5hcGlfaWQ7CiB9OwpAQCAtNDA0LDYgJiM0Mzs0MTUsNyBAQCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgewogCXN0cnVjdCBocnRpbWVyCQl0aW1lcjsKIAkvKiBhbGwgZmllbGRzIHBhc3QgdGhpcyBwb2ludCBhcmUgd3JpdGUtcHJvdGVjdGVkIGJ5IG5ldGRldl9sb2NrICovCiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiYjNDM7CXN0cnVjdCBuYXBpX3RocmVhZF9jdHgJKnRocmVhZF9jdHg7CiAJdW5zaWduZWQgbG9uZwkJZ3JvX2ZsdXNoX3RpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZwkJaXJxX3N1c3BlbmRfdGltZW91dDsKIAl1MzIJCQlkZWZlcl9oYXJkX2lycXM7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi5jODE5OTJjOTI5ZDlkNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2NDcsMjAgJiM0MzsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKQogewomIzQzOwlzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gTlVMTDsKIAlpbnQgZXJyID0gMDsKIAomIzQzOwlpZiAobi0mZ3Q7Y29uZmlnICZhbXA7JmFtcDsgbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWQpIHsKJiM0MzsJCW4tJmd0O3RocmVhZF9jdHggPSBuLSZndDtjb25maWctJmd0O3RocmVhZF9jdHg7CiYjNDM7CQluLSZndDt0aHJlYWQgPSBuLSZndDtjb25maWctJmd0O3RocmVhZDsKJiM0MzsJCVdSSVRFX09OQ0Uobi0mZ3Q7dGhyZWFkX2N0eC0mZ3Q7bmFwaSwgbik7CiYjNDM7CQlrdGhyZWFkX3VucGFyayhuLSZndDt0aHJlYWQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdGhyZWFkX2N0eCA9IGt2emFsbG9jX29iaigqdGhyZWFkX2N0eCk7CiYjNDM7CWlmICghdGhyZWFkX2N0eCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwogCS8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpbgogCSAqIFRBU0tfSU5URVJSVVBUSUJMRSBtb2RlIHRvIGF2b2lkIHRoZSBibG9ja2VkIHRhc2sKIAkgKiB3YXJuaW5nIGFuZCB3b3JrIHdpdGggbG9hZGF2Zy4KIAkgKi8KLQluLSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIG4sICYjMzQ7bmFwaS8lcy0lZCYjMzQ7LAomIzQzOwl0aHJlYWRfY3R4LSZndDtuYXBpID0gbjsKJiM0MzsJbi0mZ3Q7dGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCB0aHJlYWRfY3R4LCAmIzM0O25hcGkvJXMtJWQmIzM0OywKIAkJCQluLSZndDtkZXYtJmd0O25hbWUsIG4tJmd0O25hcGlfaWQpOwogCWlmIChJU19FUlIobi0mZ3Q7dGhyZWFkKSkgewogCQllcnIgPSBQVFJfRVJSKG4tJmd0O3RocmVhZCk7CiAJCXByX2VycigmIzM0O2t0aHJlYWRfcnVuIGZhaWxlZCB3aXRoIGVyciAlZFxuJiMzNDssIGVycik7CiAJCW4tJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQlnb3RvIGZyZWVfdGhyZWFkX2N0eDsKJiM0MzsJfQomIzQzOwluLSZndDt0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDsKJiM0MzsJaWYgKG4tJmd0O2NvbmZpZykgewomIzQzOwkJbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWQgPSBuLSZndDt0aHJlYWQ7CiYjNDM7CQluLSZndDtjb25maWctJmd0O3RocmVhZF9jdHggPSB0aHJlYWRfY3R4OwogCX0KIAomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3RocmVhZF9jdHg6CiYjNDM7CWt2ZnJlZSh0aHJlYWRfY3R4KTsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MTgzLDcgJiM0Mzs3MjA4LDEzIEBAIHN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKIAl9CiAKIAlrdGhyZWFkX3N0b3AobmFwaS0mZ3Q7dGhyZWFkKTsKJiM0MzsJa3ZmcmVlKG5hcGktJmd0O3RocmVhZF9jdHgpOwogCW5hcGktJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW5hcGktJmd0O3RocmVhZF9jdHggPSBOVUxMOwomIzQzOwlpZiAobmFwaS0mZ3Q7Y29uZmlnKSB7CiYjNDM7CQluYXBpLSZndDtjb25maWctJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQluYXBpLSZndDtjb25maWctJmd0O3RocmVhZF9jdHggPSBOVUxMOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKQEAgLTcxOTksMTMgJiM0Mzs3MjMwLDExIEBAIHN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCSAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpCiB7Ci0JaWYgKHRocmVhZGVkKSB7Ci0JCWlmICghbmFwaS0mZ3Q7dGhyZWFkKSB7Ci0JCQlpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTsKJiM0MzsJaWYgKHRocmVhZGVkICZhbXA7JmFtcDsgIW5hcGktJmd0O3RocmVhZCkgewomIzQzOwkJaW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7CiAKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmIChuYXBpLSZndDtjb25maWcpCkBAIC03MjU1LDggJiM0Mzs3Mjg0LDE1IEBAIGludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJV0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7CiAKIAkvKiBPdmVycmlkZSB0aGUgY29uZmlnIGZvciBhbGwgTkFQSXMgZXZlbiBpZiBjdXJyZW50bHkgbm90IGxpc3RlZCAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O251bV9uYXBpX2NvbmZpZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykgewogCQlkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZGVkID0gdGhyZWFkZWQ7CiYjNDM7CQlpZiAoIXRocmVhZGVkICZhbXA7JmFtcDsgZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWQpIHsKJiM0MzsJCQlrdGhyZWFkX3N0b3AoZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWQpOwomIzQzOwkJCWt2ZnJlZShkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpOwomIzQzOwkJCWRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkID0gTlVMTDsKJiM0MzsJCQlkZXYtJmd0O25hcGlfY29uZmlnW2ldLnRocmVhZF9jdHggPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzUwMSw2ICYjNDM7NzUzNyw4IEBAIHN0YXRpYyB2b2lkIG5hcGlfc2F2ZV9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuKQogCW4tJmd0O2NvbmZpZy0mZ3Q7ZGVmZXJfaGFyZF9pcnFzID0gbi0mZ3Q7ZGVmZXJfaGFyZF9pcnFzOwogCW4tJmd0O2NvbmZpZy0mZ3Q7Z3JvX2ZsdXNoX3RpbWVvdXQgPSBuLSZndDtncm9fZmx1c2hfdGltZW91dDsKIAluLSZndDtjb25maWctJmd0O2lycV9zdXNwZW5kX3RpbWVvdXQgPSBuLSZndDtpcnFfc3VzcGVuZF90aW1lb3V0OwomIzQzOwluLSZndDtjb25maWctJmd0O3RocmVhZCA9IG4tJmd0O3RocmVhZDsKJiM0MzsJbi0mZ3Q7Y29uZmlnLSZndDt0aHJlYWRfY3R4ID0gbi0mZ3Q7dGhyZWFkX2N0eDsKIAluYXBpX2hhc2hfZGVsKG4pOwogfQogCkBAIC03Njk1LDYgJiM0Mzs3NzMzLDIxIEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkFQSV9TVEFURV9IQVNfTk9USUZJRVIsICZhbXA7bmFwaS0mZ3Q7c3RhdGUpKQogCQlpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKG5hcGktJmd0O2lycSwgTlVMTCk7CiAKJiM0MzsJaWYgKG5hcGktJmd0O3RocmVhZCkgewomIzQzOwkJaWYgKG5hcGktJmd0O2NvbmZpZykgewomIzQzOwkJCWt0aHJlYWRfcGFyayhuYXBpLSZndDt0aHJlYWQpOwomIzQzOwkJCS8qIG5hcGktJmd0O2NvbmZpZyBob2xkcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZAomIzQzOwkJCSAqIGZyb20gbm93IG9uLgomIzQzOwkJCSAqLwomIzQzOwkJCW5hcGktJmd0O3RocmVhZF9jdHgtJmd0O25hcGkgPSBOVUxMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlrdGhyZWFkX3N0b3AobmFwaS0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlrdmZyZWUobmFwaS0mZ3Q7dGhyZWFkX2N0eCk7CiYjNDM7CQl9CiYjNDM7CQluYXBpLSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwkJbmFwaS0mZ3Q7dGhyZWFkX2N0eCA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlpZiAobmFwaS0mZ3Q7Y29uZmlnKSB7CiAJCW5hcGktJmd0O2luZGV4ID0gLTE7CiAJCW5hcGktJmd0O2NvbmZpZyA9IE5VTEw7CkBAIC03NzA0LDExICYjNDM7Nzc1Nyw2IEBAIHZvaWQgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCW5hcGlfZnJlZV9mcmFncyhuYXBpKTsKIAogCWdyb19jbGVhbnVwKCZhbXA7bmFwaS0mZ3Q7Z3JvKTsKLQotCWlmIChuYXBpLSZndDt0aHJlYWQpIHsKLQkJa3RocmVhZF9zdG9wKG5hcGktJmd0O3RocmVhZCk7Ci0JCW5hcGktJmd0O3RocmVhZCA9IE5VTEw7Ci0JfQogfQogRVhQT1JUX1NZTUJPTChfX25ldGlmX25hcGlfZGVsX2xvY2tlZCk7CiAKQEAgLTc4MDQsMTEgJiM0Mzs3ODUyLDE4IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKQogCXJldHVybiB3b3JrOwogfQogCi1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCkKIHsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gUkVBRF9PTkNFKHRocmVhZF9jdHgtJmd0O25hcGkpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewomIzQzOwkJaWYgKGt0aHJlYWRfc2hvdWxkX3BhcmsoKSkgewomIzQzOwkJCWt0aHJlYWRfcGFya21lKCk7CiYjNDM7CQkJbmFwaSA9IFJFQURfT05DRSh0aHJlYWRfY3R4LSZndDtuYXBpKTsKJiM0MzsJCQkvKiBNaWdodCBiZSBhd2FrZW5lZCBmb3Igc3RvcHBpbmcgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJLyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQKIAkJICoga3RocmVhZCBvd25zIHRoaXMgbmFwaSBhbmQgY291bGQgcG9sbCBvbiB0aGlzIG5hcGkuCiAJCSAqIFRlc3RpbmcgU0NIRUQgYml0IGlzIG5vdCBlbm91Z2ggYmVjYXVzZSBTQ0hFRCBiaXQgbWlnaHQgYmUKQEAgLTc4MTcsNyAmIzQzOzc4NzIsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCQlpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgJmFtcDtuYXBpLSZndDtzdGF0ZSkpIHsKIAkJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDtuYXBpLSZndDtwb2xsX2xpc3QpKTsKIAkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCXJldHVybiAwOwomIzQzOwkJCXJldHVybiBuYXBpOwogCQl9CiAKIAkJc2NoZWR1bGUoKTsKQEAgLTc4MjUsNyAmIzQzOzc4ODAsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCkBAIC03ODgyLDEzICYjNDM7NzkzNywxOCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAKIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTsKJiM0MzsJc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3FzID0gamlmZmllczsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwogCWJvb2wgd2FudF9idXN5X3BvbGw7CiAJYm9vbCBpbl9idXN5X3BvbGw7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQl3aGlsZSAoIW5hcGlfdGhyZWFkX3dhaXQobmFwaSkpIHsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCW5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpOwomIzQzOwkJaWYgKCFuYXBpKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQl2YWwgPSBSRUFEX09OQ0UobmFwaS0mZ3Q7c3RhdGUpOwogCiAJCXdhbnRfYnVzeV9wb2xsID0gdmFsICZhbXA7IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDsKQEAgLTEyMTI4LDExICYjNDM7MTIxODgsMTEgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCQlnb3RvIGZyZWVfYWxsOwogCWRldi0mZ3Q7Y2ZnX3BlbmRpbmcgPSBkZXYtJmd0O2NmZzsKIAotCWRldi0mZ3Q7bnVtX25hcGlfY29uZmlncyA9IG1heHFzOwogCW5hcGlfY29uZmlnX3N6ID0gYXJyYXlfc2l6ZShtYXhxcywgc2l6ZW9mKCpkZXYtJmd0O25hcGlfY29uZmlnKSk7CiAJZGV2LSZndDtuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghZGV2LSZndDtuYXBpX2NvbmZpZykKIAkJZ290byBmcmVlX2FsbDsKJiM0MzsJZGV2LSZndDtudW1fbmFwaV9jb25maWdzID0gbWF4cXM7CiAKIAlzdHJzY3B5KGRldi0mZ3Q7bmFtZSwgbmFtZSk7CiAJZGV2LSZndDtuYW1lX2Fzc2lnbl90eXBlID0gbmFtZV9hc3NpZ25fdHlwZTsKQEAgLTEyMTYwLDYgJiM0MzsxMjIyMCw4IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfbmV0ZGV2X21xcyk7CiAKIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDtuYXBpX2xpc3QpKSB7CiAJCXN0cnVjdCBuYXBpX3N0cnVjdCAqcCwgKm47CiAKQEAgLTEyMTcxLDYgJiM0MzsxMjIzMywxMiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXN5bmNocm9uaXplX25ldCgpOwogCX0KIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudW1fbmFwaV9jb25maWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkKSB7CiYjNDM7CQkJa3RocmVhZF9zdG9wKGRldi0mZ3Q7bmFwaV9jb25maWdbaV0udGhyZWFkKTsKJiM0MzsJCQlrdmZyZWUoZGV2LSZndDtuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTsKJiM0MzsJCX0KJiM0MzsJfQogCWt2ZnJlZShkZXYtJmd0O25hcGlfY29uZmlnKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHkKaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHkKQEAgLTEyNyw2ICYjNDM7MTI3LDQ0IEBAIGRlZiBjaGFuZ2VfbnVtX3F1ZXVlcyhjZmcsIG5sKSAtJmd0OyBOb25lOgogICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZCkKICAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpCiAKJiM0MztkZWYgbmljX2xpbmtfZmxhcChjZmcsIG5sKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVGVzdCB0aGF0IGlmIHRocmVhZGVkIGlzIGVuYWJsZWQsIGFuZCBOSUMgZ29lcyB0aHJvdWdoCiYjNDM7ICAgIGEgcmVzZXQsIHRoZSBrdGhyZWFkIHN0YXlzIHVuY2hhbmdlZCBhY3Jvc3MgdGhlIGxpbmsgZmxhcC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKQomIzQzOwomIzQzOyAgICBuYXBpMF9pZCA9IG5hcGlzWzBdWyYjMzk7aWQmIzM5O10KJiM0MzsgICAgbmFwaTFfaWQgPSBuYXBpc1sxXVsmIzM5O2lkJiMzOTtdCiYjNDM7CiYjNDM7ICAgIF9zZXR1cF9kZWZlcnJlZF9jbGVhbnVwKGNmZykKJiM0MzsKJiM0MzsgICAgIyBzZXQgdGhyZWFkZWQKJiM0MzsgICAgX3NldF90aHJlYWRlZF9zdGF0ZShjZmcsIDEpCiYjNDM7ICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeyYjMzk7aWZpbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSkKJiM0MzsKJiM0MzsgICAgIyBjaGVjayBuYXBpIHRocmVhZGVkIGlzIHNldCBmb3IgYm90aCBuYXBpcwomIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpCiYjNDM7ICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZCkKJiM0MzsKJiM0MzsgICAgcGlkMCA9IG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KQomIzQzOyAgICBwaWQxID0gbmFwaXNbMV0uZ2V0KCYjMzk7cGlkJiMzOTspCiYjNDM7CiYjNDM7ICAgIGNtZChmJiMzNDtpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93biYjMzQ7KQomIzQzOyAgICBjbWQoZiYjMzQ7aXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwJiMzNDspCiYjNDM7CiYjNDM7ICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm8KJiM0MzsgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7JiMzOTtpZmluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKQomIzQzOyAgICBrc2Z0X2dlKGxlbihuYXBpcyksIDIpCiYjNDM7CiYjNDM7ICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXMKJiM0MzsgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKQomIzQzOyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpCiYjNDM7CiYjNDM7ICAgICMgY2hlY2sgdGhlIGt0aHJlYWQgcmVtYWlucyB0aGUgc2FtZQomIzQzOyAgICBrc2Z0X2VxKG5hcGlzWzBdLmdldCgmIzM5O3BpZCYjMzk7KSwgcGlkMCkKJiM0MzsgICAga3NmdF9lcShuYXBpc1sxXS5nZXQoJiMzOTtwaWQmIzM5OyksIHBpZDEpCiAKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKQEAgLTEzNCw3ICYjNDM7MTcyLDggQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgIHdpdGggTmV0RHJ2RW52KF9fZmlsZV9fLCBxdWV1ZV9jb3VudD0yKSBhcyBjZmc6CiAgICAgICAgIGtzZnRfcnVuKFtuYXBpX2luaXQsCiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcywKLSAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkXSwKJiM0MzsgICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZCwKJiM0MzsgICAgICAgICAgICAgICAgICBuaWNfbGlua19mbGFwXSwKICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpCiAgICAga3NmdF9leGl0KCkKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoCmluZGV4IDVlYzFjODVjMTYyM2U1Li44OTdjZTY3MDA2MDFjMCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaApAQCAtMTI0LDYgJiM0MzsxMjQsMjMgQEAgdGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWQoKQogCXJldHVybiAkPwogfQogCiYjNDM7dGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWRfbGlua19mbGFwKCkKJiM0Mzt7CiYjNDM7CSMgT25seSBlbmFibGUgbmFwaSB0aHJlYWRlZCBwb2xsLiBTZXQgc3VzcGVuZCB0aW1lb3V0IGFuZCBwcmVmZXIgYnVzeQomIzQzOwkjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLgomIzQzOwl0ZXN0X2J1c3lwb2xsIDAgJHtOQVBJX1RIUkVBREVEX01PREVfQlVTWV9QT0xMfSAwIHx8IHJldHVybiAkPwomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgZG93bgomIzQzOwlpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93bgomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgdXAKJiM0MzsJaXAgbmV0bnMgZXhlYyBuc2NsIGlwIGxpbmsgc2V0IGRldiAkTlNJTV9DTF9OQU1FIHVwCiYjNDM7CiYjNDM7CXRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAKJiM0MzsKJiM0MzsJcmV0dXJuICQ/CiYjNDM7fQomIzQzOwogIyMjCiAjIyMgQ29kZSBzdGFydAogIyMjCkBAIC0xNzYsNiAmIzQzOzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW4KIAlleGl0IDEKIGZpCiAKJiM0Mzt0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZF9saW5rX2ZsYXAKJiM0MztpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWQmIzM0OwomIzQzOwljbGVhbnVwX25zCiYjNDM7CWV4aXQgMQomIzQzO2ZpCiYjNDM7CiBlY2hvICYjMzQ7JE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFgmIzM0OyAmZ3Q7ICROU0lNX0RFVl9TWVNfVU5MSU5LCiAKIGVjaG8gJE5TSU1fQ0xfSUQgJmd0OyAkTlNJTV9ERVZfU1lTX0RFTAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkFQSSBUaHJlYWRlZCBQb2xsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGhvdyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgd29ya3Mgd2l0aGluIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIHJlZmFjdG9yIGhvdyB0aGUgTkFQSSBrdGhyZWFkIGlzIGhhbmRsZWTigJRjcmVhdGlvbiwgcGFya2luZywgZGVzdHJ1Y3Rpb24sIHlvdSBuYW1lIGl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbmFwaV90aHJlYWRfY3R4YCBzdHJ1Y3R1cmUgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGt0aHJlYWQgbGlmZWN5Y2xlIGFyZSB0aGUga2V5IGNoYW5nZXMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIE5BUEkga3RocmVhZCBwZXJzaXN0ZW50IGFjcm9zcyByZXNldHMsIGxpa2UgYSBsaW5rIGZsYXAsIGJ5IGhvbGRpbmcgb250byB0aGUgdGhyZWFkIHJlZmVyZW5jZSBpbiBgbmFwaV9jb25maWdgLiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBoYW5kbGUgdGhhdC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCwgYG5hcGlfc3RvcF9rdGhyZWFkYCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBuYXBpX3NhdmVfY29uZmlnYCwgYF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkYCwgYG5hcGlfdGhyZWFkX3dhaXRgLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYGFsbG9jX25ldGRldl9tcXNgIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSB0b3VjaCBvbiB0aGUgcmVsZXZhbnQgY29tcG9uZW50cywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBmdW5jdGlvbmFsLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBpdCYjMzk7cyB2ZXJ5IHJlYWNoYWJsZSwgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFllcCwgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgYmFzZSBjb2RlIGlzIGluIGBuZXQvY29yZS9kZXYuY2Agc28gaXQmIzM5O3MgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUga2VybmVsIGlmIGBDT05GSUdfTkVUYCBpcyBzZXQuIEhvd2V2ZXIsIGBDT05GSUdfTkVUYCBpcyBnZW5lcmljLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhIGNvbmZpZyB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLiBMZXQmIzM5O3MgZ3JlcCBmb3IgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAgb3IgYG5hcGlfdGhyZWFkZWRfcG9sbGAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNTkxPXN0cnVjdCBzb2Z0bmV0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzYwNC1cdGJvb2xcdFx0XHRpbl9uZXRfcnhfYWN0aW9uO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNjA1Olx0Ym9vbFx0XHRcdGluX25hcGlfdGhyZWFkZWRfcG9sbDtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzYwNi1cbi0tXG5uZXQvY29yZS9kZXYuYz0xNjQ0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X25vdGlmeV9wZWVycyk7XG5uZXQvY29yZS9kZXYuYy0xNjQ1LVxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcbm5ldC9jb3JlL2Rldi5jLTE2NDctXG5uZXQvY29yZS9kZXYuYz0xNjQ4PXN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtMTY2OS1cdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG5uZXQvY29yZS9kZXYuYzoxNjcwOlx0bi1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFwmIzM0O25hcGkvJXMtJWRcJiMzNDssXG5uZXQvY29yZS9kZXYuYy0xNjcxLVx0XHRcdFx0bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSwgbi1cdTAwM2VuYXBpX2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01MzExPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUzMjQtXG5uZXQvY29yZS9kZXYuYzo1MzI1Olx0XHQvKiBJZiBub3QgY2FsbGVkIGZyb20gbmV0X3J4X2FjdGlvbigpIG9yIG5hcGlfdGhyZWFkZWRfcG9sbCgpXG5uZXQvY29yZS9kZXYuYy01MzI2LVx0XHQgKiB3ZSBoYXZlIHRvIHJhaXNlIE5FVF9SWF9TT0ZUSVJRLlxubmV0L2NvcmUvZGV2LmMtNTMyNy1cdFx0ICovXG5uZXQvY29yZS9kZXYuYzo1MzI4Olx0XHRpZiAoIW15c2QtXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcdTAwMjZcdTAwMjYgIW15c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxubmV0L2NvcmUvZGV2LmMtNTMyOS1cdFx0XHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTtcbi0tXG5uZXQvY29yZS9kZXYuYz03ODU1PXN0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcbi0tXG5uZXQvY29yZS9kZXYuYy03ODg1LVxubmV0L2NvcmUvZGV2LmM6Nzg4NjpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODg3LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MDAtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3OTAxOlx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzkwMi1cbi0tXG5uZXQvY29yZS9kZXYuYy03OTA2LVxubmV0L2NvcmUvZGV2LmM6NzkwNzpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03OTA4LVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzkzNy1cbm5ldC9jb3JlL2Rldi5jOjc5Mzg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc5Mzkte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5NjMtXG5uZXQvY29yZS9kZXYuYzo3OTY0Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5NjUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyNjg9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjcxLVxubmV0L2NvcmUvZGV2LmM6MTMyNzI6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzMjczLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz03MT1zdGF0aWMgdWludDY0X3QgY2ZnX2lycV9zdXNwZW5kX3RpbWVvdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzo3MjpzdGF0aWMgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBjZmdfbmFwaV90aHJlYWRlZF9wb2xsID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jPTc0PXN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmZpbGVwYXRoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTc2LVx0ZXJyb3IoMSwgMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jOjc3Olx0ICAgICAgXCYjMzQ7VXNhZ2U6ICVzIC1wXHUwMDNjcG9ydFx1MDAzZSAtYlx1MDAzY2FkZHJcdTAwM2UgLW1cdTAwM2NtYXhfZXZlbnRzXHUwMDNlIC11XHUwMDNjYnVzeV9wb2xsX3VzZWNzXHUwMDNlIC1QXHUwMDNjcHJlZmVyX2J1c3lfcG9sbFx1MDAzZSAtZ1x1MDAzY2J1c3lfcG9sbF9idWRnZXRcdTAwM2UgLW9cdTAwM2NvdXRmaWxlXHUwMDNlIC1kXHUwMDNjZGVmZXJfaGFyZF9pcnFzXHUwMDNlIC1yXHUwMDNjZ3JvX2ZsdS4uLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtNzgtXHQgICAgICBmaWxlcGF0aCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9ODE9c3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMTc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MTc2Olx0XHRcdGNmZ19uYXBpX3RocmVhZGVkX3BvbGwgPSAoZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCl0bXA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy0xNzctXHRcdFx0YnJlYWs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9MjI2PXN0YXRpYyB2b2lkIHNldHVwX3F1ZXVlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMjU2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MjU3Olx0aWYgKGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoyNTg6XHRcdG5ldGRldl9uYXBpX3NldF9yZXFfc2V0X3RocmVhZGVkKHNldF9yZXEsIGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtMjU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcmVsZXZhbnQgY29kZSYjMzk7cyBhbGwgaW4gYG5ldC9jb3JlL2Rldi5jYC4gTm90aGluZyB0b28gc3BlY2lmaWMgaW4gdGVybXMgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBzeXN0ZW07IHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN0dWZmLiBGb3IgdGhlIGBFbmFibGVDb25maWdzYCBhc3BlY3QsIGFuIGVtcHR5IGxpc3Qgc2VlbXMgYXBwcm9wcmlhdGUgZ2l2ZW4gdGhlIGNvbnRleHQuCgpJIHdlbnQgdGhyb3VnaCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgd2hldGhlciB0byBleGNsdWRlIGNlcnRhaW4gZnVuY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGhpZ2gtZnJlcXVlbmN5IHVzYWdlIGJ1dCBvbiBzZWNvbmQgdGhvdWdodCBJIHdpbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYG5hcGlfa3RocmVhZF9jcmVhdGVgLCBgbmFwaV9zdG9wX2t0aHJlYWRgLCBgbmFwaV9zZXRfdGhyZWFkZWRgLCBgbmV0aWZfc2V0X3RocmVhZGVkYCwgYG5hcGlfc2F2ZV9jb25maWdgLCBgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRgLCBgbmFwaV90aHJlYWRfd2FpdGAsIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aHMsIGxpa2UgZGV2aWNlIGFsbG9jYXRpb24gYW5kIHBvbGxpbmcsIHNvIEkgZGVjaWRlZCB0byBhdm9pZCB0aGVtLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgZmFpcmx5IGZ1bmN0aW9uYWwsIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIHdoaWNoIHdhcnJhbnRzIHNvbWUgY2FyZWZ1bCBmdXp6aW5nLiBJIGJlbGlldmUgdGhpcyBpcyBhIHZhbGlkIGFuZCBnb29kIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX2t0aHJlYWRfY3JlYXRlJiMzNDssCiAgICAmIzM0O25hcGlfc3RvcF9rdGhyZWFkJiMzNDssCiAgICAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O25ldGlmX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NhdmVfY29uZmlnJiMzNDssCiAgICAmIzM0O19fbmV0aWZfbmFwaV9kZWxfbG9ja2VkJiMzNDssCiAgICAmIzM0O25hcGlfdGhyZWFkX3dhaXQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25hcGlfZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIGNoYW5naW5nIGhvdyBOQVBJIGt0aHJlYWRzIGFyZSBjcmVhdGVkLCBwYXJrZWQsIGFuZCBkZXN0cm95ZWQgdG8gcGVyc2lzdCBhY3Jvc3MgTkFQSSByZXNldHMgKGUuZy4sIGxpbmsgZmxhcHMpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV9rdGhyZWFkX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtuYXBpX3N0b3Bfa3RocmVhZCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmFwaV9zYXZlX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtfX25ldGlmX25hcGlfZGVsX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZF93YWl0JiMzNDssCiAgICAmIzM0O25ldGRldl9uYXBpX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MTUuNjA1OTgwMTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMjIyNjEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQyMDo1MDoxNS42MDU5ODUwNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDkwNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1YjEwMTJjNTE1MTA0OGFmMGFjNWI1YTU0YmFiYTE5MWM0YmJlMmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6NTA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtNjMsNiArNjMsNyBAQCBzdHJ1Y3QgZHNhX3BvcnQ7XFxuIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuO1xcbiBzdHJ1Y3QgbWFjc2VjX2NvbnRleHQ7XFxuIHN0cnVjdCBtYWNzZWNfb3BzO1xcbitzdHJ1Y3QgbmFwaV9zdHJ1Y3Q7XFxuIHN0cnVjdCBuZXRkZXZfY29uZmlnO1xcbiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTtcXG4gc3RydWN0IHNkX2Zsb3dfbGltaXQ7XFxuQEAgLTM2Myw2ICszNjQsMTAgQEAgc3RydWN0IGdyb19ub2RlIHtcXG4gXFx0dTMyXFx0XFx0XFx0Y2FjaGVkX25hcGlfaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4IHtcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xcbit9O1xcbitcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciBwZXItTkFQSSBjb25maWdcXG4gICovXFxuQEAgLTM3MSw2ICszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHtcXG4gXFx0dTY0IGlycV9zdXNwZW5kX3RpbWVvdXQ7XFxuIFxcdHUzMiBkZWZlcl9oYXJkX2lycXM7XFxuIFxcdGNwdW1hc2tfdCBhZmZpbml0eV9tYXNrO1xcbitcXHQvKiB0aHJlYWQgYW5kIHRocmVhZF9jdHggbWlycm9ycyBmaWVsZHMgb2YgbmFwaV9zdHJ1Y3Qgd2hlbiBuYXBpX3N0cnVjdFxcbitcXHQgKiBpcyBhbGl2ZS4gV2hlbiB0aGUgbmFwaV9zdHJ1Y3QgZ2V0cyBkZXN0cm95ZWQsIG5hcGlfY29uZmlnIGhvbGRzIHRoZVxcbitcXHQgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7XFxuK1xcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7XFxuIFxcdHU4IHRocmVhZGVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgbmFwaV9pZDtcXG4gfTtcXG5AQCAtNDA0LDYgKzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XFxuIFxcdHN0cnVjdCBocnRpbWVyXFx0XFx0dGltZXI7XFxuIFxcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0XFx0KnRocmVhZDtcXG4rXFx0c3RydWN0IG5hcGlfdGhyZWFkX2N0eFxcdCp0aHJlYWRfY3R4O1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0Z3JvX2ZsdXNoX3RpbWVvdXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRpcnFfc3VzcGVuZF90aW1lb3V0O1xcbiBcXHR1MzJcXHRcXHRcXHRkZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzgxOTkyYzkyOWQ5ZDUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC0xNjQ3LDIwICsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xcbiBcXG4gc3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4ge1xcbitcXHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gTlVMTDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRpZiAobi1cXHUwMDNlY29uZmlnIFxcdTAwMjZcXHUwMDI2IG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdG4tXFx1MDAzZXRocmVhZF9jdHggPSBuLVxcdTAwM2Vjb25maWctXFx1MDAzZXRocmVhZF9jdHg7XFxuK1xcdFxcdG4tXFx1MDAzZXRocmVhZCA9IG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkO1xcbitcXHRcXHRXUklURV9PTkNFKG4tXFx1MDAzZXRocmVhZF9jdHgtXFx1MDAzZW5hcGksIG4pO1xcbitcXHRcXHRrdGhyZWFkX3VucGFyayhuLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0dGhyZWFkX2N0eCA9IGt2emFsbG9jX29iaigqdGhyZWFkX2N0eCk7XFxuK1xcdGlmICghdGhyZWFkX2N0eClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHQvKiBDcmVhdGUgYW5kIHdha2UgdXAgdGhlIGt0aHJlYWQgb25jZSB0byBwdXQgaXQgaW5cXG4gXFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xcbiBcXHQgKiB3YXJuaW5nIGFuZCB3b3JrIHdpdGggbG9hZGF2Zy5cXG4gXFx0ICovXFxuLVxcdG4tXFx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXFxcIm5hcGkvJXMtJWRcXFwiLFxcbitcXHR0aHJlYWRfY3R4LVxcdTAwM2VuYXBpID0gbjtcXG4rXFx0bi1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCB0aHJlYWRfY3R4LCBcXFwibmFwaS8lcy0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuIFxcdGlmIChJU19FUlIobi1cXHUwMDNldGhyZWFkKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKG4tXFx1MDAzZXRocmVhZCk7XFxuIFxcdFxcdHByX2VycihcXFwia3RocmVhZF9ydW4gZmFpbGVkIHdpdGggZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRuLVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRnb3RvIGZyZWVfdGhyZWFkX2N0eDtcXG4rXFx0fVxcbitcXHRuLVxcdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcXG4rXFx0aWYgKG4tXFx1MDAzZWNvbmZpZykge1xcbitcXHRcXHRuLVxcdTAwM2Vjb25maWctXFx1MDAzZXRocmVhZCA9IG4tXFx1MDAzZXRocmVhZDtcXG4rXFx0XFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitmcmVlX3RocmVhZF9jdHg6XFxuK1xcdGt2ZnJlZSh0aHJlYWRfY3R4KTtcXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTcxODMsNyArNzIwOCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdH1cXG4gXFxuIFxcdGt0aHJlYWRfc3RvcChuYXBpLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRrdmZyZWUobmFwaS1cXHUwMDNldGhyZWFkX2N0eCk7XFxuIFxcdG5hcGktXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdG5hcGktXFx1MDAzZXRocmVhZF9jdHggPSBOVUxMO1xcbitcXHRpZiAobmFwaS1cXHUwMDNlY29uZmlnKSB7XFxuK1xcdFxcdG5hcGktXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0XFx0bmFwaS1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuQEAgLTcxOTksMTMgKzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBpbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbiB7XFxuLVxcdGlmICh0aHJlYWRlZCkge1xcbi1cXHRcXHRpZiAoIW5hcGktXFx1MDAzZXRocmVhZCkge1xcbi1cXHRcXHRcXHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcXG4rXFx0aWYgKHRocmVhZGVkIFxcdTAwMjZcXHUwMDI2ICFuYXBpLVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0aW50IGVyciA9IG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChuYXBpLVxcdTAwM2Vjb25maWcpXFxuQEAgLTcyNTUsOCArNzI4NCwxNSBAQCBpbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xcbiBcXG4gXFx0LyogT3ZlcnJpZGUgdGhlIGNvbmZpZyBmb3IgYWxsIE5BUElzIGV2ZW4gaWYgY3VycmVudGx5IG5vdCBsaXN0ZWQgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fbmFwaV9jb25maWdzOyBpKyspIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRlZCA9IHRocmVhZGVkO1xcbitcXHRcXHRpZiAoIXRocmVhZGVkIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfc3RvcChkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCk7XFxuK1xcdFxcdFxcdGt2ZnJlZShkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xcbitcXHRcXHRcXHRkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdFxcdGRldi1cXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkX2N0eCA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC03NTAxLDYgKzc1MzcsOCBAQCBzdGF0aWMgdm9pZCBuYXBpX3NhdmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4gXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVxcdTAwM2VkZWZlcl9oYXJkX2lycXM7XFxuIFxcdG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ3JvX2ZsdXNoX3RpbWVvdXQgPSBuLVxcdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcXG4gXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2VpcnFfc3VzcGVuZF90aW1lb3V0ID0gbi1cXHUwMDNlaXJxX3N1c3BlbmRfdGltZW91dDtcXG4rXFx0bi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWQgPSBuLVxcdTAwM2V0aHJlYWQ7XFxuK1xcdG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkX2N0eCA9IG4tXFx1MDAzZXRocmVhZF9jdHg7XFxuIFxcdG5hcGlfaGFzaF9kZWwobik7XFxuIH1cXG4gXFxuQEAgLTc2OTUsNiArNzczMywyMSBAQCB2b2lkIF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4gXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQVBJX1NUQVRFX0hBU19OT1RJRklFUiwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVxcdTAwM2VpcnEsIE5VTEwpO1xcbiBcXG4rXFx0aWYgKG5hcGktXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRpZiAobmFwaS1cXHUwMDNlY29uZmlnKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfcGFyayhuYXBpLVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRcXHQvKiBuYXBpLVxcdTAwM2Vjb25maWcgaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWRcXG4rXFx0XFx0XFx0ICogZnJvbSBub3cgb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWRfY3R4LVxcdTAwM2VuYXBpID0gTlVMTDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3RocmVhZF9zdG9wKG5hcGktXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdGt2ZnJlZShuYXBpLVxcdTAwM2V0aHJlYWRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRuYXBpLVxcdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG5hcGktXFx1MDAzZWNvbmZpZykge1xcbiBcXHRcXHRuYXBpLVxcdTAwM2VpbmRleCA9IC0xO1xcbiBcXHRcXHRuYXBpLVxcdTAwM2Vjb25maWcgPSBOVUxMO1xcbkBAIC03NzA0LDExICs3NzU3LDYgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdG5hcGlfZnJlZV9mcmFncyhuYXBpKTtcXG4gXFxuIFxcdGdyb19jbGVhbnVwKFxcdTAwMjZuYXBpLVxcdTAwM2Vncm8pO1xcbi1cXG4tXFx0aWYgKG5hcGktXFx1MDAzZXRocmVhZCkge1xcbi1cXHRcXHRrdGhyZWFkX3N0b3AobmFwaS1cXHUwMDNldGhyZWFkKTtcXG4tXFx0XFx0bmFwaS1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4tXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19uZXRpZl9uYXBpX2RlbF9sb2NrZWQpO1xcbiBcXG5AQCAtNzgwNCwxMSArNzg1MiwxOCBAQCBzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sIHN0cnVjdCBsaXN0X2hlYWQgKnJlcG9sbClcXG4gXFx0cmV0dXJuIHdvcms7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuK3N0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcXG4ge1xcbitcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cXHUwMDNlbmFwaSk7XFxuIFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcbiBcXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xcbitcXHRcXHRpZiAoa3RocmVhZF9zaG91bGRfcGFyaygpKSB7XFxuK1xcdFxcdFxcdGt0aHJlYWRfcGFya21lKCk7XFxuK1xcdFxcdFxcdG5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cXHUwMDNlbmFwaSk7XFxuK1xcdFxcdFxcdC8qIE1pZ2h0IGJlIGF3YWtlbmVkIGZvciBzdG9wcGluZyAqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBUZXN0aW5nIFNDSEVEX1RIUkVBREVEIGJpdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudFxcbiBcXHRcXHQgKiBrdGhyZWFkIG93bnMgdGhpcyBuYXBpIGFuZCBjb3VsZCBwb2xsIG9uIHRoaXMgbmFwaS5cXG4gXFx0XFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxcbkBAIC03ODE3LDcgKzc4NzIsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbiBcXHRcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKSkge1xcbiBcXHRcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZuYXBpLVxcdTAwM2Vwb2xsX2xpc3QpKTtcXG4gXFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIG5hcGk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNjaGVkdWxlKCk7XFxuQEAgLTc4MjUsNyArNzg4MCw3IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIFxcdH1cXG4gXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiBcXG4tXFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbkBAIC03ODgyLDEzICs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFxuIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG4rXFx0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IGRhdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcXG4gXFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcXG4gXFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbiBcXG4tXFx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdG5hcGkgPSBuYXBpX3RocmVhZF93YWl0KHRocmVhZF9jdHgpO1xcbitcXHRcXHRpZiAoIW5hcGkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXFx1MDAzZXN0YXRlKTtcXG4gXFxuIFxcdFxcdHdhbnRfYnVzeV9wb2xsID0gdmFsIFxcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xcbkBAIC0xMjEyOCwxMSArMTIxODgsMTEgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRcXHRnb3RvIGZyZWVfYWxsO1xcbiBcXHRkZXYtXFx1MDAzZWNmZ19wZW5kaW5nID0gZGV2LVxcdTAwM2VjZmc7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZW51bV9uYXBpX2NvbmZpZ3MgPSBtYXhxcztcXG4gXFx0bmFwaV9jb25maWdfc3ogPSBhcnJheV9zaXplKG1heHFzLCBzaXplb2YoKmRldi1cXHUwMDNlbmFwaV9jb25maWcpKTtcXG4gXFx0ZGV2LVxcdTAwM2VuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIWRldi1cXHUwMDNlbmFwaV9jb25maWcpXFxuIFxcdFxcdGdvdG8gZnJlZV9hbGw7XFxuK1xcdGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xcbiBcXG4gXFx0c3Ryc2NweShkZXYtXFx1MDAzZW5hbWUsIG5hbWUpO1xcbiBcXHRkZXYtXFx1MDAzZW5hbWVfYXNzaWduX3R5cGUgPSBuYW1lX2Fzc2lnbl90eXBlO1xcbkBAIC0xMjE2MCw2ICsxMjIyMCw4IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfbmV0ZGV2X21xcyk7XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRkZXZfbmFwaV9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlbmFwaV9saXN0KSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xcbiBcXG5AQCAtMTIxNzEsNiArMTIyMzMsMTIgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X25hcGlfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKSB7XFxuK1xcdFxcdGlmIChkZXYtXFx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCkge1xcbitcXHRcXHRcXHRrdGhyZWFkX3N0b3AoZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xcbitcXHRcXHRcXHRrdmZyZWUoZGV2LVxcdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcdGt2ZnJlZShkZXYtXFx1MDAzZW5hcGlfY29uZmlnKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHlcXG5pbmRleCBmNGJlNzJiMjE0NWE5NS4uMjAxMTBmYjY5NDJlMTQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25hcGlfdGhyZWFkZWQucHlcXG5AQCAtMTI3LDYgKzEyNyw0NCBAQCBkZWYgY2hhbmdlX251bV9xdWV1ZXMoY2ZnLCBubCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcXG4gICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcXG4gXFxuK2RlZiBuaWNfbGlua19mbGFwKGNmZywgbmwpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFRlc3QgdGhhdCBpZiB0aHJlYWRlZCBpcyBlbmFibGVkLCBhbmQgTklDIGdvZXMgdGhyb3VnaFxcbisgICAgYSByZXNldCwgdGhlIGt0aHJlYWQgc3RheXMgdW5jaGFuZ2VkIGFjcm9zcyB0aGUgbGluayBmbGFwLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsnaWZpbmRleCc6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxcbitcXG4rICAgIG5hcGkwX2lkID0gbmFwaXNbMF1bJ2lkJ11cXG4rICAgIG5hcGkxX2lkID0gbmFwaXNbMV1bJ2lkJ11cXG4rXFxuKyAgICBfc2V0dXBfZGVmZXJyZWRfY2xlYW51cChjZmcpXFxuK1xcbisgICAgIyBzZXQgdGhyZWFkZWRcXG4rICAgIF9zZXRfdGhyZWFkZWRfc3RhdGUoY2ZnLCAxKVxcbisgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7J2lmaW5kZXgnOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcXG4rXFxuKyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXFxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTBfaWQpXFxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXFxuK1xcbisgICAgcGlkMCA9IG5hcGlzWzBdLmdldCgncGlkJylcXG4rICAgIHBpZDEgPSBuYXBpc1sxXS5nZXQoJ3BpZCcpXFxuK1xcbisgICAgY21kKGZcXFwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IGRvd25cXFwiKVxcbisgICAgY21kKGZcXFwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXFxcIilcXG4rXFxuKyAgICAjIHJlLWFjcXVpcmUgbmFwaSBpbmZvXFxuKyAgICBuYXBpcyA9IG5sLm5hcGlfZ2V0KHsnaWZpbmRleCc6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVxcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxcbitcXG4rICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMV9pZClcXG4rXFxuKyAgICAjIGNoZWNrIHRoZSBrdGhyZWFkIHJlbWFpbnMgdGhlIHNhbWVcXG4rICAgIGtzZnRfZXEobmFwaXNbMF0uZ2V0KCdwaWQnKSwgcGlkMClcXG4rICAgIGtzZnRfZXEobmFwaXNbMV0uZ2V0KCdwaWQnKSwgcGlkMSlcXG4gXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFxcXCJcXFwiXFxcIlxcbkBAIC0xMzQsNyArMTcyLDggQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgd2l0aCBOZXREcnZFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcXG4gICAgICAgICBrc2Z0X3J1bihbbmFwaV9pbml0LFxcbiAgICAgICAgICAgICAgICAgICBjaGFuZ2VfbnVtX3F1ZXVlcyxcXG4tICAgICAgICAgICAgICAgICAgZW5hYmxlX2Rldl90aHJlYWRlZF9kaXNhYmxlX25hcGlfdGhyZWFkZWRdLFxcbisgICAgICAgICAgICAgICAgICBlbmFibGVfZGV2X3RocmVhZGVkX2Rpc2FibGVfbmFwaV90aHJlYWRlZCxcXG4rICAgICAgICAgICAgICAgICAgbmljX2xpbmtfZmxhcF0sXFxuICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXFxuaW5kZXggNWVjMWM4NWMxNjIzZTUuLjg5N2NlNjcwMDYwMWMwIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxcbkBAIC0xMjQsNiArMTI0LDIzIEBAIHRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkKClcXG4gXFx0cmV0dXJuICQ/XFxuIH1cXG4gXFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXFxuK3tcXG4rXFx0IyBPbmx5IGVuYWJsZSBuYXBpIHRocmVhZGVkIHBvbGwuIFNldCBzdXNwZW5kIHRpbWVvdXQgYW5kIHByZWZlciBidXN5XFxuK1xcdCMgcG9sbCB0byAwLiBSdW4gYWdhaW4gYWZ0ZXIgYSBsaW5rIGZsYXAuXFxuK1xcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDAgfHwgcmV0dXJuICQ/XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIG5zc3YgaXAgbGluayBzZXQgZGV2ICROU0lNX1NWX05BTUUgZG93blxcbitcXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93blxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgbnNjbCBpcCBsaW5rIHNldCBkZXYgJE5TSU1fQ0xfTkFNRSB1cFxcbitcXG4rXFx0dGVzdF9idXN5cG9sbCAwICR7TkFQSV9USFJFQURFRF9NT0RFX0JVU1lfUE9MTH0gMFxcbitcXG4rXFx0cmV0dXJuICQ/XFxuK31cXG4rXFxuICMjI1xcbiAjIyMgQ29kZSBzdGFydFxcbiAjIyNcXG5AQCAtMTc2LDYgKzE5MywxMyBAQCBpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4gXFx0ZXhpdCAxXFxuIGZpXFxuIFxcbit0ZXN0X2J1c3lwb2xsX3dpdGhfbmFwaV90aHJlYWRlZF9saW5rX2ZsYXBcXG4raWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcInRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcXFwiXFxuK1xcdGNsZWFudXBfbnNcXG4rXFx0ZXhpdCAxXFxuK2ZpXFxuK1xcbiBlY2hvIFxcXCIkTlNJTV9TVl9GRDokTlNJTV9TVl9JRklEWFxcXCIgXFx1MDAzZSAkTlNJTV9ERVZfU1lTX1VOTElOS1xcbiBcXG4gZWNobyAkTlNJTV9DTF9JRCBcXHUwMDNlICROU0lNX0RFVl9TWVNfREVMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjE2LjAzNzYzNzI0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2OTA1OTY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1YjEwMTJjNTE1MTA0OGFmMGFjNWI1YTU0YmFiYTE5MWM0YmJlMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAyMDo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uMDVlNDMwZjEwYWJhNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtNjMsNiArNjMsNyBAQCBzdHJ1Y3QgZHNhX3BvcnQ7XG4gc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm47XG4gc3RydWN0IG1hY3NlY19jb250ZXh0O1xuIHN0cnVjdCBtYWNzZWNfb3BzO1xuK3N0cnVjdCBuYXBpX3N0cnVjdDtcbiBzdHJ1Y3QgbmV0ZGV2X2NvbmZpZztcbiBzdHJ1Y3QgbmV0ZGV2X25hbWVfbm9kZTtcbiBzdHJ1Y3Qgc2RfZmxvd19saW1pdDtcbkBAIC0zNjMsNiArMzY0LDEwIEBAIHN0cnVjdCBncm9fbm9kZSB7XG4gXHR1MzJcdFx0XHRjYWNoZWRfbmFwaV9pZDtcbiB9O1xuIFxuK3N0cnVjdCBuYXBpX3RocmVhZF9jdHgge1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuK307XG4rXG4gLypcbiAgKiBTdHJ1Y3R1cmUgZm9yIHBlci1OQVBJIGNvbmZpZ1xuICAqL1xuQEAgLTM3MSw2ICszNzYsMTIgQEAgc3RydWN0IG5hcGlfY29uZmlnIHtcbiBcdHU2NCBpcnFfc3VzcGVuZF90aW1lb3V0O1xuIFx0dTMyIGRlZmVyX2hhcmRfaXJxcztcbiBcdGNwdW1hc2tfdCBhZmZpbml0eV9tYXNrO1xuK1x0LyogdGhyZWFkIGFuZCB0aHJlYWRfY3R4IG1pcnJvcnMgZmllbGRzIG9mIG5hcGlfc3RydWN0IHdoZW4gbmFwaV9zdHJ1Y3RcbitcdCAqIGlzIGFsaXZlLiBXaGVuIHRoZSBuYXBpX3N0cnVjdCBnZXRzIGRlc3Ryb3llZCwgbmFwaV9jb25maWcgaG9sZHMgdGhlXG4rXHQgKiBzb2xlIHJlZmVyZW5jZSB0byB0aGUgbm93IHBhcmtlZCBrdGhyZWFkLlxuK1x0ICovXG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDtcbitcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHggKnRocmVhZF9jdHg7XG4gXHR1OCB0aHJlYWRlZDtcbiBcdHVuc2lnbmVkIGludCBuYXBpX2lkO1xuIH07XG5AQCAtNDA0LDYgKzQxNSw3IEBAIHN0cnVjdCBuYXBpX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgaHJ0aW1lclx0XHR0aW1lcjtcbiBcdC8qIGFsbCBmaWVsZHMgcGFzdCB0aGlzIHBvaW50IGFyZSB3cml0ZS1wcm90ZWN0ZWQgYnkgbmV0ZGV2X2xvY2sgKi9cbiBcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KnRocmVhZDtcbitcdHN0cnVjdCBuYXBpX3RocmVhZF9jdHhcdCp0aHJlYWRfY3R4O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRncm9fZmx1c2hfdGltZW91dDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0aXJxX3N1c3BlbmRfdGltZW91dDtcbiBcdHUzMlx0XHRcdGRlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uYzgxOTkyYzkyOWQ5ZDUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xNjQ3LDIwICsxNjQ3LDQ1IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xuIFxuIHN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4ge1xuK1x0c3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eCA9IE5VTEw7XG4gXHRpbnQgZXJyID0gMDtcbiBcbitcdGlmIChuLVx1MDAzZWNvbmZpZyBcdTAwMjZcdTAwMjYgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkKSB7XG4rXHRcdG4tXHUwMDNldGhyZWFkX2N0eCA9IG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZF9jdHg7XG4rXHRcdG4tXHUwMDNldGhyZWFkID0gbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkO1xuK1x0XHRXUklURV9PTkNFKG4tXHUwMDNldGhyZWFkX2N0eC1cdTAwM2VuYXBpLCBuKTtcbitcdFx0a3RocmVhZF91bnBhcmsobi1cdTAwM2V0aHJlYWQpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRocmVhZF9jdHggPSBrdnphbGxvY19vYmooKnRocmVhZF9jdHgpO1xuK1x0aWYgKCF0aHJlYWRfY3R4KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbiBcdC8qIENyZWF0ZSBhbmQgd2FrZSB1cCB0aGUga3RocmVhZCBvbmNlIHRvIHB1dCBpdCBpblxuIFx0ICogVEFTS19JTlRFUlJVUFRJQkxFIG1vZGUgdG8gYXZvaWQgdGhlIGJsb2NrZWQgdGFza1xuIFx0ICogd2FybmluZyBhbmQgd29yayB3aXRoIGxvYWRhdmcuXG4gXHQgKi9cbi1cdG4tXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcIm5hcGkvJXMtJWRcIixcbitcdHRocmVhZF9jdHgtXHUwMDNlbmFwaSA9IG47XG4rXHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgdGhyZWFkX2N0eCwgXCJuYXBpLyVzLSVkXCIsXG4gXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuIFx0aWYgKElTX0VSUihuLVx1MDAzZXRocmVhZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihuLVx1MDAzZXRocmVhZCk7XG4gXHRcdHByX2VycihcImt0aHJlYWRfcnVuIGZhaWxlZCB3aXRoIGVyciAlZFxcblwiLCBlcnIpO1xuIFx0XHRuLVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdGdvdG8gZnJlZV90aHJlYWRfY3R4O1xuK1x0fVxuK1x0bi1cdTAwM2V0aHJlYWRfY3R4ID0gdGhyZWFkX2N0eDtcbitcdGlmIChuLVx1MDAzZWNvbmZpZykge1xuK1x0XHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBuLVx1MDAzZXRocmVhZDtcbitcdFx0bi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkX2N0eCA9IHRocmVhZF9jdHg7XG4gXHR9XG4gXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX3RocmVhZF9jdHg6XG4rXHRrdmZyZWUodGhyZWFkX2N0eCk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC03MTgzLDcgKzcyMDgsMTMgQEAgc3RhdGljIHZvaWQgbmFwaV9zdG9wX2t0aHJlYWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0fVxuIFxuIFx0a3RocmVhZF9zdG9wKG5hcGktXHUwMDNldGhyZWFkKTtcbitcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuIFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0bmFwaS1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuK1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRuYXBpLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuQEAgLTcxOTksMTMgKzcyMzAsMTEgQEAgc3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIGludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4ge1xuLVx0aWYgKHRocmVhZGVkKSB7XG4tXHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0XHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcbitcdGlmICh0aHJlYWRlZCBcdTAwMjZcdTAwMjYgIW5hcGktXHUwMDNldGhyZWFkKSB7XG4rXHRcdGludCBlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xuIFxuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHR9XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZylcbkBAIC03MjU1LDggKzcyODQsMTUgQEAgaW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcbiBcbiBcdC8qIE92ZXJyaWRlIHRoZSBjb25maWcgZm9yIGFsbCBOQVBJcyBldmVuIGlmIGN1cnJlbnRseSBub3QgbGlzdGVkICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW51bV9uYXBpX2NvbmZpZ3M7IGkrKykge1xuIFx0XHRkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkZWQgPSB0aHJlYWRlZDtcbitcdFx0aWYgKCF0aHJlYWRlZCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZCkge1xuK1x0XHRcdGt0aHJlYWRfc3RvcChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKTtcbitcdFx0XHRrdmZyZWUoZGV2LVx1MDAzZW5hcGlfY29uZmlnW2ldLnRocmVhZF9jdHgpO1xuK1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQgPSBOVUxMO1xuK1x0XHRcdGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWRfY3R4ID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNzUwMSw2ICs3NTM3LDggQEAgc3RhdGljIHZvaWQgbmFwaV9zYXZlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4gXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2VkZWZlcl9oYXJkX2lycXMgPSBuLVx1MDAzZWRlZmVyX2hhcmRfaXJxcztcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWdyb19mbHVzaF90aW1lb3V0ID0gbi1cdTAwM2Vncm9fZmx1c2hfdGltZW91dDtcbiBcdG4tXHUwMDNlY29uZmlnLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQgPSBuLVx1MDAzZWlycV9zdXNwZW5kX3RpbWVvdXQ7XG4rXHRuLVx1MDAzZWNvbmZpZy1cdTAwM2V0aHJlYWQgPSBuLVx1MDAzZXRocmVhZDtcbitcdG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZF9jdHggPSBuLVx1MDAzZXRocmVhZF9jdHg7XG4gXHRuYXBpX2hhc2hfZGVsKG4pO1xuIH1cbiBcbkBAIC03Njk1LDYgKzc3MzMsMjEgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5BUElfU1RBVEVfSEFTX05PVElGSUVSLCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSlcbiBcdFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihuYXBpLVx1MDAzZWlycSwgTlVMTCk7XG4gXG4rXHRpZiAobmFwaS1cdTAwM2V0aHJlYWQpIHtcbitcdFx0aWYgKG5hcGktXHUwMDNlY29uZmlnKSB7XG4rXHRcdFx0a3RocmVhZF9wYXJrKG5hcGktXHUwMDNldGhyZWFkKTtcbitcdFx0XHQvKiBuYXBpLVx1MDAzZWNvbmZpZyBob2xkcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZFxuK1x0XHRcdCAqIGZyb20gbm93IG9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG5hcGktXHUwMDNldGhyZWFkX2N0eC1cdTAwM2VuYXBpID0gTlVMTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRrdGhyZWFkX3N0b3AobmFwaS1cdTAwM2V0aHJlYWQpO1xuK1x0XHRcdGt2ZnJlZShuYXBpLVx1MDAzZXRocmVhZF9jdHgpO1xuK1x0XHR9XG4rXHRcdG5hcGktXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0bmFwaS1cdTAwM2V0aHJlYWRfY3R4ID0gTlVMTDtcbitcdH1cbitcbiBcdGlmIChuYXBpLVx1MDAzZWNvbmZpZykge1xuIFx0XHRuYXBpLVx1MDAzZWluZGV4ID0gLTE7XG4gXHRcdG5hcGktXHUwMDNlY29uZmlnID0gTlVMTDtcbkBAIC03NzA0LDExICs3NzU3LDYgQEAgdm9pZCBfX25ldGlmX25hcGlfZGVsX2xvY2tlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRuYXBpX2ZyZWVfZnJhZ3MobmFwaSk7XG4gXG4gXHRncm9fY2xlYW51cChcdTAwMjZuYXBpLVx1MDAzZWdybyk7XG4tXG4tXHRpZiAobmFwaS1cdTAwM2V0aHJlYWQpIHtcbi1cdFx0a3RocmVhZF9zdG9wKG5hcGktXHUwMDNldGhyZWFkKTtcbi1cdFx0bmFwaS1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkKTtcbiBcbkBAIC03ODA0LDExICs3ODUyLDE4IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKVxuIFx0cmV0dXJuIHdvcms7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4rc3RhdGljIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4KVxuIHtcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IFJFQURfT05DRSh0aHJlYWRfY3R4LVx1MDAzZW5hcGkpO1xuIFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcbiBcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdGlmIChrdGhyZWFkX3Nob3VsZF9wYXJrKCkpIHtcbitcdFx0XHRrdGhyZWFkX3BhcmttZSgpO1xuK1x0XHRcdG5hcGkgPSBSRUFEX09OQ0UodGhyZWFkX2N0eC1cdTAwM2VuYXBpKTtcbitcdFx0XHQvKiBNaWdodCBiZSBhd2FrZW5lZCBmb3Igc3RvcHBpbmcgKi9cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHQvKiBUZXN0aW5nIFNDSEVEX1RIUkVBREVEIGJpdCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudFxuIFx0XHQgKiBrdGhyZWFkIG93bnMgdGhpcyBuYXBpIGFuZCBjb3VsZCBwb2xsIG9uIHRoaXMgbmFwaS5cbiBcdFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxuQEAgLTc4MTcsNyArNzg3Miw3IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4gXHRcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVEX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKSkge1xuIFx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX2xpc3QpKTtcbiBcdFx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0cmV0dXJuIG5hcGk7XG4gXHRcdH1cbiBcbiBcdFx0c2NoZWR1bGUoKTtcbkBAIC03ODI1LDcgKzc4ODAsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIFx0fVxuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFxuLVx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbkBAIC03ODgyLDEzICs3OTM3LDE4IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG4rXHRzdHJ1Y3QgbmFwaV90aHJlYWRfY3R4ICp0aHJlYWRfY3R4ID0gZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4gXHRib29sIHdhbnRfYnVzeV9wb2xsO1xuIFx0Ym9vbCBpbl9idXN5X3BvbGw7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcbi1cdHdoaWxlICghbmFwaV90aHJlYWRfd2FpdChuYXBpKSkge1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0bmFwaSA9IG5hcGlfdGhyZWFkX3dhaXQodGhyZWFkX2N0eCk7XG4rXHRcdGlmICghbmFwaSlcbitcdFx0XHRicmVhaztcbitcbiBcdFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXHUwMDNlc3RhdGUpO1xuIFxuIFx0XHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xuQEAgLTEyMTI4LDExICsxMjE4OCwxMSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gZnJlZV9hbGw7XG4gXHRkZXYtXHUwMDNlY2ZnX3BlbmRpbmcgPSBkZXYtXHUwMDNlY2ZnO1xuIFxuLVx0ZGV2LVx1MDAzZW51bV9uYXBpX2NvbmZpZ3MgPSBtYXhxcztcbiBcdG5hcGlfY29uZmlnX3N6ID0gYXJyYXlfc2l6ZShtYXhxcywgc2l6ZW9mKCpkZXYtXHUwMDNlbmFwaV9jb25maWcpKTtcbiBcdGRldi1cdTAwM2VuYXBpX2NvbmZpZyA9IGt2emFsbG9jKG5hcGlfY29uZmlnX3N6LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFkZXYtXHUwMDNlbmFwaV9jb25maWcpXG4gXHRcdGdvdG8gZnJlZV9hbGw7XG4rXHRkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlncyA9IG1heHFzO1xuIFxuIFx0c3Ryc2NweShkZXYtXHUwMDNlbmFtZSwgbmFtZSk7XG4gXHRkZXYtXHUwMDNlbmFtZV9hc3NpZ25fdHlwZSA9IG5hbWVfYXNzaWduX3R5cGU7XG5AQCAtMTIxNjAsNiArMTIyMjAsOCBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX25ldGRldl9tcXMpO1xuIFxuIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0KSkge1xuIFx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnAsICpuO1xuIFxuQEAgLTEyMTcxLDYgKzEyMjMzLDEyIEBAIHN0YXRpYyB2b2lkIG5ldGRldl9uYXBpX2V4aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gXHR9XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX25hcGlfY29uZmlnczsgaSsrKSB7XG4rXHRcdGlmIChkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkKSB7XG4rXHRcdFx0a3RocmVhZF9zdG9wKGRldi1cdTAwM2VuYXBpX2NvbmZpZ1tpXS50aHJlYWQpO1xuK1x0XHRcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWdbaV0udGhyZWFkX2N0eCk7XG4rXHRcdH1cbitcdH1cbiBcdGt2ZnJlZShkZXYtXHUwMDNlbmFwaV9jb25maWcpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uYXBpX3RocmVhZGVkLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuaW5kZXggZjRiZTcyYjIxNDVhOTUuLjIwMTEwZmI2OTQyZTE0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmFwaV90aHJlYWRlZC5weVxuQEAgLTEyNyw2ICsxMjcsNDQgQEAgZGVmIGNoYW5nZV9udW1fcXVldWVzKGNmZywgbmwpIC1cdTAwM2UgTm9uZTpcbiAgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKVxuICAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4gXG4rZGVmIG5pY19saW5rX2ZsYXAoY2ZnLCBubCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVGVzdCB0aGF0IGlmIHRocmVhZGVkIGlzIGVuYWJsZWQsIGFuZCBOSUMgZ29lcyB0aHJvdWdoXG4rICAgIGEgcmVzZXQsIHRoZSBrdGhyZWFkIHN0YXlzIHVuY2hhbmdlZCBhY3Jvc3MgdGhlIGxpbmsgZmxhcC5cbisgICAgXCJcIlwiXG4rICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeydpZmluZGV4JzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4rICAgIGtzZnRfZ2UobGVuKG5hcGlzKSwgMilcbitcbisgICAgbmFwaTBfaWQgPSBuYXBpc1swXVsnaWQnXVxuKyAgICBuYXBpMV9pZCA9IG5hcGlzWzFdWydpZCddXG4rXG4rICAgIF9zZXR1cF9kZWZlcnJlZF9jbGVhbnVwKGNmZylcbitcbisgICAgIyBzZXQgdGhyZWFkZWRcbisgICAgX3NldF90aHJlYWRlZF9zdGF0ZShjZmcsIDEpXG4rICAgIG5hcGlzID0gbmwubmFwaV9nZXQoeydpZmluZGV4JzogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpXG4rXG4rICAgICMgY2hlY2sgbmFwaSB0aHJlYWRlZCBpcyBzZXQgZm9yIGJvdGggbmFwaXNcbisgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkwX2lkKVxuKyAgICBfYXNzZXJ0X25hcGlfdGhyZWFkZWRfZW5hYmxlZChubCwgbmFwaTFfaWQpXG4rXG4rICAgIHBpZDAgPSBuYXBpc1swXS5nZXQoJ3BpZCcpXG4rICAgIHBpZDEgPSBuYXBpc1sxXS5nZXQoJ3BpZCcpXG4rXG4rICAgIGNtZChmXCJpcCBsaW5rIHNldCB7Y2ZnLmlmbmFtZX0gZG93blwiKVxuKyAgICBjbWQoZlwiaXAgbGluayBzZXQge2NmZy5pZm5hbWV9IHVwXCIpXG4rXG4rICAgICMgcmUtYWNxdWlyZSBuYXBpIGluZm9cbisgICAgbmFwaXMgPSBubC5uYXBpX2dldCh7J2lmaW5kZXgnOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlcbisgICAga3NmdF9nZShsZW4obmFwaXMpLCAyKVxuK1xuKyAgICAjIGNoZWNrIG5hcGkgdGhyZWFkZWQgaXMgc2V0IGZvciBib3RoIG5hcGlzXG4rICAgIF9hc3NlcnRfbmFwaV90aHJlYWRlZF9lbmFibGVkKG5sLCBuYXBpMF9pZClcbisgICAgX2Fzc2VydF9uYXBpX3RocmVhZGVkX2VuYWJsZWQobmwsIG5hcGkxX2lkKVxuK1xuKyAgICAjIGNoZWNrIHRoZSBrdGhyZWFkIHJlbWFpbnMgdGhlIHNhbWVcbisgICAga3NmdF9lcShuYXBpc1swXS5nZXQoJ3BpZCcpLCBwaWQwKVxuKyAgICBrc2Z0X2VxKG5hcGlzWzFdLmdldCgncGlkJyksIHBpZDEpXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuQEAgLTEzNCw3ICsxNzIsOCBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgd2l0aCBOZXREcnZFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGtzZnRfcnVuKFtuYXBpX2luaXQsXG4gICAgICAgICAgICAgICAgICAgY2hhbmdlX251bV9xdWV1ZXMsXG4tICAgICAgICAgICAgICAgICAgZW5hYmxlX2Rldl90aHJlYWRlZF9kaXNhYmxlX25hcGlfdGhyZWFkZWRdLFxuKyAgICAgICAgICAgICAgICAgIGVuYWJsZV9kZXZfdGhyZWFkZWRfZGlzYWJsZV9uYXBpX3RocmVhZGVkLFxuKyAgICAgICAgICAgICAgICAgIG5pY19saW5rX2ZsYXBdLFxuICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCBOZXRkZXZGYW1pbHkoKSkpXG4gICAgIGtzZnRfZXhpdCgpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbF90ZXN0LnNoXG5pbmRleCA1ZWMxYzg1YzE2MjNlNS4uODk3Y2U2NzAwNjAxYzAgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsX3Rlc3Quc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxfdGVzdC5zaFxuQEAgLTEyNCw2ICsxMjQsMjMgQEAgdGVzdF9idXN5cG9sbF93aXRoX25hcGlfdGhyZWFkZWQoKVxuIFx0cmV0dXJuICQ/XG4gfVxuIFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCgpXG4re1xuK1x0IyBPbmx5IGVuYWJsZSBuYXBpIHRocmVhZGVkIHBvbGwuIFNldCBzdXNwZW5kIHRpbWVvdXQgYW5kIHByZWZlciBidXN5XG4rXHQjIHBvbGwgdG8gMC4gUnVuIGFnYWluIGFmdGVyIGEgbGluayBmbGFwLlxuK1x0dGVzdF9idXN5cG9sbCAwICR7TkFQSV9USFJFQURFRF9NT0RFX0JVU1lfUE9MTH0gMCB8fCByZXR1cm4gJD9cbitcbitcdGlwIG5ldG5zIGV4ZWMgbnNzdiBpcCBsaW5rIHNldCBkZXYgJE5TSU1fU1ZfTkFNRSBkb3duXG4rXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgZG93blxuK1xuK1x0aXAgbmV0bnMgZXhlYyBuc3N2IGlwIGxpbmsgc2V0IGRldiAkTlNJTV9TVl9OQU1FIHVwXG4rXHRpcCBuZXRucyBleGVjIG5zY2wgaXAgbGluayBzZXQgZGV2ICROU0lNX0NMX05BTUUgdXBcbitcbitcdHRlc3RfYnVzeXBvbGwgMCAke05BUElfVEhSRUFERURfTU9ERV9CVVNZX1BPTEx9IDBcbitcbitcdHJldHVybiAkP1xuK31cbitcbiAjIyNcbiAjIyMgQ29kZSBzdGFydFxuICMjI1xuQEAgLTE3Niw2ICsxOTMsMTMgQEAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4gXHRleGl0IDFcbiBmaVxuIFxuK3Rlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcFxuK2lmIFsgJD8gLW5lIDAgXTsgdGhlblxuK1x0ZWNobyBcInRlc3RfYnVzeXBvbGxfd2l0aF9uYXBpX3RocmVhZGVkX2xpbmtfZmxhcCBmYWlsZWRcIlxuK1x0Y2xlYW51cF9uc1xuK1x0ZXhpdCAxXG4rZmlcbitcbiBlY2hvIFwiJE5TSU1fU1ZfRkQ6JE5TSU1fU1ZfSUZJRFhcIiBcdTAwM2UgJE5TSU1fREVWX1NZU19VTkxJTktcbiBcbiBlY2hvICROU0lNX0NMX0lEIFx1MDAzZSAkTlNJTV9ERVZfU1lTX0RFTFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MTYuMDM3NjM5MTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NjQzMTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGhvdyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgd29ya3Mgd2l0aGluIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIHJlZmFjdG9yIGhvdyB0aGUgTkFQSSBrdGhyZWFkIGlzIGhhbmRsZWTigJRjcmVhdGlvbiwgcGFya2luZywgZGVzdHJ1Y3Rpb24sIHlvdSBuYW1lIGl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbmFwaV90aHJlYWRfY3R4YCBzdHJ1Y3R1cmUgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGt0aHJlYWQgbGlmZWN5Y2xlIGFyZSB0aGUga2V5IGNoYW5nZXMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgdGhlIE5BUEkga3RocmVhZCBwZXJzaXN0ZW50IGFjcm9zcyByZXNldHMsIGxpa2UgYSBsaW5rIGZsYXAsIGJ5IGhvbGRpbmcgb250byB0aGUgdGhyZWFkIHJlZmVyZW5jZSBpbiBgbmFwaV9jb25maWdgLiBUaGF0J3MgYSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSB0aGF0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCwgYG5hcGlfc3RvcF9rdGhyZWFkYCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBuYXBpX3NhdmVfY29uZmlnYCwgYF9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkYCwgYG5hcGlfdGhyZWFkX3dhaXRgLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYGFsbG9jX25ldGRldl9tcXNgIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIEl0J3MgYSBjb21wcmVoZW5zaXZlIHRvdWNoIG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGZ1bmN0aW9uYWwuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQncyB2ZXJ5IHJlYWNoYWJsZSwgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFllcCwgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiYXNlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCBzbyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIGtlcm5lbCBpZiBgQ09ORklHX05FVGAgaXMgc2V0LiBIb3dldmVyLCBgQ09ORklHX05FVGAgaXMgZ2VuZXJpYy4gSSB3b25kZXIgaWYgdGhlcmUgaXMgYSBjb25maWcgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbS4gTGV0J3MgZ3JlcCBmb3IgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAgb3IgYG5hcGlfdGhyZWFkZWRfcG9sbGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjIzLjE4NDA3Mjk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1NjAwMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfdGhyZWFkZWRfcG9sbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM1OTE9c3RydWN0IHNvZnRuZXRfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM2MDQtXFx0Ym9vbFxcdFxcdFxcdGluX25ldF9yeF9hY3Rpb247XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNjA1OlxcdGJvb2xcXHRcXHRcXHRpbl9uYXBpX3RocmVhZGVkX3BvbGw7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNjA2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xcbm5ldC9jb3JlL2Rldi5jLTE2NDUtXFxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcXG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxcbm5ldC9jb3JlL2Rldi5jPTE2NDg9c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE2NjktXFx0dGhyZWFkX2N0eC1cXHUwMDNlbmFwaSA9IG47XFxubmV0L2NvcmUvZGV2LmM6MTY3MDpcXHRuLVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIHRocmVhZF9jdHgsIFxcXCJuYXBpLyVzLSVkXFxcIixcXG5uZXQvY29yZS9kZXYuYy0xNjcxLVxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzExPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMyNC1cXG5uZXQvY29yZS9kZXYuYzo1MzI1OlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcXG5uZXQvY29yZS9kZXYuYy01MzI2LVxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxubmV0L2NvcmUvZGV2LmMtNTMyNy1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzI4OlxcdFxcdGlmICghbXlzZC1cXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcXHUwMDI2XFx1MDAyNiAhbXlzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxcbm5ldC9jb3JlL2Rldi5jLTUzMjktXFx0XFx0XFx0X19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03ODU1PXN0YXRpYyBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfdGhyZWFkX2N0eCAqdGhyZWFkX2N0eClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc4ODUtXFxubmV0L2NvcmUvZGV2LmM6Nzg4NjpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzg4Ny1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYnVzeV9wb2xsX2xhc3RfcXMpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTAwLVxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbm5ldC9jb3JlL2Rldi5jOjc5MDE6XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxubmV0L2NvcmUvZGV2LmMtNzkwMi1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MDYtXFxubmV0L2NvcmUvZGV2LmM6NzkwNzpcXHRcXHRzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XFxubmV0L2NvcmUvZGV2LmMtNzkwOC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTM3LVxcbm5ldC9jb3JlL2Rldi5jOjc5Mzg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG5uZXQvY29yZS9kZXYuYy03OTM5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5NjMtXFxubmV0L2NvcmUvZGV2LmM6Nzk2NDpcXHRcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFxcdTAwMjZsYXN0X3FzIDogTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtNzk2NS1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI2OD1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzI3MS1cXG5uZXQvY29yZS9kZXYuYzoxMzI3MjpcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2csIE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMjczLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jPTcxPXN0YXRpYyB1aW50NjRfdCBjZmdfaXJxX3N1c3BlbmRfdGltZW91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzo3MjpzdGF0aWMgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBjZmdfbmFwaV90aHJlYWRlZF9wb2xsID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmMtNzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM9NzQ9c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZmlsZXBhdGgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03Ni1cXHRlcnJvcigxLCAwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jOjc3OlxcdCAgICAgIFxcXCJVc2FnZTogJXMgLXBcXHUwMDNjcG9ydFxcdTAwM2UgLWJcXHUwMDNjYWRkclxcdTAwM2UgLW1cXHUwMDNjbWF4X2V2ZW50c1xcdTAwM2UgLXVcXHUwMDNjYnVzeV9wb2xsX3VzZWNzXFx1MDAzZSAtUFxcdTAwM2NwcmVmZXJfYnVzeV9wb2xsXFx1MDAzZSAtZ1xcdTAwM2NidXN5X3BvbGxfYnVkZ2V0XFx1MDAzZSAtb1xcdTAwM2NvdXRmaWxlXFx1MDAzZSAtZFxcdTAwM2NkZWZlcl9oYXJkX2lycXNcXHUwMDNlIC1yXFx1MDAzY2dyb19mbHUuLi5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy03OC1cXHQgICAgICBmaWxlcGF0aCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz04MT1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTE3NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoxNzY6XFx0XFx0XFx0Y2ZnX25hcGlfdGhyZWFkZWRfcG9sbCA9IChlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkKXRtcDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYy0xNzctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYz0yMjY9c3RhdGljIHZvaWQgc2V0dXBfcXVldWUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTI1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYnVzeV9wb2xsZXIuYzoyNTc6XFx0aWYgKGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2J1c3lfcG9sbGVyLmM6MjU4OlxcdFxcdG5ldGRldl9uYXBpX3NldF9yZXFfc2V0X3RocmVhZGVkKHNldF9yZXEsIGNmZ19uYXBpX3RocmVhZGVkX3BvbGwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9idXN5X3BvbGxlci5jLTI1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6NTA6MjUuMjc5Njc4NDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ0ODUxMDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGVkIFBvbGxpbmcgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSByZWxldmFudCBjb2RlJ3MgYWxsIGluIGBuZXQvY29yZS9kZXYuY2AuIE5vdGhpbmcgdG9vIHNwZWNpZmljIGluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgc3lzdGVtOyB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdHVmZi4gRm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXNwZWN0LCBhbiBlbXB0eSBsaXN0IHNlZW1zIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5JIHdlbnQgdGhyb3VnaCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgd2hldGhlciB0byBleGNsdWRlIGNlcnRhaW4gZnVuY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGhpZ2gtZnJlcXVlbmN5IHVzYWdlIGJ1dCBvbiBzZWNvbmQgdGhvdWdodCBJIHdpbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYG5hcGlfa3RocmVhZF9jcmVhdGVgLCBgbmFwaV9zdG9wX2t0aHJlYWRgLCBgbmFwaV9zZXRfdGhyZWFkZWRgLCBgbmV0aWZfc2V0X3RocmVhZGVkYCwgYG5hcGlfc2F2ZV9jb25maWdgLCBgX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRgLCBgbmFwaV90aHJlYWRfd2FpdGAsIGFuZCBgbmV0ZGV2X25hcGlfZXhpdGAuIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aHMsIGxpa2UgZGV2aWNlIGFsbG9jYXRpb24gYW5kIHBvbGxpbmcsIHNvIEkgZGVjaWRlZCB0byBhdm9pZCB0aGVtLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBmYWlybHkgZnVuY3Rpb25hbCwgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSwgd2hpY2ggd2FycmFudHMgc29tZSBjYXJlZnVsIGZ1enppbmcuIEkgYmVsaWV2ZSB0aGlzIGlzIGEgdmFsaWQgYW5kIGdvb2QgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjUwOjM0LjcyODE5MDczNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYXBpX2t0aHJlYWRfY3JlYXRlXCIsXG4gICAgXCJuYXBpX3N0b3Bfa3RocmVhZFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwibmFwaV9zYXZlX2NvbmZpZ1wiLFxuICAgIFwiX19uZXRpZl9uYXBpX2RlbF9sb2NrZWRcIixcbiAgICBcIm5hcGlfdGhyZWFkX3dhaXRcIixcbiAgICBcIm5ldGRldl9uYXBpX2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20sIGNoYW5naW5nIGhvdyBOQVBJIGt0aHJlYWRzIGFyZSBjcmVhdGVkLCBwYXJrZWQsIGFuZCBkZXN0cm95ZWQgdG8gcGVyc2lzdCBhY3Jvc3MgTkFQSSByZXNldHMgKGUuZy4sIGxpbmsgZmxhcHMpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmFwaV9rdGhyZWFkX2NyZWF0ZVwiLFxuICAgIFwibmFwaV9zdG9wX2t0aHJlYWRcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gICAgXCJuZXRpZl9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5hcGlfc2F2ZV9jb25maWdcIixcbiAgICBcIl9fbmV0aWZfbmFwaV9kZWxfbG9ja2VkXCIsXG4gICAgXCJuYXBpX3RocmVhZF93YWl0XCIsXG4gICAgXCJuZXRkZXZfbmFwaV9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtLCBjaGFuZ2luZyBob3cgTkFQSSBrdGhyZWFkcyBhcmUgY3JlYXRlZCwgcGFya2VkLCBhbmQgZGVzdHJveWVkIHRvIHBlcnNpc3QgYWNyb3NzIE5BUEkgcmVzZXRzIChlLmcuLCBsaW5rIGZsYXBzKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[1] Phase: Succeeded StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-29 20:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-29 20:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2] Phase: Succeeded StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-29 20:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 20:50:46 +0000 UTC FinishedAt: 2026-06-29 20:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww24xr/series-workfloww24xr-convert-artifact-1105197605/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 20:50:56 +0000 UTC FinishedAt: 2026-06-29 21:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 20:50:56 +0000 UTC FinishedAt: 2026-06-29 21:14:14 +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:*00efbb96-a29c-4f20-a52d-8c67e21650d8,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-workfloww24xr/series-workfloww24xr-convert-artifact-1105197605/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": "ef632e6b-554f-4a3d-bdfd-55949b6504fc", "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-workfloww24xr/series-workfloww24xr-build-action-838063691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 20:50:56 +0000 UTC FinishedAt: 2026-06-29 21:14:04 +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:*00efbb96-a29c-4f20-a52d-8c67e21650d8,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-workfloww24xr/series-workfloww24xr-convert-artifact-1105197605/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": "ef632e6b-554f-4a3d-bdfd-55949b6504fc", "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-workfloww24xr/series-workfloww24xr-build-action-838063691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 21:14:14 +0000 UTC FinishedAt: 2026-06-29 21:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 21:14:14 +0000 UTC FinishedAt: 2026-06-29 21:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 21:14:14 +0000 UTC FinishedAt: 2026-06-29 21:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 21:14:14 +0000 UTC FinishedAt: 2026-06-29 21:14:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww24xr/series-workfloww24xr-convert-artifact-2927378176/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 21:14:35 +0000 UTC FinishedAt: 2026-06-29 21:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 21:14:35 +0000 UTC FinishedAt: 2026-06-29 21:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ef632e6b-554f-4a3d-bdfd-55949b6504fc,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-workfloww24xr/series-workfloww24xr-build-action-838063691/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-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 21:16:50 +0000 UTC FinishedAt: 2026-06-29 21:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 21:16:50 +0000 UTC FinishedAt: 2026-06-29 21:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 21:16:50 +0000 UTC FinishedAt: 2026-06-29 21:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 21:16:50 +0000 UTC FinishedAt: 2026-06-29 21:40:48 +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:*00efbb96-a29c-4f20-a52d-8c67e21650d8,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-workfloww24xr/series-workfloww24xr-convert-artifact-2927378176/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": "76e4ff3b-475b-4a50-9a71-07788e9f90f6", "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-workfloww24xr/series-workfloww24xr-build-action-678046908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 21:16:50 +0000 UTC FinishedAt: 2026-06-29 21:40:38 +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:*00efbb96-a29c-4f20-a52d-8c67e21650d8,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-workfloww24xr/series-workfloww24xr-convert-artifact-2927378176/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": "76e4ff3b-475b-4a50-9a71-07788e9f90f6", "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-workfloww24xr/series-workfloww24xr-build-action-678046908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 21:40:48 +0000 UTC FinishedAt: 2026-06-29 21:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 21:40:48 +0000 UTC FinishedAt: 2026-06-29 21:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 21:40:48 +0000 UTC FinishedAt: 2026-06-29 21:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 21:40:48 +0000 UTC FinishedAt: 2026-06-29 21:42:58 +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:*76e4ff3b-475b-4a50-9a71-07788e9f90f6,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-workfloww24xr/series-workfloww24xr-build-action-678046908/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-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},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:*ef632e6b-554f-4a3d-bdfd-55949b6504fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76e4ff3b-475b-4a50-9a71-07788e9f90f6,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-workfloww24xr/series-workfloww24xr-build-action-838063691/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-workfloww24xr/series-workfloww24xr-build-action-678046908/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-29 21:43:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-29 21:43:17 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},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-workfloww24xr/series-workfloww24xr-convert-artifact-485672537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-29 21:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 21:43:07 +0000 UTC FinishedAt: 2026-06-29 21:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 21:43:08 +0000 UTC FinishedAt: 2026-06-29 21:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 21:43:29 +0000 UTC FinishedAt: 2026-06-30 00:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww24xr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_kthread_create","napi_stop_kthread","napi_set_threaded","netif_set_threaded","napi_save_config","__netif_napi_del_locked","napi_thread_wait","netdev_napi_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","series_id":"c8a1c080-2e52-47df-bf1d-e5f2fdb213fa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 21:43:29 +0000 UTC FinishedAt: 2026-06-30 00:45:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ef632e6b-554f-4a3d-bdfd-55949b6504fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76e4ff3b-475b-4a50-9a71-07788e9f90f6,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-workfloww24xr/series-workfloww24xr-build-action-838063691/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-workfloww24xr/series-workfloww24xr-build-action-678046908/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-workfloww24xr/series-workfloww24xr-convert-artifact-485672537/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,}