Name: series-workflowxm47w Phase: Succeeded StartedAt: 2026-08-12 07:09:50 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[0] Phase: Succeeded StartedAt: 2026-08-12 07:09:50 +0000 UTC FinishedAt: 2026-08-12 08:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 07:09:50 +0000 UTC FinishedAt: 2026-08-12 08:05:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "bed1a10a-3d76-4c6e-b350-29924a68da19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_subflow_reqsk_clone", "mptcp_token_move_request", "mptcp_token_accept", "mptcp_sk_clone_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGhhc2ggbGlzdCBtYW5pcHVsYXRpb24gKGhsaXN0X251bGxzKSwgYW5kIG9iamVjdCBvd25lcnNoaXAgdHJhbnNmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZkYmM1MDkxM2Y3YzhiODMxMTVkNjI0ZTEyMjdkN2Q1ZDA5MThlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA4OjA0OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiAmIzQzOzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbiYjNDM7XHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiAmIzQzOzM1NjEsMjQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuJiM0MztcdG1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7XG4mIzQzO1x0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxuJiM0MztcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbiYjNDM7XHQgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbiYjNDM7XHRzb2NrX3B1dChuc2spO1xuJiM0MztcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xuJiM0MztcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4mIzQzO1x0aW5ldF9zayhuc2spLVx1MDAzZWluZXRfbnVtID0gMDtcbiYjNDM7XHRpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc29jayAqc3NrLFxuQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdHNvY2tfaG9sZChzc2spO1xuIFxuLVx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcbi1cdCAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0XG4tXHQgKi9cbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcbi1cbiBcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxuIFx0ICogdXNlcyB0aGUgY29ycmVjdCBkYXRhXG4gXHQgKi9cbkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuJiM0MztcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4mIzQzO1x0XHRzb2NrX3B1dChzc2spO1xuJiM0MztcdFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gXHRcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XG4gXHRiaF91bmxvY2tfc29jayhuc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLjY5ZDUzMWM3NzBjNDQgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc2LDkgJiM0MzsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4mIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiAmIzQzOzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG4mIzQzO1xuJiM0MztcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcbiBcdFx0XHRcdCAgdm9pZCAqaG1hYylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uMjQ4NzdhMmMzNzcyNyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lJiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCwgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmRiYzUwOTEzZjdjOGI4MzExNWQ2MjRlMTIyN2Q3ZDVkMDkxOGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDg6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmIwNWM4ZDM3YTA4MzEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNTYxLDYgJiM0MzszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3Niw5ICYjNDM7MTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uZDQwYWIwOWFiNzViNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTsKJiM0MzsKJiM0MzsJc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHN1YmZsb3dfcmVxLSZndDttc2spCiYjNDM7CQlzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiYjNDM7CXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CQlpZiAocG9zID09IHN1YmZsb3dfcmVxKQomIzQzOwkJCWhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV3X3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoCiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZApAQCAtMTg3LDI0ICYjNDM7MjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogICoKICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLgogICogaXMgbm90IGEgam9pbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwlib29sIHJldCA9IGZhbHNlOwogCi0Jc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwogCi0JLyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi8KIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSkKLQkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJaWYgKHBvcyAhPSByZXEpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKIAlfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssICZhbXA7YnVja2V0LSZndDttc2tfY2hhaW4pOwomIzQzOwlyZXQgPSB0cnVlOwomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pCkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKIAotCWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQogCQlyZXR1cm47CiAKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHsKJiM0MzsJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkgewogCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtwb3MtJmd0O3Rva2VuX25vZGUpOwogCQlidWNrZXQtJmd0O2NoYWluX2xlbi0tOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwppbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAJS1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKCZhbXA7aW5pdF9uZXQsIG1zay0mZ3Q7dG9rZW4pKTsKIAogCS8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi8KQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAogCS8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqLwogCXJlZmNvdW50X3NldCgmYW1wO3NrLSZndDtza19yZWZjbnQsIDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIE1QVENQKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBuZXcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaG9va3MgaXQgdXAgdmlhIGBpbmV0X3JlcXNrX2Nsb25lYCBpbiBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQuIEl0IGFsc28gc2VlbXMgdG8gcmVmaW5lIHRoZSB0b2tlbiBtYW5hZ2VtZW50IGxvZ2ljLiBJIHNlZSBhZGp1c3RtZW50cyB0byBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdG8gbWFuYWdlIGBtcHRjcF90b2tlbl9hY2NlcHRgIGZhaWx1cmVzLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YC4gVGhlIHdheSBJIHNlZSBpdCwgdGhleSYjMzk7cmUgdGlnaHRlbmluZyB1cCBob3cgdGhlc2UgdG9rZW5zIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgYSBib29sZWFuIHJldHVybiB2YWx1ZSBmb3IgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gYWRkcmVzcyB1bmhhc2hlZCB0b2tlbiBub2Rlcy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IE1QVENQLCBkZWFsaW5nIHdpdGggcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFdlIHdhbnQgdG8gaWRlbnRpZnkgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBlYXJseS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBDT05GSUcgb3B0aW9ucyBhcmUgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gU2luY2UgdGhpcyBpcyBpbiBgbmV0L21wdGNwL2AsIHRoZSBLY29uZmlnIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IG9yIHRoZSByb290IGBuZXQvS2NvbmZpZ2AgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb25maWd1cmF0aW9uLCBzdGFydGluZyB3aXRoIGBDT05GSUdfTVBUQ1BgIGFzIHRoZSBwcmltYXJ5IHBvaW50IG9mIHJlZmVyZW5jZS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHN1YmZsb3cgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZS4uLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlciBpbnNwZWN0aW9uOiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2Ugc2VlbSB0byBiZSBjZW50cmFsIHRvIGhvdyBNUFRDUCBtYW5hZ2VzIGl0cyBzdWJmbG93cyBhbmQgY29ubmVjdGlvbiBzZXR1cCwgc28gSSBzaG91bGQgbG9vayBpbnRvIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLgoKQWxyaWdodCwgbGV0IG1lIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm90LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd2hhdCBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbi4gU2Nhbm5pbmcgdGhlIHNvdXJjZSBjb2RlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgKGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgYW5kIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCksIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIChpbiBgbmV0L21wdGNwL3Rva2VuLmNgKSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAgKGFsc28gaW4gYG5ldC9tcHRjcC90b2tlbi5jYCksIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgKGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2ApIGFyZSBhbGwgKm5vbi1zdGF0aWMqLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGNvcmUgcGFydHMgb2YgdGhlIGludGVyZmFjZSBNUFRDUCBwcmVzZW50cyB0byB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4KCmBpbmV0X3JlcXNrX2Nsb25lYCBpcyBhIGdvb2QgZnVuY3Rpb24sIGJ1dCBpdCBpcyAqc3RhdGljKiBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHdoaWNoIG1ha2VzIGl0IGEgaGVscGVyIGFuZCBwcm9iYWJseSBub3Qgb25lIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBTaW1pbGFybHksIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGlzIHN0YXRpYyBhcyB3ZWxsIGFuZCBJJiMzOTtsbCBpZ25vcmUgaXQgZm9yIG5vdy4KClNvLCB0byBzdW1tYXJpemUsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgZm91ciBub24tc3RhdGljIGZ1bmN0aW9uczoKCiogICBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAKKiAgIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgCiogICBgbXB0Y3BfdG9rZW5fYWNjZXB0YAoqICAgYG1wdGNwX3NrX2Nsb25lX2luaXRgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZWlyIHVzZSBhbmQgYW55IE1QVENQIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9Mj1jb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG5uZXQvbXB0Y3AvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvbXB0Y3AvS2NvbmZpZy01LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIElORVRfRElBR1xubmV0L21wdGNwL0tjb25maWctMTgtXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWc9MjA9Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG5uZXQvbXB0Y3AvS2NvbmZpZzoyMjpcdGRlcGVuZHMgb24gSVBWNj15XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMy1cdGRlZmF1bHQgeVxuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI1PWNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNzpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tcHRjcC9LY29uZmlnLTI4LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTIwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipFbmFibGluZyBNdWx0aXBhdGggVENQIChNUFRDUCkqKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NUFRDUGAgaXMgZGVwZW5kZW50IG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBzdGFuZGFyZDsgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQgZ2l2ZW4gdGhlIGFkdmFuY2VtZW50cyBpbiB0aGlzIGFyZWEgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGl0IHNlZW1zIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gKmVuYWJsZSogYE1QVENQYC4gVGhlIGFkdmFudGFnZXMgaW4gdGVybXMgb2YgcmVzaWxpZW5jZSBhbmQgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGFyZSBjb21wZWxsaW5nLgoKT2theSwgbm93IGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgZG9jdW1lbnQgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmRiYzUwOTEzZjdjOGI4MzExNWQ2MjRlMTIyN2Q3ZDVkMDkxOGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDg6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmIwNWM4ZDM3YTA4MzEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNTYxLDYgJiM0MzszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3Niw5ICYjNDM7MTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uZDQwYWIwOWFiNzViNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTsKJiM0MzsKJiM0MzsJc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHN1YmZsb3dfcmVxLSZndDttc2spCiYjNDM7CQlzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiYjNDM7CXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CQlpZiAocG9zID09IHN1YmZsb3dfcmVxKQomIzQzOwkJCWhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV3X3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoCiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZApAQCAtMTg3LDI0ICYjNDM7MjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogICoKICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLgogICogaXMgbm90IGEgam9pbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwlib29sIHJldCA9IGZhbHNlOwogCi0Jc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwogCi0JLyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi8KIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSkKLQkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJaWYgKHBvcyAhPSByZXEpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKIAlfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssICZhbXA7YnVja2V0LSZndDttc2tfY2hhaW4pOwomIzQzOwlyZXQgPSB0cnVlOwomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pCkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKIAotCWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQogCQlyZXR1cm47CiAKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHsKJiM0MzsJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkgewogCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtwb3MtJmd0O3Rva2VuX25vZGUpOwogCQlidWNrZXQtJmd0O2NoYWluX2xlbi0tOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwppbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAJS1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKCZhbXA7aW5pdF9uZXQsIG1zay0mZ3Q7dG9rZW4pKTsKIAogCS8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi8KQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAogCS8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqLwogCXJlZmNvdW50X3NldCgmYW1wO3NrLSZndDtza19yZWZjbnQsIDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyNgoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgUmVxdWVzdCBTb2NrZXQgYW5kIFRva2VuIExpZmVjeWNsZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIHJlZmluaW5nIGhvdyBNUFRDUCBtYW5hZ2VzIHJlcXVlc3Qgc29ja2V0cyBhbmQgdG9rZW5zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGNsb25pbmcgb3BlcmF0aW9ucywgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBhcmUgc2ltaWxhciB0byBTWU4gY29va2llIG1lY2hhbmlzbXMuIFRoZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugb2JqZWN0cyB3aXRoaW4gdGhlIE1QVENQIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLiBObyBuZXcgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNsdWRpbmcgYHNvY2tfaG9sZGApLCBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgaGFzaCBsaXN0cyAoYGhsaXN0X251bGxzYCkuIFRoaXMgcG9pbnRzIHRvd2FyZCB0aGUgc3RhbmRhcmQgcmlza3MgaW4ga2VybmVsIGRldmVsb3BtZW50OiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gSSBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZWl0aGVyIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGZ1bmN0aW9uLiBPa2F5LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRha2luZyBhIGNsb25lZCByZXF1ZXN0IHNvY2tldCAoYG5ld19yZXFgKSBhbmQgcGVyZm9ybWluZyBzb21lIE1QVENQLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGhlIGBtc2tgIGFuZCBtb3ZpbmcgdGhlIHRva2VuLiBJdCYjMzk7cyBjYWxsaW5nIGBpbmV0X3JlcXNrX2Nsb25lYCB3aGljaCwgaW1wb3J0YW50bHksIGNvcGllcyBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFgKSB0byB0aGUgY2xvbmUgKGBucmVxYCkuIFNvLCBhZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBjbG9uZWQgb2JqZWN0IHNlZW1zIHNvdW5kLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIEFscmlnaHQsIHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBtYW5hZ2luZyB0aGUgdHJhbnNmZXIgb2YgdG9rZW5zIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmVkIHJlcXVlc3Qgc29ja2V0cywgd2l0aCBhIHNpZ25pZmljYW50IGVtcGhhc2lzIG9uIGhhbmRsaW5nIHRoZSBoYXNoZWQgc3RhdGUgb2YgdGhlIHRva2VucywgaW5jbHVkaW5nIHRoZSBsb2NrbGVzcyBjYWxscy4KClNvLCB0aGUgY2hhbmdlcyBzZWVtIHJvYnVzdC4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBtYW5hZ2luZyBhIGhhc2ggdGFibGUuIFRoZSBpbnRyb2R1Y2VkIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBVQUYsIGRvdWJsZS1mcmVlLCBhbmQgbnVsbC1kZXJlZmVyZW5jZSBwcm9ibGVtcywgd2hpY2ggS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMwLjY5ODY3OTE5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjE3MDU4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6MzAuNjk4Njg0NzA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY2MTYzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGZkYmM1MDkxM2Y3YzhiODMxMTVkNjI0ZTEyMjdkN2Q1ZDA5MThlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjBhMDJhYzFlZDIyZDkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMjIzLDYgKzIyMyw4IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbiBcXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5iMDVjOGQzN2EwODMxIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzU2MSw2ICszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcXG4rXFxuK1xcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcXG4rXFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcXG4rXFx0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxcbitcXHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXFxuK1xcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cXG4rXFx0ICovXFxuK1xcdGJoX3VubG9ja19zb2NrKG5zayk7XFxuK1xcdHNvY2tfcHV0KG5zayk7XFxuK1xcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xcbitcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbitcXHRpbmV0X3NrKG5zayktXFx1MDAzZWluZXRfbnVtID0gMDtcXG4rXFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XFxuK31cXG4rXFxuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbkBAIC0zNjIwLDExICszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4gXFx0c29ja19ob2xkKHNzayk7XFxuIFxcbi1cXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxcbi1cXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxcbi1cXHQgKi9cXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xcbi1cXG4gXFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXFxuIFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbiBcXHQgKi9cXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xcbiBcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBOVUxMKTtcXG4rXFx0XFx0c29ja19wdXQoc3NrKTtcXG4rXFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxcbiBcXHRcXHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xcbiBcXHRiaF91bmxvY2tfc29jayhuc2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuaW5kZXggMWI4MGYyZDZlYzVhMi4uNjlkNTMxYzc3MGM0NCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuQEAgLTEwNzYsOSArMTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gfVxcbiBcXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xcbiB9XFxuIFxcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbitcXG4rXFx0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChzdWJmbG93X3JlcS1cXHUwMDNlbXNrKVxcbitcXHRcXHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXFx1MDAzZW1zayk7XFxuK1xcbitcXHRtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QocmVxLCBuZXdfcmVxKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcXG4gXFx0XFx0XFx0XFx0ICB2b2lkICpobWFjKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcXG5pbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcXG5AQCAtMTgwLDYgKzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbitcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSkge1xcbitcXHRcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuK1xcdFxcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpXFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXdfc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gICpcXG4gICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuXFxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuXFxuICAqL1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXG4tXFx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVxcdTAwM2Vza19wcm90LCAxKTtcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xcbiBcXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpXFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4rXFx0aWYgKHBvcyAhPSByZXEpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbiBcXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFxcdTAwMjZidWNrZXQtXFx1MDAzZW1za19jaGFpbik7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbit1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKVxcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuIFxcbi1cXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcXG4rXFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnBvcy1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdFxcdGJ1Y2tldC1cXHUwMDNlY2hhaW5fbGVuLS07XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXFxuIFxcdFxcdFxcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XFxuIFxcdG1zay1cXHUwMDNldG9rZW4gPSByZXEtXFx1MDAzZXRva2VuO1xcbi1cXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcXG4gXFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFxcdTAwMjZpbml0X25ldCwgbXNrLVxcdTAwM2V0b2tlbikpO1xcbiBcXG4gXFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXG4gXFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMyLjA2NTU4MTUxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MDc5MzcxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCwgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZGJjNTA5MTNmN2M4YjgzMTE1ZDYyNGUxMjI3ZDdkNWQwOTE4ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICsyMjMsOCBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiArMzU2MSwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzYyMCwxMSArMzYzOCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3Niw5ICsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xuK1xuK1x0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4rXHRcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cdTAwM2Vtc2spO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMyLjA2NTU4MjYyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDc3NDg0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgTVBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCBob29rcyBpdCB1cCB2aWEgYGluZXRfcmVxc2tfY2xvbmVgIGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gVGhhdCdzIHNpZ25pZmljYW50LiBJdCBhbHNvIHNlZW1zIHRvIHJlZmluZSB0aGUgdG9rZW4gbWFuYWdlbWVudCBsb2dpYy4gSSBzZWUgYWRqdXN0bWVudHMgdG8gYG1wdGNwX3NrX2Nsb25lX2luaXRgIHRvIG1hbmFnZSBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBmYWlsdXJlcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIFRoZSB3YXkgSSBzZWUgaXQsIHRoZXkncmUgdGlnaHRlbmluZyB1cCBob3cgdGhlc2UgdG9rZW5zIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgYSBib29sZWFuIHJldHVybiB2YWx1ZSBmb3IgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gYWRkcmVzcyB1bmhhc2hlZCB0b2tlbiBub2Rlcy5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgTVBUQ1AsIGRlYWxpbmcgd2l0aCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgc2NvcGUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2Ugd2FudCB0byBpZGVudGlmeSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGVhcmx5LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBDT05GSUcgb3B0aW9ucyBhcmUgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gU2luY2UgdGhpcyBpcyBpbiBgbmV0L21wdGNwL2AsIHRoZSBLY29uZmlnIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IG9yIHRoZSByb290IGBuZXQvS2NvbmZpZ2AgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9tcHRjcC9LY29uZmlnYCBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjM3LjM3MzMzMzU2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQxNTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDozNy40NDQ3NTc5NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU3MTE3OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNUFRDUCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYENPTkZJR19NUFRDUGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgc3ViZmxvdyBwcm9jZXNzLiBMZXQncyBzZWUuLi5cblxuSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb246IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBzZWVtIHRvIGJlIGNlbnRyYWwgdG8gaG93IE1QVENQIG1hbmFnZXMgaXRzIHN1YmZsb3dzIGFuZCBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBsb29rIGludG8gaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuXG5cbkFscmlnaHQsIGxldCBtZSBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIG9yIG5vdC4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHdoYXQgSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4uIFNjYW5uaW5nIHRoZSBzb3VyY2UgY29kZSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgKGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgYW5kIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCksIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIChpbiBgbmV0L21wdGNwL3Rva2VuLmNgKSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAgKGFsc28gaW4gYG5ldC9tcHRjcC90b2tlbi5jYCksIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgKGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2ApIGFyZSBhbGwgKm5vbi1zdGF0aWMqLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGNvcmUgcGFydHMgb2YgdGhlIGludGVyZmFjZSBNUFRDUCBwcmVzZW50cyB0byB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay5cblxuYGluZXRfcmVxc2tfY2xvbmVgIGlzIGEgZ29vZCBmdW5jdGlvbiwgYnV0IGl0IGlzICpzdGF0aWMqIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgd2hpY2ggbWFrZXMgaXQgYSBoZWxwZXIgYW5kIHByb2JhYmx5IG5vdCBvbmUgdG8gZm9jdXMgb24gZGlyZWN0bHkuIFNpbWlsYXJseSwgYG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3lgIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgaXMgc3RhdGljIGFzIHdlbGwgYW5kIEknbGwgaWdub3JlIGl0IGZvciBub3cuXG5cblNvLCB0byBzdW1tYXJpemUsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgZm91ciBub24tc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYFxuKiAgIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgXG4qICAgYG1wdGNwX3Rva2VuX2FjY2VwdGBcbiogICBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGBcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZWlyIHVzZSBhbmQgYW55IE1QVENQIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo0NS40MDE4NzgzNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MjY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZz0yPWNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxubmV0L21wdGNwL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQvbXB0Y3AvS2NvbmZpZy01LVxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxubmV0L21wdGNwL0tjb25maWctMTgtXFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MjA9Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbm5ldC9tcHRjcC9LY29uZmlnOjIyOlxcdGRlcGVuZHMgb24gSVBWNj15XFxubmV0L21wdGNwL0tjb25maWctMjMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0yNT1jb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNzpcXHRkZXBlbmRzIG9uIEtVTklUXFxubmV0L21wdGNwL0tjb25maWctMjgtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6NDUuNDU5NTE0MTYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMjM2OTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkVuYWJsaW5nIE11bHRpcGF0aCBUQ1AgKE1QVENQKSoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTVBUQ1BgIGlzIGRlcGVuZGVudCBvbiBgSU5FVGAuIFRoYXQncyBzdGFuZGFyZDsgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQgZ2l2ZW4gdGhlIGFkdmFuY2VtZW50cyBpbiB0aGlzIGFyZWEgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGl0IHNlZW1zIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gKmVuYWJsZSogYE1QVENQYC4gVGhlIGFkdmFudGFnZXMgaW4gdGVybXMgb2YgcmVzaWxpZW5jZSBhbmQgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGFyZSBjb21wZWxsaW5nLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHdlIGRvY3VtZW50IHRoaXMgY2hhbmdlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjAsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6NTAuMDYxODg1OTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA2NDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo1MC4xNDQ5NTYzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzA3Njk3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo1MC4xNDU0ODI1MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE3NzAyMzkyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZGJjNTA5MTNmN2M4YjgzMTE1ZDYyNGUxMjI3ZDdkNWQwOTE4ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICsyMjMsOCBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiArMzU2MSwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzYyMCwxMSArMzYzOCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3Niw5ICsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xuK1xuK1x0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4rXHRcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cdTAwM2Vtc2spO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjUwLjE0NTQ4MzMzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc3MDIxODQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBSZXF1ZXN0IFNvY2tldCBhbmQgVG9rZW4gTGlmZWN5Y2xlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyBob3cgTVBUQ1AgbWFuYWdlcyByZXF1ZXN0IHNvY2tldHMgYW5kIHRva2Vucywgc3BlY2lmaWNhbGx5IGR1cmluZyBjbG9uaW5nIG9wZXJhdGlvbnMsIHdoaWNoIEknbSBhc3N1bWluZyBhcmUgc2ltaWxhciB0byBTWU4gY29va2llIG1lY2hhbmlzbXMuIFRoZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugb2JqZWN0cyB3aXRoaW4gdGhlIE1QVENQIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLiBObyBuZXcgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuXG5cbk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcgKGluY2x1ZGluZyBgc29ja19ob2xkYCksIGFuZCB0aGUgbWFuYWdlbWVudCBvZiBoYXNoIGxpc3RzIChgaGxpc3RfbnVsbHNgKS4gVGhpcyBwb2ludHMgdG93YXJkIHRoZSBzdGFuZGFyZCByaXNrcyBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBlaXRoZXIgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS5cblxuTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGF0IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBmdW5jdGlvbi4gT2theSwgaXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBhIGNsb25lZCByZXF1ZXN0IHNvY2tldCAoYG5ld19yZXFgKSBhbmQgcGVyZm9ybWluZyBzb21lIE1QVENQLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGhlIGBtc2tgIGFuZCBtb3ZpbmcgdGhlIHRva2VuLiBJdCdzIGNhbGxpbmcgYGluZXRfcmVxc2tfY2xvbmVgIHdoaWNoLCBpbXBvcnRhbnRseSwgY29waWVzIGZpZWxkcyBmcm9tIHRoZSBvcmlnaW5hbCAoYHJlcWApIHRvIHRoZSBjbG9uZSAoYG5yZXFgKS4gU28sIGFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGNsb25lZCBvYmplY3Qgc2VlbXMgc291bmQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIEFscmlnaHQsIHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBtYW5hZ2luZyB0aGUgdHJhbnNmZXIgb2YgdG9rZW5zIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmVkIHJlcXVlc3Qgc29ja2V0cywgd2l0aCBhIHNpZ25pZmljYW50IGVtcGhhc2lzIG9uIGhhbmRsaW5nIHRoZSBoYXNoZWQgc3RhdGUgb2YgdGhlIHRva2VucywgaW5jbHVkaW5nIHRoZSBsb2NrbGVzcyBjYWxscy5cblxuU28sIHRoZSBjaGFuZ2VzIHNlZW0gcm9idXN0LiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBhbmQgbWFuYWdpbmcgYSBoYXNoIHRhYmxlLiBUaGUgaW50cm9kdWNlZCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gVUFGLCBkb3VibGUtZnJlZSwgYW5kIG51bGwtZGVyZWZlcmVuY2UgcHJvYmxlbXMsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjI2LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA1OjAxLjkxNTcwNDQ1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxm47w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 07:09:50 +0000 UTC FinishedAt: 2026-08-12 08:05:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "bed1a10a-3d76-4c6e-b350-29924a68da19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_subflow_reqsk_clone", "mptcp_token_move_request", "mptcp_token_accept", "mptcp_sk_clone_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGhhc2ggbGlzdCBtYW5pcHVsYXRpb24gKGhsaXN0X251bGxzKSwgYW5kIG9iamVjdCBvd25lcnNoaXAgdHJhbnNmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGFyZSB0aGVyZSBhbnkgY29tcGxleCBidWZmZXIgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZkYmM1MDkxM2Y3YzhiODMxMTVkNjI0ZTEyMjdkN2Q1ZDA5MThlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA4OjA0OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiAmIzQzOzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbiYjNDM7XHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiAmIzQzOzM1NjEsMjQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuJiM0MztcdG1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7XG4mIzQzO1x0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxuJiM0MztcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbiYjNDM7XHQgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbiYjNDM7XHRzb2NrX3B1dChuc2spO1xuJiM0MztcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xuJiM0MztcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4mIzQzO1x0aW5ldF9zayhuc2spLVx1MDAzZWluZXRfbnVtID0gMDtcbiYjNDM7XHRpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc29jayAqc3NrLFxuQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdHNvY2tfaG9sZChzc2spO1xuIFxuLVx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcbi1cdCAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0XG4tXHQgKi9cbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcbi1cbiBcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxuIFx0ICogdXNlcyB0aGUgY29ycmVjdCBkYXRhXG4gXHQgKi9cbkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuJiM0MztcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4mIzQzO1x0XHRzb2NrX3B1dChzc2spO1xuJiM0MztcdFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gXHRcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XG4gXHRiaF91bmxvY2tfc29jayhuc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLjY5ZDUzMWM3NzBjNDQgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc2LDkgJiM0MzsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4mIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiAmIzQzOzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG4mIzQzO1xuJiM0MztcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcbiBcdFx0XHRcdCAgdm9pZCAqaG1hYylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uMjQ4NzdhMmMzNzcyNyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lJiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCwgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmRiYzUwOTEzZjdjOGI4MzExNWQ2MjRlMTIyN2Q3ZDVkMDkxOGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDg6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmIwNWM4ZDM3YTA4MzEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNTYxLDYgJiM0MzszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3Niw5ICYjNDM7MTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uZDQwYWIwOWFiNzViNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTsKJiM0MzsKJiM0MzsJc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHN1YmZsb3dfcmVxLSZndDttc2spCiYjNDM7CQlzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiYjNDM7CXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CQlpZiAocG9zID09IHN1YmZsb3dfcmVxKQomIzQzOwkJCWhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV3X3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoCiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZApAQCAtMTg3LDI0ICYjNDM7MjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogICoKICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLgogICogaXMgbm90IGEgam9pbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwlib29sIHJldCA9IGZhbHNlOwogCi0Jc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwogCi0JLyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi8KIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSkKLQkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJaWYgKHBvcyAhPSByZXEpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKIAlfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssICZhbXA7YnVja2V0LSZndDttc2tfY2hhaW4pOwomIzQzOwlyZXQgPSB0cnVlOwomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pCkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKIAotCWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQogCQlyZXR1cm47CiAKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHsKJiM0MzsJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkgewogCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtwb3MtJmd0O3Rva2VuX25vZGUpOwogCQlidWNrZXQtJmd0O2NoYWluX2xlbi0tOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwppbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAJS1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKCZhbXA7aW5pdF9uZXQsIG1zay0mZ3Q7dG9rZW4pKTsKIAogCS8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi8KQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAogCS8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqLwogCXJlZmNvdW50X3NldCgmYW1wO3NrLSZndDtza19yZWZjbnQsIDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIE1QVENQKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBuZXcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaG9va3MgaXQgdXAgdmlhIGBpbmV0X3JlcXNrX2Nsb25lYCBpbiBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQuIEl0IGFsc28gc2VlbXMgdG8gcmVmaW5lIHRoZSB0b2tlbiBtYW5hZ2VtZW50IGxvZ2ljLiBJIHNlZSBhZGp1c3RtZW50cyB0byBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgdG8gbWFuYWdlIGBtcHRjcF90b2tlbl9hY2NlcHRgIGZhaWx1cmVzLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YC4gVGhlIHdheSBJIHNlZSBpdCwgdGhleSYjMzk7cmUgdGlnaHRlbmluZyB1cCBob3cgdGhlc2UgdG9rZW5zIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgYSBib29sZWFuIHJldHVybiB2YWx1ZSBmb3IgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gYWRkcmVzcyB1bmhhc2hlZCB0b2tlbiBub2Rlcy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IE1QVENQLCBkZWFsaW5nIHdpdGggcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFdlIHdhbnQgdG8gaWRlbnRpZnkgYW55IGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBlYXJseS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBDT05GSUcgb3B0aW9ucyBhcmUgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gU2luY2UgdGhpcyBpcyBpbiBgbmV0L21wdGNwL2AsIHRoZSBLY29uZmlnIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IG9yIHRoZSByb290IGBuZXQvS2NvbmZpZ2AgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb25maWd1cmF0aW9uLCBzdGFydGluZyB3aXRoIGBDT05GSUdfTVBUQ1BgIGFzIHRoZSBwcmltYXJ5IHBvaW50IG9mIHJlZmVyZW5jZS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHN1YmZsb3cgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZS4uLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlciBpbnNwZWN0aW9uOiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2Ugc2VlbSB0byBiZSBjZW50cmFsIHRvIGhvdyBNUFRDUCBtYW5hZ2VzIGl0cyBzdWJmbG93cyBhbmQgY29ubmVjdGlvbiBzZXR1cCwgc28gSSBzaG91bGQgbG9vayBpbnRvIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLgoKQWxyaWdodCwgbGV0IG1lIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm90LiBOb24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd2hhdCBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbi4gU2Nhbm5pbmcgdGhlIHNvdXJjZSBjb2RlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgKGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgYW5kIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCksIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIChpbiBgbmV0L21wdGNwL3Rva2VuLmNgKSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAgKGFsc28gaW4gYG5ldC9tcHRjcC90b2tlbi5jYCksIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgKGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2ApIGFyZSBhbGwgKm5vbi1zdGF0aWMqLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGNvcmUgcGFydHMgb2YgdGhlIGludGVyZmFjZSBNUFRDUCBwcmVzZW50cyB0byB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4KCmBpbmV0X3JlcXNrX2Nsb25lYCBpcyBhIGdvb2QgZnVuY3Rpb24sIGJ1dCBpdCBpcyAqc3RhdGljKiBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHdoaWNoIG1ha2VzIGl0IGEgaGVscGVyIGFuZCBwcm9iYWJseSBub3Qgb25lIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBTaW1pbGFybHksIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGlzIHN0YXRpYyBhcyB3ZWxsIGFuZCBJJiMzOTtsbCBpZ25vcmUgaXQgZm9yIG5vdy4KClNvLCB0byBzdW1tYXJpemUsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgZm91ciBub24tc3RhdGljIGZ1bmN0aW9uczoKCiogICBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAKKiAgIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgCiogICBgbXB0Y3BfdG9rZW5fYWNjZXB0YAoqICAgYG1wdGNwX3NrX2Nsb25lX2luaXRgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZWlyIHVzZSBhbmQgYW55IE1QVENQIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9Mj1jb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG5uZXQvbXB0Y3AvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvbXB0Y3AvS2NvbmZpZy01LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIElORVRfRElBR1xubmV0L21wdGNwL0tjb25maWctMTgtXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWc9MjA9Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG5uZXQvbXB0Y3AvS2NvbmZpZzoyMjpcdGRlcGVuZHMgb24gSVBWNj15XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMy1cdGRlZmF1bHQgeVxuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI1PWNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNzpcdGRlcGVuZHMgb24gS1VOSVRcbm5ldC9tcHRjcC9LY29uZmlnLTI4LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTIwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipFbmFibGluZyBNdWx0aXBhdGggVENQIChNUFRDUCkqKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NUFRDUGAgaXMgZGVwZW5kZW50IG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBzdGFuZGFyZDsgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQgZ2l2ZW4gdGhlIGFkdmFuY2VtZW50cyBpbiB0aGlzIGFyZWEgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGl0IHNlZW1zIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gKmVuYWJsZSogYE1QVENQYC4gVGhlIGFkdmFudGFnZXMgaW4gdGVybXMgb2YgcmVzaWxpZW5jZSBhbmQgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGFyZSBjb21wZWxsaW5nLgoKT2theSwgbm93IGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgZG9jdW1lbnQgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmRiYzUwOTEzZjdjOGI4MzExNWQ2MjRlMTIyN2Q3ZDVkMDkxOGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDg6MDQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmIwNWM4ZDM3YTA4MzEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNTYxLDYgJiM0MzszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM2MjAsMTEgJiM0MzszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNjMzLDYgJiM0MzszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3Niw5ICYjNDM7MTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggZTFmMjBmZjhmZGI0Mi4uZDQwYWIwOWFiNzViNSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTsKJiM0MzsKJiM0MzsJc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHN1YmZsb3dfcmVxLSZndDttc2spCiYjNDM7CQlzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiYjNDM7CXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CQlpZiAocG9zID09IHN1YmZsb3dfcmVxKQomIzQzOwkJCWhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV3X3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoCiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZApAQCAtMTg3LDI0ICYjNDM7MjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogICoKICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLgogICogaXMgbm90IGEgam9pbiByZXF1ZXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwlib29sIHJldCA9IGZhbHNlOwogCi0Jc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwogCi0JLyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi8KIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSkKLQkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKJiM0MzsJaWYgKHBvcyAhPSByZXEpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cmVxLSZndDt0b2tlbl9ub2RlKTsKIAlfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssICZhbXA7YnVja2V0LSZndDttc2tfY2hhaW4pOwomIzQzOwlyZXQgPSB0cnVlOwomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pCkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKIAotCWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQogCQlyZXR1cm47CiAKIAlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKIAlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHsKJiM0MzsJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkgewogCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtwb3MtJmd0O3Rva2VuX25vZGUpOwogCQlidWNrZXQtJmd0O2NoYWluX2xlbi0tOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwppbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAJS1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKCZhbXA7aW5pdF9uZXQsIG1zay0mZ3Q7dG9rZW4pKTsKIAogCS8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi8KQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAogCS8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqLwogCXJlZmNvdW50X3NldCgmYW1wO3NrLSZndDtza19yZWZjbnQsIDApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyNgoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgUmVxdWVzdCBTb2NrZXQgYW5kIFRva2VuIExpZmVjeWNsZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIHJlZmluaW5nIGhvdyBNUFRDUCBtYW5hZ2VzIHJlcXVlc3Qgc29ja2V0cyBhbmQgdG9rZW5zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGNsb25pbmcgb3BlcmF0aW9ucywgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBhcmUgc2ltaWxhciB0byBTWU4gY29va2llIG1lY2hhbmlzbXMuIFRoZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugb2JqZWN0cyB3aXRoaW4gdGhlIE1QVENQIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLiBObyBuZXcgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNsdWRpbmcgYHNvY2tfaG9sZGApLCBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgaGFzaCBsaXN0cyAoYGhsaXN0X251bGxzYCkuIFRoaXMgcG9pbnRzIHRvd2FyZCB0aGUgc3RhbmRhcmQgcmlza3MgaW4ga2VybmVsIGRldmVsb3BtZW50OiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gSSBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZWl0aGVyIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGZ1bmN0aW9uLiBPa2F5LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRha2luZyBhIGNsb25lZCByZXF1ZXN0IHNvY2tldCAoYG5ld19yZXFgKSBhbmQgcGVyZm9ybWluZyBzb21lIE1QVENQLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGhlIGBtc2tgIGFuZCBtb3ZpbmcgdGhlIHRva2VuLiBJdCYjMzk7cyBjYWxsaW5nIGBpbmV0X3JlcXNrX2Nsb25lYCB3aGljaCwgaW1wb3J0YW50bHksIGNvcGllcyBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFgKSB0byB0aGUgY2xvbmUgKGBucmVxYCkuIFNvLCBhZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBjbG9uZWQgb2JqZWN0IHNlZW1zIHNvdW5kLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIEFscmlnaHQsIHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBtYW5hZ2luZyB0aGUgdHJhbnNmZXIgb2YgdG9rZW5zIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmVkIHJlcXVlc3Qgc29ja2V0cywgd2l0aCBhIHNpZ25pZmljYW50IGVtcGhhc2lzIG9uIGhhbmRsaW5nIHRoZSBoYXNoZWQgc3RhdGUgb2YgdGhlIHRva2VucywgaW5jbHVkaW5nIHRoZSBsb2NrbGVzcyBjYWxscy4KClNvLCB0aGUgY2hhbmdlcyBzZWVtIHJvYnVzdC4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBtYW5hZ2luZyBhIGhhc2ggdGFibGUuIFRoZSBpbnRyb2R1Y2VkIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBVQUYsIGRvdWJsZS1mcmVlLCBhbmQgbnVsbC1kZXJlZmVyZW5jZSBwcm9ibGVtcywgd2hpY2ggS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMwLjY5ODY3OTE5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjE3MDU4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6MzAuNjk4Njg0NzA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY2MTYzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGZkYmM1MDkxM2Y3YzhiODMxMTVkNjI0ZTEyMjdkN2Q1ZDA5MThlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjBhMDJhYzFlZDIyZDkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMjIzLDYgKzIyMyw4IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbiBcXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5iMDVjOGQzN2EwODMxIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzU2MSw2ICszNTYxLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcXG4rXFxuK1xcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcXG4rXFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcXG4rXFx0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxcbitcXHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXFxuK1xcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cXG4rXFx0ICovXFxuK1xcdGJoX3VubG9ja19zb2NrKG5zayk7XFxuK1xcdHNvY2tfcHV0KG5zayk7XFxuK1xcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xcbitcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbitcXHRpbmV0X3NrKG5zayktXFx1MDAzZWluZXRfbnVtID0gMDtcXG4rXFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XFxuK31cXG4rXFxuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbkBAIC0zNjIwLDExICszNjM4LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4gXFx0c29ja19ob2xkKHNzayk7XFxuIFxcbi1cXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxcbi1cXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxcbi1cXHQgKi9cXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xcbi1cXG4gXFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXFxuIFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbiBcXHQgKi9cXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xcbiBcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBOVUxMKTtcXG4rXFx0XFx0c29ja19wdXQoc3NrKTtcXG4rXFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxcbiBcXHRcXHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xcbiBcXHRiaF91bmxvY2tfc29jayhuc2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuaW5kZXggMWI4MGYyZDZlYzVhMi4uNjlkNTMxYzc3MGM0NCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuQEAgLTEwNzYsOSArMTA3NiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gfVxcbiBcXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xcbiB9XFxuIFxcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbitcXG4rXFx0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChzdWJmbG93X3JlcS1cXHUwMDNlbXNrKVxcbitcXHRcXHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXFx1MDAzZW1zayk7XFxuK1xcbitcXHRtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QocmVxLCBuZXdfcmVxKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcXG4gXFx0XFx0XFx0XFx0ICB2b2lkICpobWFjKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcXG5pbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcXG5AQCAtMTgwLDYgKzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbitcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSkge1xcbitcXHRcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuK1xcdFxcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpXFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXdfc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gICpcXG4gICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuXFxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuXFxuICAqL1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXG4tXFx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVxcdTAwM2Vza19wcm90LCAxKTtcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xcbiBcXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpXFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4rXFx0aWYgKHBvcyAhPSByZXEpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbiBcXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFxcdTAwMjZidWNrZXQtXFx1MDAzZW1za19jaGFpbik7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbit1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKVxcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuIFxcbi1cXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcXG4rXFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnBvcy1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdFxcdGJ1Y2tldC1cXHUwMDNlY2hhaW5fbGVuLS07XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXFxuIFxcdFxcdFxcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XFxuIFxcdG1zay1cXHUwMDNldG9rZW4gPSByZXEtXFx1MDAzZXRva2VuO1xcbi1cXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcXG4gXFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFxcdTAwMjZpbml0X25ldCwgbXNrLVxcdTAwM2V0b2tlbikpO1xcbiBcXG4gXFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXG4gXFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMyLjA2NTU4MTUxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MDc5MzcxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtIHRvIGhhbmRsZSByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCwgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZGJjNTA5MTNmN2M4YjgzMTE1ZDYyNGUxMjI3ZDdkNWQwOTE4ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICsyMjMsOCBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiArMzU2MSwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzYyMCwxMSArMzYzOCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3Niw5ICsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xuK1xuK1x0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4rXHRcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cdTAwM2Vtc2spO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjMyLjA2NTU4MjYyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDc3NDg0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgTVBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCBob29rcyBpdCB1cCB2aWEgYGluZXRfcmVxc2tfY2xvbmVgIGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gVGhhdCdzIHNpZ25pZmljYW50LiBJdCBhbHNvIHNlZW1zIHRvIHJlZmluZSB0aGUgdG9rZW4gbWFuYWdlbWVudCBsb2dpYy4gSSBzZWUgYWRqdXN0bWVudHMgdG8gYG1wdGNwX3NrX2Nsb25lX2luaXRgIHRvIG1hbmFnZSBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBmYWlsdXJlcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIFRoZSB3YXkgSSBzZWUgaXQsIHRoZXkncmUgdGlnaHRlbmluZyB1cCBob3cgdGhlc2UgdG9rZW5zIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgYSBib29sZWFuIHJldHVybiB2YWx1ZSBmb3IgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gYWRkcmVzcyB1bmhhc2hlZCB0b2tlbiBub2Rlcy5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgTVBUQ1AsIGRlYWxpbmcgd2l0aCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgc2NvcGUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2Ugd2FudCB0byBpZGVudGlmeSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGVhcmx5LlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBDT05GSUcgb3B0aW9ucyBhcmUgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSBjb21waWxlZC4gU2luY2UgdGhpcyBpcyBpbiBgbmV0L21wdGNwL2AsIHRoZSBLY29uZmlnIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IG9yIHRoZSByb290IGBuZXQvS2NvbmZpZ2AgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9tcHRjcC9LY29uZmlnYCBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjM3LjM3MzMzMzU2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQxNTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDozNy40NDQ3NTc5NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU3MTE3OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNUFRDUCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24sIHN0YXJ0aW5nIHdpdGggYENPTkZJR19NUFRDUGAgYXMgdGhlIHByaW1hcnkgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgc3ViZmxvdyBwcm9jZXNzLiBMZXQncyBzZWUuLi5cblxuSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb246IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBzZWVtIHRvIGJlIGNlbnRyYWwgdG8gaG93IE1QVENQIG1hbmFnZXMgaXRzIHN1YmZsb3dzIGFuZCBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBsb29rIGludG8gaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuXG5cbkFscmlnaHQsIGxldCBtZSBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIG9yIG5vdC4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHdoYXQgSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4uIFNjYW5uaW5nIHRoZSBzb3VyY2UgY29kZSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgKGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgYW5kIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCksIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIChpbiBgbmV0L21wdGNwL3Rva2VuLmNgKSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAgKGFsc28gaW4gYG5ldC9tcHRjcC90b2tlbi5jYCksIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgKGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2ApIGFyZSBhbGwgKm5vbi1zdGF0aWMqLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGNvcmUgcGFydHMgb2YgdGhlIGludGVyZmFjZSBNUFRDUCBwcmVzZW50cyB0byB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay5cblxuYGluZXRfcmVxc2tfY2xvbmVgIGlzIGEgZ29vZCBmdW5jdGlvbiwgYnV0IGl0IGlzICpzdGF0aWMqIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgd2hpY2ggbWFrZXMgaXQgYSBoZWxwZXIgYW5kIHByb2JhYmx5IG5vdCBvbmUgdG8gZm9jdXMgb24gZGlyZWN0bHkuIFNpbWlsYXJseSwgYG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3lgIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgaXMgc3RhdGljIGFzIHdlbGwgYW5kIEknbGwgaWdub3JlIGl0IGZvciBub3cuXG5cblNvLCB0byBzdW1tYXJpemUsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgZm91ciBub24tc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYFxuKiAgIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgXG4qICAgYG1wdGNwX3Rva2VuX2FjY2VwdGBcbiogICBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGBcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZWlyIHVzZSBhbmQgYW55IE1QVENQIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo0NS40MDE4NzgzNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MjY3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZz0yPWNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxubmV0L21wdGNwL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQvbXB0Y3AvS2NvbmZpZy01LVxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxubmV0L21wdGNwL0tjb25maWctMTgtXFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MjA9Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbm5ldC9tcHRjcC9LY29uZmlnOjIyOlxcdGRlcGVuZHMgb24gSVBWNj15XFxubmV0L21wdGNwL0tjb25maWctMjMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0yNT1jb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNzpcXHRkZXBlbmRzIG9uIEtVTklUXFxubmV0L21wdGNwL0tjb25maWctMjgtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6NDUuNDU5NTE0MTYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMjM2OTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkVuYWJsaW5nIE11bHRpcGF0aCBUQ1AgKE1QVENQKSoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTVBUQ1BgIGlzIGRlcGVuZGVudCBvbiBgSU5FVGAuIFRoYXQncyBzdGFuZGFyZDsgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQgZ2l2ZW4gdGhlIGFkdmFuY2VtZW50cyBpbiB0aGlzIGFyZWEgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGl0IHNlZW1zIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gKmVuYWJsZSogYE1QVENQYC4gVGhlIGFkdmFudGFnZXMgaW4gdGVybXMgb2YgcmVzaWxpZW5jZSBhbmQgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGFyZSBjb21wZWxsaW5nLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHdlIGRvY3VtZW50IHRoaXMgY2hhbmdlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjAsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6MDQ6NTAuMDYxODg1OTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA2NDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgYW5kIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhbmQgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo1MC4xNDQ5NTYzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzA3Njk3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODowNDo1MC4xNDU0ODI1MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE3NzAyMzkyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgaGFzaCBsaXN0IG1hbmlwdWxhdGlvbiAoaGxpc3RfbnVsbHMpLCBhbmQgb2JqZWN0IG93bmVyc2hpcCB0cmFuc2ZlcnMuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGJ1ZmZlciBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZGJjNTA5MTNmN2M4YjgzMTE1ZDYyNGUxMjI3ZDdkNWQwOTE4ZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODowNDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICsyMjMsOCBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uYjA1YzhkMzdhMDgzMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM1NjEsNiArMzU2MSwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzYyMCwxMSArMzYzOCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzYzMyw2ICszNjQ2LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi42OWQ1MzFjNzcwYzQ0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3Niw5ICsxMDc2LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGUxZjIwZmY4ZmRiNDIuLmQ0MGFiMDlhYjc1YjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsMTkgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xuK1xuK1x0c3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4rXHRcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cdTAwM2Vtc2spO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIxNywzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA0OjUwLjE0NTQ4MzMzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc3MDIxODQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBSZXF1ZXN0IFNvY2tldCBhbmQgVG9rZW4gTGlmZWN5Y2xlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyBob3cgTVBUQ1AgbWFuYWdlcyByZXF1ZXN0IHNvY2tldHMgYW5kIHRva2Vucywgc3BlY2lmaWNhbGx5IGR1cmluZyBjbG9uaW5nIG9wZXJhdGlvbnMsIHdoaWNoIEknbSBhc3N1bWluZyBhcmUgc2ltaWxhciB0byBTWU4gY29va2llIG1lY2hhbmlzbXMuIFRoZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugb2JqZWN0cyB3aXRoaW4gdGhlIE1QVENQIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLiBObyBuZXcgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuXG5cbk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcgKGluY2x1ZGluZyBgc29ja19ob2xkYCksIGFuZCB0aGUgbWFuYWdlbWVudCBvZiBoYXNoIGxpc3RzIChgaGxpc3RfbnVsbHNgKS4gVGhpcyBwb2ludHMgdG93YXJkIHRoZSBzdGFuZGFyZCByaXNrcyBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgaXNzdWVzIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBlaXRoZXIgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS5cblxuTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGF0IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBmdW5jdGlvbi4gT2theSwgaXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBhIGNsb25lZCByZXF1ZXN0IHNvY2tldCAoYG5ld19yZXFgKSBhbmQgcGVyZm9ybWluZyBzb21lIE1QVENQLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGhlIGBtc2tgIGFuZCBtb3ZpbmcgdGhlIHRva2VuLiBJdCdzIGNhbGxpbmcgYGluZXRfcmVxc2tfY2xvbmVgIHdoaWNoLCBpbXBvcnRhbnRseSwgY29waWVzIGZpZWxkcyBmcm9tIHRoZSBvcmlnaW5hbCAoYHJlcWApIHRvIHRoZSBjbG9uZSAoYG5yZXFgKS4gU28sIGFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGNsb25lZCBvYmplY3Qgc2VlbXMgc291bmQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAuIEFscmlnaHQsIHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBtYW5hZ2luZyB0aGUgdHJhbnNmZXIgb2YgdG9rZW5zIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmVkIHJlcXVlc3Qgc29ja2V0cywgd2l0aCBhIHNpZ25pZmljYW50IGVtcGhhc2lzIG9uIGhhbmRsaW5nIHRoZSBoYXNoZWQgc3RhdGUgb2YgdGhlIHRva2VucywgaW5jbHVkaW5nIHRoZSBsb2NrbGVzcyBjYWxscy5cblxuU28sIHRoZSBjaGFuZ2VzIHNlZW0gcm9idXN0LiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBhbmQgbWFuYWdpbmcgYSBoYXNoIHRhYmxlLiBUaGUgaW50cm9kdWNlZCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gVUFGLCBkb3VibGUtZnJlZSwgYW5kIG51bGwtZGVyZWZlcmVuY2UgcHJvYmxlbXMsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjI2LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjA1OjAxLjkxNTcwNDQ1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBoYXNoIGxpc3QgbWFuaXB1bGF0aW9uIChobGlzdF9udWxscyksIGFuZCBvYmplY3Qgb3duZXJzaGlwIHRyYW5zZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYnVmZmVyIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxm47w[1] Phase: Succeeded StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 08:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 08:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2] Phase: Succeeded StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 08:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 08:05:12 +0000 UTC FinishedAt: 2026-08-12 08:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxm47w/series-workflowxm47w-convert-artifact-2920094588/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 08:05:23 +0000 UTC FinishedAt: 2026-08-12 08:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 08:05:23 +0000 UTC FinishedAt: 2026-08-12 08:23:47 +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:*a4c120f2-72d7-4c93-b4d1-ad4d4c06815d,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-workflowxm47w/series-workflowxm47w-convert-artifact-2920094588/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": "79cffe2b-e31d-424a-856a-b2114500f03c", "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-workflowxm47w/series-workflowxm47w-build-action-817436330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 08:05:23 +0000 UTC FinishedAt: 2026-08-12 08:23:37 +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:*a4c120f2-72d7-4c93-b4d1-ad4d4c06815d,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-workflowxm47w/series-workflowxm47w-convert-artifact-2920094588/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": "79cffe2b-e31d-424a-856a-b2114500f03c", "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-workflowxm47w/series-workflowxm47w-build-action-817436330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 08:23:47 +0000 UTC FinishedAt: 2026-08-12 08:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 08:23:47 +0000 UTC FinishedAt: 2026-08-12 08:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 08:23:47 +0000 UTC FinishedAt: 2026-08-12 08:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 08:23:47 +0000 UTC FinishedAt: 2026-08-12 08:23:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxm47w/series-workflowxm47w-convert-artifact-2931983291/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 08:23:58 +0000 UTC FinishedAt: 2026-08-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 08:23:58 +0000 UTC FinishedAt: 2026-08-12 08:25:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79cffe2b-e31d-424a-856a-b2114500f03c,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-workflowxm47w/series-workflowxm47w-build-action-817436330/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-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 08:26:01 +0000 UTC FinishedAt: 2026-08-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 08:26:01 +0000 UTC FinishedAt: 2026-08-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 08:26:01 +0000 UTC FinishedAt: 2026-08-12 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 08:26:01 +0000 UTC FinishedAt: 2026-08-12 08:45:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a4c120f2-72d7-4c93-b4d1-ad4d4c06815d,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-workflowxm47w/series-workflowxm47w-convert-artifact-2931983291/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": "47acf23b-378b-43cf-8efe-d630e2273221", "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-workflowxm47w/series-workflowxm47w-build-action-2245721823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 08:26:01 +0000 UTC FinishedAt: 2026-08-12 08:45:04 +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:*a4c120f2-72d7-4c93-b4d1-ad4d4c06815d,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-workflowxm47w/series-workflowxm47w-convert-artifact-2931983291/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": "47acf23b-378b-43cf-8efe-d630e2273221", "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-workflowxm47w/series-workflowxm47w-build-action-2245721823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 08:45:14 +0000 UTC FinishedAt: 2026-08-12 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 08:45:14 +0000 UTC FinishedAt: 2026-08-12 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 08:45:14 +0000 UTC FinishedAt: 2026-08-12 08:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 08:45:14 +0000 UTC FinishedAt: 2026-08-12 08:47:07 +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:*47acf23b-378b-43cf-8efe-d630e2273221,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-workflowxm47w/series-workflowxm47w-build-action-2245721823/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-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"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:*79cffe2b-e31d-424a-856a-b2114500f03c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47acf23b-378b-43cf-8efe-d630e2273221,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-workflowxm47w/series-workflowxm47w-build-action-817436330/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-workflowxm47w/series-workflowxm47w-build-action-2245721823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 08:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 08:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"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-workflowxm47w/series-workflowxm47w-convert-artifact-4073520820/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 08:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 08:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 08:47:17 +0000 UTC FinishedAt: 2026-08-12 08:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 08:47:27 +0000 UTC FinishedAt: 2026-08-12 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm47w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_sk_clone_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"bed1a10a-3d76-4c6e-b350-29924a68da19","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 08:47:27 +0000 UTC FinishedAt: 2026-08-12 11:49:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79cffe2b-e31d-424a-856a-b2114500f03c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47acf23b-378b-43cf-8efe-d630e2273221,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-workflowxm47w/series-workflowxm47w-build-action-817436330/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-workflowxm47w/series-workflowxm47w-build-action-2245721823/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-workflowxm47w/series-workflowxm47w-convert-artifact-4073520820/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,}