Name: series-workflow7zrgv Phase: Succeeded StartedAt: 2026-07-13 19:41:12 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[0] Phase: Succeeded StartedAt: 2026-07-13 19:41:12 +0000 UTC FinishedAt: 2026-07-13 20:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 19:41:12 +0000 UTC FinishedAt: 2026-07-13 20:00:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "series_id": "c5526ca4-0280-46b9-acac-a3952d0df609" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_align_down", "bio_iov_iter_bounce_read", "bio_iov_iter_bounce_write", "bio_iov_iter_get_pages", "bio_iov_iter_bounce" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxOTo1ODozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uMjEyZmU3Njg0MDdkM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmNcbkBAIC0xMTkxLDcgJiM0MzsxMTkxLDcgQEAgdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuICAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICovXG4gc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGJpb192ZWMgKmJ2LCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiB7XG4gXHRzaXplX3QgbmJ5dGVzID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwMjYgbGVuX2FsaWduX21hc2s7XG4gXG5AQCAtMTIwMCw5ICYjNDM7MTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xuLVx0ZG8ge1xuLVx0XHRzdHJ1Y3QgYmlvX3ZlYyAqYnYgPSBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV07XG4tXG4mIzQzO1x0Zm9yICg7Oykge1xuIFx0XHRpZiAobmJ5dGVzIFx1MDAzYyBidi1cdTAwM2Vidl9sZW4pIHtcbiBcdFx0XHRidi1cdTAwM2Vidl9sZW4gLT0gbmJ5dGVzO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTEyMTEsOSAmIzQzOzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSlcbiBcdFx0XHR1bnBpbl91c2VyX3BhZ2UoYnYtXHUwMDNlYnZfcGFnZSk7XG4gXG4tXHRcdGJpby1cdTAwM2ViaV92Y250LS07XG4gXHRcdG5ieXRlcyAtPSBidi1cdTAwM2Vidl9sZW47XG4tXHR9IHdoaWxlIChuYnl0ZXMpO1xuJiM0MztcdFx0YmlvLVx1MDAzZWJpX3ZjbnQtLTtcbiYjNDM7XHRcdGJ2LS07XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTI3Niw3ICYjNDM7MTI3NSw4IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbGVuX2FsaWduX21hc2spO1xuJiM0MztcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG4mIzQzO1x0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnQgLSAxXSwgbGVuX2FsaWduX21hc2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ncmVlZHkoZ2ZwX3QgZ2ZwLCBzaXplX3QgKnNpemUsXG5AQCAtMTM2MCw3ICYjNDM7MTM2MCw4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4mIzQzO1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbiYjNDM7XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudCAtIDFdLCBtaW5zaXplIC0gMSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuQEAgLTEzNjgsMjEgJiM0MzsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIHtcbiBcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCBcdTAwMjZsZW4sIG1pbnNpemUpO1xuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRkbyB7XG4tXHRcdHNzaXplX3QgcmV0O1xuLVxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgJiM0MzsgMSwgbGVuLFxuIFx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuLVx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mb2xpb19wdXQ7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0bGVuIC09IHJldDtcbkBAIC0xMzk4LDcgJiM0MzsxMzk2LDIwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0YnZlY19zZXRfZm9saW8oXHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1swXSwgZm9saW8sIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsIDApO1xuIFx0aWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbiYjNDM7XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfZm9saW9fcHV0O1xuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgdGhlIGJvdW5jIGJ1ZmZlciBidl9sZW4gdG8gdGhlIGFsaWduZWQgZG93biBzaXplLiAqL1xuJiM0MztcdGJpby1cdTAwM2ViaV9pb192ZWNbMF0uYnZfbGVuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9mb2xpb19wdXQ6XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9hbGlnbl9kb3duJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZCYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgZGlyZWN0IElPIGJvdW5jZSBidWZmZXJpbmcgbG9naWMgKGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgKSwgd2hlcmUgdGhlIHdyb25nIGJpb192ZWMgcG9pbnRlciB3YXMgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGxheWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBkaXJlY3QgSU8gYW5kIGJvdW5jZSBidWZmZXJzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJTyByZWFkcy93cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxOTo1ODozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmMKaW5kZXggZjJhNWY0ZDBhOTY3MmIuLjIxMmZlNzY4NDA3ZDNjIDEwMDY0NAotLS0gYS9ibG9jay9iaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uYwpAQCAtMTE5MSw3ICYjNDM7MTE5MSw3IEBAIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcikKICAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCi0JCQkgICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJCSAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiB7CiAJc2l6ZV90IG5ieXRlcyA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICZhbXA7IGxlbl9hbGlnbl9tYXNrOwogCkBAIC0xMjAwLDkgJiM0MzsxMjAwLDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCWlvdl9pdGVyX3JldmVydChpdGVyLCBuYnl0ZXMpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplIC09IG5ieXRlczsKLQlkbyB7Ci0JCXN0cnVjdCBiaW9fdmVjICpidiA9ICZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV07Ci0KJiM0MzsJZm9yICg7OykgewogCQlpZiAobmJ5dGVzICZsdDsgYnYtJmd0O2J2X2xlbikgewogCQkJYnYtJmd0O2J2X2xlbiAtPSBuYnl0ZXM7CiAJCQlicmVhazsKQEAgLTEyMTEsOSAmIzQzOzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJaWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSkKIAkJCXVucGluX3VzZXJfcGFnZShidi0mZ3Q7YnZfcGFnZSk7CiAKLQkJYmlvLSZndDtiaV92Y250LS07CiAJCW5ieXRlcyAtPSBidi0mZ3Q7YnZfbGVuOwotCX0gd2hpbGUgKG5ieXRlcyk7CiYjNDM7CQliaW8tJmd0O2JpX3ZjbnQtLTsKJiM0MzsJCWJ2LS07CiYjNDM7CX0KIAogCWlmICghYmlvLSZndDtiaV92Y250KQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyNzYsNyAmIzQzOzEyNzUsOCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCWlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpKQogCQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsCiYjNDM7CQkJJmFtcDtiaW8tJmd0O2JpX2lvX3ZlY1tiaW8tJmd0O2JpX3ZjbnQgLSAxXSwgbGVuX2FsaWduX21hc2spOwogfQogCiBzdGF0aWMgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ncmVlZHkoZ2ZwX3QgZ2ZwLCBzaXplX3QgKnNpemUsCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDggQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCiAJaWYgKCFiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpOwomIzQzOwlyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLAomIzQzOwkJCSZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTsKIH0KIAogc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCkBAIC0xMzY4LDIxICYjNDM7MTM2OSwxOCBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIHsKIAlzaXplX3QgbGVuID0gbWluMyhpb3ZfaXRlcl9jb3VudChpdGVyKSwgbWF4bGVuLCBTWl8xTSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3NpemVfdCByZXQ7CiAKIAlmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCAmYW1wO2xlbiwgbWluc2l6ZSk7CiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkbyB7Ci0JCXNzaXplX3QgcmV0OwotCiAJCXJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLSZndDtiaV9pb192ZWMgJiM0MzsgMSwgbGVuLAogCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzIC0gMSwgMCk7CiAJCWlmIChyZXQgJmx0Oz0gMCkgewotCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpIHsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9CiYjNDM7CQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiYjNDM7CQkJCWdvdG8gb3V0X2ZvbGlvX3B1dDsKIAkJCWJyZWFrOwogCQl9CiAJCWxlbiAtPSByZXQ7CkBAIC0xMzk4LDcgJiM0MzsxMzk2LDIwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCWJ2ZWNfc2V0X2ZvbGlvKCZhbXA7YmlvLSZndDtiaV9pb192ZWNbMF0sIGZvbGlvLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSwgMCk7CiAJaWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpCiAJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7Ci0JcmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdmVjIHN0b3JlcyB0aGUgYm91bmNlIGJ1ZmZlciwgc28gZG8gbm90IHN1YnRyYWN0IDEgaGVyZS4gKi8KJiM0MzsJcmV0ID0gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLAomIzQzOwkJCSZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250XSwgbWluc2l6ZSAtIDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZm9saW9fcHV0OwomIzQzOwomIzQzOwkvKiBVcGRhdGUgdGhlIGJvdW5jIGJ1ZmZlciBidl9sZW4gdG8gdGhlIGFsaWduZWQgZG93biBzaXplLiAqLwomIzQzOwliaW8tJmd0O2JpX2lvX3ZlY1swXS5idl9sZW4gPSBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X2ZvbGlvX3B1dDoKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iaW8uY2AuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdGhlcmUsIHBhc3NpbmcgaW4gYSBgc3RydWN0IGJpb192ZWMgKmJ2YCBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQgaW50ZXJuYWxseSwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGNsYXJpdHkgYW5kIGVmZmljaWVuY3ksIEkmIzM5O2Qgc2F5LiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggd2hlcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCB3YXMgZ2V0dGluZyBjYWxsZWQgd2l0aCB0aGUgd3JvbmcgYGJ2YCBwb2ludGVyLiBUaGV5JiMzOTtyZSBhbHNvIHVwZGF0aW5nIGBidl9sZW5gIGluIHRoZSBib3VuY2UgYnVmZmVyLgoKVGhpcyBpcyBhIHByZXR0eSBmb2N1c2VkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBhbnl0aGluZyBkZWFsaW5nIHdpdGggYmlvIHZlY3RvcnMgYW5kIGBpb3ZfaXRlcmAgd2FycmFudHMgYSBnb29kIGxvb2suIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBzY3JlYW1zICYjMzQ7ZnV6eiB0aGlzISYjMzQ7LiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtkIHNheSBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBuYXR1cmFsbHksIHRoZW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZWAsIGFuZCBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLgoKVGhlc2UgYXJlIGFsbCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucywgc28gdGhleSYjMzk7cmUgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGZyb20gYSBidW5jaCBvZiBwbGFjZXM6IGJsb2NrIGRldmljZSByZWFkcy93cml0ZXMsIGRpcmVjdCBJTywgYW5kIHByb2JhYmx5IGEgZmV3IG90aGVyIGFyZWFzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCBoZXJlPyBgQkxPQ0tgIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLiBOb3cgd2hlcmUgZG9lcyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCBmaXQgaW4/IElzIGl0IGNhbGxlZCBmcm9tIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCB3aGVuIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyB1c2VkLCBvciBpcyBpdCBzaW1pbGFyPyBMZXQmIzM5O3MgY2hlY2sgYGJsb2NrL2Jpby5jYCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTMxMD1zdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svYmlvLmMtMTM2Ni1cbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9iaW8uYy0xMzY4LVx0XHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYz0xNDI4PWludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuLS1cbmJsb2NrL2Jpby5jLTE0MzItXHRcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jOjE0MzM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jLTE0MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIEkvTyBhbmQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBiaW9faW92X2l0ZXJfYm91bmNlYCoqCgpBbHJpZ2h0LCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAuIFRoYXQgcmluZ3MgYSBiZWxsLCBJIHRoaW5rIGl0JiMzOTtzIHRoZSBwdWJsaWMgZnVuY3Rpb24sIHRoZSBlbnRyeSBwb2ludC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp1c2VkKj8gVGltZSB0byB0cmFjZSB0aG9zZSBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb24gaXMuIEtub3dpbmcgdGhlIGNhbGxlciYjMzk7cyBwdXJwb3NlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGJvdW5jaW5nIGJlaGF2aW9yIGlzIG5lZWRlZCBhbmQgd2hhdCBwcm9ibGVtcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBzb2x2ZS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz0xMjk3PXN0YXRpYyB2b2lkIGJpb19mcmVlX2ZvbGlvcyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmlvLmMtMTMwOS1cbmJsb2NrL2Jpby5jOjEzMTA6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svYmlvLmMtMTMxMS1cdFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXG4tLVxuYmxvY2svYmlvLmMtMTM2Ni1cbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9iaW8uYy0xMzY4LVx0XHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYy0xNDE1LS8qKlxuYmxvY2svYmlvLmM6MTQxNjogKiBiaW9faW92X2l0ZXJfYm91bmNlIC0gYm91bmNlIGJ1ZmZlciBkYXRhIGZyb20gYW4gaXRlciBpbnRvIGEgYmlvXG5ibG9jay9iaW8uYy0xNDE3LSAqIEBiaW86XHRiaW8gdG8gc2VuZFxuLS1cbmJsb2NrL2Jpby5jLTE0MjctICovXG5ibG9jay9iaW8uYzoxNDI4OmludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuYmxvY2svYmlvLmMtMTQyOS1cdFx0XHRzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYy0xNDMxLVx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcbmJsb2NrL2Jpby5jOjE0MzI6XHRcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jOjE0MzM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jLTE0MzQtfVxuLS1cbmJsb2NrL2Jpby5jPTE0NDc9c3RhdGljIHZvaWQgYmlvX2lvdl9pdGVyX3VuYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBib29sIGlzX2Vycm9yLFxuLS1cbmJsb2NrL2Jpby5jLTE0ODItICogd2UgbmVlZCB0byBjaGVja3N1bSB0aGUgZGF0YSBvciBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlXG5ibG9jay9iaW8uYzoxNDgzOiAqIGNvbnNpc3RlbmN5LiAgQ2FsbGVkIHRvIGNvbXBsZXRlIGEgYmlvIHNldCB1cCBieSBiaW9faW92X2l0ZXJfYm91bmNlKCkuXG5ibG9jay9iaW8uYy0xNDg0LSAqIENvcGllcyBkYXRhIGJhY2sgZm9yIHJlYWRzLCBhbmQgbWFya3MgdGhlIG9yaWdpbmFsIGZvbGlvcyBkaXJ0eSBpZlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTMzND1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTM1Ni1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozNTc6XHRcdHJldCA9IGJpb19pb3ZfaXRlcl9ib3VuY2UoYmlvLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTgtXHRcdFx0XHRpb21hcF9tYXhfYmlvX3NpemUoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD00ODU9ZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4Ni1cbmluY2x1ZGUvbGludXgvYmlvLmg6NDg3OmludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuaW5jbHVkZS9saW51eC9iaW8uaC00ODgtXHRcdHNpemVfdCBtaW5zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpcmVjdCBJTyB3aXRoIEJvdW5jZSBCdWZmZXJpbmc6IEEgRGVlcCBEaXZlKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhYm91dCB0aGlzIERpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIHNpdHVhdGlvbi4gIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjYWxsIGZyb20gYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIHdoZXJlIGBJT01BUF9ESU9fQk9VTkNFYCBpcyBlbmFibGVkLiBUaGF0IHNpZ25hbHMgZGlyZWN0IElPLCBidXQgd2UmIzM5O3JlIGVtcGxveWluZyBib3VuY2UgYnVmZmVyaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgb24gYWRkcmVzc2luZyBhIGZldyBidWdzIGluIHRoZSBgYmlvX2lvdl9pdGVyYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0YXJnZXRzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCwgbmF0dXJhbGx5OyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYDsgIGBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlYDsgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgOyBhbmQgYGJpb19pb3ZfaXRlcl9ib3VuY2VgLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSwgYW5kIGZpZ3VyaW5nIG91dCBob3cgZGF0YSBnZXRzIGFsaWduZWQgYW5kIHRyYW5zZmVycmVkIHdpdGggdGhlIGJvdW5jZSBidWZmZXIuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgYEJMT0NLYCBpcyB0aGUgc3RhbmRhcmQsIGFuZCB3ZSBzaG91bGQgYmUgZmluZSB0aGVyZS4gYEZTX0lPTUFQYCBjb3VsZCBiZSByZWxldmFudCwgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkIGJ5IHRoZSBmaWxlc3lzdGVtcyB0aGVtc2VsdmVzLCBsaWtlIFhGUywgZXh0NCwgb3IgYnRyZnMuIFNvLCBubyBuZWVkIHRvIGFkZCBhbnkgc3BlY2lhbCBjb25maWdzIGhlcmUgYXMgYm90aCB0aGUgYmxvY2sgbGF5ZXIgYW5kIERpcmVjdCBJTyBhcmUgcHJldHR5IHN0YW5kYXJkIHRoZXNlIGRheXMuCgpJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBpcyB0byBzdGFydCB3aXRoIGEgY2xvc2UgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiAgS25vd2luZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svYmlvLmMtMTE5Mi0gKi9cbmJsb2NrL2Jpby5jOjExOTM6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmJsb2NrL2Jpby5jLTExOTQtXHRcdFx0XHQgICBzdHJ1Y3QgYmlvX3ZlYyAqYnYsIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuLS1cbmJsb2NrL2Jpby5jPTEyNDM9aW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svYmlvLmMtMTI3Ny1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbmJsb2NrL2Jpby5jOjEyNzg6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuYmxvY2svYmlvLmMtMTI3OS1cdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcbi0tXG5ibG9jay9iaW8uYz0xMzEwPXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9iaW8uYy0xMzYyLVx0XHRyZXR1cm4gLUVOT01FTTtcbmJsb2NrL2Jpby5jOjEzNjM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuYmxvY2svYmlvLmMtMTM2NC1cdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTtcbi0tXG5ibG9jay9iaW8uYz0xMzY3PXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTE0MDAtXHQvKiBUaGUgZmlyc3QgdmVjIHN0b3JlcyB0aGUgYm91bmNlIGJ1ZmZlciwgc28gZG8gbm90IHN1YnRyYWN0IDEgaGVyZS4gKi9cbmJsb2NrL2Jpby5jOjE0MDE6XHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG5ibG9jay9iaW8uYy0xNDAyLVx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnRdLCBtaW5zaXplIC0gMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgQm91bmNlIEJ1ZmZlciBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcgaW4gYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYW4gaW5jb3JyZWN0IHBvaW50ZXIgYmVpbmcgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAuIFRoZSBwYXRjaCBpcyBjb3JyZWN0aW5nIHRoZSBgYnZgIHBvaW50ZXIgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAsIGNoYW5naW5nIGl0IGZyb20gYCZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV1gIHRvIGAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfdmNudF1gLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gdGhlIGJvdW5jZSBidWZmZXIgaGFuZGxpbmcuIFRoZSBpbml0aWFsIHZlY3RvciwgYGJpby0mZ3Q7YmlfaW9fdmVjWzBdYCBpcyB0aGUgYnVmZmVyLCBzbyB0aGUgaW5kZXggY2hhbmdlIG1ha2VzIHNlbnNlLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZmZlY3RzIHRoZSBjb3JlIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlciBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYmVjYXVzZSB0aGF0IHR5cGUgb2YgbG9naWMgaXMgYWx3YXlzIHdvcnRoIHNjcnV0aW5pemluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIHRoZSBibG9jayBsYXllciwgSSYjMzk7bSB0aGlua2luZyBkaXJlY3QgSS9PIHJlYWRzL3dyaXRlcyBmcm9tIHVzZXJzcGFjZSBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgcGF0aC4KCkxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgb24gY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfQkxPQ0tgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIGZ1bmRhbWVudGFsLiBBbmQgYENPTkZJR19GU19JT01BUGAgYWxzbyBsaWtlbHkgcHJlc2VudCwgYXMgdGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgZm9yIGFueSBtb2Rlcm4gZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgSS9PLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55ICpzcGVjaWZpYyogY29uZmlnIGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGlzIGVhc2llciB0byBhbmFseXplLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIGFueSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYnV0IEkgYWxzbyBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgLCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGFuZCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAgYmVjYXVzZSBvZiBob3cgdGlnaHRseSByZWxhdGVkIHRoZXkgYWxsIGFyZSBpbiBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfYWxpZ25fZG93biYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZSYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6MzkuMDA2MjU1Mjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4Mzk2ODY5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZFwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZVwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTo1ODozOS4wMDYyNjEzNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjAwOTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6NTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi4yMTJmZTc2ODQwN2QzYyAxMDA2NDRcXG4tLS0gYS9ibG9jay9iaW8uY1xcbisrKyBiL2Jsb2NrL2Jpby5jXFxuQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gICogZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi5cXG4gICovXFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJpb192ZWMgKmJ2LCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4ge1xcbiBcXHRzaXplX3QgbmJ5dGVzID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAyNiBsZW5fYWxpZ25fbWFzaztcXG4gXFxuQEAgLTEyMDAsOSArMTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xcbi1cXHRkbyB7XFxuLVxcdFxcdHN0cnVjdCBiaW9fdmVjICpidiA9IFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1tiaW8tXFx1MDAzZWJpX3ZjbnQgLSAxXTtcXG4tXFxuK1xcdGZvciAoOzspIHtcXG4gXFx0XFx0aWYgKG5ieXRlcyBcXHUwMDNjIGJ2LVxcdTAwM2Vidl9sZW4pIHtcXG4gXFx0XFx0XFx0YnYtXFx1MDAzZWJ2X2xlbiAtPSBuYnl0ZXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjExLDkgKzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSlcXG4gXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKGJ2LVxcdTAwM2Vidl9wYWdlKTtcXG4gXFxuLVxcdFxcdGJpby1cXHUwMDNlYmlfdmNudC0tO1xcbiBcXHRcXHRuYnl0ZXMgLT0gYnYtXFx1MDAzZWJ2X2xlbjtcXG4tXFx0fSB3aGlsZSAobmJ5dGVzKTtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV92Y250LS07XFxuK1xcdFxcdGJ2LS07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghYmlvLVxcdTAwM2ViaV92Y250KVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTI3Niw3ICsxMjc1LDggQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKSlcXG4gXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIGxlbl9hbGlnbl9tYXNrKTtcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcXG4rXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudCAtIDFdLCBsZW5fYWxpZ25fbWFzayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX2dyZWVkeShnZnBfdCBnZnAsIHNpemVfdCAqc2l6ZSxcXG5AQCAtMTM2MCw3ICsxMzYwLDggQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXG4gXFx0aWYgKCFiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIG1pbnNpemUgLSAxKTtcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcXG4rXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudCAtIDFdLCBtaW5zaXplIC0gMSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbkBAIC0xMzY4LDIxICsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiB7XFxuIFxcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3NpemVfdCByZXQ7XFxuIFxcbiBcXHRmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCBcXHUwMDI2bGVuLCBtaW5zaXplKTtcXG4gXFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdHNzaXplX3QgcmV0O1xcbi1cXG4gXFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXFx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0XFx0aWYgKCFiaW8tXFx1MDAzZWJpX3ZjbnQpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZm9saW9fcHV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRsZW4gLT0gcmV0O1xcbkBAIC0xMzk4LDcgKzEzOTYsMjAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdGJ2ZWNfc2V0X2ZvbGlvKFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1swXSwgZm9saW8sIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLCAwKTtcXG4gXFx0aWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpXFxuIFxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIG1pbnNpemUgLSAxKTtcXG4rXFxuK1xcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1tiaW8tXFx1MDAzZWJpX3ZjbnRdLCBtaW5zaXplIC0gMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSB0aGUgYm91bmMgYnVmZmVyIGJ2X2xlbiB0byB0aGUgYWxpZ25lZCBkb3duIHNpemUuICovXFxuK1xcdGJpby1cXHUwMDNlYmlfaW9fdmVjWzBdLmJ2X2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mb2xpb19wdXQ6XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTo1ODozOS44MDk3OTIxMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM2MTQxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9hbGlnbl9kb3duXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVcIixcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWQyZDRmN2I2NjgwY2E3YTUxMjM5ODAxMDFkOTA4MDNjMDU1ZGNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6NTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uMjEyZmU3Njg0MDdkM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuKysrIGIvYmxvY2svYmlvLmNcbkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gICogZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgKi9cbiBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbitcdFx0XHRcdCAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0c2l6ZV90IG5ieXRlcyA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDI2IGxlbl9hbGlnbl9tYXNrO1xuIFxuQEAgLTEyMDAsOSArMTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xuLVx0ZG8ge1xuLVx0XHRzdHJ1Y3QgYmlvX3ZlYyAqYnYgPSBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV07XG4tXG4rXHRmb3IgKDs7KSB7XG4gXHRcdGlmIChuYnl0ZXMgXHUwMDNjIGJ2LVx1MDAzZWJ2X2xlbikge1xuIFx0XHRcdGJ2LVx1MDAzZWJ2X2xlbiAtPSBuYnl0ZXM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTIxMSw5ICsxMjA5LDEwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19QQUdFX1BJTk5FRCkpXG4gXHRcdFx0dW5waW5fdXNlcl9wYWdlKGJ2LVx1MDAzZWJ2X3BhZ2UpO1xuIFxuLVx0XHRiaW8tXHUwMDNlYmlfdmNudC0tO1xuIFx0XHRuYnl0ZXMgLT0gYnYtXHUwMDNlYnZfbGVuO1xuLVx0fSB3aGlsZSAobmJ5dGVzKTtcbitcdFx0YmlvLVx1MDAzZWJpX3ZjbnQtLTtcbitcdFx0YnYtLTtcbitcdH1cbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEyNzYsNyArMTI3NSw4IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbGVuX2FsaWduX21hc2spO1xuK1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbitcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfZ3JlZWR5KGdmcF90IGdmcCwgc2l6ZV90ICpzaXplLFxuQEAgLTEzNjAsNyArMTM2MCw4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4rXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuK1x0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnQgLSAxXSwgbWluc2l6ZSAtIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbkBAIC0xMzY4LDIxICsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIHtcbiBcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzc2l6ZV90IHJldDtcbiBcbiBcdGZvbGlvID0gZm9saW9fYWxsb2NfZ3JlZWR5KEdGUF9LRVJORUwsIFx1MDAyNmxlbiwgbWluc2l6ZSk7XG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvIHtcbi1cdFx0c3NpemVfdCByZXQ7XG4tXG4gXHRcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcbiBcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbi1cdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KSB7XG4tXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHR9XG4rXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbitcdFx0XHRcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRsZW4gLT0gcmV0O1xuQEAgLTEzOTgsNyArMTM5NiwyMCBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdGJ2ZWNfc2V0X2ZvbGlvKFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbMF0sIGZvbGlvLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLCAwKTtcbiBcdGlmIChpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluKGl0ZXIpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHZlYyBzdG9yZXMgdGhlIGJvdW5jZSBidWZmZXIsIHNvIGRvIG5vdCBzdWJ0cmFjdCAxIGhlcmUuICovXG4rXHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG4rXHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcbitcbitcdC8qIFVwZGF0ZSB0aGUgYm91bmMgYnVmZmVyIGJ2X2xlbiB0byB0aGUgYWxpZ25lZCBkb3duIHNpemUuICovXG4rXHRiaW8tXHUwMDNlYmlfaW9fdmVjWzBdLmJ2X2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZm9saW9fcHV0OlxuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6MzkuODA5Nzk0Mjk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5NDYxMDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iaW8uY2AuIEl0J3MgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRoZXJlLCBwYXNzaW5nIGluIGEgYHN0cnVjdCBiaW9fdmVjICpidmAgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0IGludGVybmFsbHksIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBjbGFyaXR5IGFuZCBlZmZpY2llbmN5LCBJJ2Qgc2F5LiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggd2hlcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCB3YXMgZ2V0dGluZyBjYWxsZWQgd2l0aCB0aGUgd3JvbmcgYGJ2YCBwb2ludGVyLiBUaGV5J3JlIGFsc28gdXBkYXRpbmcgYGJ2X2xlbmAgaW4gdGhlIGJvdW5jZSBidWZmZXIuXG5cblRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgYW55dGhpbmcgZGVhbGluZyB3aXRoIGJpbyB2ZWN0b3JzIGFuZCBgaW92X2l0ZXJgIHdhcnJhbnRzIGEgZ29vZCBsb29rLiBJJ20gdGhpbmtpbmcgdGhpcyBzY3JlYW1zIFwiZnV6eiB0aGlzIVwiLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIEknZCBzYXkgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCwgbmF0dXJhbGx5LCB0aGVuIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgLCBhbmQgZGVmaW5pdGVseSBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYC5cblxuVGhlc2UgYXJlIGFsbCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucywgc28gdGhleSdyZSBnb2luZyB0byBiZSByZWFjaGFibGUgZnJvbSBhIGJ1bmNoIG9mIHBsYWNlczogYmxvY2sgZGV2aWNlIHJlYWRzL3dyaXRlcywgZGlyZWN0IElPLCBhbmQgcHJvYmFibHkgYSBmZXcgb3RoZXIgYXJlYXMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmU/IGBCTE9DS2AgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBhIGdpdmVuLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLiBOb3cgd2hlcmUgZG9lcyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCBmaXQgaW4/IElzIGl0IGNhbGxlZCBmcm9tIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCB3aGVuIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyB1c2VkLCBvciBpcyBpdCBzaW1pbGFyPyBMZXQncyBjaGVjayBgYmxvY2svYmlvLmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NDYuODA0NDA5OTU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjkwOTgwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTEzMTA9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTM2Ni1cXG5ibG9jay9iaW8uYzoxMzY3OnN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmJsb2NrL2Jpby5jLTEzNjgtXFx0XFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXFxuLS1cXG5ibG9jay9iaW8uYz0xNDI4PWludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxcbi0tXFxuYmxvY2svYmlvLmMtMTQzMi1cXHRcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShiaW8sIGl0ZXIsIG1heGxlbiwgbWluc2l6ZSk7XFxuYmxvY2svYmlvLmM6MTQzMzpcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcXG5ibG9jay9iaW8uYy0xNDM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NTAuNzczNTE3MDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzkyMDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCBJL08gYW5kIGtlcm5lbCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBiaW9faW92X2l0ZXJfYm91bmNlYCoqXG5cbkFscmlnaHQsIGBiaW9faW92X2l0ZXJfYm91bmNlYC4gVGhhdCByaW5ncyBhIGJlbGwsIEkgdGhpbmsgaXQncyB0aGUgcHVibGljIGZ1bmN0aW9uLCB0aGUgZW50cnkgcG9pbnQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSAqdXNlZCo/IFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbHMuIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgZGVwZW5kIG9uIGl0IGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9uIGlzLiBLbm93aW5nIHRoZSBjYWxsZXIncyBwdXJwb3NlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGJvdW5jaW5nIGJlaGF2aW9yIGlzIG5lZWRlZCBhbmQgd2hhdCBwcm9ibGVtcyBpdCdzIGRlc2lnbmVkIHRvIHNvbHZlLiBMZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NTQuMDg3NDQwNDc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjQyMjEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0xMjk3PXN0YXRpYyB2b2lkIGJpb19mcmVlX2ZvbGlvcyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9iaW8uYy0xMzA5LVxcbmJsb2NrL2Jpby5jOjEzMTA6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmJsb2NrL2Jpby5jLTEzMTEtXFx0XFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXFxuLS1cXG5ibG9jay9iaW8uYy0xMzY2LVxcbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmlvLmMtMTM2OC1cXHRcXHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcXG4tLVxcbmJsb2NrL2Jpby5jLTE0MTUtLyoqXFxuYmxvY2svYmlvLmM6MTQxNjogKiBiaW9faW92X2l0ZXJfYm91bmNlIC0gYm91bmNlIGJ1ZmZlciBkYXRhIGZyb20gYW4gaXRlciBpbnRvIGEgYmlvXFxuYmxvY2svYmlvLmMtMTQxNy0gKiBAYmlvOlxcdGJpbyB0byBzZW5kXFxuLS1cXG5ibG9jay9iaW8uYy0xNDI3LSAqL1xcbmJsb2NrL2Jpby5jOjE0Mjg6aW50IGJpb19pb3ZfaXRlcl9ib3VuY2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBtYXhsZW4sXFxuYmxvY2svYmlvLmMtMTQyOS1cXHRcXHRcXHRzaXplX3QgbWluc2l6ZSlcXG4tLVxcbmJsb2NrL2Jpby5jLTE0MzEtXFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcXG5ibG9jay9iaW8uYzoxNDMyOlxcdFxcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcXG5ibG9jay9iaW8uYzoxNDMzOlxcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoYmlvLCBpdGVyLCBtYXhsZW4sIG1pbnNpemUpO1xcbmJsb2NrL2Jpby5jLTE0MzQtfVxcbi0tXFxuYmxvY2svYmlvLmM9MTQ0Nz1zdGF0aWMgdm9pZCBiaW9faW92X2l0ZXJfdW5ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaXNfZXJyb3IsXFxuLS1cXG5ibG9jay9iaW8uYy0xNDgyLSAqIHdlIG5lZWQgdG8gY2hlY2tzdW0gdGhlIGRhdGEgb3IgcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZVxcbmJsb2NrL2Jpby5jOjE0ODM6ICogY29uc2lzdGVuY3kuICBDYWxsZWQgdG8gY29tcGxldGUgYSBiaW8gc2V0IHVwIGJ5IGJpb19pb3ZfaXRlcl9ib3VuY2UoKS5cXG5ibG9jay9iaW8uYy0xNDg0LSAqIENvcGllcyBkYXRhIGJhY2sgZm9yIHJlYWRzLCBhbmQgbWFya3MgdGhlIG9yaWdpbmFsIGZvbGlvcyBkaXJ0eSBpZlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MzM0PXN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTYtXFx0aWYgKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fQk9VTkNFKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjM1NzpcXHRcXHRyZXQgPSBiaW9faW92X2l0ZXJfYm91bmNlKGJpbywgZGlvLVxcdTAwM2VzdWJtaXQuaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTgtXFx0XFx0XFx0XFx0aW9tYXBfbWF4X2Jpb19zaXplKFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTQ4NT1leHRlcm4gdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4Ni1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjQ4NzppbnQgYmlvX2lvdl9pdGVyX2JvdW5jZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heGxlbixcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4OC1cXHRcXHRzaXplX3QgbWluc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjU4OjU3Ljg1MTY2NjY0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjAzMDU4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlyZWN0IElPIHdpdGggQm91bmNlIEJ1ZmZlcmluZzogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkIGFib3V0IHRoaXMgRGlyZWN0IElPIGJvdW5jZSBidWZmZXJpbmcgc2l0dWF0aW9uLiAgV2UncmUgZGVhbGluZyB3aXRoIGEgY2FsbCBmcm9tIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCB3aGVyZSBgSU9NQVBfRElPX0JPVU5DRWAgaXMgZW5hYmxlZC4gVGhhdCBzaWduYWxzIGRpcmVjdCBJTywgYnV0IHdlJ3JlIGVtcGxveWluZyBib3VuY2UgYnVmZmVyaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgb24gYWRkcmVzc2luZyBhIGZldyBidWdzIGluIHRoZSBgYmlvX2lvdl9pdGVyYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0YXJnZXRzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGFyZSBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBuYXR1cmFsbHk7IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgOyAgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgOyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2A7IGFuZCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAuIFdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UsIGFuZCBmaWd1cmluZyBvdXQgaG93IGRhdGEgZ2V0cyBhbGlnbmVkIGFuZCB0cmFuc2ZlcnJlZCB3aXRoIHRoZSBib3VuY2UgYnVmZmVyLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgYEJMT0NLYCBpcyB0aGUgc3RhbmRhcmQsIGFuZCB3ZSBzaG91bGQgYmUgZmluZSB0aGVyZS4gYEZTX0lPTUFQYCBjb3VsZCBiZSByZWxldmFudCwgYnV0IHRoYXQncyB1c3VhbGx5IGhhbmRsZWQgYnkgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMsIGxpa2UgWEZTLCBleHQ0LCBvciBidHJmcy4gU28sIG5vIG5lZWQgdG8gYWRkIGFueSBzcGVjaWFsIGNvbmZpZ3MgaGVyZSBhcyBib3RoIHRoZSBibG9jayBsYXllciBhbmQgRGlyZWN0IElPIGFyZSBwcmV0dHkgc3RhbmRhcmQgdGhlc2UgZGF5cy5cblxuSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gc3RhcnQgd2l0aCBhIGNsb3NlIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gIEtub3dpbmcgaG93IGl0J3MgYmVpbmcgdXNlZCBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTk6MDMuNTcxOTc0Njc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjI2MDI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9iaW8uYy0xMTkyLSAqL1xcbmJsb2NrL2Jpby5jOjExOTM6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5ibG9jay9iaW8uYy0xMTk0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYz0xMjQzPWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI3Ny1cXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG5ibG9jay9iaW8uYzoxMjc4OlxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuYmxvY2svYmlvLmMtMTI3OS1cXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcXG4tLVxcbmJsb2NrL2Jpby5jPTEzMTA9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTM2Mi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5ibG9jay9iaW8uYzoxMzYzOlxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuYmxvY2svYmlvLmMtMTM2NC1cXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTtcXG4tLVxcbmJsb2NrL2Jpby5jPTEzNjc9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5ibG9jay9iaW8uYy0xNDAwLVxcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xcbmJsb2NrL2Jpby5jOjE0MDE6XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxcbmJsb2NrL2Jpby5jLTE0MDItXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTk6MDcuNjM0NTgyMjE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxMTI2Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBCb3VuY2UgQnVmZmVyIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIGFuIGluY29ycmVjdCBwb2ludGVyIGJlaW5nIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGUgcGF0Y2ggaXMgY29ycmVjdGluZyB0aGUgYGJ2YCBwb2ludGVyIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBjaGFuZ2luZyBpdCBmcm9tIGBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV1gIHRvIGBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250XWAuIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcmVsYXRlcyB0byB0aGUgYm91bmNlIGJ1ZmZlciBoYW5kbGluZy4gVGhlIGluaXRpYWwgdmVjdG9yLCBgYmlvLVx1MDAzZWJpX2lvX3ZlY1swXWAgaXMgdGhlIGJ1ZmZlciwgc28gdGhlIGluZGV4IGNoYW5nZSBtYWtlcyBzZW5zZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZmZlY3RzIHRoZSBjb3JlIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlciBtYW5hZ2VtZW50LiBUaGF0J3MgZ29vZCB0byBrbm93LCBiZWNhdXNlIHRoYXQgdHlwZSBvZiBsb2dpYyBpcyBhbHdheXMgd29ydGggc2NydXRpbml6aW5nLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gdGhlIGJsb2NrIGxheWVyLCBJJ20gdGhpbmtpbmcgZGlyZWN0IEkvTyByZWFkcy93cml0ZXMgZnJvbSB1c2Vyc3BhY2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGlzIHBhdGguXG5cbkxldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIG9uIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0JMT0NLYCBpcyBhIGdpdmVuOyBpdCdzIGZ1bmRhbWVudGFsLiBBbmQgYENPTkZJR19GU19JT01BUGAgYWxzbyBsaWtlbHkgcHJlc2VudCwgYXMgdGhhdCdzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IG1vZGVybiBmaWxlIHN5c3RlbSwgYW5kIHRoaXMgbG9va3MgcmVsYXRlZCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBJL08uIEknbSBub3Qgc2VlaW5nIGFueSAqc3BlY2lmaWMqIGNvbmZpZyBkZXBlbmRlbmNpZXMganVtcGluZyBvdXQgYXQgbWUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpcyBlYXNpZXIgdG8gYW5hbHl6ZS5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJJ2xsIHdhbnQgdG8gZm9jdXMgYW55IGZ1enppbmcgZWZmb3J0cyBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBidXQgSSBhbHNvIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZWAsIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYW5kIGBiaW9faW92X2l0ZXJfYm91bmNlYCBiZWNhdXNlIG9mIGhvdyB0aWdodGx5IHJlbGF0ZWQgdGhleSBhbGwgYXJlIGluIGJvdW5jZSBidWZmZXJpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjAsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjU5OjE0Ljg0NTg1Mjc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZFwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZVwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9hbGlnbl9kb3duXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVcIixcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7zrgv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 19:41:12 +0000 UTC FinishedAt: 2026-07-13 19:59:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "series_id": "c5526ca4-0280-46b9-acac-a3952d0df609" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_align_down", "bio_iov_iter_bounce_read", "bio_iov_iter_bounce_write", "bio_iov_iter_get_pages", "bio_iov_iter_bounce" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxOTo1ODozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uMjEyZmU3Njg0MDdkM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmNcbkBAIC0xMTkxLDcgJiM0MzsxMTkxLDcgQEAgdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuICAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICovXG4gc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGJpb192ZWMgKmJ2LCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiB7XG4gXHRzaXplX3QgbmJ5dGVzID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwMjYgbGVuX2FsaWduX21hc2s7XG4gXG5AQCAtMTIwMCw5ICYjNDM7MTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xuLVx0ZG8ge1xuLVx0XHRzdHJ1Y3QgYmlvX3ZlYyAqYnYgPSBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV07XG4tXG4mIzQzO1x0Zm9yICg7Oykge1xuIFx0XHRpZiAobmJ5dGVzIFx1MDAzYyBidi1cdTAwM2Vidl9sZW4pIHtcbiBcdFx0XHRidi1cdTAwM2Vidl9sZW4gLT0gbmJ5dGVzO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTEyMTEsOSAmIzQzOzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSlcbiBcdFx0XHR1bnBpbl91c2VyX3BhZ2UoYnYtXHUwMDNlYnZfcGFnZSk7XG4gXG4tXHRcdGJpby1cdTAwM2ViaV92Y250LS07XG4gXHRcdG5ieXRlcyAtPSBidi1cdTAwM2Vidl9sZW47XG4tXHR9IHdoaWxlIChuYnl0ZXMpO1xuJiM0MztcdFx0YmlvLVx1MDAzZWJpX3ZjbnQtLTtcbiYjNDM7XHRcdGJ2LS07XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTI3Niw3ICYjNDM7MTI3NSw4IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbGVuX2FsaWduX21hc2spO1xuJiM0MztcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG4mIzQzO1x0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnQgLSAxXSwgbGVuX2FsaWduX21hc2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ncmVlZHkoZ2ZwX3QgZ2ZwLCBzaXplX3QgKnNpemUsXG5AQCAtMTM2MCw3ICYjNDM7MTM2MCw4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4mIzQzO1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbiYjNDM7XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudCAtIDFdLCBtaW5zaXplIC0gMSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuQEAgLTEzNjgsMjEgJiM0MzsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIHtcbiBcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCBcdTAwMjZsZW4sIG1pbnNpemUpO1xuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRkbyB7XG4tXHRcdHNzaXplX3QgcmV0O1xuLVxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgJiM0MzsgMSwgbGVuLFxuIFx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuLVx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mb2xpb19wdXQ7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0bGVuIC09IHJldDtcbkBAIC0xMzk4LDcgJiM0MzsxMzk2LDIwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0YnZlY19zZXRfZm9saW8oXHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1swXSwgZm9saW8sIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsIDApO1xuIFx0aWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbiYjNDM7XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfZm9saW9fcHV0O1xuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgdGhlIGJvdW5jIGJ1ZmZlciBidl9sZW4gdG8gdGhlIGFsaWduZWQgZG93biBzaXplLiAqL1xuJiM0MztcdGJpby1cdTAwM2ViaV9pb192ZWNbMF0uYnZfbGVuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9mb2xpb19wdXQ6XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9hbGlnbl9kb3duJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZCYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgZGlyZWN0IElPIGJvdW5jZSBidWZmZXJpbmcgbG9naWMgKGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgKSwgd2hlcmUgdGhlIHdyb25nIGJpb192ZWMgcG9pbnRlciB3YXMgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGxheWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBkaXJlY3QgSU8gYW5kIGJvdW5jZSBidWZmZXJzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJTyByZWFkcy93cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxOTo1ODozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmMKaW5kZXggZjJhNWY0ZDBhOTY3MmIuLjIxMmZlNzY4NDA3ZDNjIDEwMDY0NAotLS0gYS9ibG9jay9iaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uYwpAQCAtMTE5MSw3ICYjNDM7MTE5MSw3IEBAIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcikKICAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCi0JCQkgICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJCSAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiB7CiAJc2l6ZV90IG5ieXRlcyA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICZhbXA7IGxlbl9hbGlnbl9tYXNrOwogCkBAIC0xMjAwLDkgJiM0MzsxMjAwLDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCWlvdl9pdGVyX3JldmVydChpdGVyLCBuYnl0ZXMpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplIC09IG5ieXRlczsKLQlkbyB7Ci0JCXN0cnVjdCBiaW9fdmVjICpidiA9ICZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV07Ci0KJiM0MzsJZm9yICg7OykgewogCQlpZiAobmJ5dGVzICZsdDsgYnYtJmd0O2J2X2xlbikgewogCQkJYnYtJmd0O2J2X2xlbiAtPSBuYnl0ZXM7CiAJCQlicmVhazsKQEAgLTEyMTEsOSAmIzQzOzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJaWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSkKIAkJCXVucGluX3VzZXJfcGFnZShidi0mZ3Q7YnZfcGFnZSk7CiAKLQkJYmlvLSZndDtiaV92Y250LS07CiAJCW5ieXRlcyAtPSBidi0mZ3Q7YnZfbGVuOwotCX0gd2hpbGUgKG5ieXRlcyk7CiYjNDM7CQliaW8tJmd0O2JpX3ZjbnQtLTsKJiM0MzsJCWJ2LS07CiYjNDM7CX0KIAogCWlmICghYmlvLSZndDtiaV92Y250KQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyNzYsNyAmIzQzOzEyNzUsOCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCWlmIChpc19wY2lfcDJwZG1hX3BhZ2UoYmlvLSZndDtiaV9pb192ZWMtJmd0O2J2X3BhZ2UpKQogCQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9NRVJHRTsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsCiYjNDM7CQkJJmFtcDtiaW8tJmd0O2JpX2lvX3ZlY1tiaW8tJmd0O2JpX3ZjbnQgLSAxXSwgbGVuX2FsaWduX21hc2spOwogfQogCiBzdGF0aWMgc3RydWN0IGZvbGlvICpmb2xpb19hbGxvY19ncmVlZHkoZ2ZwX3QgZ2ZwLCBzaXplX3QgKnNpemUsCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDggQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCiAJaWYgKCFiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpOwomIzQzOwlyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLAomIzQzOwkJCSZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTsKIH0KIAogc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCkBAIC0xMzY4LDIxICYjNDM7MTM2OSwxOCBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIHsKIAlzaXplX3QgbGVuID0gbWluMyhpb3ZfaXRlcl9jb3VudChpdGVyKSwgbWF4bGVuLCBTWl8xTSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3NpemVfdCByZXQ7CiAKIAlmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCAmYW1wO2xlbiwgbWluc2l6ZSk7CiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkbyB7Ci0JCXNzaXplX3QgcmV0OwotCiAJCXJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLSZndDtiaV9pb192ZWMgJiM0MzsgMSwgbGVuLAogCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzIC0gMSwgMCk7CiAJCWlmIChyZXQgJmx0Oz0gMCkgewotCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpIHsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9CiYjNDM7CQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiYjNDM7CQkJCWdvdG8gb3V0X2ZvbGlvX3B1dDsKIAkJCWJyZWFrOwogCQl9CiAJCWxlbiAtPSByZXQ7CkBAIC0xMzk4LDcgJiM0MzsxMzk2LDIwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCWJ2ZWNfc2V0X2ZvbGlvKCZhbXA7YmlvLSZndDtiaV9pb192ZWNbMF0sIGZvbGlvLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSwgMCk7CiAJaWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpCiAJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7Ci0JcmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdmVjIHN0b3JlcyB0aGUgYm91bmNlIGJ1ZmZlciwgc28gZG8gbm90IHN1YnRyYWN0IDEgaGVyZS4gKi8KJiM0MzsJcmV0ID0gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLAomIzQzOwkJCSZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250XSwgbWluc2l6ZSAtIDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZm9saW9fcHV0OwomIzQzOwomIzQzOwkvKiBVcGRhdGUgdGhlIGJvdW5jIGJ1ZmZlciBidl9sZW4gdG8gdGhlIGFsaWduZWQgZG93biBzaXplLiAqLwomIzQzOwliaW8tJmd0O2JpX2lvX3ZlY1swXS5idl9sZW4gPSBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X2ZvbGlvX3B1dDoKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iaW8uY2AuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdGhlcmUsIHBhc3NpbmcgaW4gYSBgc3RydWN0IGJpb192ZWMgKmJ2YCBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQgaW50ZXJuYWxseSwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGNsYXJpdHkgYW5kIGVmZmljaWVuY3ksIEkmIzM5O2Qgc2F5LiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggd2hlcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCB3YXMgZ2V0dGluZyBjYWxsZWQgd2l0aCB0aGUgd3JvbmcgYGJ2YCBwb2ludGVyLiBUaGV5JiMzOTtyZSBhbHNvIHVwZGF0aW5nIGBidl9sZW5gIGluIHRoZSBib3VuY2UgYnVmZmVyLgoKVGhpcyBpcyBhIHByZXR0eSBmb2N1c2VkIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBhbnl0aGluZyBkZWFsaW5nIHdpdGggYmlvIHZlY3RvcnMgYW5kIGBpb3ZfaXRlcmAgd2FycmFudHMgYSBnb29kIGxvb2suIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBzY3JlYW1zICYjMzQ7ZnV6eiB0aGlzISYjMzQ7LiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtkIHNheSBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBuYXR1cmFsbHksIHRoZW4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZWAsIGFuZCBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLgoKVGhlc2UgYXJlIGFsbCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucywgc28gdGhleSYjMzk7cmUgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGZyb20gYSBidW5jaCBvZiBwbGFjZXM6IGJsb2NrIGRldmljZSByZWFkcy93cml0ZXMsIGRpcmVjdCBJTywgYW5kIHByb2JhYmx5IGEgZmV3IG90aGVyIGFyZWFzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCBoZXJlPyBgQkxPQ0tgIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLiBOb3cgd2hlcmUgZG9lcyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCBmaXQgaW4/IElzIGl0IGNhbGxlZCBmcm9tIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCB3aGVuIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyB1c2VkLCBvciBpcyBpdCBzaW1pbGFyPyBMZXQmIzM5O3MgY2hlY2sgYGJsb2NrL2Jpby5jYCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTMxMD1zdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svYmlvLmMtMTM2Ni1cbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9iaW8uYy0xMzY4LVx0XHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYz0xNDI4PWludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuLS1cbmJsb2NrL2Jpby5jLTE0MzItXHRcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jOjE0MzM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jLTE0MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIEkvTyBhbmQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBiaW9faW92X2l0ZXJfYm91bmNlYCoqCgpBbHJpZ2h0LCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAuIFRoYXQgcmluZ3MgYSBiZWxsLCBJIHRoaW5rIGl0JiMzOTtzIHRoZSBwdWJsaWMgZnVuY3Rpb24sIHRoZSBlbnRyeSBwb2ludC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp1c2VkKj8gVGltZSB0byB0cmFjZSB0aG9zZSBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb24gaXMuIEtub3dpbmcgdGhlIGNhbGxlciYjMzk7cyBwdXJwb3NlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGJvdW5jaW5nIGJlaGF2aW9yIGlzIG5lZWRlZCBhbmQgd2hhdCBwcm9ibGVtcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBzb2x2ZS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz0xMjk3PXN0YXRpYyB2b2lkIGJpb19mcmVlX2ZvbGlvcyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmlvLmMtMTMwOS1cbmJsb2NrL2Jpby5jOjEzMTA6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svYmlvLmMtMTMxMS1cdFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXG4tLVxuYmxvY2svYmlvLmMtMTM2Ni1cbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9iaW8uYy0xMzY4LVx0XHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYy0xNDE1LS8qKlxuYmxvY2svYmlvLmM6MTQxNjogKiBiaW9faW92X2l0ZXJfYm91bmNlIC0gYm91bmNlIGJ1ZmZlciBkYXRhIGZyb20gYW4gaXRlciBpbnRvIGEgYmlvXG5ibG9jay9iaW8uYy0xNDE3LSAqIEBiaW86XHRiaW8gdG8gc2VuZFxuLS1cbmJsb2NrL2Jpby5jLTE0MjctICovXG5ibG9jay9iaW8uYzoxNDI4OmludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuYmxvY2svYmlvLmMtMTQyOS1cdFx0XHRzaXplX3QgbWluc2l6ZSlcbi0tXG5ibG9jay9iaW8uYy0xNDMxLVx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcbmJsb2NrL2Jpby5jOjE0MzI6XHRcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jOjE0MzM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcbmJsb2NrL2Jpby5jLTE0MzQtfVxuLS1cbmJsb2NrL2Jpby5jPTE0NDc9c3RhdGljIHZvaWQgYmlvX2lvdl9pdGVyX3VuYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBib29sIGlzX2Vycm9yLFxuLS1cbmJsb2NrL2Jpby5jLTE0ODItICogd2UgbmVlZCB0byBjaGVja3N1bSB0aGUgZGF0YSBvciBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlXG5ibG9jay9iaW8uYzoxNDgzOiAqIGNvbnNpc3RlbmN5LiAgQ2FsbGVkIHRvIGNvbXBsZXRlIGEgYmlvIHNldCB1cCBieSBiaW9faW92X2l0ZXJfYm91bmNlKCkuXG5ibG9jay9iaW8uYy0xNDg0LSAqIENvcGllcyBkYXRhIGJhY2sgZm9yIHJlYWRzLCBhbmQgbWFya3MgdGhlIG9yaWdpbmFsIGZvbGlvcyBkaXJ0eSBpZlxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTMzND1zdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTM1Ni1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozNTc6XHRcdHJldCA9IGJpb19pb3ZfaXRlcl9ib3VuY2UoYmlvLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTgtXHRcdFx0XHRpb21hcF9tYXhfYmlvX3NpemUoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD00ODU9ZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4Ni1cbmluY2x1ZGUvbGludXgvYmlvLmg6NDg3OmludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxuaW5jbHVkZS9saW51eC9iaW8uaC00ODgtXHRcdHNpemVfdCBtaW5zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpcmVjdCBJTyB3aXRoIEJvdW5jZSBCdWZmZXJpbmc6IEEgRGVlcCBEaXZlKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhYm91dCB0aGlzIERpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIHNpdHVhdGlvbi4gIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjYWxsIGZyb20gYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIHdoZXJlIGBJT01BUF9ESU9fQk9VTkNFYCBpcyBlbmFibGVkLiBUaGF0IHNpZ25hbHMgZGlyZWN0IElPLCBidXQgd2UmIzM5O3JlIGVtcGxveWluZyBib3VuY2UgYnVmZmVyaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgb24gYWRkcmVzc2luZyBhIGZldyBidWdzIGluIHRoZSBgYmlvX2lvdl9pdGVyYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0YXJnZXRzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCwgbmF0dXJhbGx5OyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYDsgIGBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlYDsgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgOyBhbmQgYGJpb19pb3ZfaXRlcl9ib3VuY2VgLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSwgYW5kIGZpZ3VyaW5nIG91dCBob3cgZGF0YSBnZXRzIGFsaWduZWQgYW5kIHRyYW5zZmVycmVkIHdpdGggdGhlIGJvdW5jZSBidWZmZXIuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgYEJMT0NLYCBpcyB0aGUgc3RhbmRhcmQsIGFuZCB3ZSBzaG91bGQgYmUgZmluZSB0aGVyZS4gYEZTX0lPTUFQYCBjb3VsZCBiZSByZWxldmFudCwgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkIGJ5IHRoZSBmaWxlc3lzdGVtcyB0aGVtc2VsdmVzLCBsaWtlIFhGUywgZXh0NCwgb3IgYnRyZnMuIFNvLCBubyBuZWVkIHRvIGFkZCBhbnkgc3BlY2lhbCBjb25maWdzIGhlcmUgYXMgYm90aCB0aGUgYmxvY2sgbGF5ZXIgYW5kIERpcmVjdCBJTyBhcmUgcHJldHR5IHN0YW5kYXJkIHRoZXNlIGRheXMuCgpJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBpcyB0byBzdGFydCB3aXRoIGEgY2xvc2UgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiAgS25vd2luZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svYmlvLmMtMTE5Mi0gKi9cbmJsb2NrL2Jpby5jOjExOTM6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmJsb2NrL2Jpby5jLTExOTQtXHRcdFx0XHQgICBzdHJ1Y3QgYmlvX3ZlYyAqYnYsIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuLS1cbmJsb2NrL2Jpby5jPTEyNDM9aW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svYmlvLmMtMTI3Ny1cdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcbmJsb2NrL2Jpby5jOjEyNzg6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuYmxvY2svYmlvLmMtMTI3OS1cdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcbi0tXG5ibG9jay9iaW8uYz0xMzEwPXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9iaW8uYy0xMzYyLVx0XHRyZXR1cm4gLUVOT01FTTtcbmJsb2NrL2Jpby5jOjEzNjM6XHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuYmxvY2svYmlvLmMtMTM2NC1cdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTtcbi0tXG5ibG9jay9iaW8uYz0xMzY3PXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTE0MDAtXHQvKiBUaGUgZmlyc3QgdmVjIHN0b3JlcyB0aGUgYm91bmNlIGJ1ZmZlciwgc28gZG8gbm90IHN1YnRyYWN0IDEgaGVyZS4gKi9cbmJsb2NrL2Jpby5jOjE0MDE6XHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG5ibG9jay9iaW8uYy0xNDAyLVx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnRdLCBtaW5zaXplIC0gMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgQm91bmNlIEJ1ZmZlciBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcgaW4gYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYW4gaW5jb3JyZWN0IHBvaW50ZXIgYmVpbmcgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAuIFRoZSBwYXRjaCBpcyBjb3JyZWN0aW5nIHRoZSBgYnZgIHBvaW50ZXIgcGFzc2VkIHRvIGBiaW9faW92X2l0ZXJfYWxpZ25fZG93bmAsIGNoYW5naW5nIGl0IGZyb20gYCZhbXA7YmlvLSZndDtiaV9pb192ZWNbYmlvLSZndDtiaV92Y250IC0gMV1gIHRvIGAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfdmNudF1gLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gdGhlIGJvdW5jZSBidWZmZXIgaGFuZGxpbmcuIFRoZSBpbml0aWFsIHZlY3RvciwgYGJpby0mZ3Q7YmlfaW9fdmVjWzBdYCBpcyB0aGUgYnVmZmVyLCBzbyB0aGUgaW5kZXggY2hhbmdlIG1ha2VzIHNlbnNlLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZmZlY3RzIHRoZSBjb3JlIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlciBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYmVjYXVzZSB0aGF0IHR5cGUgb2YgbG9naWMgaXMgYWx3YXlzIHdvcnRoIHNjcnV0aW5pemluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIHRoZSBibG9jayBsYXllciwgSSYjMzk7bSB0aGlua2luZyBkaXJlY3QgSS9PIHJlYWRzL3dyaXRlcyBmcm9tIHVzZXJzcGFjZSBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgcGF0aC4KCkxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgb24gY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfQkxPQ0tgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIGZ1bmRhbWVudGFsLiBBbmQgYENPTkZJR19GU19JT01BUGAgYWxzbyBsaWtlbHkgcHJlc2VudCwgYXMgdGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgZm9yIGFueSBtb2Rlcm4gZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgSS9PLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55ICpzcGVjaWZpYyogY29uZmlnIGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyB0aGlzIGVhc2llciB0byBhbmFseXplLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIGFueSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYnV0IEkgYWxzbyBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgLCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGFuZCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAgYmVjYXVzZSBvZiBob3cgdGlnaHRseSByZWxhdGVkIHRoZXkgYWxsIGFyZSBpbiBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2FsaWduX2Rvd24mIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllciYjMzk7cyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfYWxpZ25fZG93biYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQmIzM0OywKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZSYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9ib3VuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6MzkuMDA2MjU1Mjc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4Mzk2ODY5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZFwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZVwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTo1ODozOS4wMDYyNjEzNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjAwOTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZDJkNGY3YjY2ODBjYTdhNTEyMzk4MDEwMWQ5MDgwM2MwNTVkY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6NTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi4yMTJmZTc2ODQwN2QzYyAxMDA2NDRcXG4tLS0gYS9ibG9jay9iaW8uY1xcbisrKyBiL2Jsb2NrL2Jpby5jXFxuQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gICogZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi5cXG4gICovXFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJpb192ZWMgKmJ2LCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4ge1xcbiBcXHRzaXplX3QgbmJ5dGVzID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAyNiBsZW5fYWxpZ25fbWFzaztcXG4gXFxuQEAgLTEyMDAsOSArMTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xcbi1cXHRkbyB7XFxuLVxcdFxcdHN0cnVjdCBiaW9fdmVjICpidiA9IFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1tiaW8tXFx1MDAzZWJpX3ZjbnQgLSAxXTtcXG4tXFxuK1xcdGZvciAoOzspIHtcXG4gXFx0XFx0aWYgKG5ieXRlcyBcXHUwMDNjIGJ2LVxcdTAwM2Vidl9sZW4pIHtcXG4gXFx0XFx0XFx0YnYtXFx1MDAzZWJ2X2xlbiAtPSBuYnl0ZXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjExLDkgKzEyMDksMTAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1BBR0VfUElOTkVEKSlcXG4gXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKGJ2LVxcdTAwM2Vidl9wYWdlKTtcXG4gXFxuLVxcdFxcdGJpby1cXHUwMDNlYmlfdmNudC0tO1xcbiBcXHRcXHRuYnl0ZXMgLT0gYnYtXFx1MDAzZWJ2X2xlbjtcXG4tXFx0fSB3aGlsZSAobmJ5dGVzKTtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV92Y250LS07XFxuK1xcdFxcdGJ2LS07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghYmlvLVxcdTAwM2ViaV92Y250KVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtMTI3Niw3ICsxMjc1LDggQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpZiAoaXNfcGNpX3AycGRtYV9wYWdlKGJpby1cXHUwMDNlYmlfaW9fdmVjLVxcdTAwM2Vidl9wYWdlKSlcXG4gXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0U7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIGxlbl9hbGlnbl9tYXNrKTtcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcXG4rXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudCAtIDFdLCBsZW5fYWxpZ25fbWFzayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmZvbGlvX2FsbG9jX2dyZWVkeShnZnBfdCBnZnAsIHNpemVfdCAqc2l6ZSxcXG5AQCAtMTM2MCw3ICsxMzYwLDggQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXG4gXFx0aWYgKCFiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIG1pbnNpemUgLSAxKTtcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcXG4rXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudCAtIDFdLCBtaW5zaXplIC0gMSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbkBAIC0xMzY4LDIxICsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiB7XFxuIFxcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3NpemVfdCByZXQ7XFxuIFxcbiBcXHRmb2xpbyA9IGZvbGlvX2FsbG9jX2dyZWVkeShHRlBfS0VSTkVMLCBcXHUwMDI2bGVuLCBtaW5zaXplKTtcXG4gXFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdHNzaXplX3QgcmV0O1xcbi1cXG4gXFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXFx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0XFx0aWYgKCFiaW8tXFx1MDAzZWJpX3ZjbnQpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZm9saW9fcHV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRsZW4gLT0gcmV0O1xcbkBAIC0xMzk4LDcgKzEzOTYsMjAgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdGJ2ZWNfc2V0X2ZvbGlvKFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1swXSwgZm9saW8sIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLCAwKTtcXG4gXFx0aWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpXFxuIFxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsIG1pbnNpemUgLSAxKTtcXG4rXFxuK1xcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1tiaW8tXFx1MDAzZWJpX3ZjbnRdLCBtaW5zaXplIC0gMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSB0aGUgYm91bmMgYnVmZmVyIGJ2X2xlbiB0byB0aGUgYWxpZ25lZCBkb3duIHNpemUuICovXFxuK1xcdGJpby1cXHUwMDNlYmlfaW9fdmVjWzBdLmJ2X2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mb2xpb19wdXQ6XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxOTo1ODozOS44MDk3OTIxMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM2MTQxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9hbGlnbl9kb3duXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVcIixcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWQyZDRmN2I2NjgwY2E3YTUxMjM5ODAxMDFkOTA4MDNjMDU1ZGNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTk6NTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uMjEyZmU3Njg0MDdkM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuKysrIGIvYmxvY2svYmlvLmNcbkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gICogZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgKi9cbiBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbitcdFx0XHRcdCAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0c2l6ZV90IG5ieXRlcyA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDI2IGxlbl9hbGlnbl9tYXNrO1xuIFxuQEAgLTEyMDAsOSArMTIwMCw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgbmJ5dGVzKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgLT0gbmJ5dGVzO1xuLVx0ZG8ge1xuLVx0XHRzdHJ1Y3QgYmlvX3ZlYyAqYnYgPSBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV07XG4tXG4rXHRmb3IgKDs7KSB7XG4gXHRcdGlmIChuYnl0ZXMgXHUwMDNjIGJ2LVx1MDAzZWJ2X2xlbikge1xuIFx0XHRcdGJ2LVx1MDAzZWJ2X2xlbiAtPSBuYnl0ZXM7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTIxMSw5ICsxMjA5LDEwIEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19QQUdFX1BJTk5FRCkpXG4gXHRcdFx0dW5waW5fdXNlcl9wYWdlKGJ2LVx1MDAzZWJ2X3BhZ2UpO1xuIFxuLVx0XHRiaW8tXHUwMDNlYmlfdmNudC0tO1xuIFx0XHRuYnl0ZXMgLT0gYnYtXHUwMDNlYnZfbGVuO1xuLVx0fSB3aGlsZSAobmJ5dGVzKTtcbitcdFx0YmlvLVx1MDAzZWJpX3ZjbnQtLTtcbitcdFx0YnYtLTtcbitcdH1cbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEyNzYsNyArMTI3NSw4IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlzX3BjaV9wMnBkbWFfcGFnZShiaW8tXHUwMDNlYmlfaW9fdmVjLVx1MDAzZWJ2X3BhZ2UpKVxuIFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbGVuX2FsaWduX21hc2spO1xuK1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlcixcbitcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqZm9saW9fYWxsb2NfZ3JlZWR5KGdmcF90IGdmcCwgc2l6ZV90ICpzaXplLFxuQEAgLTEzNjAsNyArMTM2MCw4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmICghYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLCBtaW5zaXplIC0gMSk7XG4rXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxuK1x0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX3ZjbnQgLSAxXSwgbWluc2l6ZSAtIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbkBAIC0xMzY4LDIxICsxMzY5LDE4IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIHtcbiBcdHNpemVfdCBsZW4gPSBtaW4zKGlvdl9pdGVyX2NvdW50KGl0ZXIpLCBtYXhsZW4sIFNaXzFNKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzc2l6ZV90IHJldDtcbiBcbiBcdGZvbGlvID0gZm9saW9fYWxsb2NfZ3JlZWR5KEdGUF9LRVJORUwsIFx1MDAyNmxlbiwgbWluc2l6ZSk7XG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvIHtcbi1cdFx0c3NpemVfdCByZXQ7XG4tXG4gXHRcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcbiBcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbi1cdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KSB7XG4tXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHR9XG4rXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbitcdFx0XHRcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRsZW4gLT0gcmV0O1xuQEAgLTEzOTgsNyArMTM5NiwyMCBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdGJ2ZWNfc2V0X2ZvbGlvKFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbMF0sIGZvbGlvLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLCAwKTtcbiBcdGlmIChpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluKGl0ZXIpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpO1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKGJpbywgaXRlciwgbWluc2l6ZSAtIDEpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHZlYyBzdG9yZXMgdGhlIGJvdW5jZSBidWZmZXIsIHNvIGRvIG5vdCBzdWJ0cmFjdCAxIGhlcmUuICovXG4rXHRyZXQgPSBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXG4rXHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2ZvbGlvX3B1dDtcbitcbitcdC8qIFVwZGF0ZSB0aGUgYm91bmMgYnVmZmVyIGJ2X2xlbiB0byB0aGUgYWxpZ25lZCBkb3duIHNpemUuICovXG4rXHRiaW8tXHUwMDNlYmlfaW9fdmVjWzBdLmJ2X2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZm9saW9fcHV0OlxuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6MzkuODA5Nzk0Mjk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5NDYxMDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iaW8uY2AuIEl0J3MgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRoZXJlLCBwYXNzaW5nIGluIGEgYHN0cnVjdCBiaW9fdmVjICpidmAgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0IGludGVybmFsbHksIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBjbGFyaXR5IGFuZCBlZmZpY2llbmN5LCBJJ2Qgc2F5LiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggd2hlcmUgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCB3YXMgZ2V0dGluZyBjYWxsZWQgd2l0aCB0aGUgd3JvbmcgYGJ2YCBwb2ludGVyLiBUaGV5J3JlIGFsc28gdXBkYXRpbmcgYGJ2X2xlbmAgaW4gdGhlIGJvdW5jZSBidWZmZXIuXG5cblRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgYW55dGhpbmcgZGVhbGluZyB3aXRoIGJpbyB2ZWN0b3JzIGFuZCBgaW92X2l0ZXJgIHdhcnJhbnRzIGEgZ29vZCBsb29rLiBJJ20gdGhpbmtpbmcgdGhpcyBzY3JlYW1zIFwiZnV6eiB0aGlzIVwiLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIEknZCBzYXkgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYCwgbmF0dXJhbGx5LCB0aGVuIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgLCBhbmQgZGVmaW5pdGVseSBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYC5cblxuVGhlc2UgYXJlIGFsbCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucywgc28gdGhleSdyZSBnb2luZyB0byBiZSByZWFjaGFibGUgZnJvbSBhIGJ1bmNoIG9mIHBsYWNlczogYmxvY2sgZGV2aWNlIHJlYWRzL3dyaXRlcywgZGlyZWN0IElPLCBhbmQgcHJvYmFibHkgYSBmZXcgb3RoZXIgYXJlYXMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmU/IGBCTE9DS2AgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBhIGdpdmVuLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgLiBOb3cgd2hlcmUgZG9lcyBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCBmaXQgaW4/IElzIGl0IGNhbGxlZCBmcm9tIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCB3aGVuIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyB1c2VkLCBvciBpcyBpdCBzaW1pbGFyPyBMZXQncyBjaGVjayBgYmxvY2svYmlvLmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NDYuODA0NDA5OTU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjkwOTgwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTEzMTA9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTM2Ni1cXG5ibG9jay9iaW8uYzoxMzY3OnN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmJsb2NrL2Jpby5jLTEzNjgtXFx0XFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXFxuLS1cXG5ibG9jay9iaW8uYz0xNDI4PWludCBiaW9faW92X2l0ZXJfYm91bmNlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4bGVuLFxcbi0tXFxuYmxvY2svYmlvLmMtMTQzMi1cXHRcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZShiaW8sIGl0ZXIsIG1heGxlbiwgbWluc2l6ZSk7XFxuYmxvY2svYmlvLmM6MTQzMzpcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcXG5ibG9jay9iaW8uYy0xNDM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NTAuNzczNTE3MDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzkyMDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCBJL08gYW5kIGtlcm5lbCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBiaW9faW92X2l0ZXJfYm91bmNlYCoqXG5cbkFscmlnaHQsIGBiaW9faW92X2l0ZXJfYm91bmNlYC4gVGhhdCByaW5ncyBhIGJlbGwsIEkgdGhpbmsgaXQncyB0aGUgcHVibGljIGZ1bmN0aW9uLCB0aGUgZW50cnkgcG9pbnQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSAqdXNlZCo/IFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbHMuIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgZGVwZW5kIG9uIGl0IGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9uIGlzLiBLbm93aW5nIHRoZSBjYWxsZXIncyBwdXJwb3NlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGJvdW5jaW5nIGJlaGF2aW9yIGlzIG5lZWRlZCBhbmQgd2hhdCBwcm9ibGVtcyBpdCdzIGRlc2lnbmVkIHRvIHNvbHZlLiBMZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTg6NTQuMDg3NDQwNDc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjQyMjEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0xMjk3PXN0YXRpYyB2b2lkIGJpb19mcmVlX2ZvbGlvcyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9iaW8uYy0xMzA5LVxcbmJsb2NrL2Jpby5jOjEzMTA6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmJsb2NrL2Jpby5jLTEzMTEtXFx0XFx0c2l6ZV90IG1heGxlbiwgc2l6ZV90IG1pbnNpemUpXFxuLS1cXG5ibG9jay9iaW8uYy0xMzY2LVxcbmJsb2NrL2Jpby5jOjEzNjc6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmlvLmMtMTM2OC1cXHRcXHRzaXplX3QgbWF4bGVuLCBzaXplX3QgbWluc2l6ZSlcXG4tLVxcbmJsb2NrL2Jpby5jLTE0MTUtLyoqXFxuYmxvY2svYmlvLmM6MTQxNjogKiBiaW9faW92X2l0ZXJfYm91bmNlIC0gYm91bmNlIGJ1ZmZlciBkYXRhIGZyb20gYW4gaXRlciBpbnRvIGEgYmlvXFxuYmxvY2svYmlvLmMtMTQxNy0gKiBAYmlvOlxcdGJpbyB0byBzZW5kXFxuLS1cXG5ibG9jay9iaW8uYy0xNDI3LSAqL1xcbmJsb2NrL2Jpby5jOjE0Mjg6aW50IGJpb19pb3ZfaXRlcl9ib3VuY2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBtYXhsZW4sXFxuYmxvY2svYmlvLmMtMTQyOS1cXHRcXHRcXHRzaXplX3QgbWluc2l6ZSlcXG4tLVxcbmJsb2NrL2Jpby5jLTE0MzEtXFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcXG5ibG9jay9iaW8uYzoxNDMyOlxcdFxcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKGJpbywgaXRlciwgbWF4bGVuLCBtaW5zaXplKTtcXG5ibG9jay9iaW8uYzoxNDMzOlxcdHJldHVybiBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoYmlvLCBpdGVyLCBtYXhsZW4sIG1pbnNpemUpO1xcbmJsb2NrL2Jpby5jLTE0MzQtfVxcbi0tXFxuYmxvY2svYmlvLmM9MTQ0Nz1zdGF0aWMgdm9pZCBiaW9faW92X2l0ZXJfdW5ib3VuY2VfcmVhZChzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaXNfZXJyb3IsXFxuLS1cXG5ibG9jay9iaW8uYy0xNDgyLSAqIHdlIG5lZWQgdG8gY2hlY2tzdW0gdGhlIGRhdGEgb3IgcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZVxcbmJsb2NrL2Jpby5jOjE0ODM6ICogY29uc2lzdGVuY3kuICBDYWxsZWQgdG8gY29tcGxldGUgYSBiaW8gc2V0IHVwIGJ5IGJpb19pb3ZfaXRlcl9ib3VuY2UoKS5cXG5ibG9jay9iaW8uYy0xNDg0LSAqIENvcGllcyBkYXRhIGJhY2sgZm9yIHJlYWRzLCBhbmQgbWFya3MgdGhlIG9yaWdpbmFsIGZvbGlvcyBkaXJ0eSBpZlxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MzM0PXN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTYtXFx0aWYgKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fQk9VTkNFKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjM1NzpcXHRcXHRyZXQgPSBiaW9faW92X2l0ZXJfYm91bmNlKGJpbywgZGlvLVxcdTAwM2VzdWJtaXQuaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zNTgtXFx0XFx0XFx0XFx0aW9tYXBfbWF4X2Jpb19zaXplKFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTQ4NT1leHRlcm4gdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4Ni1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjQ4NzppbnQgYmlvX2lvdl9pdGVyX2JvdW5jZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heGxlbixcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQ4OC1cXHRcXHRzaXplX3QgbWluc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjU4OjU3Ljg1MTY2NjY0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjAzMDU4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlyZWN0IElPIHdpdGggQm91bmNlIEJ1ZmZlcmluZzogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkIGFib3V0IHRoaXMgRGlyZWN0IElPIGJvdW5jZSBidWZmZXJpbmcgc2l0dWF0aW9uLiAgV2UncmUgZGVhbGluZyB3aXRoIGEgY2FsbCBmcm9tIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCB3aGVyZSBgSU9NQVBfRElPX0JPVU5DRWAgaXMgZW5hYmxlZC4gVGhhdCBzaWduYWxzIGRpcmVjdCBJTywgYnV0IHdlJ3JlIGVtcGxveWluZyBib3VuY2UgYnVmZmVyaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgb24gYWRkcmVzc2luZyBhIGZldyBidWdzIGluIHRoZSBgYmlvX2lvdl9pdGVyYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0YXJnZXRzIGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGFyZSBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBuYXR1cmFsbHk7IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgOyAgYGJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVgOyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2A7IGFuZCBgYmlvX2lvdl9pdGVyX2JvdW5jZWAuIFdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UsIGFuZCBmaWd1cmluZyBvdXQgaG93IGRhdGEgZ2V0cyBhbGlnbmVkIGFuZCB0cmFuc2ZlcnJlZCB3aXRoIHRoZSBib3VuY2UgYnVmZmVyLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgYEJMT0NLYCBpcyB0aGUgc3RhbmRhcmQsIGFuZCB3ZSBzaG91bGQgYmUgZmluZSB0aGVyZS4gYEZTX0lPTUFQYCBjb3VsZCBiZSByZWxldmFudCwgYnV0IHRoYXQncyB1c3VhbGx5IGhhbmRsZWQgYnkgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMsIGxpa2UgWEZTLCBleHQ0LCBvciBidHJmcy4gU28sIG5vIG5lZWQgdG8gYWRkIGFueSBzcGVjaWFsIGNvbmZpZ3MgaGVyZSBhcyBib3RoIHRoZSBibG9jayBsYXllciBhbmQgRGlyZWN0IElPIGFyZSBwcmV0dHkgc3RhbmRhcmQgdGhlc2UgZGF5cy5cblxuSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gc3RhcnQgd2l0aCBhIGNsb3NlIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gIEtub3dpbmcgaG93IGl0J3MgYmVpbmcgdXNlZCBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTk6MDMuNTcxOTc0Njc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjI2MDI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9iaW8uYy0xMTkyLSAqL1xcbmJsb2NrL2Jpby5jOjExOTM6c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5ibG9jay9iaW8uYy0xMTk0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBiaW9fdmVjICpidiwgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYz0xMjQzPWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI3Ny1cXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRTtcXG5ibG9jay9iaW8uYzoxMjc4OlxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuYmxvY2svYmlvLmMtMTI3OS1cXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV92Y250IC0gMV0sIGxlbl9hbGlnbl9tYXNrKTtcXG4tLVxcbmJsb2NrL2Jpby5jPTEzMTA9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTM2Mi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5ibG9jay9iaW8uYzoxMzYzOlxcdHJldHVybiBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihiaW8sIGl0ZXIsXFxuYmxvY2svYmlvLmMtMTM2NC1cXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV92Y250IC0gMV0sIG1pbnNpemUgLSAxKTtcXG4tLVxcbmJsb2NrL2Jpby5jPTEzNjc9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5ibG9jay9iaW8uYy0xNDAwLVxcdC8qIFRoZSBmaXJzdCB2ZWMgc3RvcmVzIHRoZSBib3VuY2UgYnVmZmVyLCBzbyBkbyBub3Qgc3VidHJhY3QgMSBoZXJlLiAqL1xcbmJsb2NrL2Jpby5jOjE0MDE6XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oYmlvLCBpdGVyLFxcbmJsb2NrL2Jpby5jLTE0MDItXFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfdmNudF0sIG1pbnNpemUgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTk6NTk6MDcuNjM0NTgyMjE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxMTI2Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBMYXllciBCb3VuY2UgQnVmZmVyIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIGFuIGluY29ycmVjdCBwb2ludGVyIGJlaW5nIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGUgcGF0Y2ggaXMgY29ycmVjdGluZyB0aGUgYGJ2YCBwb2ludGVyIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLCBjaGFuZ2luZyBpdCBmcm9tIGBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250IC0gMV1gIHRvIGBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV92Y250XWAuIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcmVsYXRlcyB0byB0aGUgYm91bmNlIGJ1ZmZlciBoYW5kbGluZy4gVGhlIGluaXRpYWwgdmVjdG9yLCBgYmlvLVx1MDAzZWJpX2lvX3ZlY1swXWAgaXMgdGhlIGJ1ZmZlciwgc28gdGhlIGluZGV4IGNoYW5nZSBtYWtlcyBzZW5zZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBhZmZlY3RzIHRoZSBjb3JlIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlciBtYW5hZ2VtZW50LiBUaGF0J3MgZ29vZCB0byBrbm93LCBiZWNhdXNlIHRoYXQgdHlwZSBvZiBsb2dpYyBpcyBhbHdheXMgd29ydGggc2NydXRpbml6aW5nLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gdGhlIGJsb2NrIGxheWVyLCBJJ20gdGhpbmtpbmcgZGlyZWN0IEkvTyByZWFkcy93cml0ZXMgZnJvbSB1c2Vyc3BhY2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGlzIHBhdGguXG5cbkxldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIG9uIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0JMT0NLYCBpcyBhIGdpdmVuOyBpdCdzIGZ1bmRhbWVudGFsLiBBbmQgYENPTkZJR19GU19JT01BUGAgYWxzbyBsaWtlbHkgcHJlc2VudCwgYXMgdGhhdCdzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IG1vZGVybiBmaWxlIHN5c3RlbSwgYW5kIHRoaXMgbG9va3MgcmVsYXRlZCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBJL08uIEknbSBub3Qgc2VlaW5nIGFueSAqc3BlY2lmaWMqIGNvbmZpZyBkZXBlbmRlbmNpZXMganVtcGluZyBvdXQgYXQgbWUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpcyBlYXNpZXIgdG8gYW5hbHl6ZS5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyBkZWZpbml0ZWx5IGBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBJJ2xsIHdhbnQgdG8gZm9jdXMgYW55IGZ1enppbmcgZWZmb3J0cyBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBidXQgSSBhbHNvIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZWAsIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYW5kIGBiaW9faW92X2l0ZXJfYm91bmNlYCBiZWNhdXNlIG9mIGhvdyB0aWdodGx5IHJlbGF0ZWQgdGhleSBhbGwgYXJlIGluIGJvdW5jZSBidWZmZXJpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjAsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE5OjU5OjE0Ljg0NTg1Mjc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25cIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZFwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZV93cml0ZVwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiYmlvX2lvdl9pdGVyX2JvdW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJTyBib3VuY2UgYnVmZmVyaW5nIGxvZ2ljIChgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkYCksIHdoZXJlIHRoZSB3cm9uZyBiaW9fdmVjIHBvaW50ZXIgd2FzIHBhc3NlZCB0byBgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd25gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBsYXllciBsb2dpYyB0aGF0IGhhbmRsZXMgZGlyZWN0IElPIGFuZCBib3VuY2UgYnVmZmVycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSU8gcmVhZHMvd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9hbGlnbl9kb3duXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfYm91bmNlX3JlYWRcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2Vfd3JpdGVcIixcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImJpb19pb3ZfaXRlcl9ib3VuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYmxvY2sgbGF5ZXIncyBkaXJlY3QgSU8gYm91bmNlIGJ1ZmZlcmluZyBsb2dpYyAoYGJpb19pb3ZfaXRlcl9ib3VuY2VfcmVhZGApLCB3aGVyZSB0aGUgd3JvbmcgYmlvX3ZlYyBwb2ludGVyIHdhcyBwYXNzZWQgdG8gYGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgbGF5ZXIgbG9naWMgdGhhdCBoYW5kbGVzIGRpcmVjdCBJTyBhbmQgYm91bmNlIGJ1ZmZlcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IElPIHJlYWRzL3dyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7zrgv[1] Phase: Succeeded StartedAt: 2026-07-13 20:00:46 +0000 UTC FinishedAt: 2026-07-13 20:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 20:00:46 +0000 UTC FinishedAt: 2026-07-13 20:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2] Phase: Succeeded StartedAt: 2026-07-13 20:00:46 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 20:00:47 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 20:00:47 +0000 UTC FinishedAt: 2026-07-13 20:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 20:00:47 +0000 UTC FinishedAt: 2026-07-13 20:01:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7zrgv/series-workflow7zrgv-convert-artifact-1799365210/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 20:02:05 +0000 UTC FinishedAt: 2026-07-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 20:02:05 +0000 UTC FinishedAt: 2026-07-13 20:35:02 +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:*81d1340e-9342-4505-a06a-98c3b2dff453,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-workflow7zrgv/series-workflow7zrgv-convert-artifact-1799365210/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": "88b5783e-72e1-4f68-8200-b032c2cb9be2", "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-workflow7zrgv/series-workflow7zrgv-build-action-141448968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 20:02:05 +0000 UTC FinishedAt: 2026-07-13 20:34:52 +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:*81d1340e-9342-4505-a06a-98c3b2dff453,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-workflow7zrgv/series-workflow7zrgv-convert-artifact-1799365210/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": "88b5783e-72e1-4f68-8200-b032c2cb9be2", "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-workflow7zrgv/series-workflow7zrgv-build-action-141448968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 20:35:02 +0000 UTC FinishedAt: 2026-07-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 20:35:02 +0000 UTC FinishedAt: 2026-07-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 20:35:02 +0000 UTC FinishedAt: 2026-07-13 20:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 20:35:02 +0000 UTC FinishedAt: 2026-07-13 20:35:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7zrgv/series-workflow7zrgv-convert-artifact-4084534965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 20:35:12 +0000 UTC FinishedAt: 2026-07-13 20:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 20:35:12 +0000 UTC FinishedAt: 2026-07-13 20:37:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88b5783e-72e1-4f68-8200-b032c2cb9be2,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-workflow7zrgv/series-workflow7zrgv-build-action-141448968/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-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 20:37:13 +0000 UTC FinishedAt: 2026-07-13 20:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 20:37:13 +0000 UTC FinishedAt: 2026-07-13 20:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 20:37:13 +0000 UTC FinishedAt: 2026-07-13 21:11:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 20:37:13 +0000 UTC FinishedAt: 2026-07-13 21:11:08 +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:*81d1340e-9342-4505-a06a-98c3b2dff453,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-workflow7zrgv/series-workflow7zrgv-convert-artifact-4084534965/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": "826b3d15-d916-4201-92f4-a3110bf41809", "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-workflow7zrgv/series-workflow7zrgv-build-action-2281783233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 20:37:13 +0000 UTC FinishedAt: 2026-07-13 21:10: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:*81d1340e-9342-4505-a06a-98c3b2dff453,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-workflow7zrgv/series-workflow7zrgv-convert-artifact-4084534965/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": "826b3d15-d916-4201-92f4-a3110bf41809", "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-workflow7zrgv/series-workflow7zrgv-build-action-2281783233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 21:11:08 +0000 UTC FinishedAt: 2026-07-13 21:11:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 21:11:08 +0000 UTC FinishedAt: 2026-07-13 21:11:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 21:11:08 +0000 UTC FinishedAt: 2026-07-13 21:13:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 21:11:08 +0000 UTC FinishedAt: 2026-07-13 21:12:50 +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:*826b3d15-d916-4201-92f4-a3110bf41809,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-workflow7zrgv/series-workflow7zrgv-build-action-2281783233/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-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 21:13:02 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 21:13:02 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"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:*88b5783e-72e1-4f68-8200-b032c2cb9be2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*826b3d15-d916-4201-92f4-a3110bf41809,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-workflow7zrgv/series-workflow7zrgv-build-action-141448968/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-workflow7zrgv/series-workflow7zrgv-build-action-2281783233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 21:13:02 +0000 UTC FinishedAt: 2026-07-13 21:13:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 21:13:02 +0000 UTC FinishedAt: 2026-07-13 21:13:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 21:13:03 +0000 UTC FinishedAt: 2026-07-13 21:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 21:13:03 +0000 UTC FinishedAt: 2026-07-13 21:13:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"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-workflow7zrgv/series-workflow7zrgv-convert-artifact-2997075098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 21:13:03 +0000 UTC FinishedAt: 2026-07-13 21:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 21:13:26 +0000 UTC FinishedAt: 2026-07-14 00:15:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zrgv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_align_down","bio_iov_iter_bounce_read","bio_iov_iter_bounce_write","bio_iov_iter_get_pages","bio_iov_iter_bounce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","series_id":"c5526ca4-0280-46b9-acac-a3952d0df609","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 21:13:26 +0000 UTC FinishedAt: 2026-07-14 00:15:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*88b5783e-72e1-4f68-8200-b032c2cb9be2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*826b3d15-d916-4201-92f4-a3110bf41809,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-workflow7zrgv/series-workflow7zrgv-build-action-141448968/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-workflow7zrgv/series-workflow7zrgv-build-action-2281783233/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-workflow7zrgv/series-workflow7zrgv-convert-artifact-2997075098/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,}