Name: series-workflowlxbg5 Phase: Succeeded StartedAt: 2026-07-19 13:02:57 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[0] Phase: Succeeded StartedAt: 2026-07-19 13:02:57 +0000 UTC FinishedAt: 2026-07-19 13:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[0].run-triage Phase: Succeeded StartedAt: 2026-07-19 13:02:57 +0000 UTC FinishedAt: 2026-07-19 13:47:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "9fcdde1a-d439-40d7-b1f5-c99152c503c0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_alloc_stor_var", "uv_free_stor_var", "do_secure_storage_access", "ex_handler_zeropad" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmNmRmOGI3MmQ4Y2M2ZjQ4OWI3MjI4ZTA5YjY0ZDFlMWY1NTE5NjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxMzo0NjoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2Myw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxuIFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXG4gXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxuJiM0MztcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRFx0XHQ3XG4gI2RlZmluZSBFWF9UWVBFX0ZQQ1x0XHQ4XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPXHQ5XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX0ZST01cdDEwXG5AQCAtNzksNiAmIzQzOzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4mIzQzOyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbiYjNDM7XHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9aRVJPUEFELCBfcmVnZGF0YSwgX3JlZ2FkZHIsIDApXG4mIzQzO1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLWV4dGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9iaXRzcGVybG9uZy5oXHUwMDNlXG4gXG4gc3RydWN0IHdvcmRfYXRfYV90aW1lIHtcbkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMb2FkIGFuIHVuYWxpZ25lZCB3b3JkIGZyb20ga2VybmVsIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbiYjNDM7ICogYW5kIHRoZSBuZXh0IHBhZ2Ugbm90IGJlaW5nIG1hcHBlZCwgdGFrZSB0aGUgZXhjZXB0aW9uIGFuZFxuJiM0MzsgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHZvaWQgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRhdGE7XG4mIzQzO1xuJiM0MztcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4mIzQzO1x0XHRcJiMzNDswOlx0bGdcdCVbZGF0YV0sMCglW2FkZHJdKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7MTpcdG5vcHJcdCUlcjdcXG5cJiMzNDtcbiYjNDM7XHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuJiM0MztcdFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4mIzQzO1x0XHQ6IFtkYXRhXSBcJiMzNDs9ZFwmIzM0OyAoZGF0YSlcbiYjNDM7XHRcdDogW2FkZHJdIFwmIzM0O2FcJiMzNDsgKGFkZHIpLCBcJiMzNDttXCYjMzQ7ICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4mIzQzO1x0cmV0dXJuIGRhdGE7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4mIzQzO1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbiYjNDM7XHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Rvcl92YXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuJiM0MztcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4mIzQzO1x0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9mcmVlX3JhbmdlX2NiLCBOVUxMKTtcbiYjNDM7XHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh1dl9mcmVlX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0cHRlX3QgcHRlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiYjNDM7XHRpZiAoYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuJiM0MztvdXQ6XG4mIzQzO1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyAmIzQzOzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuIFx0ZnJlZV9wYWdlcyhrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4gXHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKGt2bSk7XG5AQCAtMzY5LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICYjNDM7PSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDE0LDcgJiM0Mzs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiAmIzQzOzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVnX2FkZHIgPSBGSUVMRF9HRVQoRVhfREFUQV9SRUdfQUREUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuJiM0MztcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRhZGRyIFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbiYjNDM7XHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbiYjNDM7XHRyZWdzLVx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcbiYjNDM7XHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4mIzQzO1x0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG4mIzQzO1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjc3NjU0OWQ1NWM5NGEyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgJiM0Mzs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDM4LDEzICYjNDM7NDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHBhbmljKFwmIzM0O1VuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCYjMzQ7KTtcbiBcdH1cbiBcdGlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHtcbi1cdFx0Zm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7XG4tXHRcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKGZvbGlvX3RvX3BoeXMoZm9saW8pKTtcbi1cdFx0aWYgKCFyYylcbi1cdFx0XHRjbGVhcl9iaXQoUEdfYXJjaF8xLCBcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4mIzQzO1x0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWxcbiBcdFx0ICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZVxuQEAgLTQ1MywxMyAmIzQzOzQ0OSwxMSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpKVxuJiM0MztcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbiYjNDM7XHRcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyLCByZWdzKTtcbiBcdFx0aWYgKCF2bWEpXG4tXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX01BUEVSUik7XG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbiBcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzMzkwIEtWTSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTXMgYW5kIGFkZHMgc3VwcG9ydCBmb3IgRENBQ0hFX1dPUkRfQUNDRVNTIHdpdGggYSBuZXcgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIHVuYWxpZ25lZCB6ZXJvLXBhZGRlZCBsb2Fkcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZjZkZjhiNzJkOGNjNmY0ODliNzIyOGUwOWI2NGQxZTFmNTUxOTYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTM6NDY6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUAogCXNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVAogCXNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyCiYjNDM7CXNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOCiAJc2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDCiAJc2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaAppbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUCTMKICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFRwk1CiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSCTYKJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRAkJNwogI2RlZmluZSBFWF9UWVBFX0ZQQwkJOAogI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPCTkKICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NCTEwCkBAIC03OSw2ICYjNDM7ODAsOSBAQAogI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybykJXAogCV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApCiAKJiM0MzsjZGVmaW5lIEVYX1RBQkxFX1pFUk9QQUQoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZGF0YSwgX3JlZ2FkZHIpCQlcCiYjNDM7CV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMCkKJiM0MzsKICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldCkJCQkJCVwKIAlfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaAppbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCkBAIC02MzUsNiAmIzQzOzYzNSw4IEBAIGludCBzMzkwX3dpZ2dsZV9zcGxpdF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTsKIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpOwogaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpOwogCiB2b2lkIHNldHVwX3V2KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oCmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FzbS1leHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2JpdHNwZXJsb25nLmgmZ3Q7CiAKIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7CkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKQogCXJldHVybiB+MVVMICZsdDsmbHQ7IGRhdGE7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXIKJiM0MzsgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kCiYjNDM7ICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGF0YTsKJiM0MzsKJiM0MzsJYXNtX2lubGluZSB2b2xhdGlsZSgKJiM0MzsJCSYjMzQ7MDoJbGcJJVtkYXRhXSwwKCVbYWRkcl0pXG4mIzM0OwomIzQzOwkJJiMzNDsxOglub3ByCSUlcjdcbiYjMzQ7CiYjNDM7CQlFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSkKJiM0MzsJCUVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKQomIzQzOwkJOiBbZGF0YV0gJiMzNDs9ZCYjMzQ7IChkYXRhKQomIzQzOwkJOiBbYWRkcl0gJiMzNDthJiMzNDsgKGFkZHIpLCAmIzM0O20mIzM0OyAoKih1bnNpZ25lZCBsb25nICopYWRkcikpOwomIzQzOwlyZXR1cm4gZGF0YTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZmFjaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXYuaCZndDsKQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpCiAJcmV0dXJuIHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8ocGZuX2ZvbGlvKHB0ZV9wZm4ocHRlKSkpOwogfQogCiYjNDM7c3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoCiYjNDM7CSAqIGFjY2Vzc2VzIHRoZSBtZW1vcnkgcmFuZ2UsIGJlc2lkZXMgYnVncy4gVGhlIGludmFsaWRhdGlvbiBvZiBwdGVzCiYjNDM7CSAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLgomIzQzOwkgKi8KJiM0MzsJX19mcmVlX3BhZ2UocHRlX3BhZ2UocHRlKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CiYjNDM7CWlmICghc3Rvcl92YXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgVk1fU1BBUlNFKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpOwomIzQzOwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKJiM0MzsJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpOwomIzQzOwlmcmVlX3ZtX2FyZWEoYXJlYSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgJiMzNDtrdm0mIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcjsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9TUEFSU0UpOwomIzQzOwlpZiAoIWFyZWEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiYjNDM7CWlmIChhcHBseV90b19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldHVybiBhcmVhLSZndDthZGRyOwomIzQzO291dDoKJiM0MzsJdXZfZnJlZV9zdG9yX3ZhcihhcmVhLSZndDthZGRyKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsICYjMzQ7a3ZtJiMzNDspOwomIzQzOwogLyoKICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm8KICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuYwpAQCAtMzM3LDcgJiM0MzszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovCiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQl2ZnJlZShrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpOwomIzQzOwl1dl9mcmVlX3N0b3JfdmFyKGt2bS0mZ3Q7YXJjaC5wdi5zdG9yX3Zhcik7CiAJZnJlZV9wYWdlcyhrdm0tJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAogCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJa3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTsKQEAgLTM2OSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pCiAJLyogQWxsb2NhdGUgdmFyaWFibGUgc3RvcmFnZSAqLwogCXZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7CiAJdmxlbiAmIzQzOz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47Ci0Ja3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTsKJiM0MzsJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7CiAJaWYgKCFrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gMDsKQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sCiAJICovCiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7c3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7b2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpOwotCXZmcmVlKGxlZnRvdmVyLSZndDtzdG9yX3Zhcik7CiYjNDM7CXV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItJmd0O3N0b3JfdmFyKTsKIGRvbmVfZmFzdDoKIAlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDttbS0mZ3Q7Y29udGV4dC5wcm90ZWN0ZWRfY291bnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKQEAgLTUwLDYgJiM0Mzs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC0mZ3Q7ZGF0YSk7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LSZndDtkYXRhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWFkZHIgPSByZWdzLSZndDtncHJzW3JlZ19hZGRyXTsKJiM0MzsJb2Zmc2V0ID0gYWRkciAmYW1wOyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWFkZHIgJmFtcDs9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWRhdGEgPSAqKHVuc2lnbmVkIGxvbmcgKilhZGRyOwomIzQzOwlkYXRhICZsdDsmbHQ7PSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0OwomIzQzOwlyZWdzLSZndDtncHJzW3JlZ19kYXRhXSA9IGRhdGE7CiYjNDM7CXJlZ3MtJmd0O3Bzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlmcHVfc2ZwYygwKTsKQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUjoKIAkJcmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIHRydWUsIHJlZ3MpOwomIzQzOwljYXNlIEVYX1RZUEVfWkVST1BBRDoKJiM0MzsJCXJldHVybiBleF9oYW5kbGVyX3plcm9wYWQoZXgsIHJlZ3MpOwogCWNhc2UgRVhfVFlQRV9GUEM6CiAJCXJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCAwMjhhZWI5YzQ4ZDZmZi4uNzc2NTQ5ZDU1Yzk0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC00MDksOSAmIzQzOzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtJmd0O2ludF9wYXJtX2xvbmcgfTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApAQCAtNDM4LDEzICYjNDM7NDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXBhbmljKCYjMzQ7VW5leHBlY3RlZCBQR00gMHgzZCB3aXRoIFRFSUQgYml0IDYxPTAmIzM0Oyk7CiAJfQogCWlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHsKLQkJZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7Ci0JCWlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKQotCQkJcmV0dXJuOwotCQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpOwotCQlpZiAoIXJjKQotCQkJY2xlYXJfYml0KFBHX2FyY2hfMSwgJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpCiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7CiYjNDM7CQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7CiAJCS8qCiAJCSAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWwKIAkJICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZQpAQCAtNDUzLDEzICYjNDM7NDQ5LDExIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAocmMpCiAJCQlyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAl9IGVsc2UgewotCQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpCiYjNDM7CQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkgfHwgIW1tKQogCQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7Ci0JCW1tID0gY3VycmVudC0mZ3Q7bW07Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwomIzQzOwkJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpOwogCQlpZiAoIXZtYSkKLQkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpOwomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTsKIAkJZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KCZhbXA7ZncsIHZtYSwgYWRkciwgMCk7CiAJCWlmICghZm9saW8pIHsKIAkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgczM5MCBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIGBhcmNoL3MzOTBgIGNvZGUuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBmdXp6aW5nIHRhcmdldCBvdXQgb2YgdGhpcy4KCkZpcnN0LCBJIHNlZSBzb21lIEtjb25maWcgbW9kaWZpY2F0aW9ucyBpbiBgYXJjaC9zMzkwL0tjb25maWdgLCBzZWxlY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaWYgYEtNU0FOYCBpc24mIzM5O3QgZW5hYmxlZC4gSW50ZXJlc3RpbmcsIGJ1dCBsaWtlbHkgbm90IGRpcmVjdGx5IGZ1enphYmxlLiBUaGVuIHRoZXJlJiMzOTtzIGFuIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcyAoYEVYX1RZUEVfWkVST1BBRGAsIGBFWF9UQUJMRV9aRVJPUEFEYCkgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oYC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBjZXJ0YWluIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enogaWYgdGhlIGNvZGUgaW52b2x2ZWQgY2FuIGJlIHRyaWdnZXJlZCByZWxpYWJseS4KClRoZSBpbmNsdXNpb24gb2YgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCBhbG9uZ3NpZGUgdGhlIGFkZGl0aW9uIG9mIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgIGxvb2tzIGEgYml0IG1vcmUgcHJvbWlzaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHNvbWUga2luZCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBzdHJhdGVneS4KCkNydWNpYWxseSwgdGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9wdi5jYCwgcmVwbGFjaW5nIGB2emFsbG9jYC9gdmZyZWVgIHdpdGggYHV2X2FsbG9jX3N0b3JfdmFyYC9gdXZfZnJlZV9zdG9yX3ZhcmAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgS1ZNIHRvdWNocG9pbnQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgS1ZNJiMzOTtzIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiBmZWF0dXJlLgoKVGhlIGNoYW5nZXMgdG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCYjMzk7cyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHZtYWxsb2MgYWRkcmVzc2VzIGFuZCB1c2luZyBgbG9ja19tbV9hbmRfZmluZF92bWFgLCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIGZlYXR1cmUuIEFuZCB0aGUgYGFyY2gvczM5MC9tbS9leHRhYmxlLmNgIGNoYW5nZXMgdGllIGludG8gdGhlIG5ldyBleGNlcHRpb24gdGFibGUgdHlwZXMuCgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzISBzMzkwIEtWTSAqaXMqIGZ1enphYmxlIGlmIHdlJiMzOTtyZSBmdXp6aW5nIHMzOTAuIEFuZCwgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBhIGJpZyB3aW4uIFRoZW4gSSByZW1lbWJlciB0aGF0IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIHJlbGF0ZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaXMgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuIEFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIEtWTSBQVi4KClNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emFiaWxpdHkuIFllcywgS1ZNIG9uIHMzOTB4IGlzIGRlZmluaXRlbHkgZnV6emFibGUuCgpOb3csIGxldCYjMzk7cyB0cmFjayBkb3duIHRoZSBjb25maWdzIHRvIGRvdWJsZS1jaGVjayBvdXIgd29yay4gYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19LVk1gLCB3aGljaCBpcyBlYXN5LiBXZSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZW5hYmxlcyBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCB0byBjb25maXJtIGl0IGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QUk9URUNURURfVklSVFVBTElaQVRJT05fR1VFU1RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT00NT1vYmoteVx0JiM0Mzs9IG5vc3BlYy1icmFuY2gubyBpcGxfdm1wYXJtLm8gbWFjaGluZV9rZXhlY19yZWxvYy5vIHVud2luZF9iYy5vXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlOjQ2Om9iai15XHQmIzQzOz0gc21wLm8gdGV4dF9hbW9kZTMxLm8gc3RhY2t0cmFjZS5vIGFic19sb3djb3JlLm8gZmFjaWxpdHkubyB1di5vIHd0aS5vXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlLTQ3LW9iai15XHQmIzQzOz0gZGlhZy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFzc2Vzc2luZyBCdWlsZCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGB1di5vYC4uLiB0aGF0JiMzOTtzIGFsd2F5cyBidWlsdCBvbiBzMzkwLCBubyBxdWVzdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCB0aGVyZSwgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIHRoYXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoYXQgYWJvdXQgYHB2LmNgPyBJcyBpdCBhbHNvIHJpZ2lkbHkgdGllZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBmbGV4aWJpbGl0eSB0aGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHRhcmdldCBlbnZpcm9ubWVudC4gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHMzOTAgaW50cmluc2ljcywgYXNzZW1ibHkgbGFuZ3VhZ2UsIG9yIHBsYXRmb3JtLWRlcGVuZGVudCBsaWJyYXJpZXM/IE9yIGlzIGl0IHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9yIGJyb2FkZXIgcG9ydGFiaWxpdHkgd2l0aCBtaW5pbWFsIGVmZm9ydD8gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIGJ1aWxkIHByb2Nlc3MgZGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIuLi4gdGltZSB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQgb24gdGhhdCBzcGVjaWZpYyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBTZWN1cmUgU3RvcmFnZSBBY2Nlc3MqKgoKUmlnaHQsIGBwdi5vYCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS1ZNYCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IGNvbmRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYWNjZXNzZXMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IHRoZSBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc2VjdXJlIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoYXQgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggS1ZNIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jPTQwND1OT0tQUk9CRV9TWU1CT0woZG9fZGF0X2V4Y2VwdGlvbik7XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA4OnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA5LXtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzEtfVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDcyOk5PS1BST0JFX1NZTUJPTChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgZm9yIENhbGxlcnMgb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbCBmb3IgYW5hbHl6aW5nIGl0cyBpbXBhY3QsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgYW5kIGtub3dsZWRnZSB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcyB3aGVyZSBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBpcyBjYWxsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY2FsbHM/IEFueSBjb25kaXRpb25hbCB1c2FnZXM/IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhvc2UgdG9vLCB3aGVuIEkgc3RhcnQgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oPTI5PXZvaWQgZG9fZGF0X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL3MzOTAva2VybmVsL2VudHJ5Lmg6MzA6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oLTMxLXZvaWQgZG9fbm9uX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jPTQwMT1zdGF0aWMgdm9pZCAoKnBnbV9jaGVja190YWJsZVsxMjhdKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgPSB7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzNy1cdFsweDNjXVx0XHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQzODpcdFsweDNkXVx0XHQ9IGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzktXHRbMHgzZV1cdFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcbi0tXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMtNDQ5LVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQ1MDpDT05EX1RSQVAoZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwNy1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwOS17XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ3MjpOT0tQUk9CRV9TWU1CT0woZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWN1cmUgU3RvcmFnZSBWaW9sYXRpb24gVHJhcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwcm9ncmFtIGNoZWNrIDB4M2QsIGEgU2VjdXJlIFN0b3JhZ2UgVmlvbGF0aW9uLiBNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlLCBub3QganVzdCBzb21lIHRlc3QgaGFybmVzcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlLiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMuCgpGaXJzdCwgSSBzaG91bGQgY2hlY2sgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAuIFRoYXQmIzM5O3MgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJlc3QuIExvb2tpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUsIEkgc2VlIGl0JiMzOTtzIHVzZWQgYnkgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gUmlnaHQuIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGVuYWJsZXMgb3B0aW1pemVkIGRjYWNoZSBsb29rdXBzLiBUaGlzIGlzIGltcG9ydGFudCEgVGhpcyB3aWxsIGRpcmVjdGx5IGFmZmVjdCBkY2FjaGUgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGBmcy9kY2FjaGUuY2AuIFRoaXMgaXMgcG90ZW50aWFsbHkgaGlnaGx5IHJlYWNoYWJsZS4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWwgdG8gZmlsZSBzeXN0ZW0gYWNjZXNzLCBzbyB0aGlzIGlzIGhpZ2ggdmFsdWUuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHNlY3VyZSBzdG9yYWdlIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYzNz1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYzODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjM5LXZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTI0NT1zdGF0aWMgaW50IHV2X2FsbG9jX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1Ny1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNTg6dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1OS17XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3NC19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6Mjc1OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc2LVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0zNDY9c3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTM3MS1cdHZsZW4gJiM0Mzs9IHV2X2luZm8uZ3Vlc3RfdmlydF9iYXNlX3N0b3JfbGVuO1xuYXJjaC9zMzkwL2t2bS9wdi5jOjM3MjpcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7XG5hcmNoL3MzOTAva3ZtL3B2LmMtMzczLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbCBpbiBQViBWTSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgd2hpY2ggaXMsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIFBWIFZNLiBNeSBpbnN0aW5jdCwgYmVpbmcgd2hvIEkgYW0sIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWxseSByaWNoIGFyZWEgZm9yIGZ1enppbmcuIFRoZXJlJiMzOTtzIGFsbW9zdCBhbHdheXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIHVuY292ZXIgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwaGFzZXMgb2YgYSB2aXJ0dWFsIG1hY2hpbmUuCgpNeSBmb2N1cyByaWdodCBub3cgaXMgbmFycm93aW5nLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFzIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIGFyZSBvZnRlbiBrZXkuIEFsc28sIEkgbmVlZCB0byBjaGVjayBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYC4gRmluYWxseSwgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcsIHNvIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgYW5kIGxvb2sgYXQgYGV4X2hhbmRsZXJfemVyb3BhZGAgd2l0aGluIGBhcmNoL3MzOTAvbW0vZXh0YWJsZS5jYC4gVGhpcyBjb3VsZCBiZSByZWFsbHkgZ29vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZXhjZXB0aW9uIGhhbmRsZXIgaXMgZG9pbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZXh0YWJsZS5jPTM5PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9zMzkwL21tL2V4dGFibGUuYy01Mi1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM6NTM6c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM9MTE5PWJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtMTM3LVx0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cdGNhc2UgRVhfVFlQRV9GUEM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqCgpSaWdodCwgYGV4X2hhbmRsZXJfemVyb3BhZGAg4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8ga2V5IGluIG9uLCBwYXJ0aWN1bGFybHkgd2hlbiBsb29raW5nIGF0IGV4Y2VwdGlvbiBoYW5kbGluZyByb3V0aW5lcy4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHNvbWUgbG93LWxldmVsIGtlcm5lbCBiZWhhdmlvci4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdmlydHVhbGl6YXRpb24uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgZXNwZWNpYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aC4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgb24gbXkgcmFkYXI7IGl0JiMzOTtzIGVzc2VudGlhbCwgb2YgY291cnNlLCBmb3IgS1ZNIHN1cHBvcnQsIHNwZWNpZmljYWxseSBmb3IgYWxsb2NhdGluZyB2aXJ0dWFsIG1hY2hpbmVzLCBhbmQgSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gYm90aCBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gIGFuZCBgcHYuY2Agd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCBoYXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGxheWVyLiBCdXQgd2hhdCBhYm91dCB0aGUgVW5pa2VybmVsIHN1cHBvcnQgZmlsZSwgYHV2LmNgPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZHVja3MgaW4gYSByb3cgZm9yIHRoYXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IHJlbGF0ZSB0byBgdXYuY2AuIElzIHRoZXJlIGEgdW5pcXVlIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIHRoYXQgaXQgZGVwZW5kcyBvbj8gSWYgbm90LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IGZlYXR1cmVzIGl0IGJvcnJvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST1RFQ1RFRF9WSVJUVUFMSVpBVElPTl9HVUVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246CgoqKlVucmF2ZWxpbmcgdGhlIGB1di5jYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLCBhbmQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogZXhhY3RseSBlbmFibGVzIHRoZSBpbmNsdXNpb24gb3IgZnVuY3Rpb25hbGl0eSBvZiBgdXYuY2A/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGNvcmUgY29tcG9uZW50IHRoYXQmIzM5O3MgYWx3YXlzIHByZXNlbnQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgaW5jbHVkZWQsIHJpZ2h0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiwgb3IgY29uZGl0aW9uYWwgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHRoYXQgZmlsZSBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBtdXN0IGJlIHNvbWUgbWFjcm8gZGVmaW5lZCwgb3IgYSBmbGFnIHBhc3NlZCB0byB0aGUgY29tcGlsZXIsIHRoYXQgZGljdGF0ZXMgd2hldGhlciBvciBub3QgdGhpcyBzcGVjaWZpYyBmaWxlIGlzIGluY2x1ZGVkLCBvciBhdCBsZWFzdCBpdHMgY29kZSBpcyBwYXJ0IG9mIHRoZSBmaW5hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgbWFrZWZpbGVzLCBidWlsZCBzY3JpcHRzLCBvciBwcm9qZWN0IHNldHRpbmdzIHRvIGlkZW50aWZ5IHRoZSBrZXkgdGhhdCB1bmxvY2tzIGB1di5jYC4gSXMgaXQgYSBmZWF0dXJlIGZsYWc/IEEgdGFyZ2V0IHBsYXRmb3JtIGRlZmluaXRpb24/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHN3aXRjaD8gR290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL01ha2VmaWxlPTQ1PW9iai15XHQmIzQzOz0gbm9zcGVjLWJyYW5jaC5vIGlwbF92bXBhcm0ubyBtYWNoaW5lX2tleGVjX3JlbG9jLm8gdW53aW5kX2JjLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDY6b2JqLXlcdCYjNDM7PSBzbXAubyB0ZXh0X2Ftb2RlMzEubyBzdGFja3RyYWNlLm8gYWJzX2xvd2NvcmUubyBmYWNpbGl0eS5vIHV2Lm8gd3RpLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDctb2JqLXlcdCYjNDM7PSBkaWFnL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBBcmNoaXRlY3R1cmUgYW5kIEtNU0FOIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiwgaXNuJiMzOTt0IGl0PyBFdmVyeXRoaW5nIGluIHRoZSBrZXJuZWwsIHVsdGltYXRlbHksIGdldHMgY29tcGlsZWQuCgpOb3csIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBgRENBQ0hFX1dPUkRfQUNDRVNTYC4gV2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIHRoYXQ/IEFoLCB5ZXMsIGl0JiMzOTtzIHRpZWQgdG8gdGhlIGBTMzkwYCBhcmNoaXRlY3R1cmUuIFRoZSBjb25kaXRpb24gaXMgYGlmICFLTVNBTmAsIHdoaWNoIG1lYW5zIGl04oCZcyBlbmFibGVkIG9uIHMzOTAgdW5sZXNzIHdlIGFyZSB1c2luZyBLTVNBTi4gVGhhdCBtZWFucyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHMzOTAgdW5sZXNzIHRoZSBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgaXMgYmVpbmcgdXRpbGl6ZWQsIHdoaWNoIGlzIHVzZWZ1bCB0byByZW1lbWJlciBpbiBjYXNlIG9mIGRlYnVnZ2luZyBpc3N1ZXMgb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZ28gb3ZlciB0byBgYXJjaC9zMzkwL0tjb25maWdgLiBJJiMzOTtsbCBoYXZlIGEgbG9vayBmb3IgYEtWTWAsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd291bGQgYmUgZGVmaW5lZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSBoeXBlcnZpc29yLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgU2VjdXJlIFN0b3JhZ2UgQWNjZXNzIGluIHRoZSBTMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCB0aGUgY29udGV4dCBpcyBjbGVhcmx5IGFib3V0IGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTXkgbWluZCBpbnN0YW50bHkganVtcHMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gb3IgYmVoYXZpb3IgaXMgY29udGluZ2VudCBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgaGVscCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlIG9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgYSBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIGBLVk1gIGFuZCB0aGlzIGZ1bmN0aW9uLCBwZXJoYXBzIHRocm91Z2ggYSBjb25maWcgb3B0aW9uIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBpdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHNlY3VyZWx5IGRhdGEgaXMgYmVpbmcgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2ZhdWx0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3MS19XG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYWJvdXQgaW50ZXJwcmV0ZWQgY29kZTsgaXQmIzM5O3MgY29tcGlsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoZXJlLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgS1ZNYC4gR290IGl0LgoKTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAsIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEkgbmVlZCB0byBlc3RhYmxpc2ggcmVhY2hhYmlsaXR5LgoKTGV0IG1lIHNlZS4uLiBgdXZfYWxsb2Nfc3Rvcl92YXJgIGlzIGNhbGxlZCBieSBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGt2bV9zMzkwX3B2X2luaXRfdm1gLiAgYGt2bV9zMzkwX3B2X2luaXRfdm1gIGlzIGludm9rZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFBWIFZNLiBTbywgaWYgYSB1c2VyICpjcmVhdGVzKiBhIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNLCB0aGVuIHRoaXMgYWxsb2NhdGlvbiBwYXRoIGlzIGhpdC4gR29vZCwgaXQmIzM5O3MgcmVhY2hhYmxlLgoKTm93LCBgbG9hZF91bmFsaWduZWRfemVyb3BhZGDigKYgYWgsIGl0JiMzOTtzIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGZyb20gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oYC4gVGhhdCBtZWFucyBpdCB3aWxsIGJlIGlubGluZWQuIEl0JiMzOTtzIG5vdCBhIHN5bWJvbCBJIGNhbiBkaXJlY3RseSB0YXJnZXQsIGJ1dCB0aGUgY29kZSBpdCByZXByZXNlbnRzIGlzIHNpZ25pZmljYW50LCBnaXZlbiBpdHMgcHVycG9zZS4KCk92ZXJhbGwsIEkgdGhpbmsgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgdGVzdGFibGUuIFRoZXkgcmVwcmVzZW50IGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGluIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeSBmb3IgdGhlIHJlY29yZDoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4KCioqRm9jdXNTeW1ib2xzOioqIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGBleF9oYW5kbGVyX3plcm9wYWRgCgoqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzMzkwIEtWTSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTXMgYW5kIGFkZHMgc3VwcG9ydCBmb3IgRENBQ0hFX1dPUkRfQUNDRVNTIHdpdGggYSBuZXcgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIHVuYWxpZ25lZCB6ZXJvLXBhZGRlZCBsb2Fkcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTMuNjE1ODQxMzA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MzgyMjg0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIHMzOTAgS1ZNIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNcyBhbmQgYWRkcyBzdXBwb3J0IGZvciBEQ0FDSEVfV09SRF9BQ0NFU1Mgd2l0aCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBmb3IgdW5hbGlnbmVkIHplcm8tcGFkZGVkIGxvYWRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjEzLjYxNTg0NzQxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExODg1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGY2ZGY4YjcyZDhjYzZmNDg5YjcyMjhlMDliNjRkMWUxZjU1MTk2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxMzo0NjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLmZlODFjNTM5ZWYyZmZjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtMTYzLDYgKzE2Myw3IEBAIGNvbmZpZyBTMzkwXFxuIFxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuIFxcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxcbiBcXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxcbitcXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxcbiBcXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXFx0M1xcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcXHQ1XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVJcXHQ2XFxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXFx0XFx0N1xcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXFx0XFx0OFxcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cXHQ5XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXFx0MTBcXG5AQCAtNzksNiArODAsOSBAQFxcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVxcdFxcXFxcXG4gXFx0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSLCBfcmVnZXJyLCBfcmVnemVybywgMClcXG4gXFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcXHRcXHRcXFxcXFxuK1xcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcXG4rXFxuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcXG4gaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUodW5zaWduZWQgbG9uZyBwYWRkcik7XFxuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbiBcXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xcbkBAIC00MCw0ICs0MSwyNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuIFxcdHJldHVybiB+MVVMIFxcdTAwM2NcXHUwMDNjIGRhdGE7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXFxuKyAqXFxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXFxuKyAqIHJldHVybiB6ZXJvZXMgaW4gdGhlIG5vbi1leGlzdGluZyBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRhdGE7XFxuK1xcbitcXHRhc21faW5saW5lIHZvbGF0aWxlKFxcbitcXHRcXHRcXFwiMDpcXHRsZ1xcdCVbZGF0YV0sMCglW2FkZHJdKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiMTpcXHRub3ByXFx0JSVyN1xcXFxuXFxcIlxcbitcXHRcXHRFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcXG4rXFx0XFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXFxuK1xcdFxcdDogW2RhdGFdIFxcXCI9ZFxcXCIgKGRhdGEpXFxuK1xcdFxcdDogW2FkZHJdIFxcXCJhXFxcIiAoYWRkciksIFxcXCJtXFxcIiAoKih1bnNpZ25lZCBsb25nICopYWRkcikpO1xcbitcXHRyZXR1cm4gZGF0YTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXFxuIFxcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKlxcbitcXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxcbitcXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xcbitcXHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cXG4rXFx0ICovXFxuK1xcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcXG4rXFxuK1xcdGlmICghc3Rvcl92YXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWFyZWEgfHwgIShhcmVhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xcbitcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4rXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuK1xcdGZyZWVfdm1fYXJlYShhcmVhKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG4rXFxuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0cHRlX3QgcHRlO1xcbitcXG4rXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcXG4rXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcXG4rXFx0aWYgKCFhcmVhKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuK1xcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXR1cm4gYXJlYS1cXHUwMDNlYWRkcjtcXG4rb3V0OlxcbitcXHR1dl9mcmVlX3N0b3JfdmFyKGFyZWEtXFx1MDAzZWFkZHIpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHJlZl9jb3VudCBmb3IgYSBmb2xpbyB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIG5vXFxuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1MC4uZGM1YWMyOWI0YzMxMTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0dmZyZWUoa3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xcbiBcXHRmcmVlX3BhZ2VzKGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuIFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcXG5AQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfYWxsb2Nfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXFxuIFxcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XFxuIFxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHZ6YWxsb2Modmxlbik7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZGlzcG9zZV9vbmVfbGVmdG92ZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XFxuIFxcdGZyZWVfcGFnZXMobGVmdG92ZXItXFx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcXG4tXFx0dmZyZWUobGVmdG92ZXItXFx1MDAzZXN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cXHUwMDNlc3Rvcl92YXIpO1xcbiBkb25lX2Zhc3Q6XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmt2bS1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuQEAgLTUwLDYgKzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cXHUwMDNlZGF0YSk7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVxcdTAwM2VkYXRhKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XFxuK1xcbitcXHRhZGRyID0gcmVncy1cXHUwMDNlZ3Byc1tyZWdfYWRkcl07XFxuK1xcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XFxuK1xcdGFkZHIgXFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcXG4rXFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XFxuK1xcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBvZmZzZXQ7XFxuK1xcdHJlZ3MtXFx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcXG4rXFx0cmVncy1cXHUwMDNlcHN3LmFkZHIgPSBleHRhYmxlX2ZpeHVwKGV4KTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRmcHVfc2ZwYygwKTtcXG5AQCAtMTE4LDYgKzEzNCw4IEBAIGJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgZmFsc2UsIHJlZ3MpO1xcbiBcXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XFxuK1xcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxcbitcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX0ZQQzpcXG4gXFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfZnBjKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjc3NjU0OWQ1NWM5NGEyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXFx1MDAzZWludF9wYXJtX2xvbmcgfTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTQzOCwxMyArNDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHBhbmljKFxcXCJVbmV4cGVjdGVkIFBHTSAweDNkIHdpdGggVEVJRCBiaXQgNjE9MFxcXCIpO1xcbiBcXHR9XFxuIFxcdGlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHtcXG4tXFx0XFx0Zm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShmb2xpb190b19waHlzKGZvbGlvKSk7XFxuLVxcdFxcdGlmICghcmMpXFxuLVxcdFxcdFxcdGNsZWFyX2JpdChQR19hcmNoXzEsIFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuK1xcdFxcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxcbiBcXHRcXHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXFxuQEAgLTQ1MywxMyArNDQ5LDExIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRpZiAocmMpXFxuIFxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpXFxuK1xcdFxcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSB8fCAhbW0pXFxuIFxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xcbi1cXHRcXHRtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4rXFx0XFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xcbiBcXHRcXHRpZiAoIXZtYSlcXG4tXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX01BUEVSUik7XFxuK1xcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG4gXFx0XFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG4gXFx0XFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTQuMjI4Njc1MzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNTM3MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjZkZjhiNzJkOGNjNmY0ODliNzIyOGUwOWI2NGQxZTFmNTUxOTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTkgMTM6NDY6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiArMTYzLDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXG4gXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcbiBcdHNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyXG4rXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxuIFx0c2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUlxuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF84QiBpZiBDQ19JU19HQ0NcbiBcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG5pbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXHRcdDdcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXHRcdDhcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cdDlcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfRlJPTVx0MTBcbkBAIC03OSw2ICs4MCw5IEBAXG4gI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybylcdFxcXG4gXHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVIsIF9yZWdlcnIsIF9yZWd6ZXJvLCAwKVxuIFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbitcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcbitcbiAjZGVmaW5lIEVYX1RBQkxFX0ZQQyhfZmF1bHQsIF90YXJnZXQpXHRcdFx0XHRcdFxcXG4gXHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMClcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG5pbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbkBAIC02MzUsNiArNjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xuK3ZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcik7XG4gXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xuQEAgLTQwLDQgKzQxLDI1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6ZXJvX2J5dGVtYXNrKHVuc2lnbmVkIGxvbmcgZGF0YSlcbiBcdHJldHVybiB+MVVMIFx1MDAzY1x1MDAzYyBkYXRhO1xuIH1cbiBcbisvKlxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXG4rICpcbisgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXG4rICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRhdGE7XG4rXG4rXHRhc21faW5saW5lIHZvbGF0aWxlKFxuK1x0XHRcIjA6XHRsZ1x0JVtkYXRhXSwwKCVbYWRkcl0pXFxuXCJcbitcdFx0XCIxOlx0bm9wclx0JSVyN1xcblwiXG4rXHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuK1x0XHRFWF9UQUJMRV9aRVJPUEFEKDFiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcbitcdFx0OiBbZGF0YV0gXCI9ZFwiIChkYXRhKVxuK1x0XHQ6IFthZGRyXSBcImFcIiAoYWRkciksIFwibVwiICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4rXHRyZXR1cm4gZGF0YTtcbit9XG4rXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZmFjaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdXZfZnJlZV9yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuK3tcbitcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcdC8qXG4rXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxuK1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbitcdCAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLlxuK1x0ICovXG4rXHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcbitcbitcdGlmICghc3Rvcl92YXIpXG4rXHRcdHJldHVybjtcbitcdGFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuK1x0XHRyZXR1cm47XG4rXHRzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcbitcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4rXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpO1xuK1x0ZnJlZV92bV9hcmVhKGFyZWEpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFwia3ZtXCIpO1xuK1xuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHB0ZV90IHB0ZTtcbitcbitcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcbitcdHNldF9wdGUocHRlcCwgcHRlKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcbitcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xuK1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4rXHRpZiAoIWFyZWEpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbitcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGFkZHIsIHNpemUsIHV2X2FsbG9jX3JhbmdlX2NiLCBOVUxMKSlcbitcdFx0Z290byBvdXQ7XG4rXHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuK291dDpcbitcdHV2X2ZyZWVfc3Rvcl92YXIoYXJlYS1cdTAwM2VhZGRyKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcImt2bVwiKTtcbitcbiAvKlxuICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm9cbiAgKiBmdXJ0aGVyIHBpbnMuIFRoaXMgd2FzIGNyaWJiZWQgZnJvbSBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBvdGhlciBwbGFjZXMgaW5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMzM3LDcgKzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuK1x0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3Zhcik7XG4gXHRmcmVlX3BhZ2VzKGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbiBcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfYmFzZV9zdG9yX2xlbikpO1xuIFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcbkBAIC0zNjksNyArMzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4gXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXG4gXHR2bGVuID0gQUxJR04odmlydCAqICgobnBhZ2VzICogUEFHRV9TSVpFKSAvIEhQQUdFX1NJWkUpLCBQQUdFX1NJWkUpO1xuIFx0dmxlbiArPSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbitcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7XG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gMDtcbkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKi9cbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XG4gXHRmcmVlX3BhZ2VzKGxlZnRvdmVyLVx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcbi1cdHZmcmVlKGxlZnRvdmVyLVx1MDAzZXN0b3JfdmFyKTtcbitcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiArNTAsMjIgQEAgc3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cdTAwM2VkYXRhKTtcbitcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVx1MDAzZWRhdGEpO1xuK1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4rXG4rXHRhZGRyID0gcmVncy1cdTAwM2VncHJzW3JlZ19hZGRyXTtcbitcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbitcdGFkZHIgXHUwMDI2PSB+KHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpO1xuK1x0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XG4rXHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbitcdHJlZ3MtXHUwMDNlZ3Byc1tyZWdfZGF0YV0gPSBkYXRhO1xuK1x0cmVncy1cdTAwM2Vwc3cuYWRkciA9IGV4dGFibGVfZml4dXAoZXgpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRmcHVfc2ZwYygwKTtcbkBAIC0xMTgsNiArMTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4rXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcbitcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfRlBDOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9mcGMoZXgsIHJlZ3MpO1xuIFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDAyOGFlYjljNDhkNmZmLi43NzY1NDlkNTVjOTRhMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuQEAgLTQwOSw5ICs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbkBAIC00MzgsMTMgKzQzOCw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCIpO1xuIFx0fVxuIFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xuLVx0XHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpO1xuLVx0XHRpZiAoIXJjKVxuLVx0XHRcdGNsZWFyX2JpdChQR19hcmNoXzEsIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4rXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4rXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxuIFx0XHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXG5AQCAtNDUzLDEzICs0NDksMTEgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbitcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbitcdFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xuIFx0XHRpZiAoIXZtYSlcbi1cdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbiBcdFx0aWYgKCFmb2xpbykge1xuIFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTQuMjI4Njc3NzA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4MjUyODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTAgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgYGFyY2gvczM5MGAgY29kZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBmdXp6aW5nIHRhcmdldCBvdXQgb2YgdGhpcy5cblxuRmlyc3QsIEkgc2VlIHNvbWUgS2NvbmZpZyBtb2RpZmljYXRpb25zIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNlbGVjdGluZyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpZiBgS01TQU5gIGlzbid0IGVuYWJsZWQuIEludGVyZXN0aW5nLCBidXQgbGlrZWx5IG5vdCBkaXJlY3RseSBmdXp6YWJsZS4gVGhlbiB0aGVyZSdzIGFuIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcyAoYEVYX1RZUEVfWkVST1BBRGAsIGBFWF9UQUJMRV9aRVJPUEFEYCkgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oYC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBjZXJ0YWluIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enogaWYgdGhlIGNvZGUgaW52b2x2ZWQgY2FuIGJlIHRyaWdnZXJlZCByZWxpYWJseS5cblxuVGhlIGluY2x1c2lvbiBvZiBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBhbmQgaXRzIGltcGxlbWVudGF0aW9uIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGFsb25nc2lkZSB0aGUgYWRkaXRpb24gb2YgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAgbG9va3MgYSBiaXQgbW9yZSBwcm9taXNpbmcuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIHN0cmF0ZWd5LlxuXG5DcnVjaWFsbHksIHRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgYGFyY2gvczM5MC9rdm0vcHYuY2AsIHJlcGxhY2luZyBgdnphbGxvY2AvYHZmcmVlYCB3aXRoIGB1dl9hbGxvY19zdG9yX3ZhcmAvYHV2X2ZyZWVfc3Rvcl92YXJgLiBUaGF0J3MgYSBkaXJlY3QgS1ZNIHRvdWNocG9pbnQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBLVk0ncyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZS5cblxuVGhlIGNoYW5nZXMgdG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCdzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdm1hbGxvYyBhZGRyZXNzZXMgYW5kIHVzaW5nIGBsb2NrX21tX2FuZF9maW5kX3ZtYWAsIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGxpa2VseSByZWxhdGVkIHRvIHRoZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZS4gQW5kIHRoZSBgYXJjaC9zMzkwL21tL2V4dGFibGUuY2AgY2hhbmdlcyB0aWUgaW50byB0aGUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcy5cblxuVGhlIGltcG9ydGFudCBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFllcyEgczM5MCBLVk0gKmlzKiBmdXp6YWJsZSBpZiB3ZSdyZSBmdXp6aW5nIHMzOTAuIEFuZCwgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBhIGJpZyB3aW4uIFRoZW4gSSByZW1lbWJlciB0aGF0IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIHJlbGF0ZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaXMgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuIEFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIEtWTSBQVi5cblxuU28sIGxldCdzIGNvbmZpcm0gdGhlIGZ1enphYmlsaXR5LiBZZXMsIEtWTSBvbiBzMzkweCBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5Ob3csIGxldCdzIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3MgdG8gZG91YmxlLWNoZWNrIG91ciB3b3JrLiBgYXJjaC9zMzkwL2t2bS9wdi5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX0tWTWAsIHdoaWNoIGlzIGVhc3kuIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgdG8gY29uZmlybSBpdCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfUFJPVEVDVEVEX1ZJUlRVQUxJWkFUSU9OX0dVRVNUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjIyLjcxMTIwODY0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTUyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL01ha2VmaWxlPTQ1PW9iai15XFx0Kz0gbm9zcGVjLWJyYW5jaC5vIGlwbF92bXBhcm0ubyBtYWNoaW5lX2tleGVjX3JlbG9jLm8gdW53aW5kX2JjLm9cXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlOjQ2Om9iai15XFx0Kz0gc21wLm8gdGV4dF9hbW9kZTMxLm8gc3RhY2t0cmFjZS5vIGFic19sb3djb3JlLm8gZmFjaWxpdHkubyB1di5vIHd0aS5vXFxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00Ny1vYmoteVxcdCs9IGRpYWcvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjIzLjIwMTMwOTIyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY1MzU5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyBCdWlsZCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYHV2Lm9gLi4uIHRoYXQncyBhbHdheXMgYnVpbHQgb24gczM5MCwgbm8gcXVlc3Rpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCB0aGVyZSwgSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhhdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hhdCBhYm91dCBgcHYuY2A/IElzIGl0IGFsc28gcmlnaWRseSB0aWVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIGZsZXhpYmlsaXR5IHRoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgdGFyZ2V0IGVudmlyb25tZW50LiBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgczM5MCBpbnRyaW5zaWNzLCBhc3NlbWJseSBsYW5ndWFnZSwgb3IgcGxhdGZvcm0tZGVwZW5kZW50IGxpYnJhcmllcz8gT3IgaXMgaXQgd3JpdHRlbiBpbiBhIHdheSB0aGF0IGFsbG93cyBmb3IgYnJvYWRlciBwb3J0YWJpbGl0eSB3aXRoIG1pbmltYWwgZWZmb3J0PyBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQgcHJvY2VzcyBkZXBlbmRpbmcgb24gdGhlIGFuc3dlci4uLiB0aW1lIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyNi4xMDc4NDY2MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTEzNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB2XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyNi4yMjEzNjQ0ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI3MTM4ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgU2VjdXJlIFN0b3JhZ2UgQWNjZXNzKipcblxuUmlnaHQsIGBwdi5vYCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS1ZNYCBpcyBkZWZpbmVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoYXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIHRoZXNlIGFjY2Vzc2VzLlxuXG5MZXQncyBkaXZlIGludG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBzZWN1cmUgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIEtWTSBpbiB0aGlzIGFyZWEuIEl0J3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MjkuMzQ4NTA2MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzA4NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyOS40NjEyMjAyMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5MzcxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgZm9yIENhbGxlcnMgb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgbm8gZG91YnQsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbCBmb3IgYW5hbHl6aW5nIGl0cyBpbXBhY3QsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyBhbmQga25vd2xlZGdlIHRvIGVmZmljaWVudGx5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBjYWxscz8gQW55IGNvbmRpdGlvbmFsIHVzYWdlcz8gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIHRvbywgd2hlbiBJIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MzIuNDMwNTkzNjMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0MjY0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oPTI5PXZvaWQgZG9fZGF0X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oOjMwOnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgtMzEtdm9pZCBkb19ub25fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYz00MDE9c3RhdGljIHZvaWQgKCpwZ21fY2hlY2tfdGFibGVbMTI4XSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpID0ge1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzNy1cXHRbMHgzY11cXHRcXHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0Mzg6XFx0WzB4M2RdXFx0XFx0PSBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MsXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzOS1cXHRbMHgzZV1cXHRcXHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQ0OS1cXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM6NDUwOkNPTkRfVFJBUChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwNy1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA5LXtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3MS19XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDcyOk5PS1BST0JFX1NZTUJPTChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MzIuNTMxMDI1Mjg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTUwMzc0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2VjdXJlIFN0b3JhZ2UgVmlvbGF0aW9uIFRyYXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHByb2dyYW0gY2hlY2sgMHgzZCwgYSBTZWN1cmUgU3RvcmFnZSBWaW9sYXRpb24uIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIG5vdCBqdXN0IHNvbWUgdGVzdCBoYXJuZXNzLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2UuIE15IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoaXMgYmFjayB0byBtZW1vcnkgYWNjZXNzIGlzc3Vlcy5cblxuRmlyc3QsIEkgc2hvdWxkIGNoZWNrIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBUaGF0J3MgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJlc3QuIExvb2tpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUsIEkgc2VlIGl0J3MgdXNlZCBieSBgRENBQ0hFX1dPUkRfQUNDRVNTYCwgd2hpY2ggaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBSaWdodC4gYERDQUNIRV9XT1JEX0FDQ0VTU2AgZW5hYmxlcyBvcHRpbWl6ZWQgZGNhY2hlIGxvb2t1cHMuIFRoaXMgaXMgaW1wb3J0YW50ISBUaGlzIHdpbGwgZGlyZWN0bHkgYWZmZWN0IGRjYWNoZSBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBwb3RlbnRpYWxseSBoaWdobHkgcmVhY2hhYmxlLiBXZSBhcmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCBpcyBmdW5kYW1lbnRhbCB0byBmaWxlIHN5c3RlbSBhY2Nlc3MsIHNvIHRoaXMgaXMgaGlnaCB2YWx1ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBzZWN1cmUgc3RvcmFnZSB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjozNi41ODYwNjUyMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTcwMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjM3PWludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYzODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYzOS12b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTI0NT1zdGF0aWMgaW50IHV2X2FsbG9jX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjU3LVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNTg6dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTkte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3NC19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI3NTpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3Ni1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0zNDY9c3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzcxLVxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuYXJjaC9zMzkwL2t2bS9wdi5jOjM3MjpcXHRrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB1dl9hbGxvY19zdG9yX3Zhcih2bGVuKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzczLVxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjozNi42ODA2NDEzMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyODkwNjQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBpbiBQViBWTSBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fczM5MF9wdl9hbGxvY192bWAsIHdoaWNoIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgY2FsbGVkIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYSBQViBWTS4gTXkgaW5zdGluY3QsIGJlaW5nIHdobyBJIGFtLCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgcmljaCBhcmVhIGZvciBmdXp6aW5nLiBUaGVyZSdzIGFsbW9zdCBhbHdheXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIHVuY292ZXIgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwaGFzZXMgb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBuYXJyb3dpbmcuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhcyBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhcmUgb2Z0ZW4ga2V5LiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AuIEZpbmFsbHksIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcsIHNvIEknbSBnb2luZyB0byBkaXZlIGRlZXBlciBhbmQgbG9vayBhdCBgZXhfaGFuZGxlcl96ZXJvcGFkYCB3aXRoaW4gYGFyY2gvczM5MC9tbS9leHRhYmxlLmNgLiBUaGlzIGNvdWxkIGJlIHJlYWxseSBnb29kLiBMZXQncyBzZWUgd2hhdCB0aGF0IGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGRvaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NDAuMjA5NTQ5NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzMzMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9leHRhYmxlLmM9Mzk9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTItXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYzo1MzpzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYz0xMTk9Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzNy1cXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cXHRjYXNlIEVYX1RZUEVfRlBDOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0MC4zMDcyOTEwOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMDkwNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqXG5cblJpZ2h0LCBgZXhfaGFuZGxlcl96ZXJvcGFkYCDigJMgdGhhdCdzIGEgc29saWQgc3ltYm9sIHRvIGtleSBpbiBvbiwgcGFydGljdWxhcmx5IHdoZW4gbG9va2luZyBhdCBleGNlcHRpb24gaGFuZGxpbmcgcm91dGluZXMuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHNvbWUgbG93LWxldmVsIGtlcm5lbCBiZWhhdmlvci4gTm93LCBsZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB2aXJ0dWFsaXphdGlvbi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgZXNwZWNpYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBvbiBteSByYWRhcjsgaXQncyBlc3NlbnRpYWwsIG9mIGNvdXJzZSwgZm9yIEtWTSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIGFsbG9jYXRpbmcgdmlydHVhbCBtYWNoaW5lcywgYW5kIEkga25vdyBpdCdzIHJlbGF0ZWQgdG8gYm90aCBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gIGFuZCBgcHYuY2Agd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCBoYXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGxheWVyLiBCdXQgd2hhdCBhYm91dCB0aGUgVW5pa2VybmVsIHN1cHBvcnQgZmlsZSwgYHV2LmNgPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGFsbCB0aGUgY29uZmlndXJhdGlvbiBkdWNrcyBpbiBhIHJvdyBmb3IgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgcmVsYXRlIHRvIGB1di5jYC4gSXMgdGhlcmUgYSB1bmlxdWUgY29uZmlndXJhdGlvbiBvciBzb21ldGhpbmcgdGhhdCBpdCBkZXBlbmRzIG9uPyBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgZmVhdHVyZXMgaXQgYm9ycm93cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0NC4wMDgxOTcwOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ0NjU0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BST1RFQ1RFRF9WSVJUVUFMSVpBVElPTl9HVUVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0NC4xMTY2NTAxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTMyNTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqVW5yYXZlbGluZyB0aGUgYHV2LmNgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJ20gbG9va2luZyBhdCB0aGlzLCBhbmQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogZXhhY3RseSBlbmFibGVzIHRoZSBpbmNsdXNpb24gb3IgZnVuY3Rpb25hbGl0eSBvZiBgdXYuY2A/IEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoaXMgaW1wbGllcyB0aGF0IHRoaXMgaXNuJ3QgYSBjb3JlIGNvbXBvbmVudCB0aGF0J3MgYWx3YXlzIHByZXNlbnQuIEl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBpbmNsdWRlZCwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb24sIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBpcyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgdGhhdCBmaWxlIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIG1hY3JvIGRlZmluZWQsIG9yIGEgZmxhZyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLCB0aGF0IGRpY3RhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3BlY2lmaWMgZmlsZSBpcyBpbmNsdWRlZCwgb3IgYXQgbGVhc3QgaXRzIGNvZGUgaXMgcGFydCBvZiB0aGUgZmluYWwgY29tcGlsYXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIG1ha2VmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgcHJvamVjdCBzZXR0aW5ncyB0byBpZGVudGlmeSB0aGUga2V5IHRoYXQgdW5sb2NrcyBgdXYuY2AuIElzIGl0IGEgZmVhdHVyZSBmbGFnPyBBIHRhcmdldCBwbGF0Zm9ybSBkZWZpbml0aW9uPyBBIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzd2l0Y2g/IEdvdHRhIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzcyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NDcuMzQ3OTc3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjkwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT00NT1vYmoteVxcdCs9IG5vc3BlYy1icmFuY2gubyBpcGxfdm1wYXJtLm8gbWFjaGluZV9rZXhlY19yZWxvYy5vIHVud2luZF9iYy5vXFxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZTo0NjpvYmoteVxcdCs9IHNtcC5vIHRleHRfYW1vZGUzMS5vIHN0YWNrdHJhY2UubyBhYnNfbG93Y29yZS5vIGZhY2lsaXR5Lm8gdXYubyB3dGkub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDctb2JqLXlcXHQrPSBkaWFnL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0Ny40MzUyNzQyMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTE4NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgUzM5MCBBcmNoaXRlY3R1cmUgYW5kIEtNU0FOIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBpdCdzIGNvbXBpbGVkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLCBpc24ndCBpdD8gRXZlcnl0aGluZyBpbiB0aGUga2VybmVsLCB1bHRpbWF0ZWx5LCBnZXRzIGNvbXBpbGVkLlxuXG5Ob3csIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBgRENBQ0hFX1dPUkRfQUNDRVNTYC4gV2hhdCdzIHRoZSBkZWFsIHdpdGggdGhhdD8gQWgsIHllcywgaXQncyB0aWVkIHRvIHRoZSBgUzM5MGAgYXJjaGl0ZWN0dXJlLiBUaGUgY29uZGl0aW9uIGlzIGBpZiAhS01TQU5gLCB3aGljaCBtZWFucyBpdOKAmXMgZW5hYmxlZCBvbiBzMzkwIHVubGVzcyB3ZSBhcmUgdXNpbmcgS01TQU4uIFRoYXQgbWVhbnMgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaXMgKmFsd2F5cyogZW5hYmxlZCBvbiBzMzkwIHVubGVzcyB0aGUgS2VybmVsTWVtb3J5U2FuaXRpemVyIGlzIGJlaW5nIHV0aWxpemVkLCB3aGljaCBpcyB1c2VmdWwgdG8gcmVtZW1iZXIgaW4gY2FzZSBvZiBkZWJ1Z2dpbmcgaXNzdWVzIG9yIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuXG5cblNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBvdmVyIHRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEknbGwgaGF2ZSBhIGxvb2sgZm9yIGBLVk1gLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd291bGQgYmUgZGVmaW5lZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSBoeXBlcnZpc29yLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTEuNDc2NDYzNzc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzOTA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTEuNjE3ODU4OTY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjcxMDk5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgdGhlIFNlY3VyZSBTdG9yYWdlIEFjY2VzcyBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCB0aGUgY29udGV4dCBpcyBjbGVhcmx5IGFib3V0IGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTXkgbWluZCBpbnN0YW50bHkganVtcHMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbidzIGV4ZWN1dGlvbiBvciBiZWhhdmlvciBpcyBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBoZWxwIGRldGVybWluZSB0aGUgc2NvcGUgb2YgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUgb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBgS1ZNYCBhbmQgdGhpcyBmdW5jdGlvbiwgcGVyaGFwcyB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgaXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBzZWN1cmVseSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzAwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTQuOTQ0OTcxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTA1OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo1NS4wMjY0ODIyNTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MDU3OTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYWJvdXQgaW50ZXJwcmV0ZWQgY29kZTsgaXQncyBjb21waWxlZC4gVGhhdCdzIGEgZ2l2ZW4uIFdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoZXJlLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgS1ZNYC4gR290IGl0LlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGFuZCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gSSBuZWVkIHRvIGVzdGFibGlzaCByZWFjaGFiaWxpdHkuXG5cbkxldCBtZSBzZWUuLi4gYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjYWxsZWQgYnkgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBrdm1fczM5MF9wdl9pbml0X3ZtYC4gIGBrdm1fczM5MF9wdl9pbml0X3ZtYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBQViBWTS4gU28sIGlmIGEgdXNlciAqY3JlYXRlcyogYSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTSwgdGhlbiB0aGlzIGFsbG9jYXRpb24gcGF0aCBpcyBoaXQuIEdvb2QsIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYOKApiBhaCwgaXQncyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAuIFRoYXQgbWVhbnMgaXQgd2lsbCBiZSBpbmxpbmVkLiBJdCdzIG5vdCBhIHN5bWJvbCBJIGNhbiBkaXJlY3RseSB0YXJnZXQsIGJ1dCB0aGUgY29kZSBpdCByZXByZXNlbnRzIGlzIHNpZ25pZmljYW50LCBnaXZlbiBpdHMgcHVycG9zZS5cblxuT3ZlcmFsbCwgSSB0aGluayB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCB0ZXN0YWJsZS4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLlxuXG5IZXJlJ3MgbXkgc3VtbWFyeSBmb3IgdGhlIHJlY29yZDpcblxuKipXb3J0aEZ1enppbmc6IHRydWUqKlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIHMzOTAgS1ZNIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNcyBhbmQgYWRkcyBzdXBwb3J0IGZvciBEQ0FDSEVfV09SRF9BQ0NFU1Mgd2l0aCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBmb3IgdW5hbGlnbmVkIHplcm8tcGFkZGVkIGxvYWRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgS1ZNIGNvZGUuXG5cbioqRm9jdXNTeW1ib2xzOioqIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGBleF9oYW5kbGVyX3plcm9wYWRgXG5cbioqRW5hYmxlQ29uZmlnczoqKiBgS1ZNYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDc6MDIuMDE3MDY0MDc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTY3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlxbg5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-19 13:02:57 +0000 UTC FinishedAt: 2026-07-19 13:47:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "9fcdde1a-d439-40d7-b1f5-c99152c503c0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_alloc_stor_var", "uv_free_stor_var", "do_secure_storage_access", "ex_handler_zeropad" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmNmRmOGI3MmQ4Y2M2ZjQ4OWI3MjI4ZTA5YjY0ZDFlMWY1NTE5NjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxMzo0NjoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2Myw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxuIFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXG4gXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxuJiM0MztcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRFx0XHQ3XG4gI2RlZmluZSBFWF9UWVBFX0ZQQ1x0XHQ4XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPXHQ5XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX0ZST01cdDEwXG5AQCAtNzksNiAmIzQzOzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4mIzQzOyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbiYjNDM7XHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9aRVJPUEFELCBfcmVnZGF0YSwgX3JlZ2FkZHIsIDApXG4mIzQzO1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLWV4dGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9iaXRzcGVybG9uZy5oXHUwMDNlXG4gXG4gc3RydWN0IHdvcmRfYXRfYV90aW1lIHtcbkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMb2FkIGFuIHVuYWxpZ25lZCB3b3JkIGZyb20ga2VybmVsIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbiYjNDM7ICogYW5kIHRoZSBuZXh0IHBhZ2Ugbm90IGJlaW5nIG1hcHBlZCwgdGFrZSB0aGUgZXhjZXB0aW9uIGFuZFxuJiM0MzsgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHZvaWQgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRhdGE7XG4mIzQzO1xuJiM0MztcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4mIzQzO1x0XHRcJiMzNDswOlx0bGdcdCVbZGF0YV0sMCglW2FkZHJdKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7MTpcdG5vcHJcdCUlcjdcXG5cJiMzNDtcbiYjNDM7XHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuJiM0MztcdFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4mIzQzO1x0XHQ6IFtkYXRhXSBcJiMzNDs9ZFwmIzM0OyAoZGF0YSlcbiYjNDM7XHRcdDogW2FkZHJdIFwmIzM0O2FcJiMzNDsgKGFkZHIpLCBcJiMzNDttXCYjMzQ7ICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4mIzQzO1x0cmV0dXJuIGRhdGE7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4mIzQzO1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbiYjNDM7XHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Rvcl92YXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuJiM0MztcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4mIzQzO1x0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9mcmVlX3JhbmdlX2NiLCBOVUxMKTtcbiYjNDM7XHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh1dl9mcmVlX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0cHRlX3QgcHRlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiYjNDM7XHRpZiAoYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuJiM0MztvdXQ6XG4mIzQzO1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyAmIzQzOzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuIFx0ZnJlZV9wYWdlcyhrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4gXHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKGt2bSk7XG5AQCAtMzY5LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICYjNDM7PSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDE0LDcgJiM0Mzs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiAmIzQzOzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVnX2FkZHIgPSBGSUVMRF9HRVQoRVhfREFUQV9SRUdfQUREUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuJiM0MztcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRhZGRyIFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbiYjNDM7XHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbiYjNDM7XHRyZWdzLVx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcbiYjNDM7XHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4mIzQzO1x0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG4mIzQzO1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjc3NjU0OWQ1NWM5NGEyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgJiM0Mzs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDM4LDEzICYjNDM7NDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHBhbmljKFwmIzM0O1VuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCYjMzQ7KTtcbiBcdH1cbiBcdGlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHtcbi1cdFx0Zm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7XG4tXHRcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKGZvbGlvX3RvX3BoeXMoZm9saW8pKTtcbi1cdFx0aWYgKCFyYylcbi1cdFx0XHRjbGVhcl9iaXQoUEdfYXJjaF8xLCBcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4mIzQzO1x0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWxcbiBcdFx0ICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZVxuQEAgLTQ1MywxMyAmIzQzOzQ0OSwxMSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpKVxuJiM0MztcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbiYjNDM7XHRcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyLCByZWdzKTtcbiBcdFx0aWYgKCF2bWEpXG4tXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX01BUEVSUik7XG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbiBcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzMzkwIEtWTSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTXMgYW5kIGFkZHMgc3VwcG9ydCBmb3IgRENBQ0hFX1dPUkRfQUNDRVNTIHdpdGggYSBuZXcgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIHVuYWxpZ25lZCB6ZXJvLXBhZGRlZCBsb2Fkcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZjZkZjhiNzJkOGNjNmY0ODliNzIyOGUwOWI2NGQxZTFmNTUxOTYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTM6NDY6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUAogCXNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVAogCXNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyCiYjNDM7CXNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOCiAJc2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDCiAJc2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaAppbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUCTMKICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFRwk1CiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSCTYKJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRAkJNwogI2RlZmluZSBFWF9UWVBFX0ZQQwkJOAogI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPCTkKICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NCTEwCkBAIC03OSw2ICYjNDM7ODAsOSBAQAogI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybykJXAogCV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApCiAKJiM0MzsjZGVmaW5lIEVYX1RBQkxFX1pFUk9QQUQoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZGF0YSwgX3JlZ2FkZHIpCQlcCiYjNDM7CV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMCkKJiM0MzsKICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldCkJCQkJCVwKIAlfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaAppbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCkBAIC02MzUsNiAmIzQzOzYzNSw4IEBAIGludCBzMzkwX3dpZ2dsZV9zcGxpdF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTsKIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpOwogaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpOwogCiB2b2lkIHNldHVwX3V2KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oCmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FzbS1leHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2JpdHNwZXJsb25nLmgmZ3Q7CiAKIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7CkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKQogCXJldHVybiB+MVVMICZsdDsmbHQ7IGRhdGE7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXIKJiM0MzsgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kCiYjNDM7ICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGF0YTsKJiM0MzsKJiM0MzsJYXNtX2lubGluZSB2b2xhdGlsZSgKJiM0MzsJCSYjMzQ7MDoJbGcJJVtkYXRhXSwwKCVbYWRkcl0pXG4mIzM0OwomIzQzOwkJJiMzNDsxOglub3ByCSUlcjdcbiYjMzQ7CiYjNDM7CQlFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSkKJiM0MzsJCUVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKQomIzQzOwkJOiBbZGF0YV0gJiMzNDs9ZCYjMzQ7IChkYXRhKQomIzQzOwkJOiBbYWRkcl0gJiMzNDthJiMzNDsgKGFkZHIpLCAmIzM0O20mIzM0OyAoKih1bnNpZ25lZCBsb25nICopYWRkcikpOwomIzQzOwlyZXR1cm4gZGF0YTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZmFjaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXYuaCZndDsKQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpCiAJcmV0dXJuIHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8ocGZuX2ZvbGlvKHB0ZV9wZm4ocHRlKSkpOwogfQogCiYjNDM7c3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoCiYjNDM7CSAqIGFjY2Vzc2VzIHRoZSBtZW1vcnkgcmFuZ2UsIGJlc2lkZXMgYnVncy4gVGhlIGludmFsaWRhdGlvbiBvZiBwdGVzCiYjNDM7CSAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLgomIzQzOwkgKi8KJiM0MzsJX19mcmVlX3BhZ2UocHRlX3BhZ2UocHRlKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CiYjNDM7CWlmICghc3Rvcl92YXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgVk1fU1BBUlNFKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpOwomIzQzOwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKJiM0MzsJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpOwomIzQzOwlmcmVlX3ZtX2FyZWEoYXJlYSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgJiMzNDtrdm0mIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcjsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9TUEFSU0UpOwomIzQzOwlpZiAoIWFyZWEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiYjNDM7CWlmIChhcHBseV90b19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldHVybiBhcmVhLSZndDthZGRyOwomIzQzO291dDoKJiM0MzsJdXZfZnJlZV9zdG9yX3ZhcihhcmVhLSZndDthZGRyKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsICYjMzQ7a3ZtJiMzNDspOwomIzQzOwogLyoKICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm8KICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuYwpAQCAtMzM3LDcgJiM0MzszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovCiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQl2ZnJlZShrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpOwomIzQzOwl1dl9mcmVlX3N0b3JfdmFyKGt2bS0mZ3Q7YXJjaC5wdi5zdG9yX3Zhcik7CiAJZnJlZV9wYWdlcyhrdm0tJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAogCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJa3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTsKQEAgLTM2OSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pCiAJLyogQWxsb2NhdGUgdmFyaWFibGUgc3RvcmFnZSAqLwogCXZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7CiAJdmxlbiAmIzQzOz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47Ci0Ja3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTsKJiM0MzsJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7CiAJaWYgKCFrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gMDsKQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sCiAJICovCiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7c3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7b2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpOwotCXZmcmVlKGxlZnRvdmVyLSZndDtzdG9yX3Zhcik7CiYjNDM7CXV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItJmd0O3N0b3JfdmFyKTsKIGRvbmVfZmFzdDoKIAlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDttbS0mZ3Q7Y29udGV4dC5wcm90ZWN0ZWRfY291bnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKQEAgLTUwLDYgJiM0Mzs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC0mZ3Q7ZGF0YSk7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LSZndDtkYXRhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWFkZHIgPSByZWdzLSZndDtncHJzW3JlZ19hZGRyXTsKJiM0MzsJb2Zmc2V0ID0gYWRkciAmYW1wOyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWFkZHIgJmFtcDs9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWRhdGEgPSAqKHVuc2lnbmVkIGxvbmcgKilhZGRyOwomIzQzOwlkYXRhICZsdDsmbHQ7PSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0OwomIzQzOwlyZWdzLSZndDtncHJzW3JlZ19kYXRhXSA9IGRhdGE7CiYjNDM7CXJlZ3MtJmd0O3Bzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlmcHVfc2ZwYygwKTsKQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUjoKIAkJcmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIHRydWUsIHJlZ3MpOwomIzQzOwljYXNlIEVYX1RZUEVfWkVST1BBRDoKJiM0MzsJCXJldHVybiBleF9oYW5kbGVyX3plcm9wYWQoZXgsIHJlZ3MpOwogCWNhc2UgRVhfVFlQRV9GUEM6CiAJCXJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCAwMjhhZWI5YzQ4ZDZmZi4uNzc2NTQ5ZDU1Yzk0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC00MDksOSAmIzQzOzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtJmd0O2ludF9wYXJtX2xvbmcgfTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApAQCAtNDM4LDEzICYjNDM7NDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXBhbmljKCYjMzQ7VW5leHBlY3RlZCBQR00gMHgzZCB3aXRoIFRFSUQgYml0IDYxPTAmIzM0Oyk7CiAJfQogCWlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHsKLQkJZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7Ci0JCWlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKQotCQkJcmV0dXJuOwotCQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpOwotCQlpZiAoIXJjKQotCQkJY2xlYXJfYml0KFBHX2FyY2hfMSwgJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpCiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7CiYjNDM7CQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7CiAJCS8qCiAJCSAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWwKIAkJICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZQpAQCAtNDUzLDEzICYjNDM7NDQ5LDExIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAocmMpCiAJCQlyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAl9IGVsc2UgewotCQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpCiYjNDM7CQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkgfHwgIW1tKQogCQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7Ci0JCW1tID0gY3VycmVudC0mZ3Q7bW07Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwomIzQzOwkJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpOwogCQlpZiAoIXZtYSkKLQkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpOwomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTsKIAkJZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KCZhbXA7ZncsIHZtYSwgYWRkciwgMCk7CiAJCWlmICghZm9saW8pIHsKIAkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgczM5MCBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIGBhcmNoL3MzOTBgIGNvZGUuIExldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBmdXp6aW5nIHRhcmdldCBvdXQgb2YgdGhpcy4KCkZpcnN0LCBJIHNlZSBzb21lIEtjb25maWcgbW9kaWZpY2F0aW9ucyBpbiBgYXJjaC9zMzkwL0tjb25maWdgLCBzZWxlY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaWYgYEtNU0FOYCBpc24mIzM5O3QgZW5hYmxlZC4gSW50ZXJlc3RpbmcsIGJ1dCBsaWtlbHkgbm90IGRpcmVjdGx5IGZ1enphYmxlLiBUaGVuIHRoZXJlJiMzOTtzIGFuIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcyAoYEVYX1RZUEVfWkVST1BBRGAsIGBFWF9UQUJMRV9aRVJPUEFEYCkgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oYC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBjZXJ0YWluIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enogaWYgdGhlIGNvZGUgaW52b2x2ZWQgY2FuIGJlIHRyaWdnZXJlZCByZWxpYWJseS4KClRoZSBpbmNsdXNpb24gb2YgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCBhbG9uZ3NpZGUgdGhlIGFkZGl0aW9uIG9mIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgIGxvb2tzIGEgYml0IG1vcmUgcHJvbWlzaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHNvbWUga2luZCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBzdHJhdGVneS4KCkNydWNpYWxseSwgdGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9wdi5jYCwgcmVwbGFjaW5nIGB2emFsbG9jYC9gdmZyZWVgIHdpdGggYHV2X2FsbG9jX3N0b3JfdmFyYC9gdXZfZnJlZV9zdG9yX3ZhcmAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgS1ZNIHRvdWNocG9pbnQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgS1ZNJiMzOTtzIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiBmZWF0dXJlLgoKVGhlIGNoYW5nZXMgdG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCYjMzk7cyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHZtYWxsb2MgYWRkcmVzc2VzIGFuZCB1c2luZyBgbG9ja19tbV9hbmRfZmluZF92bWFgLCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIGZlYXR1cmUuIEFuZCB0aGUgYGFyY2gvczM5MC9tbS9leHRhYmxlLmNgIGNoYW5nZXMgdGllIGludG8gdGhlIG5ldyBleGNlcHRpb24gdGFibGUgdHlwZXMuCgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzISBzMzkwIEtWTSAqaXMqIGZ1enphYmxlIGlmIHdlJiMzOTtyZSBmdXp6aW5nIHMzOTAuIEFuZCwgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBhIGJpZyB3aW4uIFRoZW4gSSByZW1lbWJlciB0aGF0IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIHJlbGF0ZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaXMgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuIEFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIEtWTSBQVi4KClNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emFiaWxpdHkuIFllcywgS1ZNIG9uIHMzOTB4IGlzIGRlZmluaXRlbHkgZnV6emFibGUuCgpOb3csIGxldCYjMzk7cyB0cmFjayBkb3duIHRoZSBjb25maWdzIHRvIGRvdWJsZS1jaGVjayBvdXIgd29yay4gYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19LVk1gLCB3aGljaCBpcyBlYXN5LiBXZSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZW5hYmxlcyBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCB0byBjb25maXJtIGl0IGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QUk9URUNURURfVklSVFVBTElaQVRJT05fR1VFU1RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT00NT1vYmoteVx0JiM0Mzs9IG5vc3BlYy1icmFuY2gubyBpcGxfdm1wYXJtLm8gbWFjaGluZV9rZXhlY19yZWxvYy5vIHVud2luZF9iYy5vXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlOjQ2Om9iai15XHQmIzQzOz0gc21wLm8gdGV4dF9hbW9kZTMxLm8gc3RhY2t0cmFjZS5vIGFic19sb3djb3JlLm8gZmFjaWxpdHkubyB1di5vIHd0aS5vXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlLTQ3LW9iai15XHQmIzQzOz0gZGlhZy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFzc2Vzc2luZyBCdWlsZCBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGB1di5vYC4uLiB0aGF0JiMzOTtzIGFsd2F5cyBidWlsdCBvbiBzMzkwLCBubyBxdWVzdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCB0aGVyZSwgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIHRoYXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdoYXQgYWJvdXQgYHB2LmNgPyBJcyBpdCBhbHNvIHJpZ2lkbHkgdGllZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBmbGV4aWJpbGl0eSB0aGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHRhcmdldCBlbnZpcm9ubWVudC4gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHMzOTAgaW50cmluc2ljcywgYXNzZW1ibHkgbGFuZ3VhZ2UsIG9yIHBsYXRmb3JtLWRlcGVuZGVudCBsaWJyYXJpZXM/IE9yIGlzIGl0IHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9yIGJyb2FkZXIgcG9ydGFiaWxpdHkgd2l0aCBtaW5pbWFsIGVmZm9ydD8gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIGJ1aWxkIHByb2Nlc3MgZGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIuLi4gdGltZSB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQgb24gdGhhdCBzcGVjaWZpYyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBTZWN1cmUgU3RvcmFnZSBBY2Nlc3MqKgoKUmlnaHQsIGBwdi5vYCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS1ZNYCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IGNvbmRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYWNjZXNzZXMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGF0IHRoZSBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc2VjdXJlIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoYXQgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggS1ZNIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jPTQwND1OT0tQUk9CRV9TWU1CT0woZG9fZGF0X2V4Y2VwdGlvbik7XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA4OnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA5LXtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzEtfVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDcyOk5PS1BST0JFX1NZTUJPTChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgZm9yIENhbGxlcnMgb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbCBmb3IgYW5hbHl6aW5nIGl0cyBpbXBhY3QsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgYW5kIGtub3dsZWRnZSB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcyB3aGVyZSBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBpcyBjYWxsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY2FsbHM/IEFueSBjb25kaXRpb25hbCB1c2FnZXM/IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhvc2UgdG9vLCB3aGVuIEkgc3RhcnQgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oPTI5PXZvaWQgZG9fZGF0X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL3MzOTAva2VybmVsL2VudHJ5Lmg6MzA6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oLTMxLXZvaWQgZG9fbm9uX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jPTQwMT1zdGF0aWMgdm9pZCAoKnBnbV9jaGVja190YWJsZVsxMjhdKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgPSB7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzNy1cdFsweDNjXVx0XHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQzODpcdFsweDNkXVx0XHQ9IGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzktXHRbMHgzZV1cdFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcbi0tXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMtNDQ5LVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQ1MDpDT05EX1RSQVAoZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwNy1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwOS17XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ3MjpOT0tQUk9CRV9TWU1CT0woZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWN1cmUgU3RvcmFnZSBWaW9sYXRpb24gVHJhcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwcm9ncmFtIGNoZWNrIDB4M2QsIGEgU2VjdXJlIFN0b3JhZ2UgVmlvbGF0aW9uLiBNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlLCBub3QganVzdCBzb21lIHRlc3QgaGFybmVzcy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlLiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMuCgpGaXJzdCwgSSBzaG91bGQgY2hlY2sgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAuIFRoYXQmIzM5O3MgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJlc3QuIExvb2tpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUsIEkgc2VlIGl0JiMzOTtzIHVzZWQgYnkgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIHdoaWNoIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gUmlnaHQuIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGVuYWJsZXMgb3B0aW1pemVkIGRjYWNoZSBsb29rdXBzLiBUaGlzIGlzIGltcG9ydGFudCEgVGhpcyB3aWxsIGRpcmVjdGx5IGFmZmVjdCBkY2FjaGUgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGBmcy9kY2FjaGUuY2AuIFRoaXMgaXMgcG90ZW50aWFsbHkgaGlnaGx5IHJlYWNoYWJsZS4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQgaXMgZnVuZGFtZW50YWwgdG8gZmlsZSBzeXN0ZW0gYWNjZXNzLCBzbyB0aGlzIGlzIGhpZ2ggdmFsdWUuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IHNlY3VyZSBzdG9yYWdlIHZhcmlhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYzNz1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYzODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjM5LXZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTI0NT1zdGF0aWMgaW50IHV2X2FsbG9jX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1Ny1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNTg6dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1OS17XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3NC19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6Mjc1OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc2LVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0zNDY9c3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTM3MS1cdHZsZW4gJiM0Mzs9IHV2X2luZm8uZ3Vlc3RfdmlydF9iYXNlX3N0b3JfbGVuO1xuYXJjaC9zMzkwL2t2bS9wdi5jOjM3MjpcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7XG5hcmNoL3MzOTAva3ZtL3B2LmMtMzczLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbCBpbiBQViBWTSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgd2hpY2ggaXMsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIFBWIFZNLiBNeSBpbnN0aW5jdCwgYmVpbmcgd2hvIEkgYW0sIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWxseSByaWNoIGFyZWEgZm9yIGZ1enppbmcuIFRoZXJlJiMzOTtzIGFsbW9zdCBhbHdheXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIHVuY292ZXIgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwaGFzZXMgb2YgYSB2aXJ0dWFsIG1hY2hpbmUuCgpNeSBmb2N1cyByaWdodCBub3cgaXMgbmFycm93aW5nLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFzIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIGFyZSBvZnRlbiBrZXkuIEFsc28sIEkgbmVlZCB0byBjaGVjayBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYC4gRmluYWxseSwgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcsIHNvIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgYW5kIGxvb2sgYXQgYGV4X2hhbmRsZXJfemVyb3BhZGAgd2l0aGluIGBhcmNoL3MzOTAvbW0vZXh0YWJsZS5jYC4gVGhpcyBjb3VsZCBiZSByZWFsbHkgZ29vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZXhjZXB0aW9uIGhhbmRsZXIgaXMgZG9pbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZXh0YWJsZS5jPTM5PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9zMzkwL21tL2V4dGFibGUuYy01Mi1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM6NTM6c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM9MTE5PWJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtMTM3LVx0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cdGNhc2UgRVhfVFlQRV9GUEM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqCgpSaWdodCwgYGV4X2hhbmRsZXJfemVyb3BhZGAg4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8ga2V5IGluIG9uLCBwYXJ0aWN1bGFybHkgd2hlbiBsb29raW5nIGF0IGV4Y2VwdGlvbiBoYW5kbGluZyByb3V0aW5lcy4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHNvbWUgbG93LWxldmVsIGtlcm5lbCBiZWhhdmlvci4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdmlydHVhbGl6YXRpb24uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgZXNwZWNpYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aC4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgb24gbXkgcmFkYXI7IGl0JiMzOTtzIGVzc2VudGlhbCwgb2YgY291cnNlLCBmb3IgS1ZNIHN1cHBvcnQsIHNwZWNpZmljYWxseSBmb3IgYWxsb2NhdGluZyB2aXJ0dWFsIG1hY2hpbmVzLCBhbmQgSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gYm90aCBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gIGFuZCBgcHYuY2Agd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCBoYXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGxheWVyLiBCdXQgd2hhdCBhYm91dCB0aGUgVW5pa2VybmVsIHN1cHBvcnQgZmlsZSwgYHV2LmNgPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZHVja3MgaW4gYSByb3cgZm9yIHRoYXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IHJlbGF0ZSB0byBgdXYuY2AuIElzIHRoZXJlIGEgdW5pcXVlIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIHRoYXQgaXQgZGVwZW5kcyBvbj8gSWYgbm90LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IGZlYXR1cmVzIGl0IGJvcnJvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST1RFQ1RFRF9WSVJUVUFMSVpBVElPTl9HVUVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246CgoqKlVucmF2ZWxpbmcgdGhlIGB1di5jYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLCBhbmQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogZXhhY3RseSBlbmFibGVzIHRoZSBpbmNsdXNpb24gb3IgZnVuY3Rpb25hbGl0eSBvZiBgdXYuY2A/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGNvcmUgY29tcG9uZW50IHRoYXQmIzM5O3MgYWx3YXlzIHByZXNlbnQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgaW5jbHVkZWQsIHJpZ2h0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiwgb3IgY29uZGl0aW9uYWwgbG9naWMgaXMgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHRoYXQgZmlsZSBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBtdXN0IGJlIHNvbWUgbWFjcm8gZGVmaW5lZCwgb3IgYSBmbGFnIHBhc3NlZCB0byB0aGUgY29tcGlsZXIsIHRoYXQgZGljdGF0ZXMgd2hldGhlciBvciBub3QgdGhpcyBzcGVjaWZpYyBmaWxlIGlzIGluY2x1ZGVkLCBvciBhdCBsZWFzdCBpdHMgY29kZSBpcyBwYXJ0IG9mIHRoZSBmaW5hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgbWFrZWZpbGVzLCBidWlsZCBzY3JpcHRzLCBvciBwcm9qZWN0IHNldHRpbmdzIHRvIGlkZW50aWZ5IHRoZSBrZXkgdGhhdCB1bmxvY2tzIGB1di5jYC4gSXMgaXQgYSBmZWF0dXJlIGZsYWc/IEEgdGFyZ2V0IHBsYXRmb3JtIGRlZmluaXRpb24/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHN3aXRjaD8gR290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL01ha2VmaWxlPTQ1PW9iai15XHQmIzQzOz0gbm9zcGVjLWJyYW5jaC5vIGlwbF92bXBhcm0ubyBtYWNoaW5lX2tleGVjX3JlbG9jLm8gdW53aW5kX2JjLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDY6b2JqLXlcdCYjNDM7PSBzbXAubyB0ZXh0X2Ftb2RlMzEubyBzdGFja3RyYWNlLm8gYWJzX2xvd2NvcmUubyBmYWNpbGl0eS5vIHV2Lm8gd3RpLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDctb2JqLXlcdCYjNDM7PSBkaWFnL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBBcmNoaXRlY3R1cmUgYW5kIEtNU0FOIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiwgaXNuJiMzOTt0IGl0PyBFdmVyeXRoaW5nIGluIHRoZSBrZXJuZWwsIHVsdGltYXRlbHksIGdldHMgY29tcGlsZWQuCgpOb3csIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBgRENBQ0hFX1dPUkRfQUNDRVNTYC4gV2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIHRoYXQ/IEFoLCB5ZXMsIGl0JiMzOTtzIHRpZWQgdG8gdGhlIGBTMzkwYCBhcmNoaXRlY3R1cmUuIFRoZSBjb25kaXRpb24gaXMgYGlmICFLTVNBTmAsIHdoaWNoIG1lYW5zIGl04oCZcyBlbmFibGVkIG9uIHMzOTAgdW5sZXNzIHdlIGFyZSB1c2luZyBLTVNBTi4gVGhhdCBtZWFucyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHMzOTAgdW5sZXNzIHRoZSBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgaXMgYmVpbmcgdXRpbGl6ZWQsIHdoaWNoIGlzIHVzZWZ1bCB0byByZW1lbWJlciBpbiBjYXNlIG9mIGRlYnVnZ2luZyBpc3N1ZXMgb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZ28gb3ZlciB0byBgYXJjaC9zMzkwL0tjb25maWdgLiBJJiMzOTtsbCBoYXZlIGEgbG9vayBmb3IgYEtWTWAsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd291bGQgYmUgZGVmaW5lZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSBoeXBlcnZpc29yLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgU2VjdXJlIFN0b3JhZ2UgQWNjZXNzIGluIHRoZSBTMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCB0aGUgY29udGV4dCBpcyBjbGVhcmx5IGFib3V0IGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTXkgbWluZCBpbnN0YW50bHkganVtcHMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gb3IgYmVoYXZpb3IgaXMgY29udGluZ2VudCBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgaGVscCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlIG9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgYSBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIGBLVk1gIGFuZCB0aGlzIGZ1bmN0aW9uLCBwZXJoYXBzIHRocm91Z2ggYSBjb25maWcgb3B0aW9uIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBpdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHNlY3VyZWx5IGRhdGEgaXMgYmVpbmcgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2ZhdWx0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3MS19XG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYWJvdXQgaW50ZXJwcmV0ZWQgY29kZTsgaXQmIzM5O3MgY29tcGlsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoZXJlLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgS1ZNYC4gR290IGl0LgoKTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAsIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEkgbmVlZCB0byBlc3RhYmxpc2ggcmVhY2hhYmlsaXR5LgoKTGV0IG1lIHNlZS4uLiBgdXZfYWxsb2Nfc3Rvcl92YXJgIGlzIGNhbGxlZCBieSBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGt2bV9zMzkwX3B2X2luaXRfdm1gLiAgYGt2bV9zMzkwX3B2X2luaXRfdm1gIGlzIGludm9rZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFBWIFZNLiBTbywgaWYgYSB1c2VyICpjcmVhdGVzKiBhIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNLCB0aGVuIHRoaXMgYWxsb2NhdGlvbiBwYXRoIGlzIGhpdC4gR29vZCwgaXQmIzM5O3MgcmVhY2hhYmxlLgoKTm93LCBgbG9hZF91bmFsaWduZWRfemVyb3BhZGDigKYgYWgsIGl0JiMzOTtzIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGZyb20gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oYC4gVGhhdCBtZWFucyBpdCB3aWxsIGJlIGlubGluZWQuIEl0JiMzOTtzIG5vdCBhIHN5bWJvbCBJIGNhbiBkaXJlY3RseSB0YXJnZXQsIGJ1dCB0aGUgY29kZSBpdCByZXByZXNlbnRzIGlzIHNpZ25pZmljYW50LCBnaXZlbiBpdHMgcHVycG9zZS4KCk92ZXJhbGwsIEkgdGhpbmsgdGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgdGVzdGFibGUuIFRoZXkgcmVwcmVzZW50IGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGluIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeSBmb3IgdGhlIHJlY29yZDoKCioqV29ydGhGdXp6aW5nOiB0cnVlKioKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4KCioqRm9jdXNTeW1ib2xzOioqIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGBleF9oYW5kbGVyX3plcm9wYWRgCgoqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzMzkwIEtWTSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTXMgYW5kIGFkZHMgc3VwcG9ydCBmb3IgRENBQ0hFX1dPUkRfQUNDRVNTIHdpdGggYSBuZXcgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIHVuYWxpZ25lZCB6ZXJvLXBhZGRlZCBsb2Fkcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTMuNjE1ODQxMzA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MzgyMjg0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIHMzOTAgS1ZNIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNcyBhbmQgYWRkcyBzdXBwb3J0IGZvciBEQ0FDSEVfV09SRF9BQ0NFU1Mgd2l0aCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBmb3IgdW5hbGlnbmVkIHplcm8tcGFkZGVkIGxvYWRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjEzLjYxNTg0NzQxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExODg1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGY2ZGY4YjcyZDhjYzZmNDg5YjcyMjhlMDliNjRkMWUxZjU1MTk2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxMzo0NjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLmZlODFjNTM5ZWYyZmZjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtMTYzLDYgKzE2Myw3IEBAIGNvbmZpZyBTMzkwXFxuIFxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuIFxcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxcbiBcXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxcbitcXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxcbiBcXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXFx0M1xcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcXHQ1XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVJcXHQ2XFxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXFx0XFx0N1xcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXFx0XFx0OFxcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cXHQ5XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXFx0MTBcXG5AQCAtNzksNiArODAsOSBAQFxcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVxcdFxcXFxcXG4gXFx0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSLCBfcmVnZXJyLCBfcmVnemVybywgMClcXG4gXFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcXHRcXHRcXFxcXFxuK1xcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcXG4rXFxuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcXG4gaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUodW5zaWduZWQgbG9uZyBwYWRkcik7XFxuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbiBcXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xcbkBAIC00MCw0ICs0MSwyNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuIFxcdHJldHVybiB+MVVMIFxcdTAwM2NcXHUwMDNjIGRhdGE7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXFxuKyAqXFxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXFxuKyAqIHJldHVybiB6ZXJvZXMgaW4gdGhlIG5vbi1leGlzdGluZyBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRhdGE7XFxuK1xcbitcXHRhc21faW5saW5lIHZvbGF0aWxlKFxcbitcXHRcXHRcXFwiMDpcXHRsZ1xcdCVbZGF0YV0sMCglW2FkZHJdKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiMTpcXHRub3ByXFx0JSVyN1xcXFxuXFxcIlxcbitcXHRcXHRFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcXG4rXFx0XFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXFxuK1xcdFxcdDogW2RhdGFdIFxcXCI9ZFxcXCIgKGRhdGEpXFxuK1xcdFxcdDogW2FkZHJdIFxcXCJhXFxcIiAoYWRkciksIFxcXCJtXFxcIiAoKih1bnNpZ25lZCBsb25nICopYWRkcikpO1xcbitcXHRyZXR1cm4gZGF0YTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXFxuIFxcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKlxcbitcXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxcbitcXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xcbitcXHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cXG4rXFx0ICovXFxuK1xcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcXG4rXFxuK1xcdGlmICghc3Rvcl92YXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWFyZWEgfHwgIShhcmVhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xcbitcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4rXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuK1xcdGZyZWVfdm1fYXJlYShhcmVhKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG4rXFxuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0cHRlX3QgcHRlO1xcbitcXG4rXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcXG4rXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcXG4rXFx0aWYgKCFhcmVhKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuK1xcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXR1cm4gYXJlYS1cXHUwMDNlYWRkcjtcXG4rb3V0OlxcbitcXHR1dl9mcmVlX3N0b3JfdmFyKGFyZWEtXFx1MDAzZWFkZHIpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHJlZl9jb3VudCBmb3IgYSBmb2xpbyB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIG5vXFxuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1MC4uZGM1YWMyOWI0YzMxMTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0dmZyZWUoa3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xcbiBcXHRmcmVlX3BhZ2VzKGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuIFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcXG5AQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfYWxsb2Nfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXFxuIFxcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XFxuIFxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHZ6YWxsb2Modmxlbik7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZGlzcG9zZV9vbmVfbGVmdG92ZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XFxuIFxcdGZyZWVfcGFnZXMobGVmdG92ZXItXFx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcXG4tXFx0dmZyZWUobGVmdG92ZXItXFx1MDAzZXN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cXHUwMDNlc3Rvcl92YXIpO1xcbiBkb25lX2Zhc3Q6XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmt2bS1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuQEAgLTUwLDYgKzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cXHUwMDNlZGF0YSk7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVxcdTAwM2VkYXRhKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XFxuK1xcbitcXHRhZGRyID0gcmVncy1cXHUwMDNlZ3Byc1tyZWdfYWRkcl07XFxuK1xcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XFxuK1xcdGFkZHIgXFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcXG4rXFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XFxuK1xcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBvZmZzZXQ7XFxuK1xcdHJlZ3MtXFx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcXG4rXFx0cmVncy1cXHUwMDNlcHN3LmFkZHIgPSBleHRhYmxlX2ZpeHVwKGV4KTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRmcHVfc2ZwYygwKTtcXG5AQCAtMTE4LDYgKzEzNCw4IEBAIGJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgZmFsc2UsIHJlZ3MpO1xcbiBcXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XFxuK1xcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxcbitcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX0ZQQzpcXG4gXFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfZnBjKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjc3NjU0OWQ1NWM5NGEyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXFx1MDAzZWludF9wYXJtX2xvbmcgfTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTQzOCwxMyArNDM4LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHBhbmljKFxcXCJVbmV4cGVjdGVkIFBHTSAweDNkIHdpdGggVEVJRCBiaXQgNjE9MFxcXCIpO1xcbiBcXHR9XFxuIFxcdGlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHtcXG4tXFx0XFx0Zm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShmb2xpb190b19waHlzKGZvbGlvKSk7XFxuLVxcdFxcdGlmICghcmMpXFxuLVxcdFxcdFxcdGNsZWFyX2JpdChQR19hcmNoXzEsIFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuK1xcdFxcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxcbiBcXHRcXHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXFxuQEAgLTQ1MywxMyArNDQ5LDExIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRpZiAocmMpXFxuIFxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpXFxuK1xcdFxcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSB8fCAhbW0pXFxuIFxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xcbi1cXHRcXHRtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4rXFx0XFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xcbiBcXHRcXHRpZiAoIXZtYSlcXG4tXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX01BUEVSUik7XFxuK1xcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG4gXFx0XFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG4gXFx0XFx0aWYgKCFmb2xpbykge1xcbiBcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTQuMjI4Njc1MzA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNTM3MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjZkZjhiNzJkOGNjNmY0ODliNzIyOGUwOWI2NGQxZTFmNTUxOTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTkgMTM6NDY6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiArMTYzLDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXG4gXHRzZWxlY3QgQlVJTERUSU1FX1RBQkxFX1NPUlRcbiBcdHNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyXG4rXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxuIFx0c2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUlxuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF84QiBpZiBDQ19JU19HQ0NcbiBcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG5pbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXHRcdDdcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXHRcdDhcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cdDlcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfRlJPTVx0MTBcbkBAIC03OSw2ICs4MCw5IEBAXG4gI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybylcdFxcXG4gXHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVIsIF9yZWdlcnIsIF9yZWd6ZXJvLCAwKVxuIFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbitcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcbitcbiAjZGVmaW5lIEVYX1RBQkxFX0ZQQyhfZmF1bHQsIF90YXJnZXQpXHRcdFx0XHRcdFxcXG4gXHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMClcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG5pbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbkBAIC02MzUsNiArNjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xuK3ZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcik7XG4gXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xuQEAgLTQwLDQgKzQxLDI1IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6ZXJvX2J5dGVtYXNrKHVuc2lnbmVkIGxvbmcgZGF0YSlcbiBcdHJldHVybiB+MVVMIFx1MDAzY1x1MDAzYyBkYXRhO1xuIH1cbiBcbisvKlxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXG4rICpcbisgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXG4rICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRhdGE7XG4rXG4rXHRhc21faW5saW5lIHZvbGF0aWxlKFxuK1x0XHRcIjA6XHRsZ1x0JVtkYXRhXSwwKCVbYWRkcl0pXFxuXCJcbitcdFx0XCIxOlx0bm9wclx0JSVyN1xcblwiXG4rXHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuK1x0XHRFWF9UQUJMRV9aRVJPUEFEKDFiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcbitcdFx0OiBbZGF0YV0gXCI9ZFwiIChkYXRhKVxuK1x0XHQ6IFthZGRyXSBcImFcIiAoYWRkciksIFwibVwiICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4rXHRyZXR1cm4gZGF0YTtcbit9XG4rXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZmFjaWxpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdXZfZnJlZV9yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuK3tcbitcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcdC8qXG4rXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxuK1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbitcdCAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLlxuK1x0ICovXG4rXHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcbitcbitcdGlmICghc3Rvcl92YXIpXG4rXHRcdHJldHVybjtcbitcdGFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuK1x0XHRyZXR1cm47XG4rXHRzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcbitcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4rXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpO1xuK1x0ZnJlZV92bV9hcmVhKGFyZWEpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFwia3ZtXCIpO1xuK1xuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHB0ZV90IHB0ZTtcbitcbitcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcbitcdHNldF9wdGUocHRlcCwgcHRlKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcbitcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xuK1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4rXHRpZiAoIWFyZWEpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbitcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGFkZHIsIHNpemUsIHV2X2FsbG9jX3JhbmdlX2NiLCBOVUxMKSlcbitcdFx0Z290byBvdXQ7XG4rXHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuK291dDpcbitcdHV2X2ZyZWVfc3Rvcl92YXIoYXJlYS1cdTAwM2VhZGRyKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcImt2bVwiKTtcbitcbiAvKlxuICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm9cbiAgKiBmdXJ0aGVyIHBpbnMuIFRoaXMgd2FzIGNyaWJiZWQgZnJvbSBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBvdGhlciBwbGFjZXMgaW5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMzM3LDcgKzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuK1x0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3Zhcik7XG4gXHRmcmVlX3BhZ2VzKGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbiBcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfYmFzZV9zdG9yX2xlbikpO1xuIFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcbkBAIC0zNjksNyArMzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4gXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXG4gXHR2bGVuID0gQUxJR04odmlydCAqICgobnBhZ2VzICogUEFHRV9TSVpFKSAvIEhQQUdFX1NJWkUpLCBQQUdFX1NJWkUpO1xuIFx0dmxlbiArPSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbitcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7XG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gMDtcbkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKi9cbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XG4gXHRmcmVlX3BhZ2VzKGxlZnRvdmVyLVx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcbi1cdHZmcmVlKGxlZnRvdmVyLVx1MDAzZXN0b3JfdmFyKTtcbitcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiArNTAsMjIgQEAgc3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cdTAwM2VkYXRhKTtcbitcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVx1MDAzZWRhdGEpO1xuK1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4rXG4rXHRhZGRyID0gcmVncy1cdTAwM2VncHJzW3JlZ19hZGRyXTtcbitcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbitcdGFkZHIgXHUwMDI2PSB+KHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpO1xuK1x0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XG4rXHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbitcdHJlZ3MtXHUwMDNlZ3Byc1tyZWdfZGF0YV0gPSBkYXRhO1xuK1x0cmVncy1cdTAwM2Vwc3cuYWRkciA9IGV4dGFibGVfZml4dXAoZXgpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRmcHVfc2ZwYygwKTtcbkBAIC0xMTgsNiArMTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4rXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcbitcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfRlBDOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9mcGMoZXgsIHJlZ3MpO1xuIFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDAyOGFlYjljNDhkNmZmLi43NzY1NDlkNTVjOTRhMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuQEAgLTQwOSw5ICs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbkBAIC00MzgsMTMgKzQzOCw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCIpO1xuIFx0fVxuIFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xuLVx0XHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpO1xuLVx0XHRpZiAoIXJjKVxuLVx0XHRcdGNsZWFyX2JpdChQR19hcmNoXzEsIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4rXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4rXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxuIFx0XHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXG5AQCAtNDUzLDEzICs0NDksMTEgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbitcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbitcdFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xuIFx0XHRpZiAoIXZtYSlcbi1cdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbiBcdFx0aWYgKCFmb2xpbykge1xuIFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MTQuMjI4Njc3NzA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4MjUyODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHMzOTAgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgYGFyY2gvczM5MGAgY29kZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBmdXp6aW5nIHRhcmdldCBvdXQgb2YgdGhpcy5cblxuRmlyc3QsIEkgc2VlIHNvbWUgS2NvbmZpZyBtb2RpZmljYXRpb25zIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNlbGVjdGluZyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpZiBgS01TQU5gIGlzbid0IGVuYWJsZWQuIEludGVyZXN0aW5nLCBidXQgbGlrZWx5IG5vdCBkaXJlY3RseSBmdXp6YWJsZS4gVGhlbiB0aGVyZSdzIGFuIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcyAoYEVYX1RZUEVfWkVST1BBRGAsIGBFWF9UQUJMRV9aRVJPUEFEYCkgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oYC4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBjZXJ0YWluIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enogaWYgdGhlIGNvZGUgaW52b2x2ZWQgY2FuIGJlIHRyaWdnZXJlZCByZWxpYWJseS5cblxuVGhlIGluY2x1c2lvbiBvZiBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBhbmQgaXRzIGltcGxlbWVudGF0aW9uIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGFsb25nc2lkZSB0aGUgYWRkaXRpb24gb2YgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAgbG9va3MgYSBiaXQgbW9yZSBwcm9taXNpbmcuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIHN0cmF0ZWd5LlxuXG5DcnVjaWFsbHksIHRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgYGFyY2gvczM5MC9rdm0vcHYuY2AsIHJlcGxhY2luZyBgdnphbGxvY2AvYHZmcmVlYCB3aXRoIGB1dl9hbGxvY19zdG9yX3ZhcmAvYHV2X2ZyZWVfc3Rvcl92YXJgLiBUaGF0J3MgYSBkaXJlY3QgS1ZNIHRvdWNocG9pbnQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBLVk0ncyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZS5cblxuVGhlIGNoYW5nZXMgdG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCdzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdm1hbGxvYyBhZGRyZXNzZXMgYW5kIHVzaW5nIGBsb2NrX21tX2FuZF9maW5kX3ZtYWAsIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGxpa2VseSByZWxhdGVkIHRvIHRoZSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gZmVhdHVyZS4gQW5kIHRoZSBgYXJjaC9zMzkwL21tL2V4dGFibGUuY2AgY2hhbmdlcyB0aWUgaW50byB0aGUgbmV3IGV4Y2VwdGlvbiB0YWJsZSB0eXBlcy5cblxuVGhlIGltcG9ydGFudCBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFllcyEgczM5MCBLVk0gKmlzKiBmdXp6YWJsZSBpZiB3ZSdyZSBmdXp6aW5nIHMzOTAuIEFuZCwgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBhIGJpZyB3aW4uIFRoZW4gSSByZW1lbWJlciB0aGF0IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIHJlbGF0ZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaXMgUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuIEFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIEtWTSBQVi5cblxuU28sIGxldCdzIGNvbmZpcm0gdGhlIGZ1enphYmlsaXR5LiBZZXMsIEtWTSBvbiBzMzkweCBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5Ob3csIGxldCdzIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3MgdG8gZG91YmxlLWNoZWNrIG91ciB3b3JrLiBgYXJjaC9zMzkwL2t2bS9wdi5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX0tWTWAsIHdoaWNoIGlzIGVhc3kuIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgdG8gY29uZmlybSBpdCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfUFJPVEVDVEVEX1ZJUlRVQUxJWkFUSU9OX0dVRVNUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjIyLjcxMTIwODY0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTUyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL01ha2VmaWxlPTQ1PW9iai15XFx0Kz0gbm9zcGVjLWJyYW5jaC5vIGlwbF92bXBhcm0ubyBtYWNoaW5lX2tleGVjX3JlbG9jLm8gdW53aW5kX2JjLm9cXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlOjQ2Om9iai15XFx0Kz0gc21wLm8gdGV4dF9hbW9kZTMxLm8gc3RhY2t0cmFjZS5vIGFic19sb3djb3JlLm8gZmFjaWxpdHkubyB1di5vIHd0aS5vXFxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00Ny1vYmoteVxcdCs9IGRpYWcvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDEzOjQ2OjIzLjIwMTMwOTIyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDY1MzU5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyBCdWlsZCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYHV2Lm9gLi4uIHRoYXQncyBhbHdheXMgYnVpbHQgb24gczM5MCwgbm8gcXVlc3Rpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCB0aGVyZSwgSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhhdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hhdCBhYm91dCBgcHYuY2A/IElzIGl0IGFsc28gcmlnaWRseSB0aWVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIGZsZXhpYmlsaXR5IHRoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgdGFyZ2V0IGVudmlyb25tZW50LiBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgczM5MCBpbnRyaW5zaWNzLCBhc3NlbWJseSBsYW5ndWFnZSwgb3IgcGxhdGZvcm0tZGVwZW5kZW50IGxpYnJhcmllcz8gT3IgaXMgaXQgd3JpdHRlbiBpbiBhIHdheSB0aGF0IGFsbG93cyBmb3IgYnJvYWRlciBwb3J0YWJpbGl0eSB3aXRoIG1pbmltYWwgZWZmb3J0PyBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIGZvciB0aGUgYnVpbGQgcHJvY2VzcyBkZXBlbmRpbmcgb24gdGhlIGFuc3dlci4uLiB0aW1lIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyNi4xMDc4NDY2MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTEzNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB2XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyNi4yMjEzNjQ0ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI3MTM4ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgU2VjdXJlIFN0b3JhZ2UgQWNjZXNzKipcblxuUmlnaHQsIGBwdi5vYCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS1ZNYCBpcyBkZWZpbmVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoYXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBoYW5kbGVzIHRoZXNlIGFjY2Vzc2VzLlxuXG5MZXQncyBkaXZlIGludG8gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBzZWN1cmUgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIEtWTSBpbiB0aGlzIGFyZWEuIEl0J3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoZXJlIGl0IGdldHMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MjkuMzQ4NTA2MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzA4NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjoyOS40NjEyMjAyMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5MzcxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgZm9yIENhbGxlcnMgb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgbm8gZG91YnQsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbCBmb3IgYW5hbHl6aW5nIGl0cyBpbXBhY3QsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyBhbmQga25vd2xlZGdlIHRvIGVmZmljaWVudGx5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBjYWxscz8gQW55IGNvbmRpdGlvbmFsIHVzYWdlcz8gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIHRvbywgd2hlbiBJIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MzIuNDMwNTkzNjMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0MjY0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oPTI5PXZvaWQgZG9fZGF0X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oOjMwOnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgtMzEtdm9pZCBkb19ub25fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYz00MDE9c3RhdGljIHZvaWQgKCpwZ21fY2hlY2tfdGFibGVbMTI4XSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpID0ge1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzNy1cXHRbMHgzY11cXHRcXHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0Mzg6XFx0WzB4M2RdXFx0XFx0PSBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MsXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQzOS1cXHRbMHgzZV1cXHRcXHQ9IGRlZmF1bHRfdHJhcF9oYW5kbGVyLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQ0OS1cXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM6NDUwOkNPTkRfVFJBUChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwNy1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA5LXtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3MS19XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDcyOk5PS1BST0JFX1NZTUJPTChkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MpO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6MzIuNTMxMDI1Mjg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTUwMzc0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2VjdXJlIFN0b3JhZ2UgVmlvbGF0aW9uIFRyYXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHByb2dyYW0gY2hlY2sgMHgzZCwgYSBTZWN1cmUgU3RvcmFnZSBWaW9sYXRpb24uIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIG5vdCBqdXN0IHNvbWUgdGVzdCBoYXJuZXNzLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2UuIE15IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoaXMgYmFjayB0byBtZW1vcnkgYWNjZXNzIGlzc3Vlcy5cblxuRmlyc3QsIEkgc2hvdWxkIGNoZWNrIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBUaGF0J3MgYSBsaWtlbHkgcG9pbnQgb2YgaW50ZXJlc3QuIExvb2tpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUsIEkgc2VlIGl0J3MgdXNlZCBieSBgRENBQ0hFX1dPUkRfQUNDRVNTYCwgd2hpY2ggaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBSaWdodC4gYERDQUNIRV9XT1JEX0FDQ0VTU2AgZW5hYmxlcyBvcHRpbWl6ZWQgZGNhY2hlIGxvb2t1cHMuIFRoaXMgaXMgaW1wb3J0YW50ISBUaGlzIHdpbGwgZGlyZWN0bHkgYWZmZWN0IGRjYWNoZSBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBwb3RlbnRpYWxseSBoaWdobHkgcmVhY2hhYmxlLiBXZSBhcmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCBpcyBmdW5kYW1lbnRhbCB0byBmaWxlIHN5c3RlbSBhY2Nlc3MsIHNvIHRoaXMgaXMgaGlnaCB2YWx1ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBzZWN1cmUgc3RvcmFnZSB2YXJpYWJsZXMgYXJlIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjozNi41ODYwNjUyMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTcwMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjM3PWludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYzODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYzOS12b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTI0NT1zdGF0aWMgaW50IHV2X2FsbG9jX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjU3LVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNTg6dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTkte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3NC19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI3NTpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3Ni1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0zNDY9c3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzcxLVxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuYXJjaC9zMzkwL2t2bS9wdi5jOjM3MjpcXHRrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB1dl9hbGxvY19zdG9yX3Zhcih2bGVuKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzczLVxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0NjozNi42ODA2NDEzMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyODkwNjQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBpbiBQViBWTSBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fczM5MF9wdl9hbGxvY192bWAsIHdoaWNoIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgY2FsbGVkIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgYSBQViBWTS4gTXkgaW5zdGluY3QsIGJlaW5nIHdobyBJIGFtLCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgcmljaCBhcmVhIGZvciBmdXp6aW5nLiBUaGVyZSdzIGFsbW9zdCBhbHdheXMgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIHVuY292ZXIgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBzZXR1cCBwaGFzZXMgb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBuYXJyb3dpbmcuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhcyBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhcmUgb2Z0ZW4ga2V5LiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AuIEZpbmFsbHksIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcsIHNvIEknbSBnb2luZyB0byBkaXZlIGRlZXBlciBhbmQgbG9vayBhdCBgZXhfaGFuZGxlcl96ZXJvcGFkYCB3aXRoaW4gYGFyY2gvczM5MC9tbS9leHRhYmxlLmNgLiBUaGlzIGNvdWxkIGJlIHJlYWxseSBnb29kLiBMZXQncyBzZWUgd2hhdCB0aGF0IGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGRvaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NDAuMjA5NTQ5NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzMzMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9leHRhYmxlLmM9Mzk9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTItXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYzo1MzpzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYz0xMTk9Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzNy1cXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cXHRjYXNlIEVYX1RZUEVfRlBDOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0MC4zMDcyOTEwOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMDkwNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqXG5cblJpZ2h0LCBgZXhfaGFuZGxlcl96ZXJvcGFkYCDigJMgdGhhdCdzIGEgc29saWQgc3ltYm9sIHRvIGtleSBpbiBvbiwgcGFydGljdWxhcmx5IHdoZW4gbG9va2luZyBhdCBleGNlcHRpb24gaGFuZGxpbmcgcm91dGluZXMuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHNvbWUgbG93LWxldmVsIGtlcm5lbCBiZWhhdmlvci4gTm93LCBsZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB2aXJ0dWFsaXphdGlvbi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgZXNwZWNpYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBvbiBteSByYWRhcjsgaXQncyBlc3NlbnRpYWwsIG9mIGNvdXJzZSwgZm9yIEtWTSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIGFsbG9jYXRpbmcgdmlydHVhbCBtYWNoaW5lcywgYW5kIEkga25vdyBpdCdzIHJlbGF0ZWQgdG8gYm90aCBga3ZtX3MzOTBfcHZfYWxsb2Nfdm1gIGFuZCBgcHYuY2Agd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCBoYXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcGFyYXZpcnR1YWxpemF0aW9uIGxheWVyLiBCdXQgd2hhdCBhYm91dCB0aGUgVW5pa2VybmVsIHN1cHBvcnQgZmlsZSwgYHV2LmNgPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGFsbCB0aGUgY29uZmlndXJhdGlvbiBkdWNrcyBpbiBhIHJvdyBmb3IgdGhhdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgcmVsYXRlIHRvIGB1di5jYC4gSXMgdGhlcmUgYSB1bmlxdWUgY29uZmlndXJhdGlvbiBvciBzb21ldGhpbmcgdGhhdCBpdCBkZXBlbmRzIG9uPyBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgZmVhdHVyZXMgaXQgYm9ycm93cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0NC4wMDgxOTcwOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ0NjU0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BST1RFQ1RFRF9WSVJUVUFMSVpBVElPTl9HVUVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0NC4xMTY2NTAxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTMyNTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqVW5yYXZlbGluZyB0aGUgYHV2LmNgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJ20gbG9va2luZyBhdCB0aGlzLCBhbmQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogZXhhY3RseSBlbmFibGVzIHRoZSBpbmNsdXNpb24gb3IgZnVuY3Rpb25hbGl0eSBvZiBgdXYuY2A/IEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoaXMgaW1wbGllcyB0aGF0IHRoaXMgaXNuJ3QgYSBjb3JlIGNvbXBvbmVudCB0aGF0J3MgYWx3YXlzIHByZXNlbnQuIEl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBpbmNsdWRlZCwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb24sIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBpcyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgdGhhdCBmaWxlIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIG1hY3JvIGRlZmluZWQsIG9yIGEgZmxhZyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLCB0aGF0IGRpY3RhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3BlY2lmaWMgZmlsZSBpcyBpbmNsdWRlZCwgb3IgYXQgbGVhc3QgaXRzIGNvZGUgaXMgcGFydCBvZiB0aGUgZmluYWwgY29tcGlsYXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIG1ha2VmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgcHJvamVjdCBzZXR0aW5ncyB0byBpZGVudGlmeSB0aGUga2V5IHRoYXQgdW5sb2NrcyBgdXYuY2AuIElzIGl0IGEgZmVhdHVyZSBmbGFnPyBBIHRhcmdldCBwbGF0Zm9ybSBkZWZpbml0aW9uPyBBIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzd2l0Y2g/IEdvdHRhIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzcyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NDcuMzQ3OTc3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjkwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT00NT1vYmoteVxcdCs9IG5vc3BlYy1icmFuY2gubyBpcGxfdm1wYXJtLm8gbWFjaGluZV9rZXhlY19yZWxvYy5vIHVud2luZF9iYy5vXFxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZTo0NjpvYmoteVxcdCs9IHNtcC5vIHRleHRfYW1vZGUzMS5vIHN0YWNrdHJhY2UubyBhYnNfbG93Y29yZS5vIGZhY2lsaXR5Lm8gdXYubyB3dGkub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDctb2JqLXlcXHQrPSBkaWFnL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo0Ny40MzUyNzQyMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTE4NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgUzM5MCBBcmNoaXRlY3R1cmUgYW5kIEtNU0FOIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBpdCdzIGNvbXBpbGVkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLCBpc24ndCBpdD8gRXZlcnl0aGluZyBpbiB0aGUga2VybmVsLCB1bHRpbWF0ZWx5LCBnZXRzIGNvbXBpbGVkLlxuXG5Ob3csIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBgRENBQ0hFX1dPUkRfQUNDRVNTYC4gV2hhdCdzIHRoZSBkZWFsIHdpdGggdGhhdD8gQWgsIHllcywgaXQncyB0aWVkIHRvIHRoZSBgUzM5MGAgYXJjaGl0ZWN0dXJlLiBUaGUgY29uZGl0aW9uIGlzIGBpZiAhS01TQU5gLCB3aGljaCBtZWFucyBpdOKAmXMgZW5hYmxlZCBvbiBzMzkwIHVubGVzcyB3ZSBhcmUgdXNpbmcgS01TQU4uIFRoYXQgbWVhbnMgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaXMgKmFsd2F5cyogZW5hYmxlZCBvbiBzMzkwIHVubGVzcyB0aGUgS2VybmVsTWVtb3J5U2FuaXRpemVyIGlzIGJlaW5nIHV0aWxpemVkLCB3aGljaCBpcyB1c2VmdWwgdG8gcmVtZW1iZXIgaW4gY2FzZSBvZiBkZWJ1Z2dpbmcgaXNzdWVzIG9yIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuXG5cblNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBvdmVyIHRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEknbGwgaGF2ZSBhIGxvb2sgZm9yIGBLVk1gLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBhbnkgaW50ZXJhY3Rpb24gd291bGQgYmUgZGVmaW5lZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSBoeXBlcnZpc29yLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTEuNDc2NDYzNzc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzOTA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTEuNjE3ODU4OTY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjcxMDk5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgdGhlIFNlY3VyZSBTdG9yYWdlIEFjY2VzcyBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCB0aGUgY29udGV4dCBpcyBjbGVhcmx5IGFib3V0IGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTXkgbWluZCBpbnN0YW50bHkganVtcHMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbidzIGV4ZWN1dGlvbiBvciBiZWhhdmlvciBpcyBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBoZWxwIGRldGVybWluZSB0aGUgc2NvcGUgb2YgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUgb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBgS1ZNYCBhbmQgdGhpcyBmdW5jdGlvbiwgcGVyaGFwcyB0aHJvdWdoIGEgY29uZmlnIG9wdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgaXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBzZWN1cmVseSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzAwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDY6NTQuOTQ0OTcxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTA1OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDQ9Tk9LUFJPQkVfU1lNQk9MKGRvX2RhdF9leGNlcHRpb24pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDA3LVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQwODp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDcxLX1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NzI6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxMzo0Njo1NS4wMjY0ODIyNTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MDU3OTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYWJvdXQgaW50ZXJwcmV0ZWQgY29kZTsgaXQncyBjb21waWxlZC4gVGhhdCdzIGEgZ2l2ZW4uIFdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoZXJlLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgS1ZNYC4gR290IGl0LlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGFuZCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gSSBuZWVkIHRvIGVzdGFibGlzaCByZWFjaGFiaWxpdHkuXG5cbkxldCBtZSBzZWUuLi4gYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjYWxsZWQgYnkgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBrdm1fczM5MF9wdl9pbml0X3ZtYC4gIGBrdm1fczM5MF9wdl9pbml0X3ZtYCBpcyBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBQViBWTS4gU28sIGlmIGEgdXNlciAqY3JlYXRlcyogYSBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBWTSwgdGhlbiB0aGlzIGFsbG9jYXRpb24gcGF0aCBpcyBoaXQuIEdvb2QsIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYOKApiBhaCwgaXQncyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaGAuIFRoYXQgbWVhbnMgaXQgd2lsbCBiZSBpbmxpbmVkLiBJdCdzIG5vdCBhIHN5bWJvbCBJIGNhbiBkaXJlY3RseSB0YXJnZXQsIGJ1dCB0aGUgY29kZSBpdCByZXByZXNlbnRzIGlzIHNpZ25pZmljYW50LCBnaXZlbiBpdHMgcHVycG9zZS5cblxuT3ZlcmFsbCwgSSB0aGluayB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCB0ZXN0YWJsZS4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaW4gY29yZSBrZXJuZWwgYW5kIEtWTSBjb2RlLlxuXG5IZXJlJ3MgbXkgc3VtbWFyeSBmb3IgdGhlIHJlY29yZDpcblxuKipXb3J0aEZ1enppbmc6IHRydWUqKlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIHMzOTAgS1ZNIFByb3RlY3RlZCBWaXJ0dWFsaXphdGlvbiAoUFYpIFZNcyBhbmQgYWRkcyBzdXBwb3J0IGZvciBEQ0FDSEVfV09SRF9BQ0NFU1Mgd2l0aCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBmb3IgdW5hbGlnbmVkIHplcm8tcGFkZGVkIGxvYWRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgS1ZNIGNvZGUuXG5cbioqRm9jdXNTeW1ib2xzOioqIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGBleF9oYW5kbGVyX3plcm9wYWRgXG5cbioqRW5hYmxlQ29uZmlnczoqKiBgS1ZNYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTM6NDc6MDIuMDE3MDY0MDc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTY3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dl9hbGxvY19zdG9yX3ZhclwiLFxuICAgIFwidXZfZnJlZV9zdG9yX3ZhclwiLFxuICAgIFwiZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgczM5MCBLVk0gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgVk1zIGFuZCBhZGRzIHN1cHBvcnQgZm9yIERDQUNIRV9XT1JEX0FDQ0VTUyB3aXRoIGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciB1bmFsaWduZWQgemVyby1wYWRkZWQgbG9hZHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlxbg5[1] Phase: Succeeded StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 13:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 13:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2] Phase: Succeeded StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 13:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-19 13:47:14 +0000 UTC FinishedAt: 2026-07-19 13:47:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3957024223/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-19 13:47:24 +0000 UTC FinishedAt: 2026-07-19 14:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-19 13:47:24 +0000 UTC FinishedAt: 2026-07-19 14:38:34 +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:*79a51f2f-33c1-49bf-9f27-8224529bccc7,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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3957024223/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": "39daba7d-3d7c-4a80-826f-7785bb994f72", "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-workflowlxbg5/series-workflowlxbg5-build-action-2028882661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-19 13:47:24 +0000 UTC FinishedAt: 2026-07-19 14:38:22 +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:*79a51f2f-33c1-49bf-9f27-8224529bccc7,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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3957024223/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": "39daba7d-3d7c-4a80-826f-7785bb994f72", "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-workflowlxbg5/series-workflowlxbg5-build-action-2028882661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-19 14:38:34 +0000 UTC FinishedAt: 2026-07-19 14:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-19 14:38:34 +0000 UTC FinishedAt: 2026-07-19 14:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-19 14:38:34 +0000 UTC FinishedAt: 2026-07-19 14:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-19 14:38:34 +0000 UTC FinishedAt: 2026-07-19 14:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3424548206/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-19 14:38:45 +0000 UTC FinishedAt: 2026-07-19 14:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-19 14:38:45 +0000 UTC FinishedAt: 2026-07-19 14:40:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39daba7d-3d7c-4a80-826f-7785bb994f72,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-workflowlxbg5/series-workflowlxbg5-build-action-2028882661/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-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-19 14:40:48 +0000 UTC FinishedAt: 2026-07-19 14:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-19 14:40:48 +0000 UTC FinishedAt: 2026-07-19 14:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-19 14:40:48 +0000 UTC FinishedAt: 2026-07-19 15:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-19 14:40:48 +0000 UTC FinishedAt: 2026-07-19 15:31:00 +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:*79a51f2f-33c1-49bf-9f27-8224529bccc7,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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3424548206/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": "06baa73d-362a-4f4c-b2f3-22bcfada04a6", "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-workflowlxbg5/series-workflowlxbg5-build-action-3259516546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-19 14:40:48 +0000 UTC FinishedAt: 2026-07-19 15:30:46 +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:*79a51f2f-33c1-49bf-9f27-8224529bccc7,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-workflowlxbg5/series-workflowlxbg5-convert-artifact-3424548206/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": "06baa73d-362a-4f4c-b2f3-22bcfada04a6", "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-workflowlxbg5/series-workflowlxbg5-build-action-3259516546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-19 15:31:00 +0000 UTC FinishedAt: 2026-07-19 15:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-19 15:31:00 +0000 UTC FinishedAt: 2026-07-19 15:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-19 15:31:00 +0000 UTC FinishedAt: 2026-07-19 15:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-19 15:31:00 +0000 UTC FinishedAt: 2026-07-19 15:32:45 +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:*06baa73d-362a-4f4c-b2f3-22bcfada04a6,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-workflowlxbg5/series-workflowlxbg5-build-action-3259516546/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-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-19 15:33:01 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-19 15:33:01 +0000 UTC FinishedAt: 2026-07-19 15:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-19 15:33:01 +0000 UTC FinishedAt: 2026-07-19 15:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-19 15:33:02 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"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:*39daba7d-3d7c-4a80-826f-7785bb994f72,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06baa73d-362a-4f4c-b2f3-22bcfada04a6,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-workflowlxbg5/series-workflowlxbg5-build-action-2028882661/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-workflowlxbg5/series-workflowlxbg5-build-action-3259516546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-19 15:33:02 +0000 UTC FinishedAt: 2026-07-19 15:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-19 15:33:02 +0000 UTC FinishedAt: 2026-07-19 15:33:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"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-workflowlxbg5/series-workflowlxbg5-convert-artifact-1079269139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-19 15:33:02 +0000 UTC FinishedAt: 2026-07-19 15:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-19 15:33:48 +0000 UTC FinishedAt: 2026-07-19 15:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_alloc_stor_var","uv_free_stor_var","do_secure_storage_access","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9fcdde1a-d439-40d7-b1f5-c99152c503c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-19 15:33:48 +0000 UTC FinishedAt: 2026-07-19 15:36:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39daba7d-3d7c-4a80-826f-7785bb994f72,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06baa73d-362a-4f4c-b2f3-22bcfada04a6,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-workflowlxbg5/series-workflowlxbg5-build-action-2028882661/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-workflowlxbg5/series-workflowlxbg5-build-action-3259516546/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-workflowlxbg5/series-workflowlxbg5-convert-artifact-1079269139/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,}