Name: series-workflowcw55c Phase: Succeeded StartedAt: 2026-06-29 11:37:29 +0000 UTC FinishedAt: 2026-06-29 12:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[0] Phase: Succeeded StartedAt: 2026-06-29 11:37:29 +0000 UTC FinishedAt: 2026-06-29 11:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 11:37:29 +0000 UTC FinishedAt: 2026-06-29 11:49:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "019ee523e8a7f28d75dfa9d322a210cb11f097cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "019ee523e8a7f28d75dfa9d322a210cb11f097cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "MEMCG" ], "series_id": "2ad34779-3380-4f62-87c3-27fdbeb2fbee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "zswap_proactive_writeback", "zswap_shrink_one_memcg", "shrink_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua19vbmVfbWVtY2cmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICYjMzk7bWVtb3J5LnJlY2xhaW0mIzM5OyBjZ3JvdXAgaW50ZXJmYWNlIHVzaW5nIHRoZSAmIzM5O3NvdXJjZT16c3dhcCYjMzk7IGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjQ5OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOTkzNDQ2YWI2NmQwZmIuLmUxZjZhNDcyOWE2NWU2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0xNDI1LDkgJiM0MzsxNDI1LDEwIEBAIFBBR0VfU0laRSBtdWx0aXBsZSB3aGVuIHJlYWQgYmFjay5cbiBcbiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxuIFxuLVx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ICBzb3VyY2U9enN3YXAgICAgICAgICAgT25seSBwZXJmb3JtIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2tcbiYjNDM7XHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFx0U3BlY2lmeWluZyBhIHN3YXBwaW5lc3MgdmFsdWUgaW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gcGVyZm9ybVxuIFx0dGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGVcbkBAIC0xNDM3LDYgJiM0MzsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nXG4gXHRzd2FwcGluZXNzPW1heCBleGNsdXNpdmVseSByZWNsYWltcyBhbm9ueW1vdXMgbWVtb3J5LlxuIFxuJiM0MztcdFRoZSBzb3VyY2U9enN3YXAga2V5IHNraXBzIG9yZGluYXJ5IG1lbW9yeSByZWNsYWltIGFuZFxuJiM0MztcdHdyaXRlcyBiYWNrIHBhZ2VzIGZyb20genN3YXAgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UgdW50aWxcbiYjNDM7XHR0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlc1xuJiM0MztcdGFyZSBmb3VuZC4gVGhpcyBpcyB1c2VmdWwgdG8gcHJvYWN0aXZlbHkgb2ZmbG9hZCBjb2xkIGNvbXByZXNzZWRcbiYjNDM7XHRkYXRhIGZyb20gdGhlIHpzd2FwIHBvb2wgdG8gdGhlIHN3YXAgZGV2aWNlLiBJdCBpcyBvbmx5IGF2YWlsYWJsZVxuJiM0MztcdGlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlXG4mIzQzO1x0Y29tYmluZWQgd2l0aCBzd2FwcGluZXNzOyBzcGVjaWZ5aW5nIGJvdGggcmV0dXJucyAtRUlOVkFMLlxuJiM0MztcbiYjNDM7XHRFeGFtcGxlOjpcbiYjNDM7XG4mIzQzO1x0ICAjIFdyaXRlYmFjayB1cCB0byAxME1CIG9mIGNvbXByZXNzZWQgZGF0YSBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXBcbiYjNDM7XHQgIGVjaG8gXCYjMzQ7MTBNIHNvdXJjZT16c3dhcFwmIzM0OyBcdTAwM2UgbWVtb3J5LnJlY2xhaW1cbiYjNDM7XG4gICBtZW1vcnkucGVha1xuIFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxuIFxuQEAgLTE3MzQsNiAmIzQzOzE3NDgsMTAgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcdCAgenN3cHdiXG4gXHRcdE51bWJlciBvZiBwYWdlcyB3cml0dGVuIGZyb20genN3YXAgdG8gc3dhcC5cbiBcbiYjNDM7XHQgIHpzd3B3Yl9wcm9hY3RpdmVfYlxuJiM0MztcdFx0Qnl0ZXMgb2YgY29tcHJlc3NlZCBkYXRhIHByb2FjdGl2ZWx5IHdyaXR0ZW4gYmFjayBmcm9tXG4mIzQzO1x0XHR6c3dhcCB0byBzd2FwIHZpYSB0aGUgbWVtb3J5LnJlY2xhaW0gc291cmNlPXpzd2FwIGtleS5cbiYjNDM7XG4gXHQgIHpzd2FwX2luY29tcFxuIFx0XHROdW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcFxuIFx0XHR3aXRob3V0IGNvbXByZXNzaW9uLiBUaGVzZSBwYWdlcyBjb3VsZCBub3QgYmUgY29tcHJlc3NlZCB0b1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcbmluZGV4IDI0NjQ0MjVjNzgzZGUyLi5iNDliOGMxMzAzODkwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxuQEAgLTEzMSw3ICYjNDM7MTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcbiAgIGVjaG8gWSBcdTAwM2UgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkXG4gXG4gVGhpcyBjYW4gYmUgZW5hYmxlZCBhdCB0aGUgYm9vdCB0aW1lIGlmIGBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gYCBpc1xuLXNlbGVjdGVkLlxuJiM0MztzZWxlY3RlZC4gT25jZSBlbmFibGVkLCB0aGUgc2hyaW5rZXIgYXV0b21hdGljYWxseSB3cml0ZXMgYmFjayB6c3dhcCBwYWdlcyB0b1xuJiM0MztiYWNraW5nIHN3YXAgZHVyaW5nIG1lbW9yeSByZWNsYWltLlxuJiM0MztcbiYjNDM7SWYgdXNlcnMgd2FudCB0byBleHBsaWNpdGx5IHRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmb3IgYSBzcGVjaWZpY1xuJiM0MzttZW1vcnkgY2dyb3VwIHdpdGhvdXQgaW52b2tpbmcgc3RhbmRhcmQgcGFnZSByZWNsYWltLCBpdCBjYW4gYmUgZG9uZSBhcyBmb2xsb3dzOjpcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDsxME0gc291cmNlPXpzd2FwXCYjMzQ7IFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cdTAwM2NjZ3JvdXAtbmFtZVx1MDAzZS9tZW1vcnkucmVjbGFpbVxuJiM0MztcbiYjNDM7Qm90aCBvZiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUgYXJlIHN1YmplY3QgdG8gdGhlIGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgXG4mIzQzO2NvbnRyb2wuIFRoaXMgbWVhbnMgdGhhdCBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYCBjYW4gcHJldmVudCBhbGwgenN3YXAgd3JpdGViYWNrLlxuIFxuIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyXG4gb2YgcGFnZXMgc3RvcmVkLCBzYW1lLXZhbHVlIGZpbGxlZCBwYWdlcyBhbmQgdmFyaW91cyBjb3VudGVycyBmb3IgdGhlIHJlYXNvbnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC00MCw2ICYjNDM7NDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4mIzQzO1x0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxuIFx0TUVNQ0dfTlJfU1RBVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMTYuLmU1ZjIxNzc1OTg5NGVkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7aW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdFx0ICAgIHU2NCBieXRlc190b193cml0ZWJhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uZDgxYzM0NDg0YmNhMjggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQzMyw2ICYjNDM7NDMzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4mIzQzO1x0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxuIH07XG4gXG4gI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXG5AQCAtMTU1OCw2ICYjNDM7MTU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4gXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuIFx0eyBcJiMzNDt6c3dhcHBlZFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG4gXHR7IFwmIzM0O3pzd2FwX2luY29tcFwmIzM0OyxcdFx0TUVNQ0dfWlNXQVBfSU5DT01QXHRcdH0sXG4mIzQzO1x0eyBcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2JcJiMzNDssXHRcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQlx0fSxcbiAjZW5kaWZcbiBcdHsgXCYjMzQ7ZmlsZV9tYXBwZWRcJiMzNDssXHRcdE5SX0ZJTEVfTUFQUEVEXHRcdFx0fSxcbiBcdHsgXCYjMzQ7ZmlsZV9kaXJ0eVwmIzM0OyxcdFx0XHROUl9GSUxFX0RJUlRZXHRcdFx0fSxcbkBAIC0xNjE0LDYgJiM0MzsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pXG4gXHRzd2l0Y2ggKGl0ZW0pIHtcbiBcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XG4gXHRjYXNlIE1FTUNHX1pTV0FQX0I6XG4mIzQzO1x0Y2FzZSBNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0I6XG4gXHRjYXNlIE5SX1NMQUJfUkVDTEFJTUFCTEVfQjpcbiBcdGNhc2UgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0I6XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi41NmVkN2ZmNDhlYzlkZiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTY0LDYgJiM0Mzs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC03ODU1LDExICYjNDM7Nzg1NiwxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbiBlbnVtIHtcbiBcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuIFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG4mIzQzO1x0TUVNT1JZX1JFQ0xBSU1fU09VUkNFLFxuIFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbiB9O1xuIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbiBcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG4mIzQzO1x0eyBNRU1PUllfUkVDTEFJTV9TT1VSQ0UsIFwmIzM0O3NvdXJjZT0lc1wmIzM0O30sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbiB9O1xuIFxuQEAgLTc4NjksOSAmIzQzOzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuIFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuIFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbiYjNDM7XHRib29sIHpzd2FwX3dyaXRlYmFja19vbmx5ID0gZmFsc2U7XG4gXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG4mIzQzO1x0Y2hhciBzb3VyY2VbMTZdO1xuIFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xuIFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuJiM0MztcdHU2NCBucl9ieXRlcztcbiBcbiBcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc4NzksNyAmIzQzOzc4ODUsOCBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRidWYgPSBzdHJzdHJpcChidWYpO1xuIFxuIFx0b2xkX2J1ZiA9IGJ1Zjtcbi1cdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XG4mIzQzO1x0bnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsIFx1MDAyNmJ1Zik7XG4mIzQzO1x0bnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFO1xuIFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03ODk5LDExICYjNDM7NzkwNiwyNiBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG4gXHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6XG4mIzQzO1x0XHRcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKHNvdXJjZSkpIFx1MDAzZT0gc2l6ZW9mKHNvdXJjZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdC8qIE9ubHkgenN3YXAgaXMgc3VwcG9ydGVkIGFzIGEgcmVjbGFpbSBzb3VyY2UgZm9yIG5vdy4gKi9cbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChzb3VyY2UsIFwmIzM0O3pzd2FwXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0enN3YXBfd3JpdGViYWNrX29ubHkgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmICh6c3dhcF93cml0ZWJhY2tfb25seSkge1xuJiM0MztcdFx0Lyogc291cmNlPXpzd2FwIGFuZCBzd2FwcGluZXNzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4mIzQzO1x0XHRpZiAoc3dhcHBpbmVzcyAhPSAtMSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4genN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhtZW1jZywgbnJfYnl0ZXMpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG4gXHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG4gXHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcbiYjNDM7XHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xMDg5LDggJiM0MzsxMDk0LDkgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBcdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4ge1xuIFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgenN3YXBfZW50cnksIGxydSk7XG4tXHRib29sICplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IChib29sICopYXJnO1xuJiM0MztcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnO1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbiBcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuIFxuQEAgLTExMzMsMTAgJiM0MzsxMTM5LDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlXG4tXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJiMzOTt0IGRlcmVmJiMzOTtkIGFnYWluXG4tXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4mIzQzO1x0ICogbmVlZGVkIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZFxuJiM0MztcdCAqIGFnYWluIHVudGlsIGl0IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxuIFx0ICovXG4gXHRzd3BlbnRyeSA9IGVudHJ5LVx1MDAzZXN3cGVudHJ5O1xuJiM0MztcdGxlbmd0aCA9IGVudHJ5LVx1MDAzZWxlbmd0aDtcbiBcbiBcdC8qXG4gXHQgKiBJdCYjMzk7cyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbkBAIC0xMTU1LDEyICYjNDM7MTE2MiwxMyBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb1xuIFx0XHQgKiBpbnRvIHRoZSB3YXJtZXIgcmVnaW9uLiBXZSBzaG91bGQgdGVybWluYXRlIHNocmlua2luZyAoaWYgd2UmIzM5O3JlIGluIHRoZSBkeW5hbWljXG4gXHRcdCAqIHNocmlua2VyIGNvbnRleHQpLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCBcdTAwMjZcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcbiYjNDM7XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QpIHtcbiBcdFx0XHRyZXQgPSBMUlVfU1RPUDtcbi1cdFx0XHQqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSB0cnVlO1xuJiM0MztcdFx0XHR3YWxrX2FyZy1cdTAwM2VlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR3YWxrX2FyZy1cdTAwM2VieXRlc193cml0dGVuICYjNDM7PSBsZW5ndGg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTExNjksOCAmIzQzOzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuJiM0MztcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7XG4mIzQzO1x0XHQuYnl0ZXNfd3JpdHRlbiA9IDAsXG4mIzQzO1x0XHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcbiYjNDM7XHR9O1xuIFx0dW5zaWduZWQgbG9uZyBzaHJpbmtfcmV0O1xuLVx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlO1xuIFxuIFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG4gXHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG5AQCAtMTE3OSw5ICYjNDM7MTE5MCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdH1cbiBcbiBcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbi1cdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuJiM0MztcdFx0XHUwMDI2d2Fsa19hcmcpO1xuIFxuLVx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuJiM0MztcdGlmICh3YWxrX2FyZy5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNocmlua19yZXQgPyBzaHJpbmtfcmV0IDogU0hSSU5LX1NUT1A7XG5AQCAtMTI3NSw5ICYjNDM7MTI4NiwzMSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIFx0cmV0dXJuIHNocmlua2VyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzOyNkZWZpbmUgTlJfWlNXQVBfV0JfQkFUQ0hcdDY0VUxcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xuJiM0MzsgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxuJiM0MzsgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cbiYjNDM7ICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlclxuJiM0MzsgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcbiYjNDM7ICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXG4mIzQzOyAqIGVudHJpZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoXHUwMDNlPSAwKSwgb3IgLUVOT0VOVFxuJiM0MzsgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHlcbiYjNDM7ICogenN3YXAgTFJVcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcbiB7XG4tXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHdhbGtfYXJnID0ge1xuJiM0MztcdFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxuJiM0MztcdFx0LmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2UsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3RvX3NjYW47XG4mIzQzO1x0aW50IG5pZDtcbiBcbiBcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTEyOTAsMjMgJiM0MzsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGs7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcCB0aGUgc2NhbiBhdCBwZXItbm9kZSBMUlUgbGVuZ3RoIHNvIGVhY2ggZW50cnkgaXMgc2Nhbm5lZFxuJiM0MztcdFx0ICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRucl90b193YWxrID0gbWluKG5yX3JlbWFpbmluZyxcbiYjNDM7XHRcdFx0XHQgbGlzdF9scnVfY291bnRfb25lKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7XG4mIzQzO1x0XHRpZiAoIW5yX3RvX3dhbGspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG5yX3JlbWFpbmluZyAtPSBucl90b193YWxrO1xuJiM0MztcdFx0bGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csIFx1MDAyNnNocmlua19tZW1jZ19jYixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNndhbGtfYXJnLCBcdTAwMjZucl90b193YWxrKTtcbiYjNDM7XHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4mIzQzO1x0XHRucl9yZW1haW5pbmcgJiM0Mzs9IG5yX3RvX3dhbGs7XG4gXG4tXHRcdHNocnVuayAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xuLVx0XHRzY2FubmVkICYjNDM7PSAxIC0gbnJfdG9fd2FsaztcbiYjNDM7XHRcdGlmICghbnJfcmVtYWluaW5nKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbiYjNDM7XHQvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi9cbiYjNDM7XHRpZiAobnJfcmVtYWluaW5nID09IG5yX3RvX3NjYW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0cmV0dXJuIHNocnVuayA/IDAgOiAtRUFHQUlOO1xuJiM0MztcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXG4mIzQzO3N0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUge1xuJiM0MztcdGludCBzY2FucztcbiYjNDM7XHRpbnQgZmFpbHVyZXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUYWtlIG9uZSBzdGVwIG9mIGEgbWVtY2ctdHJlZSB3cml0ZWJhY2sgd2FsayBkcml2ZW4gYnkgdGhlIGNhbGxlciYjMzk7c1xuJiM0MzsgKiBpdGVyYXRvciwgYW5kIGZvbGQgdGhlIHJlc3VsdCBpbnRvIEBzLCB0aGUgcmV0cnkgYm9va2tlZXBpbmcgc2hhcmVkXG4mIzQzOyAqIGFjcm9zcyBzdGVwcy4gQG1lbWNnIGlzIHRoZSBpdGVyYXRvciYjMzk7cyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2VcbiYjNDM7ICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlclxuJiM0MzsgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcbiYjNDM7ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyB3ZXJlIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxuJiM0MzsgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGJhY2sgKFx1MDAzZT0gMCksIG9yIC1FQlVTWVxuJiM0MzsgKiB3aGVuIHRoZSBjYWxsZXIgc2hvdWxkIGFib3J0IHRoZSB3YWxrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgenN3YXBfc2hyaW5rX29uZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSAqcylcbiYjNDM7e1xuJiM0MztcdGxvbmcgc2hydW5rO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWNoaW5nIGEgTlVMTCBtZW1jZyBtZWFucyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgY29tcGxldGVkLlxuJiM0MztcdCAqIEV4Y2x1ZGUgdGhlIG1lbWNnLWRpc2FibGVkIGNhc2UsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMLCBhbmRcbiYjNDM7XHQgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kXG4mIzQzO1x0XHQgKiBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFzLVx1MDAzZXNjYW5zIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7cy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0cy1cdTAwM2VzY2FucyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4gV2l0aCBtZW1jZ1xuJiM0MztcdCAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXG4mIzQzO1x0ICogd2l0aCBwYWdlcyBpbiB6c3dhcCwgc28gc2tpcCB3aXRob3V0IGNvdW50aW5nIGl0IGFzIGEgY2FuZGlkYXRlLlxuJiM0MztcdCAqIFdpdGggbWVtY2cgZGlzYWJsZWQgdGhlIHJvb3QgTFJVIGlzIHRoZSBvbmx5IHRhcmdldCwgc28gd2Ugc2hvdWxkXG4mIzQzO1x0ICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNocnVuayA9PSAtRU5PRU5UKVxuJiM0MztcdFx0cmV0dXJuIG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSA/IC1FQlVTWSA6IDA7XG4mIzQzO1x0cy1cdTAwM2VzY2FucyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmIChzaHJ1bmsgXHUwMDNjPSAwIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7cy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNocnVuaztcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVx0aW50IHJldCwgZmFpbHVyZXMgPSAwLCBhdHRlbXB0cyA9IDA7XG4mIzQzO1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHRocjtcbiBcbiBcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xuQEAgLTEzMTgsMTEgJiM0MzsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHQgKiB3cml0ZWJhY2stZGlzYWJsZWQgbWVtY2dzIChtZW1vcnkuenN3YXAud3JpdGViYWNrPTApIGFyZSBub3RcbiBcdCAqIGNhbmRpZGF0ZXMgZm9yIHNocmlua2luZy5cbiBcdCAqXG4tXHQgKiBTaHJpbmtpbmcgd2lsbCBiZSBhYm9ydGVkIGlmIHdlIGVuY291bnRlciB0aGUgZm9sbG93aW5nXG4tXHQgKiBNQVhfUkVDTEFJTV9SRVRSSUVTIHRpbWVzOlxuLVx0ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay5cbi1cdCAqIC0gU2hyaW5raW5nIGEgd3JpdGViYWNrLWNhbmRpZGF0ZSBtZW1jZyBmYWlsZWQuXG4tXHQgKlxuIFx0ICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssXG4gXHQgKiB3aGljaCBjYW4gYmUgbW9kaWZpZWQgYnkgdGhlIG9mZmxpbmUgbWVtY2cgY2xlYW5lclxuIFx0ICogenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKCkuXG5AQCAtMTMzNyw3ICYjNDM7MTQzOSwxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdCAqIG9mZmxpbmUgbWVtY2cgbGVmdCBpbiB6c3dhcF9uZXh0X3NocmluayB3aWxsIGhvbGQgdGhlIHJlZmVyZW5jZVxuIFx0ICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS5cbiBcdCAqL1xuLVx0ZG8ge1xuJiM0MztcdHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpIHtcbiYjNDM7XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHQvKlxuIFx0XHQgKiBTdGFydCBzaHJpbmtpbmcgZnJvbSB0aGUgbmV4dCBtZW1jZyBhZnRlciB6c3dhcF9uZXh0X3Nocmluay5cbiBcdFx0ICogV2hlbiB0aGUgb2ZmbGluZSBjbGVhbmVyIGhhcyBhbHJlYWR5IGFkdmFuY2VkIHRoZSBjdXJzb3IsXG5AQCAtMTM1NiwzNyAmIzQzOzE0NjIsMTIgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRcdH0gd2hpbGUgKG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnpzd2FwX3Nocmlua19sb2NrKTtcbiBcbi1cdFx0aWYgKCFtZW1jZykge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmXG4tXHRcdFx0ICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFhdHRlbXB0cyBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRhdHRlbXB0cyA9IDA7XG4tXHRcdFx0Z290byByZXNjaGVkO1xuLVx0XHR9XG4tXG4tXHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG4mIzQzO1x0XHRyZXQgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKG1lbWNnLCBcdTAwMjZzKTtcbiBcdFx0LyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4gXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLlxuLVx0XHQgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcbi1cdFx0ICogd2l0aCBwYWdlcyBpbiB6c3dhcC4gU2tpcCB0aGlzIHdpdGhvdXQgaW5jcmVtZW50aW5nIGF0dGVtcHRzXG4tXHRcdCAqIGFuZCBmYWlsdXJlcy5cbi1cdFx0ICovXG4tXHRcdGlmIChyZXQgPT0gLUVOT0VOVClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0JiM0MzsmIzQzO2F0dGVtcHRzO1xuLVxuLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbiYjNDM7XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuIFx0XHRcdGJyZWFrO1xuLXJlc2NoZWQ6XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fSB3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcdTAwM2UgdGhyKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkBAIC0xNDkyLDcgJiM0MzsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkge1xuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuLVx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xuJiM0MztcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgbnVtX25vZGVfc3RhdGUoTl9OT1JNQUxfTUVNT1JZKSkgXHUwMDNjPSAwKSB7XG4gXHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRcdGdvdG8gcHV0X29iamNnO1xuIFx0XHR9XG5AQCAtMTYzMiw2ICYjNDM7MTcxMyw1OCBAQCBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHMgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7XG4mIzQzO1x0dTY0IGJ5dGVzX3dyaXR0ZW4gPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghYnl0ZXNfdG9fd3JpdGViYWNrKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChieXRlc193cml0dGVuIFx1MDAzYyBieXRlc190b193cml0ZWJhY2spIHtcbiYjNDM7XHRcdGxvbmcgc2hydW5rO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVFI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2UgYSBsb2NhbCBpdGVyYXRvciB0byB3YWxrIHRoZSBtZW1jZyBhbmQgaXRzIG9ubGluZSBkZXNjZW5kYW50c1xuJiM0MztcdFx0ICogaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFVwb24gZXhpdGluZyB0aGUgbG9vcCwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKClcbiYjNDM7XHRcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRpdGVyID0gbWVtX2Nncm91cF9pdGVyKG1lbWNnLCBpdGVyLCBOVUxMKTtcbiYjNDM7XHRcdH0gd2hpbGUgKGl0ZXIgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoaXRlcikpO1xuJiM0MztcbiYjNDM7XHRcdHNocnVuayA9IHpzd2FwX3Nocmlua19vbmVfbWVtY2coaXRlciwgXHUwMDI2cyk7XG4mIzQzO1x0XHRpZiAoc2hydW5rIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGJ5dGVzX3dyaXR0ZW4gJiM0Mzs9IHNocnVuaztcbiYjNDM7XHRcdFx0bW9kX21lbWNnX3N0YXRlKGl0ZXIsIE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwgc2hydW5rKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgdGFrZW4gYnkgbWVtX2Nncm91cF90cnlnZXRfb25saW5lKCkgKi9cbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzaHJ1bmsgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9pdGVyX2JyZWFrKG1lbWNnLCBpdGVyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG4ge1xuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbmluZGV4IDQ5YjM2ZWU3OTE2MDZmLi5kZmQ1ZjI0YjlkOTkwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbkBAIC02MCw3ICYjNDM7NjAsMTIgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXG4gc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cHdiXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YiBcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBnZXRfY2dfcHdiX2J5dGVzKGNvbnN0IGNoYXIgKmNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2csIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2IgXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuQEAgLTM1NSw2ICYjNDM7MzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4ge1xuIFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4mIzQzO1x0bG9uZyBwd2JfYnl0ZXM7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG5AQCAtMzYyLDYgJiM0MzszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4mIzQzO1x0cHdiX2J5dGVzID0gZ2V0X2NnX3B3Yl9ieXRlcyhjZ3JvdXApO1xuJiM0MztcdGlmIChwd2JfYnl0ZXMgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCYjMzQ7LCBwd2JfYnl0ZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY2dfcnVuKGNncm91cCwgYXR0ZW1wdF93cml0ZWJhY2ssICh2b2lkICopIFx1MDAyNndiKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTM3OSw2ICYjNDM7MzkxLDE3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc29cbiYjNDM7XHQgKiB6c3dwd2JfcHJvYWN0aXZlX2IgbXVzdCBzdGF5IGF0IHplcm8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyXG4mIzQzO1x0ICogd3JpdGViYWNrIHdhcyBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2J5dGVzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2JfYWZ0ZXIgaXMgJWxkLCBleHBlY3RlZCAwXFxuXCYjMzQ7LCBwd2JfYnl0ZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzcwLDYgJiM0Mzs3OTMsMTQxIEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4mIzQzOyAqIDEuIEFsbG9jYXRlIG1lbW9yeS5cbiYjNDM7ICogMi4gUHVzaCBhbGxvY2F0ZWQgbWVtb3J5IGludG8genN3YXAuXG4mIzQzOyAqIDMuIFByb2FjdGl2ZWx5IHdyaXRlIGJhY2sgenN3YXAgcGFnZXMgdG8gc3dhcFxuJiM0MzsgKiAgICB1c2luZyBcJiMzNDtzb3VyY2U9enN3YXBcJiMzNDsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHByb2FjdGl2ZV93cml0ZWJhY2tfd29ya2xvYWQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRsb25nIHBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0O1xuJiM0MztcdGNoYXIgcmVjbGFpbV9jbWRbNjRdO1xuJiM0MztcdGNoYXIgYnVmW3BhZ2VzaXplXTtcbiYjNDM7XHRsb25nIHpzd2FwX3VzYWdlO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0Y2hhciAqbWVtO1xuJiM0MztcbiYjNDM7XHRtZW0gPSAoY2hhciAqKW1hbGxvYyhtZW1zaXplKTtcbiYjNDM7XHRpZiAoIW1lbSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBwYWdlc2l6ZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRidWZbaV0gPSBpIFx1MDAzYyBwYWdlc2l6ZSAvIDIgPyAoY2hhcilpIDogMDtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWVtc2l6ZTsgaSAmIzQzOz0gcGFnZXNpemUpXG4mIzQzO1x0XHRtZW1jcHkoXHUwMDI2bWVtW2ldLCBidWYsIHBhZ2VzaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogRXZpY3QgYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLiAqL1xuJiM0MztcdGlmIChjZ193cml0ZV9udW1lcmljKGNncm91cCwgXCYjMzQ7bWVtb3J5LnJlY2xhaW1cJiMzNDssIG1lbXNpemUpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0enN3YXBfdXNhZ2UgPSBjZ19yZWFkX2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuenN3YXAuY3VycmVudFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHpzd2FwX3VzYWdlIFx1MDAzYz0gMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8genN3YXAgcG9vbCB0byB3cml0ZSBiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xuJiM0MztcdHNucHJpbnRmKHJlY2xhaW1fY21kLCBzaXplb2YocmVjbGFpbV9jbWQpLCBcJiMzNDslbGQgc291cmNlPXpzd2FwXCYjMzQ7LCB6c3dhcF91c2FnZSk7XG4mIzQzO1x0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFwmIzM0O21lbW9yeS5yZWNsYWltXCYjMzQ7LCByZWNsYWltX2NtZCk7XG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiByYyAhPSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWUobWVtKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyhjb25zdCBjaGFyICpjZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciAqIGNvbnN0IGJhZF9pbnB1dHNbXSA9IHtcbiYjNDM7XHRcdFwmIzM0O3NvdXJjZT16c3dhcFwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0OzFNIHNvdXJjZT16c3dhcCBzd2FwcGluZXNzPTYwXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7MU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXhcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDsxTSBzd2FwcGluZXNzPW1heCBzb3VyY2U9enN3YXBcJiMzNDssXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgaSwgcmM7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYmFkX2lucHV0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyYyA9IGNnX3dyaXRlKGNncm91cCwgXCYjMzQ7bWVtb3J5LnJlY2xhaW1cJiMzNDssIGJhZF9pbnB1dHNbaV0pO1xuJiM0MztcdFx0aWYgKHJjICE9IC1FSU5WQUwpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bWVtb3J5LnJlY2xhaW0gJiMzOTslcyYjMzk7OiByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJhZF9pbnB1dHNbaV0sIHJjLCAtRUlOVkFMKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGxvbmcgd2JfYmVmb3JlLCB3Yl9hZnRlcjtcbiYjNDM7XHRsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7XG4mIzQzO1x0bG9uZyB3Yl9kZWx0YSwgcHdiX2JfZGVsdGE7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRjaGFyICp0ZXN0X2dyb3VwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgXCYjMzQ7bWVtb3J5Lnpzd2FwLndyaXRlYmFja1wmIzM0OywgXCYjMzQ7MVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcJiMzNDt6c3dhcF9wcm9hY3RpdmVfdGVzdFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCF0ZXN0X2dyb3VwKVxuJiM0MztcdFx0cmV0dXJuIEtTRlRfRkFJTDtcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKHRlc3RfZ3JvdXApKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG1pc3NpbmcgenN3cHdiX3Byb2FjdGl2ZV9iIHN0YXQgbWVhbnMgdGhlIGtlcm5lbCBsYWNrcyBwcm9hY3RpdmVcbiYjNDM7XHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xuJiM0MztcdHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2JfYmVmb3JlIFx1MDAzYyAwIHx8IHdiX2JlZm9yZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcnVuKHRlc3RfZ3JvdXAsIHByb2FjdGl2ZV93cml0ZWJhY2tfd29ya2xvYWQsIE5VTEwpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHB3Yl9iX2FmdGVyID0gZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKTtcbiYjNDM7XHR3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2JfYWZ0ZXIgXHUwMDNjIDAgfHwgd2JfYWZ0ZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHdiX2JfZGVsdGEgPSBwd2JfYl9hZnRlciAtIHB3Yl9iX2JlZm9yZTtcbiYjNDM7XHR3Yl9kZWx0YSA9IHdiX2FmdGVyIC0gd2JfYmVmb3JlO1xuJiM0MztcbiYjNDM7XHRpZiAocHdiX2JfZGVsdGEgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgcHdiX2JfZGVsdGEpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh3Yl9kZWx0YSBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3YiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcXG5cJiMzNDssIHdiX2RlbHRhKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gS1NGVF9QQVNTO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2dfZGVzdHJveSh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRmcmVlKHRlc3RfZ3JvdXApO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbkBAIC03ODMsNiAmIzQzOzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdFQodGVzdF9ub19rbWVtX2J5cGFzcyksXG4gXHRUKHRlc3Rfbm9faW52YXNpdmVfY2dyb3VwX3NocmluayksXG4gXHRUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLFxuJiM0MztcdFQodGVzdF96c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKSxcbiB9O1xuICN1bmRlZiBUXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rX29uZV9tZW1jZyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIHZpYSB0aGUgJiMzOTttZW1vcnkucmVjbGFpbSYjMzk7IGNncm91cCBpbnRlcmZhY2UgdXNpbmcgdGhlICYjMzk7c291cmNlPXpzd2FwJiMzOTsga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU2Y2E4ZWUxYzNiNDAzMTI3MWZjNjE0YzJjMDJjMTM2NzczNWJhNWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0OToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTE0MjUsOSAmIzQzOzE0MjUsMTAgQEAgUEFHRV9TSVpFIG11bHRpcGxlIHdoZW4gcmVhZCBiYWNrLgogCiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLgogCi0JICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgIHN3YXBwaW5lc3MgICAgICAgICAgICBTd2FwcGluZXNzIHZhbHVlIHRvIHJlY2xhaW0gd2l0aAotCSAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CSAgc291cmNlPXpzd2FwICAgICAgICAgIE9ubHkgcGVyZm9ybSBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrCiYjNDM7CSAgPT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAlTcGVjaWZ5aW5nIGEgc3dhcHBpbmVzcyB2YWx1ZSBpbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBwZXJmb3JtCiAJdGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUKQEAgLTE0MzcsNiAmIzQzOzE0MzgsMTkgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC4KIAlUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nCiAJc3dhcHBpbmVzcz1tYXggZXhjbHVzaXZlbHkgcmVjbGFpbXMgYW5vbnltb3VzIG1lbW9yeS4KIAomIzQzOwlUaGUgc291cmNlPXpzd2FwIGtleSBza2lwcyBvcmRpbmFyeSBtZW1vcnkgcmVjbGFpbSBhbmQKJiM0MzsJd3JpdGVzIGJhY2sgcGFnZXMgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSB1bnRpbAomIzQzOwl0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlcwomIzQzOwlhcmUgZm91bmQuIFRoaXMgaXMgdXNlZnVsIHRvIHByb2FjdGl2ZWx5IG9mZmxvYWQgY29sZCBjb21wcmVzc2VkCiYjNDM7CWRhdGEgZnJvbSB0aGUgenN3YXAgcG9vbCB0byB0aGUgc3dhcCBkZXZpY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlCiYjNDM7CWlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlCiYjNDM7CWNvbWJpbmVkIHdpdGggc3dhcHBpbmVzczsgc3BlY2lmeWluZyBib3RoIHJldHVybnMgLUVJTlZBTC4KJiM0MzsKJiM0MzsJRXhhbXBsZTo6CiYjNDM7CiYjNDM7CSAgIyBXcml0ZWJhY2sgdXAgdG8gMTBNQiBvZiBjb21wcmVzc2VkIGRhdGEgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwCiYjNDM7CSAgZWNobyAmIzM0OzEwTSBzb3VyY2U9enN3YXAmIzM0OyAmZ3Q7IG1lbW9yeS5yZWNsYWltCiYjNDM7CiAgIG1lbW9yeS5wZWFrCiAJQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLgogCkBAIC0xNzM0LDYgJiM0MzsxNzQ4LDEwIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuCiAJICB6c3dwd2IKIAkJTnVtYmVyIG9mIHBhZ2VzIHdyaXR0ZW4gZnJvbSB6c3dhcCB0byBzd2FwLgogCiYjNDM7CSAgenN3cHdiX3Byb2FjdGl2ZV9iCiYjNDM7CQlCeXRlcyBvZiBjb21wcmVzc2VkIGRhdGEgcHJvYWN0aXZlbHkgd3JpdHRlbiBiYWNrIGZyb20KJiM0MzsJCXpzd2FwIHRvIHN3YXAgdmlhIHRoZSBtZW1vcnkucmVjbGFpbSBzb3VyY2U9enN3YXAga2V5LgomIzQzOwogCSAgenN3YXBfaW5jb21wCiAJCU51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwCiAJCXdpdGhvdXQgY29tcHJlc3Npb24uIFRoZXNlIHBhZ2VzIGNvdWxkIG5vdCBiZSBjb21wcmVzc2VkIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0CmluZGV4IDI0NjQ0MjVjNzgzZGUyLi5iNDliOGMxMzAzODkwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3QKQEAgLTEzMSw3ICYjNDM7MTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjoKICAgZWNobyBZICZndDsgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkCiAKIFRoaXMgY2FuIGJlIGVuYWJsZWQgYXQgdGhlIGJvb3QgdGltZSBpZiBgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYGAgaXMKLXNlbGVjdGVkLgomIzQzO3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvCiYjNDM7YmFja2luZyBzd2FwIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4KJiM0MzsKJiM0MztJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljCiYjNDM7bWVtb3J5IGNncm91cCB3aXRob3V0IGludm9raW5nIHN0YW5kYXJkIHBhZ2UgcmVjbGFpbSwgaXQgY2FuIGJlIGRvbmUgYXMgZm9sbG93czo6CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDsxME0gc291cmNlPXpzd2FwJiMzNDsgJmd0OyAvc3lzL2ZzL2Nncm91cC8mbHQ7Y2dyb3VwLW5hbWUmZ3Q7L21lbW9yeS5yZWNsYWltCiYjNDM7CiYjNDM7Qm90aCBvZiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUgYXJlIHN1YmplY3QgdG8gdGhlIGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgCiYjNDM7Y29udHJvbC4gVGhpcyBtZWFucyB0aGF0IGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgIGNhbiBwcmV2ZW50IGFsbCB6c3dhcCB3cml0ZWJhY2suCiAKIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyCiBvZiBwYWdlcyBzdG9yZWQsIHNhbWUtdmFsdWUgZmlsbGVkIHBhZ2VzIGFuZCB2YXJpb3VzIGNvdW50ZXJzIGZvciB0aGUgcmVhc29ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC00MCw2ICYjNDM7NDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7CiAJTUVNQ0dfWlNXQVBfQiwKIAlNRU1DR19aU1dBUFBFRCwKIAlNRU1DR19aU1dBUF9JTkNPTVAsCiYjNDM7CU1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwKIAlNRU1DR19OUl9TVEFULAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDcgQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7aW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJICAgIHU2NCBieXRlc190b193cml0ZWJhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGQyMGZmYzgyNzMwNmU5Li5kODFjMzQ0ODRiY2EyOCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNDMzLDYgJiM0Mzs0MzMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3N0YXRfaXRlbXNbXSA9IHsKIAlNRU1DR19aU1dBUF9CLAogCU1FTUNHX1pTV0FQUEVELAogCU1FTUNHX1pTV0FQX0lOQ09NUCwKJiM0MzsJTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLAogfTsKIAogI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpCkBAIC0xNTU4LDYgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHsKIAl7ICYjMzQ7enN3YXAmIzM0OywJCQlNRU1DR19aU1dBUF9CCQkJfSwKIAl7ICYjMzQ7enN3YXBwZWQmIzM0OywJCQlNRU1DR19aU1dBUFBFRAkJCX0sCiAJeyAmIzM0O3pzd2FwX2luY29tcCYjMzQ7LAkJTUVNQ0dfWlNXQVBfSU5DT01QCQl9LAomIzQzOwl7ICYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iJiMzNDssCQlNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IJfSwKICNlbmRpZgogCXsgJiMzNDtmaWxlX21hcHBlZCYjMzQ7LAkJTlJfRklMRV9NQVBQRUQJCQl9LAogCXsgJiMzNDtmaWxlX2RpcnR5JiMzNDssCQkJTlJfRklMRV9ESVJUWQkJCX0sCkBAIC0xNjE0LDYgJiM0MzsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pCiAJc3dpdGNoIChpdGVtKSB7CiAJY2FzZSBNRU1DR19QRVJDUFVfQjoKIAljYXNlIE1FTUNHX1pTV0FQX0I6CiYjNDM7CWNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COgogCWNhc2UgTlJfU0xBQl9SRUNMQUlNQUJMRV9COgogCWNhc2UgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0I6CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02NCw2ICYjNDM7NjQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3N5c2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtNzg1NSwxMSAmIzQzOzc4NTYsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssCiBlbnVtIHsKIAlNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCwKIAlNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwKJiM0MzsJTUVNT1JZX1JFQ0xBSU1fU09VUkNFLAogCU1FTU9SWV9SRUNMQUlNX05VTEwsCiB9Owogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgJiMzNDtzd2FwcGluZXNzPSVkJiMzNDt9LAogCXsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsICYjMzQ7c3dhcHBpbmVzcz1tYXgmIzM0O30sCiYjNDM7CXsgTUVNT1JZX1JFQ0xBSU1fU09VUkNFLCAmIzM0O3NvdXJjZT0lcyYjMzQ7fSwKIAl7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSwKIH07CiAKQEAgLTc4NjksOSAmIzQzOzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLAogCXVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUzsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7CiAJaW50IHN3YXBwaW5lc3MgPSAtMTsKJiM0MzsJYm9vbCB6c3dhcF93cml0ZWJhY2tfb25seSA9IGZhbHNlOwogCWNoYXIgKm9sZF9idWYsICpzdGFydDsKJiM0MzsJY2hhciBzb3VyY2VbMTZdOwogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAlnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7CiYjNDM7CXU2NCBucl9ieXRlczsKIAogCWlmICghYnVmIHx8ICghbWVtY2cgJmFtcDsmYW1wOyAhcGdkYXQpIHx8IChtZW1jZyAmYW1wOyZhbXA7IHBnZGF0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03ODc5LDcgJiM0Mzs3ODg1LDggQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLAogCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7CiAKIAlvbGRfYnVmID0gYnVmOwotCW5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsICZhbXA7YnVmKSAvIFBBR0VfU0laRTsKJiM0MzsJbnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsICZhbXA7YnVmKTsKJiM0MzsJbnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFOwogCWlmIChidWYgPT0gb2xkX2J1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc4OTksMTEgJiM0Mzs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZiwKIAkJY2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDoKIAkJCXN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6CiYjNDM7CQkJaWYgKG1hdGNoX3N0cmxjcHkoc291cmNlLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihzb3VyY2UpKSAmZ3Q7PSBzaXplb2Yoc291cmNlKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJLyogT25seSB6c3dhcCBpcyBzdXBwb3J0ZWQgYXMgYSByZWNsYWltIHNvdXJjZSBmb3Igbm93LiAqLwomIzQzOwkJCWlmIChzdHJjbXAoc291cmNlLCAmIzM0O3pzd2FwJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl6c3dhcF93cml0ZWJhY2tfb25seSA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAomIzQzOwlpZiAoenN3YXBfd3JpdGViYWNrX29ubHkpIHsKJiM0MzsJCS8qIHNvdXJjZT16c3dhcCBhbmQgc3dhcHBpbmVzcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLwomIzQzOwkJaWYgKHN3YXBwaW5lc3MgIT0gLTEpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4genN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhtZW1jZywgbnJfYnl0ZXMpOwomIzQzOwl9CiYjNDM7CiAJd2hpbGUgKG5yX3JlY2xhaW1lZCAmbHQ7IG5yX3RvX3JlY2xhaW0pIHsKIAkJLyogV2lsbCBjb252ZXJnZSBvbiB6ZXJvLCBidXQgcmVjbGFpbSBlbmZvcmNlcyBhIG1pbmltdW0gKi8KIAkJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDsKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MztzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuOwomIzQzOwlib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlOwomIzQzO307CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xMDg5LDggJiM0MzsxMDk0LDkgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X28KIAkJCQkgICAgICAgdm9pZCAqYXJnKQogewogCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpOwotCWJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnOwogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwomIzQzOwl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTsKIAlpbnQgd3JpdGViYWNrX3Jlc3VsdDsKIApAQCAtMTEzMywxMCAmIzQzOzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X28KIAogCS8qCiAJICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlCi0JICogc3dwZW50cnkgaXMgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZCBhZ2FpbgotCSAqIHVudGlsIHRoZSBlbnRyeSBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS4KJiM0MzsJICogbmVlZGVkIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZAomIzQzOwkgKiBhZ2FpbiB1bnRpbCBpdCBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS4KIAkgKi8KIAlzd3BlbnRyeSA9IGVudHJ5LSZndDtzd3BlbnRyeTsKJiM0MzsJbGVuZ3RoID0gZW50cnktJmd0O2xlbmd0aDsKIAogCS8qCiAJICogSXQmIzM5O3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyCkBAIC0xMTU1LDEyICYjNDM7MTE2MiwxMyBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfbwogCQkgKiBpbnRvIHRoZSB3YXJtZXIgcmVnaW9uLiBXZSBzaG91bGQgdGVybWluYXRlIHNocmlua2luZyAoaWYgd2UmIzM5O3JlIGluIHRoZSBkeW5hbWljCiAJCSAqIHNocmlua2VyIGNvbnRleHQpLgogCQkgKi8KLQkJaWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCAmYW1wOyZhbXA7IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7CiYjNDM7CQlpZiAod3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUKSB7CiAJCQlyZXQgPSBMUlVfU1RPUDsKLQkJCSplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7CiYjNDM7CQkJd2Fsa19hcmctJmd0O2VuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTsKIAkJfQogCX0gZWxzZSB7CiAJCXpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcyYjNDM7JiM0Mzs7CiYjNDM7CQl3YWxrX2FyZy0mZ3Q7Ynl0ZXNfd3JpdHRlbiAmIzQzOz0gbGVuZ3RoOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMTY5LDggJiM0MzsxMTc3LDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7CiYjNDM7CQkuYnl0ZXNfd3JpdHRlbiA9IDAsCiYjNDM7CQkuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSwKJiM0MzsJfTsKIAl1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7Ci0JYm9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlOwogCiAJaWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8CiAJCQkhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy0mZ3Q7bWVtY2cpKSB7CkBAIC0xMTc5LDkgJiM0MzsxMTkwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCX0KIAogCXNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsaygmYW1wO3pzd2FwX2xpc3RfbHJ1LCBzYywgJmFtcDtzaHJpbmtfbWVtY2dfY2IsCi0JCSZhbXA7ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpOwomIzQzOwkJJmFtcDt3YWxrX2FyZyk7CiAKLQlpZiAoZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpCiYjNDM7CWlmICh3YWxrX2FyZy5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSkKIAkJcmV0dXJuIFNIUklOS19TVE9QOwogCiAJcmV0dXJuIHNocmlua19yZXQgPyBzaHJpbmtfcmV0IDogU0hSSU5LX1NUT1A7CkBAIC0xMjc1LDkgJiM0MzsxMjg2LDMxIEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpCiAJcmV0dXJuIHNocmlua2VyOwogfQogCi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7I2RlZmluZSBOUl9aU1dBUF9XQl9CQVRDSAk2NFVMCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTY2FuIHVwIHRvIEBucl90b19zY2FuIHBhZ2VzIGFjcm9zcyB0aGUgcGVyLW5vZGUgenN3YXAgTFJVcyBvZiBAbWVtY2cKJiM0MzsgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy4KJiM0MzsgKgomIzQzOyAqIFNpbmNlIHRoZSBzZWNvbmQtY2hhbmNlIGFsZ29yaXRobSByb3RhdGVzIHJlZmVyZW5jZWQgZW50cmllcyB0byB0aGUKJiM0MzsgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc28KJiM0MzsgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyCiYjNDM7ICogdG8gaGFuZGxlIHJldHJpZXMsIGRlY2lkaW5nIHdoZXRoZXIgdG8gc2NhbiBhbm90aGVyIG1lbWNnIHRvIGNvbXBsZXRlCiYjNDM7ICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwCiYjNDM7ICogZW50cmllcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoJmd0Oz0gMCksIG9yIC1FTk9FTlQKJiM0MzsgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkKJiM0MzsgKiB6c3dhcCBMUlVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbikKIHsKLQlpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDsKJiM0MzsJc3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHsKJiM0MzsJCS5ieXRlc193cml0dGVuID0gMCwKJiM0MzsJCS5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3RvX3NjYW47CiYjNDM7CWludCBuaWQ7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEyOTAsMjMgJiM0MzsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGs7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkCiYjNDM7CQkgKiBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuCiYjNDM7CQkgKi8KJiM0MzsJCW5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLAomIzQzOwkJCQkgbGlzdF9scnVfY291bnRfb25lKCZhbXA7enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2cpKTsKJiM0MzsJCWlmICghbnJfdG9fd2FsaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW5yX3JlbWFpbmluZyAtPSBucl90b193YWxrOwomIzQzOwkJbGlzdF9scnVfd2Fsa19vbmUoJmFtcDt6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgJmFtcDtzaHJpbmtfbWVtY2dfY2IsCiYjNDM7CQkJCSAgJmFtcDt3YWxrX2FyZywgJmFtcDtucl90b193YWxrKTsKJiM0MzsJCS8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovCiYjNDM7CQlucl9yZW1haW5pbmcgJiM0Mzs9IG5yX3RvX3dhbGs7CiAKLQkJc2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZSgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLAotCQkJCQkgICAgJmFtcDtzaHJpbmtfbWVtY2dfY2IsIE5VTEwsICZhbXA7bnJfdG9fd2Fsayk7Ci0JCXNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrOwomIzQzOwkJaWYgKCFucl9yZW1haW5pbmcpCiYjNDM7CQkJYnJlYWs7CiAJfQogCi0JaWYgKCFzY2FubmVkKQomIzQzOwkvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi8KJiM0MzsJaWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjsKJiM0MzsJcmV0dXJuIHdhbGtfYXJnLmJ5dGVzX3dyaXR0ZW47CiYjNDM7fQomIzQzOwomIzQzOy8qIFRyYWNrIHByb2dyZXNzIG9mIGEgbWVtY2ctdHJlZSB3cml0ZWJhY2sgd2Fsay4gKi8KJiM0MztzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHsKJiM0MzsJaW50IHNjYW5zOwomIzQzOwlpbnQgZmFpbHVyZXM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7ICogaXRlcmF0b3IsIGFuZCBmb2xkIHRoZSByZXN1bHQgaW50byBAcywgdGhlIHJldHJ5IGJvb2trZWVwaW5nIHNoYXJlZAomIzQzOyAqIGFjcm9zcyBzdGVwcy4gQG1lbWNnIGlzIHRoZSBpdGVyYXRvciYjMzk7cyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2UKJiM0MzsgKiBpdCBoYXMgd3JhcHBlZCBhcm91bmQgYWZ0ZXIgYSBmdWxsIHBhc3Mgb3ZlciB0aGUgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlcgomIzQzOyAqIGVuY291bnRlcmluZyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBNQVhfUkVDTEFJTV9SRVRSSUVTIHRpbWVzOgomIzQzOyAqIC0gTm8gd3JpdGViYWNrLWNhbmRpZGF0ZSBtZW1jZ3Mgd2VyZSBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay4KJiM0MzsgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrICgmZ3Q7PSAwKSwgb3IgLUVCVVNZCiYjNDM7ICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyB6c3dhcF9zaHJpbmtfb25lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSAqcykKJiM0Mzt7CiYjNDM7CWxvbmcgc2hydW5rOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFjaGluZyBhIE5VTEwgbWVtY2cgbWVhbnMgYSBmdWxsIGhpZXJhcmNoeSBwYXNzIGNvbXBsZXRlZC4KJiM0MzsJICogRXhjbHVkZSB0aGUgbWVtY2ctZGlzYWJsZWQgY2FzZSwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEwsIGFuZAomIzQzOwkgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2cgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kCiYjNDM7CQkgKiBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFzLSZndDtzY2FucyAmYW1wOyZhbXA7ICYjNDM7JiM0MztzLSZndDtmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQlzLSZndDtzY2FucyA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzaHJ1bmsgPSBzaHJpbmtfbWVtY2cobWVtY2csIE5SX1pTV0FQX1dCX0JBVENIKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLiBXaXRoIG1lbWNnCiYjNDM7CSAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnCiYjNDM7CSAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS4KJiM0MzsJICogV2l0aCBtZW1jZyBkaXNhYmxlZCB0aGUgcm9vdCBMUlUgaXMgdGhlIG9ubHkgdGFyZ2V0LCBzbyB3ZSBzaG91bGQKJiM0MzsJICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2hydW5rID09IC1FTk9FTlQpCiYjNDM7CQlyZXR1cm4gbWVtX2Nncm91cF9kaXNhYmxlZCgpID8gLUVCVVNZIDogMDsKJiM0MzsJcy0mZ3Q7c2NhbnMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoc2hydW5rICZsdDs9IDAgJmFtcDsmYW1wOyAmIzQzOyYjNDM7cy0mZ3Q7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldHVybiBzaHJ1bms7CiB9CiAKIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKLQlpbnQgcmV0LCBmYWlsdXJlcyA9IDAsIGF0dGVtcHRzID0gMDsKJiM0MzsJc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307CiAJdW5zaWduZWQgbG9uZyB0aHI7CiAKIAkvKiBSZWNsYWltIGRvd24gdG8gdGhlIGFjY2VwdCB0aHJlc2hvbGQgKi8KQEAgLTEzMTgsMTEgJiM0MzsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJICogd3JpdGViYWNrLWRpc2FibGVkIG1lbWNncyAobWVtb3J5Lnpzd2FwLndyaXRlYmFjaz0wKSBhcmUgbm90CiAJICogY2FuZGlkYXRlcyBmb3Igc2hyaW5raW5nLgogCSAqCi0JICogU2hyaW5raW5nIHdpbGwgYmUgYWJvcnRlZCBpZiB3ZSBlbmNvdW50ZXIgdGhlIGZvbGxvd2luZwotCSAqIE1BWF9SRUNMQUlNX1JFVFJJRVMgdGltZXM6Ci0JICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay4KLQkgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLgotCSAqCiAJICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssCiAJICogd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGJ5IHRoZSBvZmZsaW5lIG1lbWNnIGNsZWFuZXIKIAkgKiB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoKS4KQEAgLTEzMzcsNyAmIzQzOzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJICogb2ZmbGluZSBtZW1jZyBsZWZ0IGluIHpzd2FwX25leHRfc2hyaW5rIHdpbGwgaG9sZCB0aGUgcmVmZXJlbmNlCiAJICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS4KIAkgKi8KLQlkbyB7CiYjNDM7CXdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpICZndDsgdGhyKSB7CiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CQlsb25nIHJldDsKJiM0MzsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCQkvKgogCQkgKiBTdGFydCBzaHJpbmtpbmcgZnJvbSB0aGUgbmV4dCBtZW1jZyBhZnRlciB6c3dhcF9uZXh0X3Nocmluay4KIAkJICogV2hlbiB0aGUgb2ZmbGluZSBjbGVhbmVyIGhhcyBhbHJlYWR5IGFkdmFuY2VkIHRoZSBjdXJzb3IsCkBAIC0xMzU2LDM3ICYjNDM7MTQ2MiwxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAkJfSB3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7enN3YXBfc2hyaW5rX2xvY2spOwogCi0JCWlmICghbWVtY2cpIHsKLQkJCS8qCi0JCQkgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWYKLQkJCSAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLgotCQkJICovCi0JCQlpZiAoIWF0dGVtcHRzICZhbXA7JmFtcDsgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpCi0JCQkJYnJlYWs7Ci0KLQkJCWF0dGVtcHRzID0gMDsKLQkJCWdvdG8gcmVzY2hlZDsKLQkJfQotCi0JCXJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7CiYjNDM7CQlyZXQgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKG1lbWNnLCAmYW1wO3MpOwogCQkvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi8KIAkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwotCi0JCS8qCi0JCSAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4KLQkJICogVGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnCi0JCSAqIHdpdGggcGFnZXMgaW4genN3YXAuIFNraXAgdGhpcyB3aXRob3V0IGluY3JlbWVudGluZyBhdHRlbXB0cwotCQkgKiBhbmQgZmFpbHVyZXMuCi0JCSAqLwotCQlpZiAocmV0ID09IC1FTk9FTlQpCi0JCQljb250aW51ZTsKLQkJJiM0MzsmIzQzO2F0dGVtcHRzOwotCi0JCWlmIChyZXQgJmFtcDsmYW1wOyAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUykKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQogCQkJYnJlYWs7Ci1yZXNjaGVkOgotCQljb25kX3Jlc2NoZWQoKTsKLQl9IHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpICZndDsgdGhyKTsKJiM0MzsJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDkyLDcgJiM0MzsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJaWYgKG9iamNnICZhbXA7JmFtcDsgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkgewogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwotCQlpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkgewomIzQzOwkJaWYgKHNocmlua19tZW1jZyhtZW1jZywgbnVtX25vZGVfc3RhdGUoTl9OT1JNQUxfTUVNT1JZKSkgJmx0Oz0gMCkgewogCQkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQkJZ290byBwdXRfb2JqY2c7CiAJCX0KQEAgLTE2MzIsNiAmIzQzOzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgcyA9IHt9OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7CiYjNDM7CXU2NCBieXRlc193cml0dGVuID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl3aGlsZSAoYnl0ZXNfd3JpdHRlbiAmbHQ7IGJ5dGVzX3RvX3dyaXRlYmFjaykgewomIzQzOwkJbG9uZyBzaHJ1bms7CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IC1FSU5UUjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVc2UgYSBsb2NhbCBpdGVyYXRvciB0byB3YWxrIHRoZSBtZW1jZyBhbmQgaXRzIG9ubGluZSBkZXNjZW5kYW50cwomIzQzOwkJICogaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFVwb24gZXhpdGluZyB0aGUgbG9vcCwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKCkKJiM0MzsJCSAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS4KJiM0MzsJCSAqLwomIzQzOwkJZG8gewomIzQzOwkJCWl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIobWVtY2csIGl0ZXIsIE5VTEwpOwomIzQzOwkJfSB3aGlsZSAoaXRlciAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoaXRlcikpOwomIzQzOwomIzQzOwkJc2hydW5rID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhpdGVyLCAmYW1wO3MpOwomIzQzOwkJaWYgKHNocnVuayAmZ3Q7IDApIHsKJiM0MzsJCQlieXRlc193cml0dGVuICYjNDM7PSBzaHJ1bms7CiYjNDM7CQkJbW9kX21lbWNnX3N0YXRlKGl0ZXIsIE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwgc2hydW5rKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqLwomIzQzOwkJbWVtX2Nncm91cF9wdXQoaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoc2hydW5rID09IC1FQlVTWSkgewomIzQzOwkJCXJldCA9IC1FQUdBSU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9pdGVyX2JyZWFrKG1lbWNnLCBpdGVyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKQogewogCXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKQEAgLTYwLDcgJiM0Mzs2MCwxMiBAQCBzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSkKIAogc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQogewotCXJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3B3YiAmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGdldF9jZ19wd2JfYnl0ZXMoY29uc3QgY2hhciAqY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYiAmIzM0Oyk7CiB9CiAKIHN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cCkKQEAgLTM1NSw2ICYjNDM7MzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YikKIHsKIAlsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKJiM0MzsJbG9uZyBwd2JfYnl0ZXM7CiAKIAl6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7CiAJaWYgKHpzd3B3Yl9iZWZvcmUgIT0gMCkgewpAQCAtMzYyLDYgJiM0MzszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKQogCQlyZXR1cm4gLTE7CiAJfQogCiYjNDM7CXB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTsKJiM0MzsJaWYgKHB3Yl9ieXRlcyAmZ3Q7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcbiYjMzQ7LCBwd2JfYnl0ZXMpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiAJaWYgKGNnX3J1bihjZ3JvdXAsIGF0dGVtcHRfd3JpdGViYWNrLCAodm9pZCAqKSAmYW1wO3diKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0zNzksNiAmIzQzOzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpCiAJCXJldHVybiAtMTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc28KJiM0MzsJICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgomIzQzOwkgKiB3cml0ZWJhY2sgd2FzIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7CiYjNDM7CWlmIChwd2JfYnl0ZXMgJmd0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYl9hZnRlciBpcyAlbGQsIGV4cGVjdGVkIDBcbiYjMzQ7LCBwd2JfYnl0ZXMpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3MCw2ICYjNDM7NzkzLDE0MSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBUcmlnZ2VyIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgd2l0aCB0aGUgZm9sbG93aW5nIHN0ZXBzOgomIzQzOyAqIDEuIEFsbG9jYXRlIG1lbW9yeS4KJiM0MzsgKiAyLiBQdXNoIGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC4KJiM0MzsgKiAzLiBQcm9hY3RpdmVseSB3cml0ZSBiYWNrIHpzd2FwIHBhZ2VzIHRvIHN3YXAKJiM0MzsgKiAgICB1c2luZyAmIzM0O3NvdXJjZT16c3dhcCYjMzQ7LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcHJvYWN0aXZlX3dyaXRlYmFja193b3JrbG9hZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CXNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0OwomIzQzOwljaGFyIHJlY2xhaW1fY21kWzY0XTsKJiM0MzsJY2hhciBidWZbcGFnZXNpemVdOwomIzQzOwlsb25nIHpzd2FwX3VzYWdlOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCByYzsKJiM0MzsJY2hhciAqbWVtOwomIzQzOwomIzQzOwltZW0gPSAoY2hhciAqKW1hbGxvYyhtZW1zaXplKTsKJiM0MzsJaWYgKCFtZW0pCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHBhZ2VzaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCWJ1ZltpXSA9IGkgJmx0OyBwYWdlc2l6ZSAvIDIgPyAoY2hhcilpIDogMDsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBtZW1zaXplOyBpICYjNDM7PSBwYWdlc2l6ZSkKJiM0MzsJCW1lbWNweSgmYW1wO21lbVtpXSwgYnVmLCBwYWdlc2l6ZSk7CiYjNDM7CiYjNDM7CS8qIEV2aWN0IGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC4gKi8KJiM0MzsJaWYgKGNnX3dyaXRlX251bWVyaWMoY2dyb3VwLCAmIzM0O21lbW9yeS5yZWNsYWltJiMzNDssIG1lbXNpemUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0ZhaWxlZCB0byBwdXNoIHBhZ2VzIGludG8genN3YXBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuenN3YXAuY3VycmVudCYjMzQ7KTsKJiM0MzsJaWYgKHpzd2FwX3VzYWdlICZsdDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8genN3YXAgcG9vbCB0byB3cml0ZSBiYWNrXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2suICovCiYjNDM7CXNucHJpbnRmKHJlY2xhaW1fY21kLCBzaXplb2YocmVjbGFpbV9jbWQpLCAmIzM0OyVsZCBzb3VyY2U9enN3YXAmIzM0OywgenN3YXBfdXNhZ2UpOwomIzQzOwlyYyA9IGNnX3dyaXRlKGNncm91cCwgJiMzNDttZW1vcnkucmVjbGFpbSYjMzQ7LCByZWNsYWltX2NtZCk7CiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHJjICE9IC1FQUdBSU4pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7cHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmYWlsZWQ6ICVkXG4mIzM0OywgcmMpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MztvdXQ6CiYjNDM7CWZyZWUobWVtKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHMoY29uc3QgY2hhciAqY2dyb3VwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNoYXIgKiBjb25zdCBiYWRfaW5wdXRzW10gPSB7CiYjNDM7CQkmIzM0O3NvdXJjZT16c3dhcCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz02MCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzd2FwcGluZXNzPTYwIHNvdXJjZT16c3dhcCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXgmIzM0OywKJiM0MzsJCSYjMzQ7MU0gc3dhcHBpbmVzcz1tYXggc291cmNlPXpzd2FwJiMzNDssCiYjNDM7CX07CiYjNDM7CWludCBpLCByYzsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoYmFkX2lucHV0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyYyA9IGNnX3dyaXRlKGNncm91cCwgJiMzNDttZW1vcnkucmVjbGFpbSYjMzQ7LCBiYWRfaW5wdXRzW2ldKTsKJiM0MzsJCWlmIChyYyAhPSAtRUlOVkFMKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkucmVjbGFpbSAmIzM5OyVzJiMzOTs6IHJldHVybmVkICVkLCBleHBlY3RlZCAlZFxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBiYWRfaW5wdXRzW2ldLCByYywgLUVJTlZBTCk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJbG9uZyB3Yl9iZWZvcmUsIHdiX2FmdGVyOwomIzQzOwlsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7CiYjNDM7CWxvbmcgd2JfZGVsdGEsIHB3Yl9iX2RlbHRhOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9GQUlMOwomIzQzOwljaGFyICp0ZXN0X2dyb3VwOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgJiMzNDttZW1vcnkuenN3YXAud3JpdGViYWNrJiMzNDssICYjMzQ7MSYjMzQ7KSkKJiM0MzsJCXJldHVybiBLU0ZUX1NLSVA7CiYjNDM7CiYjNDM7CXRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsICYjMzQ7enN3YXBfcHJvYWN0aXZlX3Rlc3QmIzM0Oyk7CiYjNDM7CWlmICghdGVzdF9ncm91cCkKJiM0MzsJCXJldHVybiBLU0ZUX0ZBSUw7CiYjNDM7CWlmIChjZ19jcmVhdGUodGVzdF9ncm91cCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJLyoKJiM0MzsJICogQSBtaXNzaW5nIHpzd3B3Yl9wcm9hY3RpdmVfYiBzdGF0IG1lYW5zIHRoZSBrZXJuZWwgbGFja3MgcHJvYWN0aXZlCiYjNDM7CSAqIHdyaXRlYmFjayBzdXBwb3J0LCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IEtTRlRfU0tJUDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmIChjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHModGVzdF9ncm91cCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfYmVmb3JlID0gZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKTsKJiM0MzsJd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApOwomIzQzOwlpZiAocHdiX2JfYmVmb3JlICZsdDsgMCB8fCB3Yl9iZWZvcmUgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChjZ19ydW4odGVzdF9ncm91cCwgcHJvYWN0aXZlX3dyaXRlYmFja193b3JrbG9hZCwgTlVMTCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfYWZ0ZXIgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApOwomIzQzOwl3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTsKJiM0MzsJaWYgKHB3Yl9iX2FmdGVyICZsdDsgMCB8fCB3Yl9hZnRlciAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfZGVsdGEgPSBwd2JfYl9hZnRlciAtIHB3Yl9iX2JlZm9yZTsKJiM0MzsJd2JfZGVsdGEgPSB3Yl9hZnRlciAtIHdiX2JlZm9yZTsKJiM0MzsKJiM0MzsJaWYgKHB3Yl9iX2RlbHRhICZsdDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iIGRpZCBub3QgaW5jcmVhc2U6IGRlbHRhPSVsZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIHB3Yl9iX2RlbHRhKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmICh3Yl9kZWx0YSAmbHQ7PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3pzd3B3YiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcbiYjMzQ7LCB3Yl9kZWx0YSk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBLU0ZUX1BBU1M7CiYjNDM7b3V0OgomIzQzOwljZ19kZXN0cm95KHRlc3RfZ3JvdXApOwomIzQzOwlmcmVlKHRlc3RfZ3JvdXApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVCh4KSB7IHgsICN4IH0KIHN0cnVjdCB6c3dhcF90ZXN0IHsKIAlpbnQgKCpmbikoY29uc3QgY2hhciAqcm9vdCk7CkBAIC03ODMsNiAmIzQzOzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHsKIAlUKHRlc3Rfbm9fa21lbV9ieXBhc3MpLAogCVQodGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKSwKIAlUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLAomIzQzOwlUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksCiB9OwogI3VuZGVmIFQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBac3dhcCBXcml0ZWJhY2sgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB0aHJvdWdoIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggYHNvdXJjZT16c3dhcGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGxldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzLiBJdCYjMzk7cyB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdGApIHRvIHJlZmxlY3QgdGhpcyBuZXcgY2FwYWJpbGl0eSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyAoYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYGluY2x1ZGUvbGludXgvenN3YXAuaGApIGFuZCBjb3JlIGltcGxlbWVudGF0aW9uIGZpbGVzIChgbW0vbWVtY29udHJvbC5jYCwgYG1tL3Ztc2Nhbi5jYCwgYG1tL3pzd2FwLmNgKS4gVGhlcmUmIzM5O3MgZXZlbiBhIHRlc3Qgc3VpdGUgYWRkaXRpb24gKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jYCksIHdoaWNoIGlzIGdyZWF0IOKAkyB3ZSBuZWVkIHRob3JvdWdoIHRlc3RpbmcgZm9yIGEgZmVhdHVyZSBsaWtlIHRoaXMuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdG8gcGFyc2UgdGhlIGBzb3VyY2U9enN3YXBgIG9wdGlvbi4gSWYgYHpzd2FwX3dyaXRlYmFja19vbmx5YCBpcyBlbmFibGVkLCBpdCBjYWxscyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AuIFRoZW4gYG1tL3pzd2FwLmNgIGltcGxlbWVudHMgYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgIGl0c2VsZiwgd2hpY2gsIGluIHR1cm4sIGl0ZXJhdGVzIHRocm91Z2ggbWVtY2dzIGFuZCBjYWxscyBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AuIFRoZSBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AgdGhlbiBjYWxscyBgc2hyaW5rX21lbWNnYC4gVGhlIGBzaHJpbmtfbWVtY2dgIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQgdG8gYWNjZXB0IGEgYG5yX3RvX3NjYW5gIGFyZ3VtZW50IGFuZCB0byByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjay4gVGhpcyBpcyBhbGwgY2xlYXJseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2luZyBhIHdheSB0byBwcm9hY3RpdmVseSB0cmlnZ2VyIHdyaXRlYmFjayBvZiB6c3dhcCBwYWdlcy4KCkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIEl0IHByb3ZpZGVzIGEgbmV3IG1lY2hhbmlzbSB0byBjb250cm9sIHpzd2FwIGJlaGF2aW9yIHRocm91Z2ggbWVtY2dzLiBCZWNhdXNlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdlIGFic29sdXRlbHkgbmVlZCB0byBjb25zaWRlciBpdCBhIHRhcmdldCBmb3IgZnV6emluZy4gQW55IG5ldyB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmVhbGx5IHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfWlNXQVBgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZSBmb3IgYW55IG9mIHRoaXMgdG8gd29yaywgYW5kIGBDT05GSUdfTUVNQ0dgIGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgdXNlcyB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UuIEl0JiMzOTtzIGEgYml0IGVhcmx5LCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3pzd2FwLmNgIGl0c2VsZiBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbi0tXG5tbS9tZW1jb250cm9sLmM9NTU0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01NzItXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU1Ny1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NTg6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NTktXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTYwPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTczLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQxNzQ6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTQxNzUtXHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NzkyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cbm1tL21lbWNvbnRyb2wuYzo1ODI3OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODI4LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDA0PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTYwMjItfTtcbm1tL21lbWNvbnRyb2wuYzo2MDIzOiNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbm1tL21lbWNvbnRyb2wuYy02MDI0LVxubW0vbWVtY29udHJvbC5jPTYwMjU9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzMy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MDM1LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbi0tXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTE0NTAtI2VuZGlmXG5tbS92bXN0YXQuYzoxNDUxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL3Ztc3RhdC5jLTE0NTItXHRbSShaU1dQSU4pXVx0XHRcdFx0PSBcJiMzNDt6c3dwaW5cJiMzNDssXG4tLVxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYzo5MDpzdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuLS1cbm1tL3pzd2FwLmM9OTc9bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbi0tXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0xMDEtc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jOjEyMjpcdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xubW0venN3YXAuYzoxMzI6XHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTEzMy19XG4tLVxubW0venN3YXAuYz0zNDk9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zNTEtXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXHUwMDI2XHUwMDI2XG5tbS96c3dhcC5jOjM1MjpcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcbm1tL3pzd2FwLmMtMzUzLVx0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxuXCYjMzQ7LFxubW0venN3YXAuYzozNTQ6XHRcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcbm1tL3pzd2FwLmMtMzU1LVx0XHRwYXJhbV9mcmVlX2NoYXJwKFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYzozNTY6XHRcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0zNTctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIFpzd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB6c3dhcCBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBoZWFkZXIgZmlsZSBzaG91bGQgY29udGFpbiB0aGUga2V5IGRlZmluaXRpb25zLiBTbywgbGV0IG1lIG9wZW4gdXAgYGluY2x1ZGUvbGludXgvenN3YXAuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgbWFjcm9zLCBzdHJ1Y3R1cmVzLCBhbmQgbGlrZWx5IHNvbWUgaW5saW5lIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGRpZmZlcmVudCBjb21waWxlLXRpbWUgYW5kIHJ1bnRpbWUgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggenN3YXAuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYnVmZmVyIHNpemVzLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCB0aHJlc2hvbGRzLCBhbmQgYW55IHR1bmFibGUgcGFyYW1ldGVycyB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZSB6c3dhcCYjMzk7cyBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbiwgYWxvbmcgd2l0aCBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgdXNlZC4gVGhlIGRvY3VtZW50YXRpb24gd2l0aGluIHRoYXQgaGVhZGVyIHNob3VsZCBiZSBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseSBkZXNpZ25lZC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcmVhc29uIGFib3V0IGhvdyB0byB0dW5lIG9yIG1vZGlmeSB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTEwPWV4dGVybiBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcztcbmluY2x1ZGUvbGludXgvenN3YXAuaC0xMS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMjojaWZkZWYgQ09ORklHX1pTV0FQXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgcGxheWVyczogYFpTV0FQYCBhbmQgYE1FTUNHYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCBncm91cHMsIHNwZWNpZmljYWxseSBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBhbHRlcmVkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgdGhlIHBhdGNoIGhpdHMgYG1tL3Ztc2Nhbi5jYCB3aXRoIGEgY2hhbmdlIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQgaW50cm9kdWNlcyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaW4gYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IHByb2FjdGl2ZSB3cml0ZWJhY2sgc3RyYXRlZ3kgc3BlY2lmaWNhbGx5IGZvciB6c3dhcC4gRnVydGhlcm1vcmUsIGl0IHRvdWNoZXMgYHNocmlua19tZW1jZ2AgYW5kIGFkZHMgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbHNvIGluIGBtbS96c3dhcC5jYC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBvZiBob3cgd2Ugc2hyaW5rIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aGVuIHVzaW5nIHpzd2FwLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AsIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYCwgYW5kIGBzaHJpbmtfbWVtY2dgLiBOb3csIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgaXRzIG9yaWdpbmFsIHNvdXJjZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02MzE9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC02MzMtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk5Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk5Ny1cbm1tL21lbWNvbnRyb2wuYzo0OTk4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy00OTk5LVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03ODYyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDMxPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzYtXG5tbS92bXNjYW4uYzo4MDM3Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAzOC1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBNZW1vcnkgUmVjbGFpbSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggenN3YXAgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGFsc28gZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gYG1lbW9yeV9yZWNsYWltYCBpcywgb2YgY291cnNlLCB0aGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgY2dyb3VwIGZpbGUsIHNvIHRoYXTigJlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB1c2VyLWluaXRpYXRlZCByZWNsYWltLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgcmVsYXRlcyB0byB6c3dhcCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgdGhlIGdlbmVyYWwgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGFyZSBjYWxsZWQuCgpUaGUgY29kZSBtZW50aW9ucyBgQ09ORklHX1pTV0FQYCBhbmQgYE1FTUNHYCBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB3b25kZXJpbmcgaWYganVzdCBgQ09ORklHX1pTV0FQYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBvciBpZiBJIG5lZWQgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHBhdGNoIHRleHQgcHJvdmlkZXMgc29tZSBjb250ZXh0LCBzdGF0aW5nIHRoYXQgenN3YXAgd3JpdGViYWNrIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMsIGFuZCB0aGF0IHlvdSBjYW5ub3QgbWl4IHRoZSBgenN3YXBgIHNvdXJjZSB3aXRoIHN3YXBwaW5lc3MuCgpEaWdnaW5nIGludG8gYG1tL3pzd2FwLmNgLCBJIGZpbmQgdGhlIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCBmdW5jdGlvbi4gSSBzZWUgaXQgY2hlY2tzIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IHRoYXQgaXMgc2V0IHVwLiBMZXQmIzM5O3Mgc2VlLi4uIGFuZCwgaXQgbG9va3MgbGlrZSB0aGlzIGNoZWNrICpkb2VzbiYjMzk7dCogZGVwZW5kIG9uIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFNvLCBpdCBzZWVtcyBsaWtlIGhhdmluZyBib3RoIGBaU1dBUGAgYW5kIGBNRU1DR2AgZW5hYmxlZCBpcyBlbm91Z2guIEkgY2FuIG5vdyBiZSBjb25maWRlbnQgdGhhdCBgWlNXQVBgIGFuZCBgTUVNQ0dgIGFyZSB0aGUgY29ycmVjdCBjb25maWdzIHRvIGJlIGxvb2tpbmcgYXQuCgpOb3cgSSYjMzk7bGwganVzdCBkb3VibGUtY2hlY2ssIGlzIGl0IHRydWx5IGBDT05GSUdfTUVNQ0dgLCBvciBzaG91bGQgSSBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZWxzZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDcyLVxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4MS1cbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4My1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA4OC1cbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTAtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODkxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgYW5kIFJlZmluaW5nIE15IFVuZGVyc3RhbmRpbmcqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IHRlcm0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQmIzM5O3MgdGhlIGNvcmUgY29uY2VwdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIgd2l0aCB0aGUgYW5hbHlzaXMsIEkganVzdCB3YW50IHRvIHF1aWNrbHkgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIG5leHQgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdOKAmXMgbWVudGlvbmVkLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2s6IGlzIGBDT05GSUdfWlNXQVBgIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGhlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBuYW1lIHRvIGVuc3VyZSBhY2N1cmFjeSBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFpTV0FQIFBhdGNoIGZvciBQcm9hY3RpdmUgV3JpdGViYWNrKioKCkFscmlnaHQsIHNvIHRoZSBmZWVkYmFjayBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoIOKAkyBgWlNXQVBgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGRpcmVjdGlvbiBoZXJlLiBBbmQgdGhpcyBwYXRjaC4uLiB5ZXMsIGl0JiMzOTtzIHNjcmVhbWluZyBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgYWRkcyBhIG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBmZWF0dXJlIHRvIGBtZW1vcnkucmVjbGFpbWAg4oCTIHRoYXQgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjaywgaW4gZWZmZWN0IOKAkyBjaGFuZ2VzIHRoZSBnYW1lLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIHNlZSB0aGF0IGltbWVkaWF0ZWx5LgoKTm93LCBteSBmb2N1cyBuZWVkcyB0byBob25lIGluIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaW5mbHVlbmNlcyB0aGUgcmVjbGFtYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnMsIGFuZCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/CgpBbHNvLCB0aGUgY29uZmlncyBhcmUgYW5vdGhlciBwb2ludCB0byBleHBsb3JlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBaU1dBUGAgYW5kIGBNRU1DR2AuIFRoZXkgYXJlIGdvaW5nIHRvIGhhdmUgYSBsb3Qgb2YgaW1wb3J0YW5jZSBpbiB0aGUgdGVzdGluZyBvZiB0aGUgcGF0Y2hlcy4KCkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgY29uY3JldGUgdGVzdGluZyBnb2FscyBhbmQgZ2V0IHNvbWUgcmVzdWx0cyBpbi4gTGV0JiMzOTtzIGNhbGwgYSBzZXQtcmVzdWx0cyBhbmQgZXN0YWJsaXNoIHNvbWUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua19vbmVfbWVtY2cmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICYjMzk7bWVtb3J5LnJlY2xhaW0mIzM5OyBjZ3JvdXAgaW50ZXJmYWNlIHVzaW5nIHRoZSAmIzM5O3NvdXJjZT16c3dhcCYjMzk7IGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7enN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDt6c3dhcF9zaHJpbmtfb25lX21lbWNnJiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdmlhIHRoZSAmIzM5O21lbW9yeS5yZWNsYWltJiMzOTsgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJiMzOTtzb3VyY2U9enN3YXAmIzM5OyBrZXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhhdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjEzLjMyMzk5NjA1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTIxMDQ2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjEzLjMyNDAwNTcwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODU3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0OToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTE0MjUsOSArMTQyNSwxMCBAQCBQQUdFX1NJWkUgbXVsdGlwbGUgd2hlbiByZWFkIGJhY2suXFxuIFxcbiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxcbiBcXG4tXFx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcXG4tXFx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ICBzb3VyY2U9enN3YXAgICAgICAgICAgT25seSBwZXJmb3JtIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2tcXG4rXFx0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFxcdFNwZWNpZnlpbmcgYSBzd2FwcGluZXNzIHZhbHVlIGluc3RydWN0cyB0aGUga2VybmVsIHRvIHBlcmZvcm1cXG4gXFx0dGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGVcXG5AQCAtMTQzNyw2ICsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdFRoZSB2YWxpZCByYW5nZSBmb3Igc3dhcHBpbmVzcyBpcyBbMC0yMDAsIG1heF0sIHNldHRpbmdcXG4gXFx0c3dhcHBpbmVzcz1tYXggZXhjbHVzaXZlbHkgcmVjbGFpbXMgYW5vbnltb3VzIG1lbW9yeS5cXG4gXFxuK1xcdFRoZSBzb3VyY2U9enN3YXAga2V5IHNraXBzIG9yZGluYXJ5IG1lbW9yeSByZWNsYWltIGFuZFxcbitcXHR3cml0ZXMgYmFjayBwYWdlcyBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlIHVudGlsXFxuK1xcdHRoZSByZXF1ZXN0ZWQgYW1vdW50IGhhcyBiZWVuIHdyaXR0ZW4gb3Igbm8gZnVydGhlciBjYW5kaWRhdGVzXFxuK1xcdGFyZSBmb3VuZC4gVGhpcyBpcyB1c2VmdWwgdG8gcHJvYWN0aXZlbHkgb2ZmbG9hZCBjb2xkIGNvbXByZXNzZWRcXG4rXFx0ZGF0YSBmcm9tIHRoZSB6c3dhcCBwb29sIHRvIHRoZSBzd2FwIGRldmljZS4gSXQgaXMgb25seSBhdmFpbGFibGVcXG4rXFx0aWYgenN3YXAgd3JpdGViYWNrIGlzIGVuYWJsZWQuIHNvdXJjZT16c3dhcCBjYW5ub3QgYmVcXG4rXFx0Y29tYmluZWQgd2l0aCBzd2FwcGluZXNzOyBzcGVjaWZ5aW5nIGJvdGggcmV0dXJucyAtRUlOVkFMLlxcbitcXG4rXFx0RXhhbXBsZTo6XFxuK1xcbitcXHQgICMgV3JpdGViYWNrIHVwIHRvIDEwTUIgb2YgY29tcHJlc3NlZCBkYXRhIGZyb20genN3YXAgdG8gdGhlIGJhY2tpbmcgc3dhcFxcbitcXHQgIGVjaG8gXFxcIjEwTSBzb3VyY2U9enN3YXBcXFwiIFxcdTAwM2UgbWVtb3J5LnJlY2xhaW1cXG4rXFxuICAgbWVtb3J5LnBlYWtcXG4gXFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxcbiBcXG5AQCAtMTczNCw2ICsxNzQ4LDEwIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdCAgenN3cHdiXFxuIFxcdFxcdE51bWJlciBvZiBwYWdlcyB3cml0dGVuIGZyb20genN3YXAgdG8gc3dhcC5cXG4gXFxuK1xcdCAgenN3cHdiX3Byb2FjdGl2ZV9iXFxuK1xcdFxcdEJ5dGVzIG9mIGNvbXByZXNzZWQgZGF0YSBwcm9hY3RpdmVseSB3cml0dGVuIGJhY2sgZnJvbVxcbitcXHRcXHR6c3dhcCB0byBzd2FwIHZpYSB0aGUgbWVtb3J5LnJlY2xhaW0gc291cmNlPXpzd2FwIGtleS5cXG4rXFxuIFxcdCAgenN3YXBfaW5jb21wXFxuIFxcdFxcdE51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwXFxuIFxcdFxcdHdpdGhvdXQgY29tcHJlc3Npb24uIFRoZXNlIHBhZ2VzIGNvdWxkIG5vdCBiZSBjb21wcmVzc2VkIHRvXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcXG5pbmRleCAyNDY0NDI1Yzc4M2RlMi4uYjQ5YjhjMTMwMzg5MDUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxcbkBAIC0xMzEsNyArMTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcXG4gICBlY2hvIFkgXFx1MDAzZSAvc3lzL21vZHVsZS96c3dhcC9wYXJhbWV0ZXJzL3Nocmlua2VyX2VuYWJsZWRcXG4gXFxuIFRoaXMgY2FuIGJlIGVuYWJsZWQgYXQgdGhlIGJvb3QgdGltZSBpZiBgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYGAgaXNcXG4tc2VsZWN0ZWQuXFxuK3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvXFxuK2JhY2tpbmcgc3dhcCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXFxuK1xcbitJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljXFxuK21lbW9yeSBjZ3JvdXAgd2l0aG91dCBpbnZva2luZyBzdGFuZGFyZCBwYWdlIHJlY2xhaW0sIGl0IGNhbiBiZSBkb25lIGFzIGZvbGxvd3M6OlxcbitcXG4rXFx0ZWNobyBcXFwiMTBNIHNvdXJjZT16c3dhcFxcXCIgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cXHUwMDNjY2dyb3VwLW5hbWVcXHUwMDNlL21lbW9yeS5yZWNsYWltXFxuK1xcbitCb3RoIG9mIHRoZSBtZXRob2RzIG1lbnRpb25lZCBhYm92ZSBhcmUgc3ViamVjdCB0byB0aGUgYGBtZW1vcnkuenN3YXAud3JpdGViYWNrYGBcXG4rY29udHJvbC4gVGhpcyBtZWFucyB0aGF0IGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgIGNhbiBwcmV2ZW50IGFsbCB6c3dhcCB3cml0ZWJhY2suXFxuIFxcbiBBIGRlYnVnZnMgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGZvciB2YXJpb3VzIHN0YXRpc3RpYyBhYm91dCBwb29sIHNpemUsIG51bWJlclxcbiBvZiBwYWdlcyBzdG9yZWQsIHNhbWUtdmFsdWUgZmlsbGVkIHBhZ2VzIGFuZCB2YXJpb3VzIGNvdW50ZXJzIGZvciB0aGUgcmVhc29uc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjU2NTgwYjI2NGRjNDI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtNDAsNiArNDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7XFxuIFxcdE1FTUNHX1pTV0FQX0IsXFxuIFxcdE1FTUNHX1pTV0FQUEVELFxcbiBcXHRNRU1DR19aU1dBUF9JTkNPTVAsXFxuK1xcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQixcXG4gXFx0TUVNQ0dfTlJfU1RBVCxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4raW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTtcXG4gI2Vsc2VcXG4gXFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XFxuQEAgLTY5LDYgKzcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBieXRlc190b193cml0ZWJhY2spXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uZDgxYzM0NDg0YmNhMjggMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTQzMyw2ICs0MzMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TUVNQ0dfWlNXQVBfQixcXG4gXFx0TUVNQ0dfWlNXQVBQRUQsXFxuIFxcdE1FTUNHX1pTV0FQX0lOQ09NUCxcXG4rXFx0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXFxuQEAgLTE1NTgsNiArMTU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuIFxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4gXFx0eyBcXFwienN3YXBwZWRcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQUEVEXFx0XFx0XFx0fSxcXG4gXFx0eyBcXFwienN3YXBfaW5jb21wXFxcIixcXHRcXHRNRU1DR19aU1dBUF9JTkNPTVBcXHRcXHR9LFxcbitcXHR7IFxcXCJ6c3dwd2JfcHJvYWN0aXZlX2JcXFwiLFxcdFxcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQlxcdH0sXFxuICNlbmRpZlxcbiBcXHR7IFxcXCJmaWxlX21hcHBlZFxcXCIsXFx0XFx0TlJfRklMRV9NQVBQRURcXHRcXHRcXHR9LFxcbiBcXHR7IFxcXCJmaWxlX2RpcnR5XFxcIixcXHRcXHRcXHROUl9GSUxFX0RJUlRZXFx0XFx0XFx0fSxcXG5AQCAtMTYxNCw2ICsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pXFxuIFxcdHN3aXRjaCAoaXRlbSkge1xcbiBcXHRjYXNlIE1FTUNHX1BFUkNQVV9COlxcbiBcXHRjYXNlIE1FTUNHX1pTV0FQX0I6XFxuK1xcdGNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COlxcbiBcXHRjYXNlIE5SX1NMQUJfUkVDTEFJTUFCTEVfQjpcXG4gXFx0Y2FzZSBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQjpcXG4gXFx0XFx0cmV0dXJuIDE7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC02NCw2ICs2NCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuQEAgLTc4NTUsMTEgKzc4NTYsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIGVudW0ge1xcbiBcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcXG4gXFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuK1xcdE1FTU9SWV9SRUNMQUlNX1NPVVJDRSxcXG4gXFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG4gfTtcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbiBcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuIFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbitcXHR7IE1FTU9SWV9SRUNMQUlNX1NPVVJDRSwgXFxcInNvdXJjZT0lc1xcXCJ9LFxcbiBcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG4gfTtcXG4gXFxuQEAgLTc4NjksOSArNzg3MiwxMiBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbiBcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbitcXHRib29sIHpzd2FwX3dyaXRlYmFja19vbmx5ID0gZmFsc2U7XFxuIFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG4rXFx0Y2hhciBzb3VyY2VbMTZdO1xcbiBcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuIFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG4rXFx0dTY0IG5yX2J5dGVzO1xcbiBcXG4gXFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03ODc5LDcgKzc4ODUsOCBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuIFxcbiBcXHRvbGRfYnVmID0gYnVmO1xcbi1cXHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcXG4rXFx0bnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpO1xcbitcXHRucl90b19yZWNsYWltID0gbnJfYnl0ZXMgLyBQQUdFX1NJWkU7XFxuIFxcdGlmIChidWYgPT0gb2xkX2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC03ODk5LDExICs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4gXFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG4gXFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6XFxuK1xcdFxcdFxcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXFx1MDAyNmFyZ3NbMF0sIHNpemVvZihzb3VyY2UpKSBcXHUwMDNlPSBzaXplb2Yoc291cmNlKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdC8qIE9ubHkgenN3YXAgaXMgc3VwcG9ydGVkIGFzIGEgcmVjbGFpbSBzb3VyY2UgZm9yIG5vdy4gKi9cXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChzb3VyY2UsIFxcXCJ6c3dhcFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0enN3YXBfd3JpdGViYWNrX29ubHkgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHpzd2FwX3dyaXRlYmFja19vbmx5KSB7XFxuK1xcdFxcdC8qIHNvdXJjZT16c3dhcCBhbmQgc3dhcHBpbmVzcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqL1xcbitcXHRcXHRpZiAoc3dhcHBpbmVzcyAhPSAtMSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHJldHVybiB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKG1lbWNnLCBucl9ieXRlcyk7XFxuK1xcdH1cXG4rXFxuIFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuIFxcdFxcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggNzYxY2Q2OTllMGEzZTYuLmQzNTZjMTczOWM2OGY5IDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTE2MCw2ICsxNjAsMTEgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rc3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcXG4rXFx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZTtcXG4rfTtcXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTEwODksOCArMTA5NCw5IEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXFxuIFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgenN3YXBfZW50cnksIGxydSk7XFxuLVxcdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnO1xcbiBcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4rXFx0dW5zaWduZWQgaW50IGxlbmd0aDtcXG4gXFx0ZW51bSBscnVfc3RhdHVzIHJldCA9IExSVV9SRU1PVkVEX1JFVFJZO1xcbiBcXHRpbnQgd3JpdGViYWNrX3Jlc3VsdDtcXG4gXFxuQEAgLTExMzMsMTAgKzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGxydSBsb2NrIGlzIGRyb3BwZWQsIHRoZSBlbnRyeSBtaWdodCBnZXQgZnJlZWQuIFRoZVxcbi1cXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZCBhZ2Fpblxcbi1cXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXFxuK1xcdCAqIG5lZWRlZCBmaWVsZHMgYXJlIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24ndCBkZXJlZidkXFxuK1xcdCAqIGFnYWluIHVudGlsIGl0IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxcbiBcXHQgKi9cXG4gXFx0c3dwZW50cnkgPSBlbnRyeS1cXHUwMDNlc3dwZW50cnk7XFxuK1xcdGxlbmd0aCA9IGVudHJ5LVxcdTAwM2VsZW5ndGg7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJdCdzIHNhZmUgdG8gZHJvcCB0aGUgbG9jayBoZXJlIGJlY2F1c2Ugd2UgcmV0dXJuIGVpdGhlclxcbkBAIC0xMTU1LDEyICsxMTYyLDEzIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXFxuIFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbiBcXHRcXHQgKiBzaHJpbmtlciBjb250ZXh0KS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4rXFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCkge1xcbiBcXHRcXHRcXHRyZXQgPSBMUlVfU1RPUDtcXG4tXFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0d2Fsa19hcmctXFx1MDAzZWVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR6c3dhcF93cml0dGVuX2JhY2tfcGFnZXMrKztcXG4rXFx0XFx0d2Fsa19hcmctXFx1MDAzZWJ5dGVzX3dyaXR0ZW4gKz0gbGVuZ3RoO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xMTY5LDggKzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7XFxuK1xcdFxcdC5ieXRlc193cml0dGVuID0gMCxcXG4rXFx0XFx0LmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2UsXFxuK1xcdH07XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX3JldDtcXG4tXFx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XFxuIFxcdFxcdFxcdCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHNjLVxcdTAwM2VtZW1jZykpIHtcXG5AQCAtMTE3OSw5ICsxMTkwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHR9XFxuIFxcbiBcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG4tXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4rXFx0XFx0XFx1MDAyNndhbGtfYXJnKTtcXG4gXFxuLVxcdGlmIChlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSlcXG4rXFx0aWYgKHdhbGtfYXJnLmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxcbiBcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIFxcbiBcXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcXG5AQCAtMTI3NSw5ICsxMjg2LDMxIEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuIFxcdHJldHVybiBzaHJpbmtlcjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbisjZGVmaW5lIE5SX1pTV0FQX1dCX0JBVENIXFx0NjRVTFxcbitcXG4rLypcXG4rICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnXFxuKyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxcbisgKlxcbisgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlXFxuKyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xcbisgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXFxuKyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZVxcbisgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcXG4rICogZW50cmllcy5cXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrIChcXHUwMDNlPSAwKSwgb3IgLUVOT0VOVFxcbisgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHlcXG4rICogenN3YXAgTFJVcy5cXG4rICovXFxuK3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4ge1xcbi1cXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcXG4rXFx0c3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHtcXG4rXFx0XFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxcbitcXHRcXHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xcbitcXHRpbnQgbmlkO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTEyOTAsMjMgKzEzMjMsOTcgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXFxuK1xcdFxcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9scnVfY291bnRfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xcbitcXHRcXHRpZiAoIW5yX3RvX3dhbGspXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XFxuK1xcdFxcdGxpc3RfbHJ1X3dhbGtfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2d2Fsa19hcmcsIFxcdTAwMjZucl90b193YWxrKTtcXG4rXFx0XFx0LyogUmV0dXJuIHRoZSB1bnVzZWQgc2hhcmUgb2YgdGhlIGJ1ZGdldCB0byB0aGUgcG9vbC4gKi9cXG4rXFx0XFx0bnJfcmVtYWluaW5nICs9IG5yX3RvX3dhbGs7XFxuIFxcbi1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbi1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcbitcXHRcXHRpZiAoIW5yX3JlbWFpbmluZylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghc2Nhbm5lZClcXG4rXFx0LyogTm90aGluZyB3YXMgc2Nhbm5lZDogZXZlcnkgTFJVIHVuZGVyIEBtZW1jZyB3YXMgZW1wdHkuICovXFxuK1xcdGlmIChucl9yZW1haW5pbmcgPT0gbnJfdG9fc2NhbilcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbi1cXHRyZXR1cm4gc2hydW5rID8gMCA6IC1FQUdBSU47XFxuK1xcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xcbit9XFxuK1xcbisvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXFxuK3N0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUge1xcbitcXHRpbnQgc2NhbnM7XFxuK1xcdGludCBmYWlsdXJlcztcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJ3NcXG4rICogaXRlcmF0b3IsIGFuZCBmb2xkIHRoZSByZXN1bHQgaW50byBAcywgdGhlIHJldHJ5IGJvb2trZWVwaW5nIHNoYXJlZFxcbisgKiBhY3Jvc3Mgc3RlcHMuIEBtZW1jZyBpcyB0aGUgaXRlcmF0b3IncyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2VcXG4rICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXFxuKyAqXFxuKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlclxcbisgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcXG4rICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyB3ZXJlIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxcbisgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLlxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGJhY2sgKFxcdTAwM2U9IDApLCBvciAtRUJVU1lcXG4rICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay5cXG4rICovXFxuK3N0YXRpYyBsb25nIHpzd2FwX3Nocmlua19vbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlICpzKVxcbit7XFxuK1xcdGxvbmcgc2hydW5rO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhY2hpbmcgYSBOVUxMIG1lbWNnIG1lYW5zIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyBjb21wbGV0ZWQuXFxuK1xcdCAqIEV4Y2x1ZGUgdGhlIG1lbWNnLWRpc2FibGVkIGNhc2UsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMLCBhbmRcXG4rXFx0ICogZmFsbCB0aHJvdWdoIHRvIHNocmluayB0aGUgcm9vdCBMUlUgZGlyZWN0bHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kXFxuK1xcdFxcdCAqIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFzLVxcdTAwM2VzY2FucyBcXHUwMDI2XFx1MDAyNiArK3MtXFx1MDAzZWZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdHMtXFx1MDAzZXNjYW5zID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLiBXaXRoIG1lbWNnXFxuK1xcdCAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXFxuK1xcdCAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS5cXG4rXFx0ICogV2l0aCBtZW1jZyBkaXNhYmxlZCB0aGUgcm9vdCBMUlUgaXMgdGhlIG9ubHkgdGFyZ2V0LCBzbyB3ZSBzaG91bGRcXG4rXFx0ICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2hydW5rID09IC1FTk9FTlQpXFxuK1xcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgPyAtRUJVU1kgOiAwO1xcbitcXHRzLVxcdTAwM2VzY2FucysrO1xcbitcXG4rXFx0aWYgKHNocnVuayBcXHUwMDNjPSAwIFxcdTAwMjZcXHUwMDI2ICsrcy1cXHUwMDNlZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldHVybiBzaHJ1bms7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiB7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tXFx0aW50IHJldCwgZmFpbHVyZXMgPSAwLCBhdHRlbXB0cyA9IDA7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgcyA9IHt9O1xcbiBcXHR1bnNpZ25lZCBsb25nIHRocjtcXG4gXFxuIFxcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xcbkBAIC0xMzE4LDExICsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdCAqIHdyaXRlYmFjay1kaXNhYmxlZCBtZW1jZ3MgKG1lbW9yeS56c3dhcC53cml0ZWJhY2s9MCkgYXJlIG5vdFxcbiBcXHQgKiBjYW5kaWRhdGVzIGZvciBzaHJpbmtpbmcuXFxuIFxcdCAqXFxuLVxcdCAqIFNocmlua2luZyB3aWxsIGJlIGFib3J0ZWQgaWYgd2UgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmdcXG4tXFx0ICogTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcXG4tXFx0ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay5cXG4tXFx0ICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cXG4tXFx0ICpcXG4gXFx0ICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssXFxuIFxcdCAqIHdoaWNoIGNhbiBiZSBtb2RpZmllZCBieSB0aGUgb2ZmbGluZSBtZW1jZyBjbGVhbmVyXFxuIFxcdCAqIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cCgpLlxcbkBAIC0xMzM3LDcgKzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdCAqIG9mZmxpbmUgbWVtY2cgbGVmdCBpbiB6c3dhcF9uZXh0X3NocmluayB3aWxsIGhvbGQgdGhlIHJlZmVyZW5jZVxcbiBcXHQgKiB1bnRpbCB0aGUgbmV4dCBydW4gb2Ygc2hyaW5rX3dvcmtlcigpLlxcbiBcXHQgKi9cXG4tXFx0ZG8ge1xcbitcXHR3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcXHUwMDNlIHRocikge1xcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdFxcdGxvbmcgcmV0O1xcbitcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFN0YXJ0IHNocmlua2luZyBmcm9tIHRoZSBuZXh0IG1lbWNnIGFmdGVyIHpzd2FwX25leHRfc2hyaW5rLlxcbiBcXHRcXHQgKiBXaGVuIHRoZSBvZmZsaW5lIGNsZWFuZXIgaGFzIGFscmVhZHkgYWR2YW5jZWQgdGhlIGN1cnNvcixcXG5AQCAtMTM1NiwzNyArMTQ2MiwxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0XFx0fSB3aGlsZSAobWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2enN3YXBfc2hyaW5rX2xvY2spO1xcbiBcXG4tXFx0XFx0aWYgKCFtZW1jZykge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWZcXG4tXFx0XFx0XFx0ICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWF0dGVtcHRzIFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRcXHRhdHRlbXB0cyA9IDA7XFxuLVxcdFxcdFxcdGdvdG8gcmVzY2hlZDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcXG4rXFx0XFx0cmV0ID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhtZW1jZywgXFx1MDAyNnMpO1xcbiBcXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4gXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLlxcbi1cXHRcXHQgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcXG4tXFx0XFx0ICogd2l0aCBwYWdlcyBpbiB6c3dhcC4gU2tpcCB0aGlzIHdpdGhvdXQgaW5jcmVtZW50aW5nIGF0dGVtcHRzXFxuLVxcdFxcdCAqIGFuZCBmYWlsdXJlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChyZXQgPT0gLUVOT0VOVClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdCsrYXR0ZW1wdHM7XFxuLVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1yZXNjaGVkOlxcbi1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0fSB3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcXHUwMDNlIHRocik7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbkBAIC0xNDkyLDcgKzE1NzMsNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGlmIChvYmpjZyBcXHUwMDI2XFx1MDAyNiAhb2JqX2Nncm91cF9tYXlfenN3YXAob2JqY2cpKSB7XFxuIFxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuLVxcdFxcdGlmIChzaHJpbmtfbWVtY2cobWVtY2cpKSB7XFxuK1xcdFxcdGlmIChzaHJpbmtfbWVtY2cobWVtY2csIG51bV9ub2RlX3N0YXRlKE5fTk9STUFMX01FTU9SWSkpIFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRcXHRnb3RvIHB1dF9vYmpjZztcXG4gXFx0XFx0fVxcbkBAIC0xNjMyLDYgKzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaylcXG4re1xcbitcXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHMgPSB7fTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKml0ZXIgPSBOVUxMO1xcbitcXHR1NjQgYnl0ZXNfd3JpdHRlbiA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR3aGlsZSAoYnl0ZXNfd3JpdHRlbiBcXHUwMDNjIGJ5dGVzX3RvX3dyaXRlYmFjaykge1xcbitcXHRcXHRsb25nIHNocnVuaztcXG4rXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5UUjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVzZSBhIGxvY2FsIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIG1lbWNnIGFuZCBpdHMgb25saW5lIGRlc2NlbmRhbnRzXFxuK1xcdFxcdCAqIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBVcG9uIGV4aXRpbmcgdGhlIGxvb3AsIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpXFxuK1xcdFxcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0aXRlciA9IG1lbV9jZ3JvdXBfaXRlcihtZW1jZywgaXRlciwgTlVMTCk7XFxuK1xcdFxcdH0gd2hpbGUgKGl0ZXIgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShpdGVyKSk7XFxuK1xcbitcXHRcXHRzaHJ1bmsgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKGl0ZXIsIFxcdTAwMjZzKTtcXG4rXFx0XFx0aWYgKHNocnVuayBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0Ynl0ZXNfd3JpdHRlbiArPSBzaHJ1bms7XFxuK1xcdFxcdFxcdG1vZF9tZW1jZ19zdGF0ZShpdGVyLCBNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IsIHNocnVuayk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqL1xcbitcXHRcXHRtZW1fY2dyb3VwX3B1dChpdGVyKTtcXG4rXFxuK1xcdFxcdGlmIChzaHJ1bmsgPT0gLUVCVVNZKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhtZW1jZywgaXRlcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxuIHtcXG4gXFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXFxuaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXFxuQEAgLTYwLDcgKzYwLDEyIEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxcbiBcXG4gc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxcbiB7XFxuLVxcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiIFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBnZXRfY2dfcHdiX2J5dGVzKGNvbnN0IGNoYXIgKmNnKVxcbit7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiX3Byb2FjdGl2ZV9iIFxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXFxuQEAgLTM1NSw2ICszNjAsNyBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIHtcXG4gXFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XFxuK1xcdGxvbmcgcHdiX2J5dGVzO1xcbiBcXG4gXFx0enN3cHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudChjZ3JvdXApO1xcbiBcXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XFxuQEAgLTM2Miw2ICszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuK1xcdHB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTtcXG4rXFx0aWYgKHB3Yl9ieXRlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxcXG5cXFwiLCBwd2JfYnl0ZXMpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjZ19ydW4oY2dyb3VwLCBhdHRlbXB0X3dyaXRlYmFjaywgKHZvaWQgKikgXFx1MDAyNndiKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMzc5LDYgKzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc29cXG4rXFx0ICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlclxcbitcXHQgKiB3cml0ZWJhY2sgd2FzIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7XFxuK1xcdGlmIChwd2JfYnl0ZXMgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfcHJvYWN0aXZlX2JfYWZ0ZXIgaXMgJWxkLCBleHBlY3RlZCAwXFxcXG5cXFwiLCBwd2JfYnl0ZXMpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC03NzAsNiArNzkzLDE0MSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcXG4rICogMS4gQWxsb2NhdGUgbWVtb3J5LlxcbisgKiAyLiBQdXNoIGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC5cXG4rICogMy4gUHJvYWN0aXZlbHkgd3JpdGUgYmFjayB6c3dhcCBwYWdlcyB0byBzd2FwXFxuKyAqICAgIHVzaW5nIFxcXCJzb3VyY2U9enN3YXBcXFwiLlxcbisgKi9cXG4rc3RhdGljIGludCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbit7XFxuK1xcdGxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdHNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0O1xcbitcXHRjaGFyIHJlY2xhaW1fY21kWzY0XTtcXG4rXFx0Y2hhciBidWZbcGFnZXNpemVdO1xcbitcXHRsb25nIHpzd2FwX3VzYWdlO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCByYztcXG4rXFx0Y2hhciAqbWVtO1xcbitcXG4rXFx0bWVtID0gKGNoYXIgKiltYWxsb2MobWVtc2l6ZSk7XFxuK1xcdGlmICghbWVtKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBwYWdlc2l6ZTsgaSsrKVxcbitcXHRcXHRidWZbaV0gPSBpIFxcdTAwM2MgcGFnZXNpemUgLyAyID8gKGNoYXIpaSA6IDA7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbWVtc2l6ZTsgaSArPSBwYWdlc2l6ZSlcXG4rXFx0XFx0bWVtY3B5KFxcdTAwMjZtZW1baV0sIGJ1ZiwgcGFnZXNpemUpO1xcbitcXG4rXFx0LyogRXZpY3QgYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLiAqL1xcbitcXHRpZiAoY2dfd3JpdGVfbnVtZXJpYyhjZ3JvdXAsIFxcXCJtZW1vcnkucmVjbGFpbVxcXCIsIG1lbXNpemUpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgXFxcIm1lbW9yeS56c3dhcC5jdXJyZW50XFxcIik7XFxuK1xcdGlmICh6c3dhcF91c2FnZSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyB6c3dhcCBwb29sIHRvIHdyaXRlIGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xcbitcXHRzbnByaW50ZihyZWNsYWltX2NtZCwgc2l6ZW9mKHJlY2xhaW1fY21kKSwgXFxcIiVsZCBzb3VyY2U9enN3YXBcXFwiLCB6c3dhcF91c2FnZSk7XFxuK1xcdHJjID0gY2dfd3JpdGUoY2dyb3VwLCBcXFwibWVtb3J5LnJlY2xhaW1cXFwiLCByZWNsYWltX2NtZCk7XFxuK1xcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiByYyAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0ZnJlZShtZW0pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyhjb25zdCBjaGFyICpjZ3JvdXApXFxuK3tcXG4rXFx0c3RhdGljIGNoYXIgKiBjb25zdCBiYWRfaW5wdXRzW10gPSB7XFxuK1xcdFxcdFxcXCJzb3VyY2U9enN3YXBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc291cmNlPXpzd2FwIHN3YXBwaW5lc3M9NjBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc291cmNlPXpzd2FwIHN3YXBwaW5lc3M9bWF4XFxcIixcXG4rXFx0XFx0XFxcIjFNIHN3YXBwaW5lc3M9bWF4IHNvdXJjZT16c3dhcFxcXCIsXFxuK1xcdH07XFxuK1xcdGludCBpLCByYztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9pbnB1dHMpOyBpKyspIHtcXG4rXFx0XFx0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFxcXCJtZW1vcnkucmVjbGFpbVxcXCIsIGJhZF9pbnB1dHNbaV0pO1xcbitcXHRcXHRpZiAocmMgIT0gLUVJTlZBTCkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibWVtb3J5LnJlY2xhaW0gJyVzJzogcmV0dXJuZWQgJWQsIGV4cGVjdGVkICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYmFkX2lucHV0c1tpXSwgcmMsIC1FSU5WQUwpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcXG4re1xcbitcXHRsb25nIHdiX2JlZm9yZSwgd2JfYWZ0ZXI7XFxuK1xcdGxvbmcgcHdiX2JfYmVmb3JlLCBwd2JfYl9hZnRlcjtcXG4rXFx0bG9uZyB3Yl9kZWx0YSwgcHdiX2JfZGVsdGE7XFxuK1xcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdGNoYXIgKnRlc3RfZ3JvdXA7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgXFxcIm1lbW9yeS56c3dhcC53cml0ZWJhY2tcXFwiLCBcXFwiMVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gS1NGVF9TS0lQO1xcbitcXG4rXFx0dGVzdF9ncm91cCA9IGNnX25hbWUocm9vdCwgXFxcInpzd2FwX3Byb2FjdGl2ZV90ZXN0XFxcIik7XFxuK1xcdGlmICghdGVzdF9ncm91cClcXG4rXFx0XFx0cmV0dXJuIEtTRlRfRkFJTDtcXG4rXFx0aWYgKGNnX2NyZWF0ZSh0ZXN0X2dyb3VwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgbWlzc2luZyB6c3dwd2JfcHJvYWN0aXZlX2Igc3RhdCBtZWFucyB0aGUga2VybmVsIGxhY2tzIHByb2FjdGl2ZVxcbitcXHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xcbitcXHR3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQodGVzdF9ncm91cCk7XFxuK1xcdGlmIChwd2JfYl9iZWZvcmUgXFx1MDAzYyAwIHx8IHdiX2JlZm9yZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkLCBOVUxMKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9hZnRlciA9IGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCk7XFxuK1xcdHdiX2FmdGVyID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApO1xcbitcXHRpZiAocHdiX2JfYWZ0ZXIgXFx1MDAzYyAwIHx8IHdiX2FmdGVyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9kZWx0YSA9IHB3Yl9iX2FmdGVyIC0gcHdiX2JfYmVmb3JlO1xcbitcXHR3Yl9kZWx0YSA9IHdiX2FmdGVyIC0gd2JfYmVmb3JlO1xcbitcXG4rXFx0aWYgKHB3Yl9iX2RlbHRhIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9wcm9hY3RpdmVfYiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBwd2JfYl9kZWx0YSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmICh3Yl9kZWx0YSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxcXG5cXFwiLCB3Yl9kZWx0YSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuK291dDpcXG4rXFx0Y2dfZGVzdHJveSh0ZXN0X2dyb3VwKTtcXG4rXFx0ZnJlZSh0ZXN0X2dyb3VwKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxcbiBzdHJ1Y3QgenN3YXBfdGVzdCB7XFxuIFxcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcXG5AQCAtNzgzLDYgKzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHtcXG4gXFx0VCh0ZXN0X25vX2ttZW1fYnlwYXNzKSxcXG4gXFx0VCh0ZXN0X25vX2ludmFzaXZlX2Nncm91cF9zaHJpbmspLFxcbiBcXHRUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLFxcbitcXHRUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksXFxuIH07XFxuICN1bmRlZiBUXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OToxMy43MDg2MjExNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzM2NDA1MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjQ5OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTE0MjUsOSArMTQyNSwxMCBAQCBQQUdFX1NJWkUgbXVsdGlwbGUgd2hlbiByZWFkIGJhY2suXG4gXG4gVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgIHNvdXJjZT16c3dhcCAgICAgICAgICBPbmx5IHBlcmZvcm0gcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFja1xuK1x0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBcdFNwZWNpZnlpbmcgYSBzd2FwcGluZXNzIHZhbHVlIGluc3RydWN0cyB0aGUga2VybmVsIHRvIHBlcmZvcm1cbiBcdHRoZSByZWNsYWltIHdpdGggdGhhdCBzd2FwcGluZXNzIHZhbHVlLiBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlXG5AQCAtMTQzNyw2ICsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nXG4gXHRzd2FwcGluZXNzPW1heCBleGNsdXNpdmVseSByZWNsYWltcyBhbm9ueW1vdXMgbWVtb3J5LlxuIFxuK1x0VGhlIHNvdXJjZT16c3dhcCBrZXkgc2tpcHMgb3JkaW5hcnkgbWVtb3J5IHJlY2xhaW0gYW5kXG4rXHR3cml0ZXMgYmFjayBwYWdlcyBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlIHVudGlsXG4rXHR0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlc1xuK1x0YXJlIGZvdW5kLiBUaGlzIGlzIHVzZWZ1bCB0byBwcm9hY3RpdmVseSBvZmZsb2FkIGNvbGQgY29tcHJlc3NlZFxuK1x0ZGF0YSBmcm9tIHRoZSB6c3dhcCBwb29sIHRvIHRoZSBzd2FwIGRldmljZS4gSXQgaXMgb25seSBhdmFpbGFibGVcbitcdGlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlXG4rXHRjb21iaW5lZCB3aXRoIHN3YXBwaW5lc3M7IHNwZWNpZnlpbmcgYm90aCByZXR1cm5zIC1FSU5WQUwuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdCAgIyBXcml0ZWJhY2sgdXAgdG8gMTBNQiBvZiBjb21wcmVzc2VkIGRhdGEgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwXG4rXHQgIGVjaG8gXCIxME0gc291cmNlPXpzd2FwXCIgXHUwMDNlIG1lbW9yeS5yZWNsYWltXG4rXG4gICBtZW1vcnkucGVha1xuIFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxuIFxuQEAgLTE3MzQsNiArMTc0OCwxMCBAQCBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxuIFx0ICB6c3dwd2JcbiBcdFx0TnVtYmVyIG9mIHBhZ2VzIHdyaXR0ZW4gZnJvbSB6c3dhcCB0byBzd2FwLlxuIFxuK1x0ICB6c3dwd2JfcHJvYWN0aXZlX2JcbitcdFx0Qnl0ZXMgb2YgY29tcHJlc3NlZCBkYXRhIHByb2FjdGl2ZWx5IHdyaXR0ZW4gYmFjayBmcm9tXG4rXHRcdHpzd2FwIHRvIHN3YXAgdmlhIHRoZSBtZW1vcnkucmVjbGFpbSBzb3VyY2U9enN3YXAga2V5LlxuK1xuIFx0ICB6c3dhcF9pbmNvbXBcbiBcdFx0TnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXBcbiBcdFx0d2l0aG91dCBjb21wcmVzc2lvbi4gVGhlc2UgcGFnZXMgY291bGQgbm90IGJlIGNvbXByZXNzZWQgdG9cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0XG5pbmRleCAyNDY0NDI1Yzc4M2RlMi4uYjQ5YjhjMTMwMzg5MDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcbkBAIC0xMzEsNyArMTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcbiAgIGVjaG8gWSBcdTAwM2UgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkXG4gXG4gVGhpcyBjYW4gYmUgZW5hYmxlZCBhdCB0aGUgYm9vdCB0aW1lIGlmIGBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gYCBpc1xuLXNlbGVjdGVkLlxuK3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvXG4rYmFja2luZyBzd2FwIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cbitcbitJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljXG4rbWVtb3J5IGNncm91cCB3aXRob3V0IGludm9raW5nIHN0YW5kYXJkIHBhZ2UgcmVjbGFpbSwgaXQgY2FuIGJlIGRvbmUgYXMgZm9sbG93czo6XG4rXG4rXHRlY2hvIFwiMTBNIHNvdXJjZT16c3dhcFwiIFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cdTAwM2NjZ3JvdXAtbmFtZVx1MDAzZS9tZW1vcnkucmVjbGFpbVxuK1xuK0JvdGggb2YgdGhlIG1ldGhvZHMgbWVudGlvbmVkIGFib3ZlIGFyZSBzdWJqZWN0IHRvIHRoZSBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYFxuK2NvbnRyb2wuIFRoaXMgbWVhbnMgdGhhdCBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYCBjYW4gcHJldmVudCBhbGwgenN3YXAgd3JpdGViYWNrLlxuIFxuIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyXG4gb2YgcGFnZXMgc3RvcmVkLCBzYW1lLXZhbHVlIGZpbGxlZCBwYWdlcyBhbmQgdmFyaW91cyBjb3VudGVycyBmb3IgdGhlIHJlYXNvbnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC00MCw2ICs0MCw3IEBAIGVudW0gbWVtY2dfc3RhdF9pdGVtIHtcbiBcdE1FTUNHX1pTV0FQX0IsXG4gXHRNRU1DR19aU1dBUFBFRCxcbiBcdE1FTUNHX1pTV0FQX0lOQ09NUCxcbitcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQixcbiBcdE1FTUNHX05SX1NUQVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MCwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHQgICAgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggZDIwZmZjODI3MzA2ZTkuLmQ4MWMzNDQ4NGJjYTI4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MzMsNiArNDMzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4rXHRNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IsXG4gfTtcbiBcbiAjZGVmaW5lIE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyBBUlJBWV9TSVpFKG1lbWNnX25vZGVfc3RhdF9pdGVtcylcbkBAIC0xNTU4LDYgKzE1NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuIFx0eyBcInpzd2FwXCIsXHRcdFx0TUVNQ0dfWlNXQVBfQlx0XHRcdH0sXG4gXHR7IFwienN3YXBwZWRcIixcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG4gXHR7IFwienN3YXBfaW5jb21wXCIsXHRcdE1FTUNHX1pTV0FQX0lOQ09NUFx0XHR9LFxuK1x0eyBcInpzd3B3Yl9wcm9hY3RpdmVfYlwiLFx0XHRNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0JcdH0sXG4gI2VuZGlmXG4gXHR7IFwiZmlsZV9tYXBwZWRcIixcdFx0TlJfRklMRV9NQVBQRURcdFx0XHR9LFxuIFx0eyBcImZpbGVfZGlydHlcIixcdFx0XHROUl9GSUxFX0RJUlRZXHRcdFx0fSxcbkBAIC0xNjE0LDYgKzE2MTYsNyBAQCBzdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfdW5pdChpbnQgaXRlbSlcbiBcdHN3aXRjaCAoaXRlbSkge1xuIFx0Y2FzZSBNRU1DR19QRVJDUFVfQjpcbiBcdGNhc2UgTUVNQ0dfWlNXQVBfQjpcbitcdGNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COlxuIFx0Y2FzZSBOUl9TTEFCX1JFQ0xBSU1BQkxFX0I6XG4gXHRjYXNlIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9COlxuIFx0XHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02NCw2ICs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtNzg1NSwxMSArNzg1NiwxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbiBlbnVtIHtcbiBcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuIFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG4rXHRNRU1PUllfUkVDTEFJTV9TT1VSQ0UsXG4gXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxuIH07XG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuIFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcInN3YXBwaW5lc3M9JWRcIn0sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcInN3YXBwaW5lc3M9bWF4XCJ9LFxuK1x0eyBNRU1PUllfUkVDTEFJTV9TT1VSQ0UsIFwic291cmNlPSVzXCJ9LFxuIFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG4gfTtcbiBcbkBAIC03ODY5LDkgKzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuIFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuIFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbitcdGJvb2wgenN3YXBfd3JpdGViYWNrX29ubHkgPSBmYWxzZTtcbiBcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbitcdGNoYXIgc291cmNlWzE2XTtcbiBcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbiBcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbitcdHU2NCBucl9ieXRlcztcbiBcbiBcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc4NzksNyArNzg4NSw4IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4gXG4gXHRvbGRfYnVmID0gYnVmO1xuLVx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbitcdG5yX2J5dGVzID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpO1xuK1x0bnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFO1xuIFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03ODk5LDExICs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcbiBcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU09VUkNFOlxuK1x0XHRcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKHNvdXJjZSkpIFx1MDAzZT0gc2l6ZW9mKHNvdXJjZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHQvKiBPbmx5IHpzd2FwIGlzIHN1cHBvcnRlZCBhcyBhIHJlY2xhaW0gc291cmNlIGZvciBub3cuICovXG4rXHRcdFx0aWYgKHN0cmNtcChzb3VyY2UsIFwienN3YXBcIikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR6c3dhcF93cml0ZWJhY2tfb25seSA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICh6c3dhcF93cml0ZWJhY2tfb25seSkge1xuK1x0XHQvKiBzb3VyY2U9enN3YXAgYW5kIHN3YXBwaW5lc3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gKi9cbitcdFx0aWYgKHN3YXBwaW5lc3MgIT0gLTEpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKG1lbWNnLCBucl9ieXRlcyk7XG4rXHR9XG4rXG4gXHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG4gXHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG4gXHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbitzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHtcbitcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcbitcdGJvb2wgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGU7XG4rfTtcbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xMDg5LDggKzEwOTQsOSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb1xuIFx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB6c3dhcF9lbnRyeSwgbHJ1KTtcbi1cdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XG4rXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnICp3YWxrX2FyZyA9IGFyZztcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuK1x0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbiBcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuIFxuQEAgLTExMzMsMTAgKzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBscnUgbG9jayBpcyBkcm9wcGVkLCB0aGUgZW50cnkgbWlnaHQgZ2V0IGZyZWVkLiBUaGVcbi1cdCAqIHN3cGVudHJ5IGlzIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24ndCBkZXJlZidkIGFnYWluXG4tXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4rXHQgKiBuZWVkZWQgZmllbGRzIGFyZSBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZFxuK1x0ICogYWdhaW4gdW50aWwgaXQgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4gXHQgKi9cbiBcdHN3cGVudHJ5ID0gZW50cnktXHUwMDNlc3dwZW50cnk7XG4rXHRsZW5ndGggPSBlbnRyeS1cdTAwM2VsZW5ndGg7XG4gXG4gXHQvKlxuIFx0ICogSXQncyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbkBAIC0xMTU1LDEyICsxMTYyLDEzIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXG4gXHRcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xuIFx0XHQgKiBzaHJpbmtlciBjb250ZXh0KS5cbiBcdFx0ICovXG4tXHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXHUwMDI2XHUwMDI2IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7XG4rXHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QpIHtcbiBcdFx0XHRyZXQgPSBMUlVfU1RPUDtcbi1cdFx0XHQqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSB0cnVlO1xuK1x0XHRcdHdhbGtfYXJnLVx1MDAzZWVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0enN3YXBfd3JpdHRlbl9iYWNrX3BhZ2VzKys7XG4rXHRcdHdhbGtfYXJnLVx1MDAzZWJ5dGVzX3dyaXR0ZW4gKz0gbGVuZ3RoO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xMTY5LDggKzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHtcbitcdFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxuK1x0XHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcbitcdH07XG4gXHR1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7XG4tXHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2U7XG4gXG4gXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcbiBcdFx0XHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cdTAwM2VtZW1jZykpIHtcbkBAIC0xMTc5LDkgKzExOTAsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHR9XG4gXG4gXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG4tXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbitcdFx0XHUwMDI2d2Fsa19hcmcpO1xuIFxuLVx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuK1x0aWYgKHdhbGtfYXJnLmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcbkBAIC0xMjc1LDkgKzEyODYsMzEgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbiBcdHJldHVybiBzaHJpbmtlcjtcbiB9XG4gXG4tc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuKyNkZWZpbmUgTlJfWlNXQVBfV0JfQkFUQ0hcdDY0VUxcbitcbisvKlxuKyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xuKyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxuKyAqXG4rICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxuKyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xuKyAqIGVhY2ggZW50cnkgaXMgc2Nhbm5lZCBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXJcbisgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcbisgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcbisgKiBlbnRyaWVzLlxuKyAqXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrIChcdTAwM2U9IDApLCBvciAtRU5PRU5UXG4rICogaWYgQG1lbWNnIGhhcyB3cml0ZWJhY2sgZGlzYWJsZWQsIGlzIGEgem9tYmllIGNncm91cCwgb3IgaGFzIGVtcHR5XG4rICogenN3YXAgTFJVcy5cbisgKi9cbitzdGF0aWMgbG9uZyBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4pXG4ge1xuLVx0aW50IG5pZCwgc2hydW5rID0gMCwgc2Nhbm5lZCA9IDA7XG4rXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHdhbGtfYXJnID0ge1xuK1x0XHQuYnl0ZXNfd3JpdHRlbiA9IDAsXG4rXHRcdC5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbitcdGludCBuaWQ7XG4gXG4gXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjkwLDIzICsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsaztcbitcbitcdFx0LypcbitcdFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXG4rXHRcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cbitcdFx0ICovXG4rXHRcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxuK1x0XHRcdFx0IGxpc3RfbHJ1X2NvdW50X29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xuK1x0XHRpZiAoIW5yX3RvX3dhbGspXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG5yX3JlbWFpbmluZyAtPSBucl90b193YWxrO1xuK1x0XHRsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxuK1x0XHRcdFx0ICBcdTAwMjZ3YWxrX2FyZywgXHUwMDI2bnJfdG9fd2Fsayk7XG4rXHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4rXHRcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xuIFxuLVx0XHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xuLVx0XHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xuK1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbitcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xuK1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbitcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xuK31cbitcbisvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXG4rc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSB7XG4rXHRpbnQgc2NhbnM7XG4rXHRpbnQgZmFpbHVyZXM7XG4rfTtcbitcbisvKlxuKyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJ3NcbisgKiBpdGVyYXRvciwgYW5kIGZvbGQgdGhlIHJlc3VsdCBpbnRvIEBzLCB0aGUgcmV0cnkgYm9va2tlZXBpbmcgc2hhcmVkXG4rICogYWNyb3NzIHN0ZXBzLiBAbWVtY2cgaXMgdGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBtZW1jZywgb3IgTlVMTCBvbmNlXG4rICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXG4rICpcbisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgdG8gc2lnbmFsIHRoZSBjYWxsZXIgdG8gYWJvcnQgdGhlIHdhbGsgYWZ0ZXJcbisgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcbisgKiAtIE5vIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2dzIHdlcmUgZm91bmQgaW4gYSBtZW1jZyB0cmVlIHdhbGsuXG4rICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoXHUwMDNlPSAwKSwgb3IgLUVCVVNZXG4rICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay5cbisgKi9cbitzdGF0aWMgbG9uZyB6c3dhcF9zaHJpbmtfb25lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgKnMpXG4re1xuK1x0bG9uZyBzaHJ1bms7XG4rXG4rXHQvKlxuK1x0ICogUmVhY2hpbmcgYSBOVUxMIG1lbWNnIG1lYW5zIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyBjb21wbGV0ZWQuXG4rXHQgKiBFeGNsdWRlIHRoZSBtZW1jZy1kaXNhYmxlZCBjYXNlLCB3aGVyZSBpdCBpcyBhbHdheXMgTlVMTCwgYW5kXG4rXHQgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWYgd2UgZm91bmRcbitcdFx0ICogY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXMtXHUwMDNlc2NhbnMgXHUwMDI2XHUwMDI2ICsrcy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdHMtXHUwMDNlc2NhbnMgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xuK1xuK1x0LypcbitcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4gV2l0aCBtZW1jZ1xuK1x0ICogZW5hYmxlZCB0aGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcbitcdCAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS5cbitcdCAqIFdpdGggbWVtY2cgZGlzYWJsZWQgdGhlIHJvb3QgTFJVIGlzIHRoZSBvbmx5IHRhcmdldCwgc28gd2Ugc2hvdWxkXG4rXHQgKiBhYm9ydCBpZiBpdCBoYXMgbm8gd3JpdGViYWNrLWNhbmRpZGF0ZSBwYWdlcy5cbitcdCAqL1xuK1x0aWYgKHNocnVuayA9PSAtRU5PRU5UKVxuK1x0XHRyZXR1cm4gbWVtX2Nncm91cF9kaXNhYmxlZCgpID8gLUVCVVNZIDogMDtcbitcdHMtXHUwMDNlc2NhbnMrKztcbitcbitcdGlmIChzaHJ1bmsgXHUwMDNjPSAwIFx1MDAyNlx1MDAyNiArK3MtXHUwMDNlZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldHVybiBzaHJ1bms7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi1cdGludCByZXQsIGZhaWx1cmVzID0gMCwgYXR0ZW1wdHMgPSAwO1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHRocjtcbiBcbiBcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xuQEAgLTEzMTgsMTEgKzE0MjUsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdCAqIHdyaXRlYmFjay1kaXNhYmxlZCBtZW1jZ3MgKG1lbW9yeS56c3dhcC53cml0ZWJhY2s9MCkgYXJlIG5vdFxuIFx0ICogY2FuZGlkYXRlcyBmb3Igc2hyaW5raW5nLlxuIFx0ICpcbi1cdCAqIFNocmlua2luZyB3aWxsIGJlIGFib3J0ZWQgaWYgd2UgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmdcbi1cdCAqIE1BWF9SRUNMQUlNX1JFVFJJRVMgdGltZXM6XG4tXHQgKiAtIE5vIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2dzIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxuLVx0ICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cbi1cdCAqXG4gXHQgKiBXZSBzYXZlIGl0ZXJhdGlvbiBjdXJzb3IgbWVtY2cgaW50byB6c3dhcF9uZXh0X3NocmluayxcbiBcdCAqIHdoaWNoIGNhbiBiZSBtb2RpZmllZCBieSB0aGUgb2ZmbGluZSBtZW1jZyBjbGVhbmVyXG4gXHQgKiB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoKS5cbkBAIC0xMzM3LDcgKzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHQgKiBvZmZsaW5lIG1lbWNnIGxlZnQgaW4genN3YXBfbmV4dF9zaHJpbmsgd2lsbCBob2xkIHRoZSByZWZlcmVuY2VcbiBcdCAqIHVudGlsIHRoZSBuZXh0IHJ1biBvZiBzaHJpbmtfd29ya2VyKCkuXG4gXHQgKi9cbi1cdGRvIHtcbitcdHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpIHtcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0XHRsb25nIHJldDtcbitcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdC8qXG4gXHRcdCAqIFN0YXJ0IHNocmlua2luZyBmcm9tIHRoZSBuZXh0IG1lbWNnIGFmdGVyIHpzd2FwX25leHRfc2hyaW5rLlxuIFx0XHQgKiBXaGVuIHRoZSBvZmZsaW5lIGNsZWFuZXIgaGFzIGFscmVhZHkgYWR2YW5jZWQgdGhlIGN1cnNvcixcbkBAIC0xMzU2LDM3ICsxNDYyLDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIFx0XHR9IHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XG4gXG4tXHRcdGlmICghbWVtY2cpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxuLVx0XHRcdCAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICghYXR0ZW1wdHMgXHUwMDI2XHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGF0dGVtcHRzID0gMDtcbi1cdFx0XHRnb3RvIHJlc2NoZWQ7XG4tXHRcdH1cbi1cbi1cdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcbitcdFx0cmV0ID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhtZW1jZywgXHUwMDI2cyk7XG4gXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xuIFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy5cbi1cdFx0ICogVGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXG4tXHRcdCAqIHdpdGggcGFnZXMgaW4genN3YXAuIFNraXAgdGhpcyB3aXRob3V0IGluY3JlbWVudGluZyBhdHRlbXB0c1xuLVx0XHQgKiBhbmQgZmFpbHVyZXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAocmV0ID09IC1FTk9FTlQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdCsrYXR0ZW1wdHM7XG4tXG4tXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdFx0YnJlYWs7XG4tcmVzY2hlZDpcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9IHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpO1xuK1x0fVxuIH1cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5AQCAtMTQ5Miw3ICsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkge1xuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuLVx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xuK1x0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnLCBudW1fbm9kZV9zdGF0ZShOX05PUk1BTF9NRU1PUlkpKSBcdTAwM2M9IDApIHtcbiBcdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdFx0Z290byBwdXRfb2JqY2c7XG4gXHRcdH1cbkBAIC0xNjMyLDYgKzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spXG4re1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7XG4rXHR1NjQgYnl0ZXNfd3JpdHRlbiA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR3aGlsZSAoYnl0ZXNfd3JpdHRlbiBcdTAwM2MgYnl0ZXNfdG9fd3JpdGViYWNrKSB7XG4rXHRcdGxvbmcgc2hydW5rO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gLUVJTlRSO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFVzZSBhIGxvY2FsIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIG1lbWNnIGFuZCBpdHMgb25saW5lIGRlc2NlbmRhbnRzXG4rXHRcdCAqIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBVcG9uIGV4aXRpbmcgdGhlIGxvb3AsIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpXG4rXHRcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cbitcdFx0ICovXG4rXHRcdGRvIHtcbitcdFx0XHRpdGVyID0gbWVtX2Nncm91cF9pdGVyKG1lbWNnLCBpdGVyLCBOVUxMKTtcbitcdFx0fSB3aGlsZSAoaXRlciBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShpdGVyKSk7XG4rXG4rXHRcdHNocnVuayA9IHpzd2FwX3Nocmlua19vbmVfbWVtY2coaXRlciwgXHUwMDI2cyk7XG4rXHRcdGlmIChzaHJ1bmsgXHUwMDNlIDApIHtcbitcdFx0XHRieXRlc193cml0dGVuICs9IHNocnVuaztcbitcdFx0XHRtb2RfbWVtY2dfc3RhdGUoaXRlciwgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLCBzaHJ1bmspO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqL1xuK1x0XHRtZW1fY2dyb3VwX3B1dChpdGVyKTtcbitcbitcdFx0aWYgKHNocnVuayA9PSAtRUJVU1kpIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsobWVtY2csIGl0ZXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbiB7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuQEAgLTYwLDcgKzYwLDEyIEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxuIFxuIHN0YXRpYyBsb25nIGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3YlwiKTtcbitcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3cHdiIFwiKTtcbit9XG4rXG4rc3RhdGljIGxvbmcgZ2V0X2NnX3B3Yl9ieXRlcyhjb25zdCBjaGFyICpjZylcbit7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3Yl9wcm9hY3RpdmVfYiBcIik7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcbkBAIC0zNTUsNiArMzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4ge1xuIFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4rXHRsb25nIHB3Yl9ieXRlcztcbiBcbiBcdHpzd3B3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQoY2dyb3VwKTtcbiBcdGlmICh6c3dwd2JfYmVmb3JlICE9IDApIHtcbkBAIC0zNjIsNiArMzY4LDEyIEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuK1x0cHdiX2J5dGVzID0gZ2V0X2NnX3B3Yl9ieXRlcyhjZ3JvdXApO1xuK1x0aWYgKHB3Yl9ieXRlcyBcdTAwM2UgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCIsIHB3Yl9ieXRlcyk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbiBcdGlmIChjZ19ydW4oY2dyb3VwLCBhdHRlbXB0X3dyaXRlYmFjaywgKHZvaWQgKikgXHUwMDI2d2IpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMzc5LDYgKzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBhdHRlbXB0X3dyaXRlYmFjaygpIGRvZXMgbm90IHVzZSB0aGUgcHJvYWN0aXZlIHdyaXRlYmFjayBwYXRoLCBzb1xuK1x0ICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlclxuK1x0ICogd3JpdGViYWNrIHdhcyBlbmFibGVkLlxuK1x0ICovXG4rXHRwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7XG4rXHRpZiAocHdiX2J5dGVzIFx1MDAzZSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX3Byb2FjdGl2ZV9iX2FmdGVyIGlzICVsZCwgZXhwZWN0ZWQgMFxcblwiLCBwd2JfYnl0ZXMpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzcwLDYgKzc5MywxNDEgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIFRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4rICogMS4gQWxsb2NhdGUgbWVtb3J5LlxuKyAqIDIuIFB1c2ggYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLlxuKyAqIDMuIFByb2FjdGl2ZWx5IHdyaXRlIGJhY2sgenN3YXAgcGFnZXMgdG8gc3dhcFxuKyAqICAgIHVzaW5nIFwic291cmNlPXpzd2FwXCIuXG4rICovXG4rc3RhdGljIGludCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuK3tcbitcdGxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRzaXplX3QgbWVtc2l6ZSA9IHBhZ2VzaXplICogMTAyNDtcbitcdGNoYXIgcmVjbGFpbV9jbWRbNjRdO1xuK1x0Y2hhciBidWZbcGFnZXNpemVdO1xuK1x0bG9uZyB6c3dhcF91c2FnZTtcbitcdGludCByZXQgPSAtMTtcbitcdGludCByYztcbitcdGNoYXIgKm1lbTtcbitcbitcdG1lbSA9IChjaGFyICopbWFsbG9jKG1lbXNpemUpO1xuK1x0aWYgKCFtZW0pXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgcGFnZXNpemU7IGkrKylcbitcdFx0YnVmW2ldID0gaSBcdTAwM2MgcGFnZXNpemUgLyAyID8gKGNoYXIpaSA6IDA7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWVtc2l6ZTsgaSArPSBwYWdlc2l6ZSlcbitcdFx0bWVtY3B5KFx1MDAyNm1lbVtpXSwgYnVmLCBwYWdlc2l6ZSk7XG4rXG4rXHQvKiBFdmljdCBhbGxvY2F0ZWQgbWVtb3J5IGludG8genN3YXAuICovXG4rXHRpZiAoY2dfd3JpdGVfbnVtZXJpYyhjZ3JvdXAsIFwibWVtb3J5LnJlY2xhaW1cIiwgbWVtc2l6ZSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgXCJtZW1vcnkuenN3YXAuY3VycmVudFwiKTtcbitcdGlmICh6c3dhcF91c2FnZSBcdTAwM2M9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJubyB6c3dhcCBwb29sIHRvIHdyaXRlIGJhY2tcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xuK1x0c25wcmludGYocmVjbGFpbV9jbWQsIHNpemVvZihyZWNsYWltX2NtZCksIFwiJWxkIHNvdXJjZT16c3dhcFwiLCB6c3dhcF91c2FnZSk7XG4rXHRyYyA9IGNnX3dyaXRlKGNncm91cCwgXCJtZW1vcnkucmVjbGFpbVwiLCByZWNsYWltX2NtZCk7XG4rXHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FQUdBSU4pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXG5cIiwgcmMpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0ZnJlZShtZW0pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHMoY29uc3QgY2hhciAqY2dyb3VwKVxuK3tcbitcdHN0YXRpYyBjaGFyICogY29uc3QgYmFkX2lucHV0c1tdID0ge1xuK1x0XHRcInNvdXJjZT16c3dhcFwiLFxuK1x0XHRcIjFNIHNvdXJjZT16c3dhcCBzd2FwcGluZXNzPTYwXCIsXG4rXHRcdFwiMU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcIixcbitcdFx0XCIxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXhcIixcbitcdFx0XCIxTSBzd2FwcGluZXNzPW1heCBzb3VyY2U9enN3YXBcIixcbitcdH07XG4rXHRpbnQgaSwgcmM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9pbnB1dHMpOyBpKyspIHtcbitcdFx0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFwibWVtb3J5LnJlY2xhaW1cIiwgYmFkX2lucHV0c1tpXSk7XG4rXHRcdGlmIChyYyAhPSAtRUlOVkFMKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJtZW1vcnkucmVjbGFpbSAnJXMnOiByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgJWRcXG5cIixcbitcdFx0XHRcdCAgICAgICBiYWRfaW5wdXRzW2ldLCByYywgLUVJTlZBTCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRsb25nIHdiX2JlZm9yZSwgd2JfYWZ0ZXI7XG4rXHRsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7XG4rXHRsb25nIHdiX2RlbHRhLCBwd2JfYl9kZWx0YTtcbitcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4rXHRjaGFyICp0ZXN0X2dyb3VwO1xuK1xuK1x0aWYgKGNnX3JlYWRfc3RyY21wKHJvb3QsIFwibWVtb3J5Lnpzd2FwLndyaXRlYmFja1wiLCBcIjFcIikpXG4rXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4rXG4rXHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcInpzd2FwX3Byb2FjdGl2ZV90ZXN0XCIpO1xuK1x0aWYgKCF0ZXN0X2dyb3VwKVxuK1x0XHRyZXR1cm4gS1NGVF9GQUlMO1xuK1x0aWYgKGNnX2NyZWF0ZSh0ZXN0X2dyb3VwKSlcbitcdFx0Z290byBvdXQ7XG4rXHQvKlxuK1x0ICogQSBtaXNzaW5nIHpzd3B3Yl9wcm9hY3RpdmVfYiBzdGF0IG1lYW5zIHRoZSBrZXJuZWwgbGFja3MgcHJvYWN0aXZlXG4rXHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxuK1x0ICovXG4rXHRpZiAoZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xuK1x0d2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApO1xuK1x0aWYgKHB3Yl9iX2JlZm9yZSBcdTAwM2MgMCB8fCB3Yl9iZWZvcmUgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkLCBOVUxMKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9hZnRlciA9IGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCk7XG4rXHR3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbitcdGlmIChwd2JfYl9hZnRlciBcdTAwM2MgMCB8fCB3Yl9hZnRlciBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9kZWx0YSA9IHB3Yl9iX2FmdGVyIC0gcHdiX2JfYmVmb3JlO1xuK1x0d2JfZGVsdGEgPSB3Yl9hZnRlciAtIHdiX2JlZm9yZTtcbitcbitcdGlmIChwd2JfYl9kZWx0YSBcdTAwM2M9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJ6c3dwd2JfcHJvYWN0aXZlX2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxuXCIsXG4rXHRcdFx0ICAgICAgIHB3Yl9iX2RlbHRhKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAod2JfZGVsdGEgXHUwMDNjPSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiIGRpZCBub3QgaW5jcmVhc2U6IGRlbHRhPSVsZFxcblwiLCB3Yl9kZWx0YSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gS1NGVF9QQVNTO1xuK291dDpcbitcdGNnX2Rlc3Ryb3kodGVzdF9ncm91cCk7XG4rXHRmcmVlKHRlc3RfZ3JvdXApO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbkBAIC03ODMsNiArOTQxLDcgQEAgc3RydWN0IHpzd2FwX3Rlc3Qge1xuIFx0VCh0ZXN0X25vX2ttZW1fYnlwYXNzKSxcbiBcdFQodGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKSxcbiBcdFQodGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZSksXG4rXHRUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksXG4gfTtcbiAjdW5kZWYgVFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MTMuNzA4NjI0MTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzMTQ1NjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBac3dhcCBXcml0ZWJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB3aXRoIGBzb3VyY2U9enN3YXBgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBsZXQncyBicmVhayBkb3duIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIG51bWJlciBvZiBmaWxlcy4gSXQncyB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdGApIHRvIHJlZmxlY3QgdGhpcyBuZXcgY2FwYWJpbGl0eSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZS4gV2UncmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgaGVhZGVyIGZpbGVzIChgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYCkgYW5kIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgKGBtbS9tZW1jb250cm9sLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0venN3YXAuY2ApLiBUaGVyZSdzIGV2ZW4gYSB0ZXN0IHN1aXRlIGFkZGl0aW9uIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY2ApLCB3aGljaCBpcyBncmVhdCDigJMgd2UgbmVlZCB0aG9yb3VnaCB0ZXN0aW5nIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLlxuXG5UaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgbW9kaWZ5aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCB0byBwYXJzZSB0aGUgYHNvdXJjZT16c3dhcGAgb3B0aW9uLiBJZiBgenN3YXBfd3JpdGViYWNrX29ubHlgIGlzIGVuYWJsZWQsIGl0IGNhbGxzIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYC4gVGhlbiBgbW0venN3YXAuY2AgaW1wbGVtZW50cyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaXRzZWxmLCB3aGljaCwgaW4gdHVybiwgaXRlcmF0ZXMgdGhyb3VnaCBtZW1jZ3MgYW5kIGNhbGxzIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYC4gVGhlIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYCB0aGVuIGNhbGxzIGBzaHJpbmtfbWVtY2dgLiBUaGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCB0byBhY2NlcHQgYSBgbnJfdG9fc2NhbmAgYXJndW1lbnQgYW5kIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrLiBUaGlzIGlzIGFsbCBjbGVhcmx5IGZ1bmN0aW9uYWwsIGludHJvZHVjaW5nIGEgd2F5IHRvIHByb2FjdGl2ZWx5IHRyaWdnZXIgd3JpdGViYWNrIG9mIHpzd2FwIHBhZ2VzLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uLiBJdCBwcm92aWRlcyBhIG5ldyBtZWNoYW5pc20gdG8gY29udHJvbCB6c3dhcCBiZWhhdmlvciB0aHJvdWdoIG1lbWNncy4gQmVjYXVzZSBpdCdzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdlIGFic29sdXRlbHkgbmVlZCB0byBjb25zaWRlciBpdCBhIHRhcmdldCBmb3IgZnV6emluZy4gQW55IG5ldyB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmVhbGx5IHJvYnVzdC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX1pTV0FQYCBpcyBvYnZpb3VzbHkgYSBtdXN0LWhhdmUgZm9yIGFueSBvZiB0aGlzIHRvIHdvcmssIGFuZCBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBiZWNhdXNlIGl0IHVzZXMgdGhlIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBJdCdzIGEgYml0IGVhcmx5LCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3pzd2FwLmNgIGl0c2VsZiBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjIwLjk0MDA4Mzc2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU3OTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTcyLVxcdFpTV1BJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU1Ny1cXHR7IFxcXCJzaG1lbVxcXCIsXFx0XFx0XFx0TlJfU0hNRU1cXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTU4OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtMTU1OS1cXHR7IFxcXCJ6c3dhcFxcXCIsXFx0XFx0XFx0TUVNQ0dfWlNXQVBfQlxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDE2MD1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTczLVxcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmM6NDE3NDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTQxNzUtXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc5Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cXG5tbS9tZW1jb250cm9sLmM6NTgyNzojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU4MjgtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjAwND1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwMjItfTtcXG5tbS9tZW1jb250cm9sLmM6NjAyMzojZW5kaWYgLyogQ09ORklHX1pTV0FQICovXFxubW0vbWVtY29udHJvbC5jLTYwMjQtXFxubW0vbWVtY29udHJvbC5jPTYwMjU9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDMzLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNjAzNS1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcXG4tLVxcbm1tL3Ztc3RhdC5jPTExODc9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xNDUwLSNlbmRpZlxcbm1tL3Ztc3RhdC5jOjE0NTE6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL3Ztc3RhdC5jLTE0NTItXFx0W0koWlNXUElOKV1cXHRcXHRcXHRcXHQ9IFxcXCJ6c3dwaW5cXFwiLFxcbi0tXFxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xcbi0tXFxubW0venN3YXAuYy04OC0vKiBFbmFibGUvZGlzYWJsZSB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmM6OTA6c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmMtOTEtc3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxuLS1cXG5tbS96c3dhcC5jPTk3PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmMtOTktLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXFxubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMTAxLXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXFxubW0venN3YXAuYzoxMjI6XFx0XFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmMtMTIzLW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG5tbS96c3dhcC5jOjEzMjpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMTMzLX1cXG4tLVxcbm1tL3pzd2FwLmM9MzQ5PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zNTEtXFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFxcdTAwMjZcXHUwMDI2XFxubW0venN3YXAuYzozNTI6XFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xcbm1tL3pzd2FwLmMtMzUzLVxcdFxcdHByX2VycihcXFwiY29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxcXG5cXFwiLFxcbm1tL3pzd2FwLmM6MzU0OlxcdFxcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcXG5tbS96c3dhcC5jLTM1NS1cXHRcXHRwYXJhbV9mcmVlX2NoYXJwKFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jOjM1NjpcXHRcXHR6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jLTM1Ny1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjIxLjAwMDY5NTI1MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA5Mjk4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBMaW51eCBrZXJuZWwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKkNoZWNraW5nIFpzd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHpzd2FwIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGhlYWRlciBmaWxlIHNob3VsZCBjb250YWluIHRoZSBrZXkgZGVmaW5pdGlvbnMuIFNvLCBsZXQgbWUgb3BlbiB1cCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IG1hY3Jvcywgc3RydWN0dXJlcywgYW5kIGxpa2VseSBzb21lIGlubGluZSBjb21tZW50cyBleHBsYWluaW5nIHRoZSBkaWZmZXJlbnQgY29tcGlsZS10aW1lIGFuZCBydW50aW1lIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHpzd2FwLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYnVmZmVyIHNpemVzLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCB0aHJlc2hvbGRzLCBhbmQgYW55IHR1bmFibGUgcGFyYW1ldGVycyB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZSB6c3dhcCdzIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGluLCBhbG9uZyB3aXRoIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSB1c2VkLiBUaGUgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBoZWFkZXIgc2hvdWxkIGJlIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY3VycmVudGx5IGRlc2lnbmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRvIHR1bmUgb3IgbW9kaWZ5IHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjI0LjY2MTYyOTkxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTMzMDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvenN3YXAuaD0xMD1leHRlcm4gYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXM7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMjojaWZkZWYgQ09ORklHX1pTV0FQXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OToyNC43MjI5NzI4MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ4NDcwNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlNXQVAgYW5kIE1FTUNHIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBwbGF5ZXJzOiBgWlNXQVBgIGFuZCBgTUVNQ0dgLiBXZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZ3JvdXBzLCBzcGVjaWZpY2FsbHkgaG93IHpzd2FwIGludGVyYWN0cyB3aXRoIHRoZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYWx0ZXJlZCBieSB0aGlzIHBhdGNoLlxuXG5SaWdodCwgdGhlIHBhdGNoIGhpdHMgYG1tL3Ztc2Nhbi5jYCB3aXRoIGEgY2hhbmdlIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQgaW50cm9kdWNlcyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaW4gYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IHByb2FjdGl2ZSB3cml0ZWJhY2sgc3RyYXRlZ3kgc3BlY2lmaWNhbGx5IGZvciB6c3dhcC4gRnVydGhlcm1vcmUsIGl0IHRvdWNoZXMgYHNocmlua19tZW1jZ2AgYW5kIGFkZHMgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbHNvIGluIGBtbS96c3dhcC5jYC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBvZiBob3cgd2Ugc2hyaW5rIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aGVuIHVzaW5nIHpzd2FwLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IGNoZWNrIGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBvcmlnaW5hbCBzb3VyY2UgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzAuOTcxNDQ3ODczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTg5ODIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNjMzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDk5Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTk3LVxcbm1tL21lbWNvbnRyb2wuYzo0OTk4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTQ5OTktXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2OC1cXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzE9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDM2LVxcbm1tL3Ztc2Nhbi5jOjgwMzc6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMzgtXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzEuMjMzMzUzNjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3NzkwMzM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIE1lbW9yeSBSZWNsYWltIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggenN3YXAgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGFsc28gZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gYG1lbW9yeV9yZWNsYWltYCBpcywgb2YgY291cnNlLCB0aGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgY2dyb3VwIGZpbGUsIHNvIHRoYXTigJlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB1c2VyLWluaXRpYXRlZCByZWNsYWltLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZWxhdGVzIHRvIHpzd2FwLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgLCBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AsIGFuZCB0aGUgZ2VuZXJhbCBgc2hyaW5rX21lbWNnYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgYXJlIGNhbGxlZC5cblxuVGhlIGNvZGUgbWVudGlvbnMgYENPTkZJR19aU1dBUGAgYW5kIGBNRU1DR2AgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEknbSB3b25kZXJpbmcgaWYganVzdCBgQ09ORklHX1pTV0FQYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBvciBpZiBJIG5lZWQgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHBhdGNoIHRleHQgcHJvdmlkZXMgc29tZSBjb250ZXh0LCBzdGF0aW5nIHRoYXQgenN3YXAgd3JpdGViYWNrIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMsIGFuZCB0aGF0IHlvdSBjYW5ub3QgbWl4IHRoZSBgenN3YXBgIHNvdXJjZSB3aXRoIHN3YXBwaW5lc3MuXG5cbkRpZ2dpbmcgaW50byBgbW0venN3YXAuY2AsIEkgZmluZCB0aGUgYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgIGZ1bmN0aW9uLiBJIHNlZSBpdCBjaGVja3MgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpYC4gSSdsbCBjb25maXJtIGhvdyB0aGF0IGlzIHNldCB1cC4gTGV0J3Mgc2VlLi4uIGFuZCwgaXQgbG9va3MgbGlrZSB0aGlzIGNoZWNrICpkb2Vzbid0KiBkZXBlbmQgb24gYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIGl0IHNlZW1zIGxpa2UgaGF2aW5nIGJvdGggYFpTV0FQYCBhbmQgYE1FTUNHYCBlbmFibGVkIGlzIGVub3VnaC4gSSBjYW4gbm93IGJlIGNvbmZpZGVudCB0aGF0IGBaU1dBUGAgYW5kIGBNRU1DR2AgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3MgdG8gYmUgbG9va2luZyBhdC5cblxuTm93IEknbGwganVzdCBkb3VibGUtY2hlY2ssIGlzIGl0IHRydWx5IGBDT05GSUdfTUVNQ0dgLCBvciBzaG91bGQgSSBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZWxzZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzguMzExMjYzNjkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyNDg5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OTozOC40MzQ1MjczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIxNjM4MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ29uZmlybWluZyBhbmQgUmVmaW5pbmcgTXkgVW5kZXJzdGFuZGluZyoqXG5cblllcywgdGhhdCdzIHJpZ2h0LCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IHRlcm0gd2UncmUgZGVhbGluZyB3aXRoLiBJdCdzIHRoZSBjb3JlIGNvbmNlcHQuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyIHdpdGggdGhlIGFuYWx5c2lzLCBJIGp1c3Qgd2FudCB0byBxdWlja2x5IG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBuZXh0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXTigJlzIG1lbnRpb25lZC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrOiBpcyBgQ09ORklHX1pTV0FQYCB0aGUgcHJlY2lzZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0IGhlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBuYW1lIHRvIGVuc3VyZSBhY2N1cmFjeSBpbiBteSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjQxLjU1NjE2OTgwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1OTQwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6NDEuNjM5NzcxMjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzIwMTk0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFpTV0FQIFBhdGNoIGZvciBQcm9hY3RpdmUgV3JpdGViYWNrKipcblxuQWxyaWdodCwgc28gdGhlIGZlZWRiYWNrIGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2gg4oCTIGBaU1dBUGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgZGlyZWN0aW9uIGhlcmUuIEFuZCB0aGlzIHBhdGNoLi4uIHllcywgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IGFkZHMgYSBuZXcgdXNlcnNwYWNlLWFjY2Vzc2libGUgZmVhdHVyZSB0byBgbWVtb3J5LnJlY2xhaW1gIOKAkyB0aGF0IHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2ssIGluIGVmZmVjdCDigJMgY2hhbmdlcyB0aGUgZ2FtZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzLCBJIGNhbiBzZWUgdGhhdCBpbW1lZGlhdGVseS5cblxuTm93LCBteSBmb2N1cyBuZWVkcyB0byBob25lIGluIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBpbmZsdWVuY2VzIHRoZSByZWNsYW1hdGlvbiBwcm9jZXNzLiBXaGF0IGFyZSB0aGUgcHJlY29uZGl0aW9ucywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz9cblxuQWxzbywgdGhlIGNvbmZpZ3MgYXJlIGFub3RoZXIgcG9pbnQgdG8gZXhwbG9yZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IGF3YXJlIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgWlNXQVBgIGFuZCBgTUVNQ0dgLiBUaGV5IGFyZSBnb2luZyB0byBoYXZlIGEgbG90IG9mIGltcG9ydGFuY2UgaW4gdGhlIHRlc3Rpbmcgb2YgdGhlIHBhdGNoZXMuXG5cbkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgY29uY3JldGUgdGVzdGluZyBnb2FscyBhbmQgZ2V0IHNvbWUgcmVzdWx0cyBpbi4gTGV0J3MgY2FsbCBhIHNldC1yZXN1bHRzIGFuZCBlc3RhYmxpc2ggc29tZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwNywiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6NDguMjcxNzk1Mjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjIwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJ6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtfb25lX21lbWNnXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdmlhIHRoZSAnbWVtb3J5LnJlY2xhaW0nIGNncm91cCBpbnRlcmZhY2UgdXNpbmcgdGhlICdzb3VyY2U9enN3YXAnIGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw55c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 11:37:29 +0000 UTC FinishedAt: 2026-06-29 11:49:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "019ee523e8a7f28d75dfa9d322a210cb11f097cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "019ee523e8a7f28d75dfa9d322a210cb11f097cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "MEMCG" ], "series_id": "2ad34779-3380-4f62-87c3-27fdbeb2fbee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "zswap_proactive_writeback", "zswap_shrink_one_memcg", "shrink_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua19vbmVfbWVtY2cmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICYjMzk7bWVtb3J5LnJlY2xhaW0mIzM5OyBjZ3JvdXAgaW50ZXJmYWNlIHVzaW5nIHRoZSAmIzM5O3NvdXJjZT16c3dhcCYjMzk7IGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjQ5OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOTkzNDQ2YWI2NmQwZmIuLmUxZjZhNDcyOWE2NWU2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0xNDI1LDkgJiM0MzsxNDI1LDEwIEBAIFBBR0VfU0laRSBtdWx0aXBsZSB3aGVuIHJlYWQgYmFjay5cbiBcbiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxuIFxuLVx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ICBzb3VyY2U9enN3YXAgICAgICAgICAgT25seSBwZXJmb3JtIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2tcbiYjNDM7XHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFx0U3BlY2lmeWluZyBhIHN3YXBwaW5lc3MgdmFsdWUgaW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gcGVyZm9ybVxuIFx0dGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGVcbkBAIC0xNDM3LDYgJiM0MzsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nXG4gXHRzd2FwcGluZXNzPW1heCBleGNsdXNpdmVseSByZWNsYWltcyBhbm9ueW1vdXMgbWVtb3J5LlxuIFxuJiM0MztcdFRoZSBzb3VyY2U9enN3YXAga2V5IHNraXBzIG9yZGluYXJ5IG1lbW9yeSByZWNsYWltIGFuZFxuJiM0MztcdHdyaXRlcyBiYWNrIHBhZ2VzIGZyb20genN3YXAgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UgdW50aWxcbiYjNDM7XHR0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlc1xuJiM0MztcdGFyZSBmb3VuZC4gVGhpcyBpcyB1c2VmdWwgdG8gcHJvYWN0aXZlbHkgb2ZmbG9hZCBjb2xkIGNvbXByZXNzZWRcbiYjNDM7XHRkYXRhIGZyb20gdGhlIHpzd2FwIHBvb2wgdG8gdGhlIHN3YXAgZGV2aWNlLiBJdCBpcyBvbmx5IGF2YWlsYWJsZVxuJiM0MztcdGlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlXG4mIzQzO1x0Y29tYmluZWQgd2l0aCBzd2FwcGluZXNzOyBzcGVjaWZ5aW5nIGJvdGggcmV0dXJucyAtRUlOVkFMLlxuJiM0MztcbiYjNDM7XHRFeGFtcGxlOjpcbiYjNDM7XG4mIzQzO1x0ICAjIFdyaXRlYmFjayB1cCB0byAxME1CIG9mIGNvbXByZXNzZWQgZGF0YSBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXBcbiYjNDM7XHQgIGVjaG8gXCYjMzQ7MTBNIHNvdXJjZT16c3dhcFwmIzM0OyBcdTAwM2UgbWVtb3J5LnJlY2xhaW1cbiYjNDM7XG4gICBtZW1vcnkucGVha1xuIFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxuIFxuQEAgLTE3MzQsNiAmIzQzOzE3NDgsMTAgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcdCAgenN3cHdiXG4gXHRcdE51bWJlciBvZiBwYWdlcyB3cml0dGVuIGZyb20genN3YXAgdG8gc3dhcC5cbiBcbiYjNDM7XHQgIHpzd3B3Yl9wcm9hY3RpdmVfYlxuJiM0MztcdFx0Qnl0ZXMgb2YgY29tcHJlc3NlZCBkYXRhIHByb2FjdGl2ZWx5IHdyaXR0ZW4gYmFjayBmcm9tXG4mIzQzO1x0XHR6c3dhcCB0byBzd2FwIHZpYSB0aGUgbWVtb3J5LnJlY2xhaW0gc291cmNlPXpzd2FwIGtleS5cbiYjNDM7XG4gXHQgIHpzd2FwX2luY29tcFxuIFx0XHROdW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcFxuIFx0XHR3aXRob3V0IGNvbXByZXNzaW9uLiBUaGVzZSBwYWdlcyBjb3VsZCBub3QgYmUgY29tcHJlc3NlZCB0b1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcbmluZGV4IDI0NjQ0MjVjNzgzZGUyLi5iNDliOGMxMzAzODkwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxuQEAgLTEzMSw3ICYjNDM7MTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcbiAgIGVjaG8gWSBcdTAwM2UgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkXG4gXG4gVGhpcyBjYW4gYmUgZW5hYmxlZCBhdCB0aGUgYm9vdCB0aW1lIGlmIGBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gYCBpc1xuLXNlbGVjdGVkLlxuJiM0MztzZWxlY3RlZC4gT25jZSBlbmFibGVkLCB0aGUgc2hyaW5rZXIgYXV0b21hdGljYWxseSB3cml0ZXMgYmFjayB6c3dhcCBwYWdlcyB0b1xuJiM0MztiYWNraW5nIHN3YXAgZHVyaW5nIG1lbW9yeSByZWNsYWltLlxuJiM0MztcbiYjNDM7SWYgdXNlcnMgd2FudCB0byBleHBsaWNpdGx5IHRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmb3IgYSBzcGVjaWZpY1xuJiM0MzttZW1vcnkgY2dyb3VwIHdpdGhvdXQgaW52b2tpbmcgc3RhbmRhcmQgcGFnZSByZWNsYWltLCBpdCBjYW4gYmUgZG9uZSBhcyBmb2xsb3dzOjpcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDsxME0gc291cmNlPXpzd2FwXCYjMzQ7IFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cdTAwM2NjZ3JvdXAtbmFtZVx1MDAzZS9tZW1vcnkucmVjbGFpbVxuJiM0MztcbiYjNDM7Qm90aCBvZiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUgYXJlIHN1YmplY3QgdG8gdGhlIGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgXG4mIzQzO2NvbnRyb2wuIFRoaXMgbWVhbnMgdGhhdCBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYCBjYW4gcHJldmVudCBhbGwgenN3YXAgd3JpdGViYWNrLlxuIFxuIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyXG4gb2YgcGFnZXMgc3RvcmVkLCBzYW1lLXZhbHVlIGZpbGxlZCBwYWdlcyBhbmQgdmFyaW91cyBjb3VudGVycyBmb3IgdGhlIHJlYXNvbnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC00MCw2ICYjNDM7NDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4mIzQzO1x0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxuIFx0TUVNQ0dfTlJfU1RBVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMTYuLmU1ZjIxNzc1OTg5NGVkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7aW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdFx0ICAgIHU2NCBieXRlc190b193cml0ZWJhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uZDgxYzM0NDg0YmNhMjggMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQzMyw2ICYjNDM7NDMzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4mIzQzO1x0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxuIH07XG4gXG4gI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXG5AQCAtMTU1OCw2ICYjNDM7MTU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4gXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuIFx0eyBcJiMzNDt6c3dhcHBlZFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG4gXHR7IFwmIzM0O3pzd2FwX2luY29tcFwmIzM0OyxcdFx0TUVNQ0dfWlNXQVBfSU5DT01QXHRcdH0sXG4mIzQzO1x0eyBcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2JcJiMzNDssXHRcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQlx0fSxcbiAjZW5kaWZcbiBcdHsgXCYjMzQ7ZmlsZV9tYXBwZWRcJiMzNDssXHRcdE5SX0ZJTEVfTUFQUEVEXHRcdFx0fSxcbiBcdHsgXCYjMzQ7ZmlsZV9kaXJ0eVwmIzM0OyxcdFx0XHROUl9GSUxFX0RJUlRZXHRcdFx0fSxcbkBAIC0xNjE0LDYgJiM0MzsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pXG4gXHRzd2l0Y2ggKGl0ZW0pIHtcbiBcdGNhc2UgTUVNQ0dfUEVSQ1BVX0I6XG4gXHRjYXNlIE1FTUNHX1pTV0FQX0I6XG4mIzQzO1x0Y2FzZSBNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0I6XG4gXHRjYXNlIE5SX1NMQUJfUkVDTEFJTUFCTEVfQjpcbiBcdGNhc2UgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0I6XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi41NmVkN2ZmNDhlYzlkZiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTY0LDYgJiM0Mzs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC03ODU1LDExICYjNDM7Nzg1NiwxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbiBlbnVtIHtcbiBcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuIFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG4mIzQzO1x0TUVNT1JZX1JFQ0xBSU1fU09VUkNFLFxuIFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbiB9O1xuIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbiBcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG4mIzQzO1x0eyBNRU1PUllfUkVDTEFJTV9TT1VSQ0UsIFwmIzM0O3NvdXJjZT0lc1wmIzM0O30sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbiB9O1xuIFxuQEAgLTc4NjksOSAmIzQzOzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuIFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuIFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbiYjNDM7XHRib29sIHpzd2FwX3dyaXRlYmFja19vbmx5ID0gZmFsc2U7XG4gXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG4mIzQzO1x0Y2hhciBzb3VyY2VbMTZdO1xuIFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xuIFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuJiM0MztcdHU2NCBucl9ieXRlcztcbiBcbiBcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc4NzksNyAmIzQzOzc4ODUsOCBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRidWYgPSBzdHJzdHJpcChidWYpO1xuIFxuIFx0b2xkX2J1ZiA9IGJ1Zjtcbi1cdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XG4mIzQzO1x0bnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsIFx1MDAyNmJ1Zik7XG4mIzQzO1x0bnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFO1xuIFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03ODk5LDExICYjNDM7NzkwNiwyNiBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG4gXHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6XG4mIzQzO1x0XHRcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKHNvdXJjZSkpIFx1MDAzZT0gc2l6ZW9mKHNvdXJjZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdC8qIE9ubHkgenN3YXAgaXMgc3VwcG9ydGVkIGFzIGEgcmVjbGFpbSBzb3VyY2UgZm9yIG5vdy4gKi9cbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChzb3VyY2UsIFwmIzM0O3pzd2FwXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0enN3YXBfd3JpdGViYWNrX29ubHkgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmICh6c3dhcF93cml0ZWJhY2tfb25seSkge1xuJiM0MztcdFx0Lyogc291cmNlPXpzd2FwIGFuZCBzd2FwcGluZXNzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4mIzQzO1x0XHRpZiAoc3dhcHBpbmVzcyAhPSAtMSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4genN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhtZW1jZywgbnJfYnl0ZXMpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG4gXHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG4gXHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcbiYjNDM7XHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xMDg5LDggJiM0MzsxMDk0LDkgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBcdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4ge1xuIFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgenN3YXBfZW50cnksIGxydSk7XG4tXHRib29sICplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IChib29sICopYXJnO1xuJiM0MztcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnO1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbiBcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuIFxuQEAgLTExMzMsMTAgJiM0MzsxMTM5LDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlXG4tXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJiMzOTt0IGRlcmVmJiMzOTtkIGFnYWluXG4tXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4mIzQzO1x0ICogbmVlZGVkIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZFxuJiM0MztcdCAqIGFnYWluIHVudGlsIGl0IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxuIFx0ICovXG4gXHRzd3BlbnRyeSA9IGVudHJ5LVx1MDAzZXN3cGVudHJ5O1xuJiM0MztcdGxlbmd0aCA9IGVudHJ5LVx1MDAzZWxlbmd0aDtcbiBcbiBcdC8qXG4gXHQgKiBJdCYjMzk7cyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbkBAIC0xMTU1LDEyICYjNDM7MTE2MiwxMyBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb1xuIFx0XHQgKiBpbnRvIHRoZSB3YXJtZXIgcmVnaW9uLiBXZSBzaG91bGQgdGVybWluYXRlIHNocmlua2luZyAoaWYgd2UmIzM5O3JlIGluIHRoZSBkeW5hbWljXG4gXHRcdCAqIHNocmlua2VyIGNvbnRleHQpLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCBcdTAwMjZcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcbiYjNDM7XHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QpIHtcbiBcdFx0XHRyZXQgPSBMUlVfU1RPUDtcbi1cdFx0XHQqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSB0cnVlO1xuJiM0MztcdFx0XHR3YWxrX2FyZy1cdTAwM2VlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR3YWxrX2FyZy1cdTAwM2VieXRlc193cml0dGVuICYjNDM7PSBsZW5ndGg7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTExNjksOCAmIzQzOzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuJiM0MztcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7XG4mIzQzO1x0XHQuYnl0ZXNfd3JpdHRlbiA9IDAsXG4mIzQzO1x0XHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcbiYjNDM7XHR9O1xuIFx0dW5zaWduZWQgbG9uZyBzaHJpbmtfcmV0O1xuLVx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlO1xuIFxuIFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XG4gXHRcdFx0IW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc2MtXHUwMDNlbWVtY2cpKSB7XG5AQCAtMTE3OSw5ICYjNDM7MTE5MCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcdH1cbiBcbiBcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbi1cdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuJiM0MztcdFx0XHUwMDI2d2Fsa19hcmcpO1xuIFxuLVx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuJiM0MztcdGlmICh3YWxrX2FyZy5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNocmlua19yZXQgPyBzaHJpbmtfcmV0IDogU0hSSU5LX1NUT1A7XG5AQCAtMTI3NSw5ICYjNDM7MTI4NiwzMSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIFx0cmV0dXJuIHNocmlua2VyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzOyNkZWZpbmUgTlJfWlNXQVBfV0JfQkFUQ0hcdDY0VUxcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xuJiM0MzsgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxuJiM0MzsgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cbiYjNDM7ICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlclxuJiM0MzsgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcbiYjNDM7ICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXG4mIzQzOyAqIGVudHJpZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoXHUwMDNlPSAwKSwgb3IgLUVOT0VOVFxuJiM0MzsgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHlcbiYjNDM7ICogenN3YXAgTFJVcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcbiB7XG4tXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHdhbGtfYXJnID0ge1xuJiM0MztcdFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxuJiM0MztcdFx0LmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2UsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3RvX3NjYW47XG4mIzQzO1x0aW50IG5pZDtcbiBcbiBcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTEyOTAsMjMgJiM0MzsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGs7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcCB0aGUgc2NhbiBhdCBwZXItbm9kZSBMUlUgbGVuZ3RoIHNvIGVhY2ggZW50cnkgaXMgc2Nhbm5lZFxuJiM0MztcdFx0ICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRucl90b193YWxrID0gbWluKG5yX3JlbWFpbmluZyxcbiYjNDM7XHRcdFx0XHQgbGlzdF9scnVfY291bnRfb25lKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7XG4mIzQzO1x0XHRpZiAoIW5yX3RvX3dhbGspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG5yX3JlbWFpbmluZyAtPSBucl90b193YWxrO1xuJiM0MztcdFx0bGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csIFx1MDAyNnNocmlua19tZW1jZ19jYixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNndhbGtfYXJnLCBcdTAwMjZucl90b193YWxrKTtcbiYjNDM7XHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4mIzQzO1x0XHRucl9yZW1haW5pbmcgJiM0Mzs9IG5yX3RvX3dhbGs7XG4gXG4tXHRcdHNocnVuayAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xuLVx0XHRzY2FubmVkICYjNDM7PSAxIC0gbnJfdG9fd2FsaztcbiYjNDM7XHRcdGlmICghbnJfcmVtYWluaW5nKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbiYjNDM7XHQvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi9cbiYjNDM7XHRpZiAobnJfcmVtYWluaW5nID09IG5yX3RvX3NjYW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuLVx0cmV0dXJuIHNocnVuayA/IDAgOiAtRUFHQUlOO1xuJiM0MztcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXG4mIzQzO3N0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUge1xuJiM0MztcdGludCBzY2FucztcbiYjNDM7XHRpbnQgZmFpbHVyZXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUYWtlIG9uZSBzdGVwIG9mIGEgbWVtY2ctdHJlZSB3cml0ZWJhY2sgd2FsayBkcml2ZW4gYnkgdGhlIGNhbGxlciYjMzk7c1xuJiM0MzsgKiBpdGVyYXRvciwgYW5kIGZvbGQgdGhlIHJlc3VsdCBpbnRvIEBzLCB0aGUgcmV0cnkgYm9va2tlZXBpbmcgc2hhcmVkXG4mIzQzOyAqIGFjcm9zcyBzdGVwcy4gQG1lbWNnIGlzIHRoZSBpdGVyYXRvciYjMzk7cyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2VcbiYjNDM7ICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlclxuJiM0MzsgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcbiYjNDM7ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyB3ZXJlIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxuJiM0MzsgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGJhY2sgKFx1MDAzZT0gMCksIG9yIC1FQlVTWVxuJiM0MzsgKiB3aGVuIHRoZSBjYWxsZXIgc2hvdWxkIGFib3J0IHRoZSB3YWxrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgenN3YXBfc2hyaW5rX29uZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSAqcylcbiYjNDM7e1xuJiM0MztcdGxvbmcgc2hydW5rO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWNoaW5nIGEgTlVMTCBtZW1jZyBtZWFucyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgY29tcGxldGVkLlxuJiM0MztcdCAqIEV4Y2x1ZGUgdGhlIG1lbWNnLWRpc2FibGVkIGNhc2UsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMLCBhbmRcbiYjNDM7XHQgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kXG4mIzQzO1x0XHQgKiBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFzLVx1MDAzZXNjYW5zIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7cy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0cy1cdTAwM2VzY2FucyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4gV2l0aCBtZW1jZ1xuJiM0MztcdCAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXG4mIzQzO1x0ICogd2l0aCBwYWdlcyBpbiB6c3dhcCwgc28gc2tpcCB3aXRob3V0IGNvdW50aW5nIGl0IGFzIGEgY2FuZGlkYXRlLlxuJiM0MztcdCAqIFdpdGggbWVtY2cgZGlzYWJsZWQgdGhlIHJvb3QgTFJVIGlzIHRoZSBvbmx5IHRhcmdldCwgc28gd2Ugc2hvdWxkXG4mIzQzO1x0ICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNocnVuayA9PSAtRU5PRU5UKVxuJiM0MztcdFx0cmV0dXJuIG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSA/IC1FQlVTWSA6IDA7XG4mIzQzO1x0cy1cdTAwM2VzY2FucyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmIChzaHJ1bmsgXHUwMDNjPSAwIFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7cy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNocnVuaztcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVx0aW50IHJldCwgZmFpbHVyZXMgPSAwLCBhdHRlbXB0cyA9IDA7XG4mIzQzO1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHRocjtcbiBcbiBcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xuQEAgLTEzMTgsMTEgJiM0MzsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHQgKiB3cml0ZWJhY2stZGlzYWJsZWQgbWVtY2dzIChtZW1vcnkuenN3YXAud3JpdGViYWNrPTApIGFyZSBub3RcbiBcdCAqIGNhbmRpZGF0ZXMgZm9yIHNocmlua2luZy5cbiBcdCAqXG4tXHQgKiBTaHJpbmtpbmcgd2lsbCBiZSBhYm9ydGVkIGlmIHdlIGVuY291bnRlciB0aGUgZm9sbG93aW5nXG4tXHQgKiBNQVhfUkVDTEFJTV9SRVRSSUVTIHRpbWVzOlxuLVx0ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay5cbi1cdCAqIC0gU2hyaW5raW5nIGEgd3JpdGViYWNrLWNhbmRpZGF0ZSBtZW1jZyBmYWlsZWQuXG4tXHQgKlxuIFx0ICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssXG4gXHQgKiB3aGljaCBjYW4gYmUgbW9kaWZpZWQgYnkgdGhlIG9mZmxpbmUgbWVtY2cgY2xlYW5lclxuIFx0ICogenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKCkuXG5AQCAtMTMzNyw3ICYjNDM7MTQzOSwxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdCAqIG9mZmxpbmUgbWVtY2cgbGVmdCBpbiB6c3dhcF9uZXh0X3NocmluayB3aWxsIGhvbGQgdGhlIHJlZmVyZW5jZVxuIFx0ICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS5cbiBcdCAqL1xuLVx0ZG8ge1xuJiM0MztcdHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpIHtcbiYjNDM7XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHQvKlxuIFx0XHQgKiBTdGFydCBzaHJpbmtpbmcgZnJvbSB0aGUgbmV4dCBtZW1jZyBhZnRlciB6c3dhcF9uZXh0X3Nocmluay5cbiBcdFx0ICogV2hlbiB0aGUgb2ZmbGluZSBjbGVhbmVyIGhhcyBhbHJlYWR5IGFkdmFuY2VkIHRoZSBjdXJzb3IsXG5AQCAtMTM1NiwzNyAmIzQzOzE0NjIsMTIgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRcdH0gd2hpbGUgKG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnpzd2FwX3Nocmlua19sb2NrKTtcbiBcbi1cdFx0aWYgKCFtZW1jZykge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmXG4tXHRcdFx0ICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFhdHRlbXB0cyBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRhdHRlbXB0cyA9IDA7XG4tXHRcdFx0Z290byByZXNjaGVkO1xuLVx0XHR9XG4tXG4tXHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG4mIzQzO1x0XHRyZXQgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKG1lbWNnLCBcdTAwMjZzKTtcbiBcdFx0LyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4gXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLlxuLVx0XHQgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcbi1cdFx0ICogd2l0aCBwYWdlcyBpbiB6c3dhcC4gU2tpcCB0aGlzIHdpdGhvdXQgaW5jcmVtZW50aW5nIGF0dGVtcHRzXG4tXHRcdCAqIGFuZCBmYWlsdXJlcy5cbi1cdFx0ICovXG4tXHRcdGlmIChyZXQgPT0gLUVOT0VOVClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0JiM0MzsmIzQzO2F0dGVtcHRzO1xuLVxuLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbiYjNDM7XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuIFx0XHRcdGJyZWFrO1xuLXJlc2NoZWQ6XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fSB3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcdTAwM2UgdGhyKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkBAIC0xNDkyLDcgJiM0MzsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkge1xuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuLVx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xuJiM0MztcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgbnVtX25vZGVfc3RhdGUoTl9OT1JNQUxfTUVNT1JZKSkgXHUwMDNjPSAwKSB7XG4gXHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRcdGdvdG8gcHV0X29iamNnO1xuIFx0XHR9XG5AQCAtMTYzMiw2ICYjNDM7MTcxMyw1OCBAQCBpbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHMgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7XG4mIzQzO1x0dTY0IGJ5dGVzX3dyaXR0ZW4gPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghYnl0ZXNfdG9fd3JpdGViYWNrKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChieXRlc193cml0dGVuIFx1MDAzYyBieXRlc190b193cml0ZWJhY2spIHtcbiYjNDM7XHRcdGxvbmcgc2hydW5rO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVFI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2UgYSBsb2NhbCBpdGVyYXRvciB0byB3YWxrIHRoZSBtZW1jZyBhbmQgaXRzIG9ubGluZSBkZXNjZW5kYW50c1xuJiM0MztcdFx0ICogaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFVwb24gZXhpdGluZyB0aGUgbG9vcCwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKClcbiYjNDM7XHRcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRpdGVyID0gbWVtX2Nncm91cF9pdGVyKG1lbWNnLCBpdGVyLCBOVUxMKTtcbiYjNDM7XHRcdH0gd2hpbGUgKGl0ZXIgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoaXRlcikpO1xuJiM0MztcbiYjNDM7XHRcdHNocnVuayA9IHpzd2FwX3Nocmlua19vbmVfbWVtY2coaXRlciwgXHUwMDI2cyk7XG4mIzQzO1x0XHRpZiAoc2hydW5rIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGJ5dGVzX3dyaXR0ZW4gJiM0Mzs9IHNocnVuaztcbiYjNDM7XHRcdFx0bW9kX21lbWNnX3N0YXRlKGl0ZXIsIE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwgc2hydW5rKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgdGFrZW4gYnkgbWVtX2Nncm91cF90cnlnZXRfb25saW5lKCkgKi9cbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzaHJ1bmsgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9pdGVyX2JyZWFrKG1lbWNnLCBpdGVyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG4ge1xuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbmluZGV4IDQ5YjM2ZWU3OTE2MDZmLi5kZmQ1ZjI0YjlkOTkwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcbkBAIC02MCw3ICYjNDM7NjAsMTIgQEAgc3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG4gXG4gc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxuIHtcbi1cdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcJiMzNDttZW1vcnkuc3RhdFwmIzM0OywgXCYjMzQ7enN3cHdiXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3pzd3B3YiBcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBnZXRfY2dfcHdiX2J5dGVzKGNvbnN0IGNoYXIgKmNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNnX3JlYWRfa2V5X2xvbmcoY2csIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2IgXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X3pzd3BvdXQoY29uc3QgY2hhciAqY2dyb3VwKVxuQEAgLTM1NSw2ICYjNDM7MzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4ge1xuIFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4mIzQzO1x0bG9uZyBwd2JfYnl0ZXM7XG4gXG4gXHR6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7XG4gXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XG5AQCAtMzYyLDYgJiM0MzszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4mIzQzO1x0cHdiX2J5dGVzID0gZ2V0X2NnX3B3Yl9ieXRlcyhjZ3JvdXApO1xuJiM0MztcdGlmIChwd2JfYnl0ZXMgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCYjMzQ7LCBwd2JfYnl0ZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY2dfcnVuKGNncm91cCwgYXR0ZW1wdF93cml0ZWJhY2ssICh2b2lkICopIFx1MDAyNndiKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTM3OSw2ICYjNDM7MzkxLDE3IEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc29cbiYjNDM7XHQgKiB6c3dwd2JfcHJvYWN0aXZlX2IgbXVzdCBzdGF5IGF0IHplcm8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyXG4mIzQzO1x0ICogd3JpdGViYWNrIHdhcyBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2J5dGVzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2JfYWZ0ZXIgaXMgJWxkLCBleHBlY3RlZCAwXFxuXCYjMzQ7LCBwd2JfYnl0ZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzcwLDYgJiM0Mzs3OTMsMTQxIEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZShjb25zdCBjaGFyICpyb290KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4mIzQzOyAqIDEuIEFsbG9jYXRlIG1lbW9yeS5cbiYjNDM7ICogMi4gUHVzaCBhbGxvY2F0ZWQgbWVtb3J5IGludG8genN3YXAuXG4mIzQzOyAqIDMuIFByb2FjdGl2ZWx5IHdyaXRlIGJhY2sgenN3YXAgcGFnZXMgdG8gc3dhcFxuJiM0MzsgKiAgICB1c2luZyBcJiMzNDtzb3VyY2U9enN3YXBcJiMzNDsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHByb2FjdGl2ZV93cml0ZWJhY2tfd29ya2xvYWQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRsb25nIHBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0O1xuJiM0MztcdGNoYXIgcmVjbGFpbV9jbWRbNjRdO1xuJiM0MztcdGNoYXIgYnVmW3BhZ2VzaXplXTtcbiYjNDM7XHRsb25nIHpzd2FwX3VzYWdlO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1x0Y2hhciAqbWVtO1xuJiM0MztcbiYjNDM7XHRtZW0gPSAoY2hhciAqKW1hbGxvYyhtZW1zaXplKTtcbiYjNDM7XHRpZiAoIW1lbSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBwYWdlc2l6ZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRidWZbaV0gPSBpIFx1MDAzYyBwYWdlc2l6ZSAvIDIgPyAoY2hhcilpIDogMDtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWVtc2l6ZTsgaSAmIzQzOz0gcGFnZXNpemUpXG4mIzQzO1x0XHRtZW1jcHkoXHUwMDI2bWVtW2ldLCBidWYsIHBhZ2VzaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogRXZpY3QgYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLiAqL1xuJiM0MztcdGlmIChjZ193cml0ZV9udW1lcmljKGNncm91cCwgXCYjMzQ7bWVtb3J5LnJlY2xhaW1cJiMzNDssIG1lbXNpemUpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0enN3YXBfdXNhZ2UgPSBjZ19yZWFkX2xvbmcoY2dyb3VwLCBcJiMzNDttZW1vcnkuenN3YXAuY3VycmVudFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHpzd2FwX3VzYWdlIFx1MDAzYz0gMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8genN3YXAgcG9vbCB0byB3cml0ZSBiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xuJiM0MztcdHNucHJpbnRmKHJlY2xhaW1fY21kLCBzaXplb2YocmVjbGFpbV9jbWQpLCBcJiMzNDslbGQgc291cmNlPXpzd2FwXCYjMzQ7LCB6c3dhcF91c2FnZSk7XG4mIzQzO1x0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFwmIzM0O21lbW9yeS5yZWNsYWltXCYjMzQ7LCByZWNsYWltX2NtZCk7XG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiByYyAhPSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWUobWVtKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyhjb25zdCBjaGFyICpjZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciAqIGNvbnN0IGJhZF9pbnB1dHNbXSA9IHtcbiYjNDM7XHRcdFwmIzM0O3NvdXJjZT16c3dhcFwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0OzFNIHNvdXJjZT16c3dhcCBzd2FwcGluZXNzPTYwXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7MU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXhcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDsxTSBzd2FwcGluZXNzPW1heCBzb3VyY2U9enN3YXBcJiMzNDssXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgaSwgcmM7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYmFkX2lucHV0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyYyA9IGNnX3dyaXRlKGNncm91cCwgXCYjMzQ7bWVtb3J5LnJlY2xhaW1cJiMzNDssIGJhZF9pbnB1dHNbaV0pO1xuJiM0MztcdFx0aWYgKHJjICE9IC1FSU5WQUwpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bWVtb3J5LnJlY2xhaW0gJiMzOTslcyYjMzk7OiByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJhZF9pbnB1dHNbaV0sIHJjLCAtRUlOVkFMKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGxvbmcgd2JfYmVmb3JlLCB3Yl9hZnRlcjtcbiYjNDM7XHRsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7XG4mIzQzO1x0bG9uZyB3Yl9kZWx0YSwgcHdiX2JfZGVsdGE7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRjaGFyICp0ZXN0X2dyb3VwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgXCYjMzQ7bWVtb3J5Lnpzd2FwLndyaXRlYmFja1wmIzM0OywgXCYjMzQ7MVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcJiMzNDt6c3dhcF9wcm9hY3RpdmVfdGVzdFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCF0ZXN0X2dyb3VwKVxuJiM0MztcdFx0cmV0dXJuIEtTRlRfRkFJTDtcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKHRlc3RfZ3JvdXApKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG1pc3NpbmcgenN3cHdiX3Byb2FjdGl2ZV9iIHN0YXQgbWVhbnMgdGhlIGtlcm5lbCBsYWNrcyBwcm9hY3RpdmVcbiYjNDM7XHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xuJiM0MztcdHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2JfYmVmb3JlIFx1MDAzYyAwIHx8IHdiX2JlZm9yZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcnVuKHRlc3RfZ3JvdXAsIHByb2FjdGl2ZV93cml0ZWJhY2tfd29ya2xvYWQsIE5VTEwpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHB3Yl9iX2FmdGVyID0gZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKTtcbiYjNDM7XHR3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRpZiAocHdiX2JfYWZ0ZXIgXHUwMDNjIDAgfHwgd2JfYWZ0ZXIgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHdiX2JfZGVsdGEgPSBwd2JfYl9hZnRlciAtIHB3Yl9iX2JlZm9yZTtcbiYjNDM7XHR3Yl9kZWx0YSA9IHdiX2FmdGVyIC0gd2JfYmVmb3JlO1xuJiM0MztcbiYjNDM7XHRpZiAocHdiX2JfZGVsdGEgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt6c3dwd2JfcHJvYWN0aXZlX2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgcHdiX2JfZGVsdGEpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh3Yl9kZWx0YSBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3pzd3B3YiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcXG5cJiMzNDssIHdiX2RlbHRhKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gS1NGVF9QQVNTO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2dfZGVzdHJveSh0ZXN0X2dyb3VwKTtcbiYjNDM7XHRmcmVlKHRlc3RfZ3JvdXApO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbkBAIC03ODMsNiAmIzQzOzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdFQodGVzdF9ub19rbWVtX2J5cGFzcyksXG4gXHRUKHRlc3Rfbm9faW52YXNpdmVfY2dyb3VwX3NocmluayksXG4gXHRUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLFxuJiM0MztcdFQodGVzdF96c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKSxcbiB9O1xuICN1bmRlZiBUXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7enN3YXBfc2hyaW5rX29uZV9tZW1jZyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIHZpYSB0aGUgJiMzOTttZW1vcnkucmVjbGFpbSYjMzk7IGNncm91cCBpbnRlcmZhY2UgdXNpbmcgdGhlICYjMzk7c291cmNlPXpzd2FwJiMzOTsga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU2Y2E4ZWUxYzNiNDAzMTI3MWZjNjE0YzJjMDJjMTM2NzczNWJhNWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0OToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTE0MjUsOSAmIzQzOzE0MjUsMTAgQEAgUEFHRV9TSVpFIG11bHRpcGxlIHdoZW4gcmVhZCBiYWNrLgogCiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLgogCi0JICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgIHN3YXBwaW5lc3MgICAgICAgICAgICBTd2FwcGluZXNzIHZhbHVlIHRvIHJlY2xhaW0gd2l0aAotCSAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CSAgc291cmNlPXpzd2FwICAgICAgICAgIE9ubHkgcGVyZm9ybSBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrCiYjNDM7CSAgPT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAlTcGVjaWZ5aW5nIGEgc3dhcHBpbmVzcyB2YWx1ZSBpbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBwZXJmb3JtCiAJdGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUKQEAgLTE0MzcsNiAmIzQzOzE0MzgsMTkgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC4KIAlUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nCiAJc3dhcHBpbmVzcz1tYXggZXhjbHVzaXZlbHkgcmVjbGFpbXMgYW5vbnltb3VzIG1lbW9yeS4KIAomIzQzOwlUaGUgc291cmNlPXpzd2FwIGtleSBza2lwcyBvcmRpbmFyeSBtZW1vcnkgcmVjbGFpbSBhbmQKJiM0MzsJd3JpdGVzIGJhY2sgcGFnZXMgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSB1bnRpbAomIzQzOwl0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlcwomIzQzOwlhcmUgZm91bmQuIFRoaXMgaXMgdXNlZnVsIHRvIHByb2FjdGl2ZWx5IG9mZmxvYWQgY29sZCBjb21wcmVzc2VkCiYjNDM7CWRhdGEgZnJvbSB0aGUgenN3YXAgcG9vbCB0byB0aGUgc3dhcCBkZXZpY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlCiYjNDM7CWlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlCiYjNDM7CWNvbWJpbmVkIHdpdGggc3dhcHBpbmVzczsgc3BlY2lmeWluZyBib3RoIHJldHVybnMgLUVJTlZBTC4KJiM0MzsKJiM0MzsJRXhhbXBsZTo6CiYjNDM7CiYjNDM7CSAgIyBXcml0ZWJhY2sgdXAgdG8gMTBNQiBvZiBjb21wcmVzc2VkIGRhdGEgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwCiYjNDM7CSAgZWNobyAmIzM0OzEwTSBzb3VyY2U9enN3YXAmIzM0OyAmZ3Q7IG1lbW9yeS5yZWNsYWltCiYjNDM7CiAgIG1lbW9yeS5wZWFrCiAJQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLgogCkBAIC0xNzM0LDYgJiM0MzsxNzQ4LDEwIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuCiAJICB6c3dwd2IKIAkJTnVtYmVyIG9mIHBhZ2VzIHdyaXR0ZW4gZnJvbSB6c3dhcCB0byBzd2FwLgogCiYjNDM7CSAgenN3cHdiX3Byb2FjdGl2ZV9iCiYjNDM7CQlCeXRlcyBvZiBjb21wcmVzc2VkIGRhdGEgcHJvYWN0aXZlbHkgd3JpdHRlbiBiYWNrIGZyb20KJiM0MzsJCXpzd2FwIHRvIHN3YXAgdmlhIHRoZSBtZW1vcnkucmVjbGFpbSBzb3VyY2U9enN3YXAga2V5LgomIzQzOwogCSAgenN3YXBfaW5jb21wCiAJCU51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwCiAJCXdpdGhvdXQgY29tcHJlc3Npb24uIFRoZXNlIHBhZ2VzIGNvdWxkIG5vdCBiZSBjb21wcmVzc2VkIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0CmluZGV4IDI0NjQ0MjVjNzgzZGUyLi5iNDliOGMxMzAzODkwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3QKQEAgLTEzMSw3ICYjNDM7MTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjoKICAgZWNobyBZICZndDsgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkCiAKIFRoaXMgY2FuIGJlIGVuYWJsZWQgYXQgdGhlIGJvb3QgdGltZSBpZiBgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYGAgaXMKLXNlbGVjdGVkLgomIzQzO3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvCiYjNDM7YmFja2luZyBzd2FwIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4KJiM0MzsKJiM0MztJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljCiYjNDM7bWVtb3J5IGNncm91cCB3aXRob3V0IGludm9raW5nIHN0YW5kYXJkIHBhZ2UgcmVjbGFpbSwgaXQgY2FuIGJlIGRvbmUgYXMgZm9sbG93czo6CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDsxME0gc291cmNlPXpzd2FwJiMzNDsgJmd0OyAvc3lzL2ZzL2Nncm91cC8mbHQ7Y2dyb3VwLW5hbWUmZ3Q7L21lbW9yeS5yZWNsYWltCiYjNDM7CiYjNDM7Qm90aCBvZiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUgYXJlIHN1YmplY3QgdG8gdGhlIGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgCiYjNDM7Y29udHJvbC4gVGhpcyBtZWFucyB0aGF0IGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgIGNhbiBwcmV2ZW50IGFsbCB6c3dhcCB3cml0ZWJhY2suCiAKIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyCiBvZiBwYWdlcyBzdG9yZWQsIHNhbWUtdmFsdWUgZmlsbGVkIHBhZ2VzIGFuZCB2YXJpb3VzIGNvdW50ZXJzIGZvciB0aGUgcmVhc29ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC00MCw2ICYjNDM7NDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7CiAJTUVNQ0dfWlNXQVBfQiwKIAlNRU1DR19aU1dBUFBFRCwKIAlNRU1DR19aU1dBUF9JTkNPTVAsCiYjNDM7CU1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwKIAlNRU1DR19OUl9TVEFULAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDcgQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7aW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJICAgIHU2NCBieXRlc190b193cml0ZWJhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGQyMGZmYzgyNzMwNmU5Li5kODFjMzQ0ODRiY2EyOCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNDMzLDYgJiM0Mzs0MzMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3N0YXRfaXRlbXNbXSA9IHsKIAlNRU1DR19aU1dBUF9CLAogCU1FTUNHX1pTV0FQUEVELAogCU1FTUNHX1pTV0FQX0lOQ09NUCwKJiM0MzsJTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLAogfTsKIAogI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpCkBAIC0xNTU4LDYgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHsKIAl7ICYjMzQ7enN3YXAmIzM0OywJCQlNRU1DR19aU1dBUF9CCQkJfSwKIAl7ICYjMzQ7enN3YXBwZWQmIzM0OywJCQlNRU1DR19aU1dBUFBFRAkJCX0sCiAJeyAmIzM0O3pzd2FwX2luY29tcCYjMzQ7LAkJTUVNQ0dfWlNXQVBfSU5DT01QCQl9LAomIzQzOwl7ICYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iJiMzNDssCQlNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IJfSwKICNlbmRpZgogCXsgJiMzNDtmaWxlX21hcHBlZCYjMzQ7LAkJTlJfRklMRV9NQVBQRUQJCQl9LAogCXsgJiMzNDtmaWxlX2RpcnR5JiMzNDssCQkJTlJfRklMRV9ESVJUWQkJCX0sCkBAIC0xNjE0LDYgJiM0MzsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pCiAJc3dpdGNoIChpdGVtKSB7CiAJY2FzZSBNRU1DR19QRVJDUFVfQjoKIAljYXNlIE1FTUNHX1pTV0FQX0I6CiYjNDM7CWNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COgogCWNhc2UgTlJfU0xBQl9SRUNMQUlNQUJMRV9COgogCWNhc2UgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0I6CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02NCw2ICYjNDM7NjQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3N5c2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtNzg1NSwxMSAmIzQzOzc4NTYsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssCiBlbnVtIHsKIAlNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCwKIAlNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwKJiM0MzsJTUVNT1JZX1JFQ0xBSU1fU09VUkNFLAogCU1FTU9SWV9SRUNMQUlNX05VTEwsCiB9Owogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgJiMzNDtzd2FwcGluZXNzPSVkJiMzNDt9LAogCXsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsICYjMzQ7c3dhcHBpbmVzcz1tYXgmIzM0O30sCiYjNDM7CXsgTUVNT1JZX1JFQ0xBSU1fU09VUkNFLCAmIzM0O3NvdXJjZT0lcyYjMzQ7fSwKIAl7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSwKIH07CiAKQEAgLTc4NjksOSAmIzQzOzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLAogCXVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUzsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7CiAJaW50IHN3YXBwaW5lc3MgPSAtMTsKJiM0MzsJYm9vbCB6c3dhcF93cml0ZWJhY2tfb25seSA9IGZhbHNlOwogCWNoYXIgKm9sZF9idWYsICpzdGFydDsKJiM0MzsJY2hhciBzb3VyY2VbMTZdOwogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAlnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7CiYjNDM7CXU2NCBucl9ieXRlczsKIAogCWlmICghYnVmIHx8ICghbWVtY2cgJmFtcDsmYW1wOyAhcGdkYXQpIHx8IChtZW1jZyAmYW1wOyZhbXA7IHBnZGF0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03ODc5LDcgJiM0Mzs3ODg1LDggQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLAogCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7CiAKIAlvbGRfYnVmID0gYnVmOwotCW5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsICZhbXA7YnVmKSAvIFBBR0VfU0laRTsKJiM0MzsJbnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsICZhbXA7YnVmKTsKJiM0MzsJbnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFOwogCWlmIChidWYgPT0gb2xkX2J1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc4OTksMTEgJiM0Mzs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZiwKIAkJY2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDoKIAkJCXN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6CiYjNDM7CQkJaWYgKG1hdGNoX3N0cmxjcHkoc291cmNlLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihzb3VyY2UpKSAmZ3Q7PSBzaXplb2Yoc291cmNlKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJLyogT25seSB6c3dhcCBpcyBzdXBwb3J0ZWQgYXMgYSByZWNsYWltIHNvdXJjZSBmb3Igbm93LiAqLwomIzQzOwkJCWlmIChzdHJjbXAoc291cmNlLCAmIzM0O3pzd2FwJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl6c3dhcF93cml0ZWJhY2tfb25seSA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAomIzQzOwlpZiAoenN3YXBfd3JpdGViYWNrX29ubHkpIHsKJiM0MzsJCS8qIHNvdXJjZT16c3dhcCBhbmQgc3dhcHBpbmVzcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLwomIzQzOwkJaWYgKHN3YXBwaW5lc3MgIT0gLTEpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4genN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhtZW1jZywgbnJfYnl0ZXMpOwomIzQzOwl9CiYjNDM7CiAJd2hpbGUgKG5yX3JlY2xhaW1lZCAmbHQ7IG5yX3RvX3JlY2xhaW0pIHsKIAkJLyogV2lsbCBjb252ZXJnZSBvbiB6ZXJvLCBidXQgcmVjbGFpbSBlbmZvcmNlcyBhIG1pbmltdW0gKi8KIAkJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDsKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0xNjAsNiAmIzQzOzE2MCwxMSBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MztzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuOwomIzQzOwlib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlOwomIzQzO307CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xMDg5LDggJiM0MzsxMDk0LDkgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X28KIAkJCQkgICAgICAgdm9pZCAqYXJnKQogewogCXN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpOwotCWJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnOwogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwomIzQzOwl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTsKIAlpbnQgd3JpdGViYWNrX3Jlc3VsdDsKIApAQCAtMTEzMywxMCAmIzQzOzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X28KIAogCS8qCiAJICogT25jZSB0aGUgbHJ1IGxvY2sgaXMgZHJvcHBlZCwgdGhlIGVudHJ5IG1pZ2h0IGdldCBmcmVlZC4gVGhlCi0JICogc3dwZW50cnkgaXMgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZCBhZ2FpbgotCSAqIHVudGlsIHRoZSBlbnRyeSBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS4KJiM0MzsJICogbmVlZGVkIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBzdGFjaywgYW5kIGVudHJ5IGlzbiYjMzk7dCBkZXJlZiYjMzk7ZAomIzQzOwkgKiBhZ2FpbiB1bnRpbCBpdCBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSBhbGl2ZSBpbiB0aGUgdHJlZS4KIAkgKi8KIAlzd3BlbnRyeSA9IGVudHJ5LSZndDtzd3BlbnRyeTsKJiM0MzsJbGVuZ3RoID0gZW50cnktJmd0O2xlbmd0aDsKIAogCS8qCiAJICogSXQmIzM5O3Mgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSB3ZSByZXR1cm4gZWl0aGVyCkBAIC0xMTU1LDEyICYjNDM7MTE2MiwxMyBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfbwogCQkgKiBpbnRvIHRoZSB3YXJtZXIgcmVnaW9uLiBXZSBzaG91bGQgdGVybWluYXRlIHNocmlua2luZyAoaWYgd2UmIzM5O3JlIGluIHRoZSBkeW5hbWljCiAJCSAqIHNocmlua2VyIGNvbnRleHQpLgogCQkgKi8KLQkJaWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCAmYW1wOyZhbXA7IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7CiYjNDM7CQlpZiAod3JpdGViYWNrX3Jlc3VsdCA9PSAtRUVYSVNUKSB7CiAJCQlyZXQgPSBMUlVfU1RPUDsKLQkJCSplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IHRydWU7CiYjNDM7CQkJd2Fsa19hcmctJmd0O2VuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTsKIAkJfQogCX0gZWxzZSB7CiAJCXpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcyYjNDM7JiM0Mzs7CiYjNDM7CQl3YWxrX2FyZy0mZ3Q7Ynl0ZXNfd3JpdHRlbiAmIzQzOz0gbGVuZ3RoOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMTY5LDggJiM0MzsxMTc3LDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7CiYjNDM7CQkuYnl0ZXNfd3JpdHRlbiA9IDAsCiYjNDM7CQkuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSwKJiM0MzsJfTsKIAl1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7Ci0JYm9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlOwogCiAJaWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8CiAJCQkhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy0mZ3Q7bWVtY2cpKSB7CkBAIC0xMTc5LDkgJiM0MzsxMTkwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCX0KIAogCXNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsaygmYW1wO3pzd2FwX2xpc3RfbHJ1LCBzYywgJmFtcDtzaHJpbmtfbWVtY2dfY2IsCi0JCSZhbXA7ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpOwomIzQzOwkJJmFtcDt3YWxrX2FyZyk7CiAKLQlpZiAoZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpCiYjNDM7CWlmICh3YWxrX2FyZy5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSkKIAkJcmV0dXJuIFNIUklOS19TVE9QOwogCiAJcmV0dXJuIHNocmlua19yZXQgPyBzaHJpbmtfcmV0IDogU0hSSU5LX1NUT1A7CkBAIC0xMjc1LDkgJiM0MzsxMjg2LDMxIEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpCiAJcmV0dXJuIHNocmlua2VyOwogfQogCi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7I2RlZmluZSBOUl9aU1dBUF9XQl9CQVRDSAk2NFVMCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTY2FuIHVwIHRvIEBucl90b19zY2FuIHBhZ2VzIGFjcm9zcyB0aGUgcGVyLW5vZGUgenN3YXAgTFJVcyBvZiBAbWVtY2cKJiM0MzsgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy4KJiM0MzsgKgomIzQzOyAqIFNpbmNlIHRoZSBzZWNvbmQtY2hhbmNlIGFsZ29yaXRobSByb3RhdGVzIHJlZmVyZW5jZWQgZW50cmllcyB0byB0aGUKJiM0MzsgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc28KJiM0MzsgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyCiYjNDM7ICogdG8gaGFuZGxlIHJldHJpZXMsIGRlY2lkaW5nIHdoZXRoZXIgdG8gc2NhbiBhbm90aGVyIG1lbWNnIHRvIGNvbXBsZXRlCiYjNDM7ICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwCiYjNDM7ICogZW50cmllcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoJmd0Oz0gMCksIG9yIC1FTk9FTlQKJiM0MzsgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkKJiM0MzsgKiB6c3dhcCBMUlVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbikKIHsKLQlpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDsKJiM0MzsJc3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHsKJiM0MzsJCS5ieXRlc193cml0dGVuID0gMCwKJiM0MzsJCS5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3RvX3NjYW47CiYjNDM7CWludCBuaWQ7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEyOTAsMjMgJiM0MzsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGs7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkCiYjNDM7CQkgKiBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuCiYjNDM7CQkgKi8KJiM0MzsJCW5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLAomIzQzOwkJCQkgbGlzdF9scnVfY291bnRfb25lKCZhbXA7enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2cpKTsKJiM0MzsJCWlmICghbnJfdG9fd2FsaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW5yX3JlbWFpbmluZyAtPSBucl90b193YWxrOwomIzQzOwkJbGlzdF9scnVfd2Fsa19vbmUoJmFtcDt6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgJmFtcDtzaHJpbmtfbWVtY2dfY2IsCiYjNDM7CQkJCSAgJmFtcDt3YWxrX2FyZywgJmFtcDtucl90b193YWxrKTsKJiM0MzsJCS8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovCiYjNDM7CQlucl9yZW1haW5pbmcgJiM0Mzs9IG5yX3RvX3dhbGs7CiAKLQkJc2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZSgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLAotCQkJCQkgICAgJmFtcDtzaHJpbmtfbWVtY2dfY2IsIE5VTEwsICZhbXA7bnJfdG9fd2Fsayk7Ci0JCXNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrOwomIzQzOwkJaWYgKCFucl9yZW1haW5pbmcpCiYjNDM7CQkJYnJlYWs7CiAJfQogCi0JaWYgKCFzY2FubmVkKQomIzQzOwkvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi8KJiM0MzsJaWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjsKJiM0MzsJcmV0dXJuIHdhbGtfYXJnLmJ5dGVzX3dyaXR0ZW47CiYjNDM7fQomIzQzOwomIzQzOy8qIFRyYWNrIHByb2dyZXNzIG9mIGEgbWVtY2ctdHJlZSB3cml0ZWJhY2sgd2Fsay4gKi8KJiM0MztzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHsKJiM0MzsJaW50IHNjYW5zOwomIzQzOwlpbnQgZmFpbHVyZXM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJiMzOTtzCiYjNDM7ICogaXRlcmF0b3IsIGFuZCBmb2xkIHRoZSByZXN1bHQgaW50byBAcywgdGhlIHJldHJ5IGJvb2trZWVwaW5nIHNoYXJlZAomIzQzOyAqIGFjcm9zcyBzdGVwcy4gQG1lbWNnIGlzIHRoZSBpdGVyYXRvciYjMzk7cyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2UKJiM0MzsgKiBpdCBoYXMgd3JhcHBlZCBhcm91bmQgYWZ0ZXIgYSBmdWxsIHBhc3Mgb3ZlciB0aGUgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlcgomIzQzOyAqIGVuY291bnRlcmluZyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBNQVhfUkVDTEFJTV9SRVRSSUVTIHRpbWVzOgomIzQzOyAqIC0gTm8gd3JpdGViYWNrLWNhbmRpZGF0ZSBtZW1jZ3Mgd2VyZSBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay4KJiM0MzsgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrICgmZ3Q7PSAwKSwgb3IgLUVCVVNZCiYjNDM7ICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyB6c3dhcF9zaHJpbmtfb25lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSAqcykKJiM0Mzt7CiYjNDM7CWxvbmcgc2hydW5rOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFjaGluZyBhIE5VTEwgbWVtY2cgbWVhbnMgYSBmdWxsIGhpZXJhcmNoeSBwYXNzIGNvbXBsZXRlZC4KJiM0MzsJICogRXhjbHVkZSB0aGUgbWVtY2ctZGlzYWJsZWQgY2FzZSwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEwsIGFuZAomIzQzOwkgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2cgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kCiYjNDM7CQkgKiBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFzLSZndDtzY2FucyAmYW1wOyZhbXA7ICYjNDM7JiM0MztzLSZndDtmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQlzLSZndDtzY2FucyA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzaHJ1bmsgPSBzaHJpbmtfbWVtY2cobWVtY2csIE5SX1pTV0FQX1dCX0JBVENIKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLiBXaXRoIG1lbWNnCiYjNDM7CSAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnCiYjNDM7CSAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS4KJiM0MzsJICogV2l0aCBtZW1jZyBkaXNhYmxlZCB0aGUgcm9vdCBMUlUgaXMgdGhlIG9ubHkgdGFyZ2V0LCBzbyB3ZSBzaG91bGQKJiM0MzsJICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2hydW5rID09IC1FTk9FTlQpCiYjNDM7CQlyZXR1cm4gbWVtX2Nncm91cF9kaXNhYmxlZCgpID8gLUVCVVNZIDogMDsKJiM0MzsJcy0mZ3Q7c2NhbnMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoc2hydW5rICZsdDs9IDAgJmFtcDsmYW1wOyAmIzQzOyYjNDM7cy0mZ3Q7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldHVybiBzaHJ1bms7CiB9CiAKIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKLQlpbnQgcmV0LCBmYWlsdXJlcyA9IDAsIGF0dGVtcHRzID0gMDsKJiM0MzsJc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307CiAJdW5zaWduZWQgbG9uZyB0aHI7CiAKIAkvKiBSZWNsYWltIGRvd24gdG8gdGhlIGFjY2VwdCB0aHJlc2hvbGQgKi8KQEAgLTEzMTgsMTEgJiM0MzsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJICogd3JpdGViYWNrLWRpc2FibGVkIG1lbWNncyAobWVtb3J5Lnpzd2FwLndyaXRlYmFjaz0wKSBhcmUgbm90CiAJICogY2FuZGlkYXRlcyBmb3Igc2hyaW5raW5nLgogCSAqCi0JICogU2hyaW5raW5nIHdpbGwgYmUgYWJvcnRlZCBpZiB3ZSBlbmNvdW50ZXIgdGhlIGZvbGxvd2luZwotCSAqIE1BWF9SRUNMQUlNX1JFVFJJRVMgdGltZXM6Ci0JICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay4KLQkgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLgotCSAqCiAJICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssCiAJICogd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGJ5IHRoZSBvZmZsaW5lIG1lbWNnIGNsZWFuZXIKIAkgKiB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoKS4KQEAgLTEzMzcsNyAmIzQzOzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJICogb2ZmbGluZSBtZW1jZyBsZWZ0IGluIHpzd2FwX25leHRfc2hyaW5rIHdpbGwgaG9sZCB0aGUgcmVmZXJlbmNlCiAJICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS4KIAkgKi8KLQlkbyB7CiYjNDM7CXdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpICZndDsgdGhyKSB7CiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CQlsb25nIHJldDsKJiM0MzsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCQkvKgogCQkgKiBTdGFydCBzaHJpbmtpbmcgZnJvbSB0aGUgbmV4dCBtZW1jZyBhZnRlciB6c3dhcF9uZXh0X3Nocmluay4KIAkJICogV2hlbiB0aGUgb2ZmbGluZSBjbGVhbmVyIGhhcyBhbHJlYWR5IGFkdmFuY2VkIHRoZSBjdXJzb3IsCkBAIC0xMzU2LDM3ICYjNDM7MTQ2MiwxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAkJfSB3aGlsZSAobWVtY2cgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7enN3YXBfc2hyaW5rX2xvY2spOwogCi0JCWlmICghbWVtY2cpIHsKLQkJCS8qCi0JCQkgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWYKLQkJCSAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLgotCQkJICovCi0JCQlpZiAoIWF0dGVtcHRzICZhbXA7JmFtcDsgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpCi0JCQkJYnJlYWs7Ci0KLQkJCWF0dGVtcHRzID0gMDsKLQkJCWdvdG8gcmVzY2hlZDsKLQkJfQotCi0JCXJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7CiYjNDM7CQlyZXQgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKG1lbWNnLCAmYW1wO3MpOwogCQkvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi8KIAkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwotCi0JCS8qCi0JCSAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4KLQkJICogVGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnCi0JCSAqIHdpdGggcGFnZXMgaW4genN3YXAuIFNraXAgdGhpcyB3aXRob3V0IGluY3JlbWVudGluZyBhdHRlbXB0cwotCQkgKiBhbmQgZmFpbHVyZXMuCi0JCSAqLwotCQlpZiAocmV0ID09IC1FTk9FTlQpCi0JCQljb250aW51ZTsKLQkJJiM0MzsmIzQzO2F0dGVtcHRzOwotCi0JCWlmIChyZXQgJmFtcDsmYW1wOyAmIzQzOyYjNDM7ZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUykKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQogCQkJYnJlYWs7Ci1yZXNjaGVkOgotCQljb25kX3Jlc2NoZWQoKTsKLQl9IHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpICZndDsgdGhyKTsKJiM0MzsJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDkyLDcgJiM0MzsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJaWYgKG9iamNnICZhbXA7JmFtcDsgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkgewogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwotCQlpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkgewomIzQzOwkJaWYgKHNocmlua19tZW1jZyhtZW1jZywgbnVtX25vZGVfc3RhdGUoTl9OT1JNQUxfTUVNT1JZKSkgJmx0Oz0gMCkgewogCQkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQkJZ290byBwdXRfb2JqY2c7CiAJCX0KQEAgLTE2MzIsNiAmIzQzOzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO2ludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgcyA9IHt9OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7CiYjNDM7CXU2NCBieXRlc193cml0dGVuID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl3aGlsZSAoYnl0ZXNfd3JpdHRlbiAmbHQ7IGJ5dGVzX3RvX3dyaXRlYmFjaykgewomIzQzOwkJbG9uZyBzaHJ1bms7CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IC1FSU5UUjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVc2UgYSBsb2NhbCBpdGVyYXRvciB0byB3YWxrIHRoZSBtZW1jZyBhbmQgaXRzIG9ubGluZSBkZXNjZW5kYW50cwomIzQzOwkJICogaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFVwb24gZXhpdGluZyB0aGUgbG9vcCwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKCkKJiM0MzsJCSAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS4KJiM0MzsJCSAqLwomIzQzOwkJZG8gewomIzQzOwkJCWl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIobWVtY2csIGl0ZXIsIE5VTEwpOwomIzQzOwkJfSB3aGlsZSAoaXRlciAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoaXRlcikpOwomIzQzOwomIzQzOwkJc2hydW5rID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhpdGVyLCAmYW1wO3MpOwomIzQzOwkJaWYgKHNocnVuayAmZ3Q7IDApIHsKJiM0MzsJCQlieXRlc193cml0dGVuICYjNDM7PSBzaHJ1bms7CiYjNDM7CQkJbW9kX21lbWNnX3N0YXRlKGl0ZXIsIE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQiwgc2hydW5rKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqLwomIzQzOwkJbWVtX2Nncm91cF9wdXQoaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoc2hydW5rID09IC1FQlVTWSkgewomIzQzOwkJCXJldCA9IC1FQUdBSU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9pdGVyX2JyZWFrKG1lbWNnLCBpdGVyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKQogewogCXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMKQEAgLTYwLDcgJiM0Mzs2MCwxMiBAQCBzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSkKIAogc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKQogewotCXJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7enN3cHdiJiMzNDspOwomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3B3YiAmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGdldF9jZ19wd2JfYnl0ZXMoY29uc3QgY2hhciAqY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYiAmIzM0Oyk7CiB9CiAKIHN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cCkKQEAgLTM1NSw2ICYjNDM7MzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YikKIHsKIAlsb25nIHpzd3B3Yl9iZWZvcmUsIHpzd3B3Yl9hZnRlcjsKJiM0MzsJbG9uZyBwd2JfYnl0ZXM7CiAKIAl6c3dwd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KGNncm91cCk7CiAJaWYgKHpzd3B3Yl9iZWZvcmUgIT0gMCkgewpAQCAtMzYyLDYgJiM0MzszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKQogCQlyZXR1cm4gLTE7CiAJfQogCiYjNDM7CXB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTsKJiM0MzsJaWYgKHB3Yl9ieXRlcyAmZ3Q7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iX2JlZm9yZSA9ICVsZCBpbnN0ZWFkIG9mIDBcbiYjMzQ7LCBwd2JfYnl0ZXMpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiAJaWYgKGNnX3J1bihjZ3JvdXAsIGF0dGVtcHRfd3JpdGViYWNrLCAodm9pZCAqKSAmYW1wO3diKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0zNzksNiAmIzQzOzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpCiAJCXJldHVybiAtMTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc28KJiM0MzsJICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgomIzQzOwkgKiB3cml0ZWJhY2sgd2FzIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7CiYjNDM7CWlmIChwd2JfYnl0ZXMgJmd0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3pzd3B3Yl9wcm9hY3RpdmVfYl9hZnRlciBpcyAlbGQsIGV4cGVjdGVkIDBcbiYjMzQ7LCBwd2JfYnl0ZXMpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3MCw2ICYjNDM7NzkzLDE0MSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBUcmlnZ2VyIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgd2l0aCB0aGUgZm9sbG93aW5nIHN0ZXBzOgomIzQzOyAqIDEuIEFsbG9jYXRlIG1lbW9yeS4KJiM0MzsgKiAyLiBQdXNoIGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC4KJiM0MzsgKiAzLiBQcm9hY3RpdmVseSB3cml0ZSBiYWNrIHpzd2FwIHBhZ2VzIHRvIHN3YXAKJiM0MzsgKiAgICB1c2luZyAmIzM0O3NvdXJjZT16c3dhcCYjMzQ7LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcHJvYWN0aXZlX3dyaXRlYmFja193b3JrbG9hZChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CXNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0OwomIzQzOwljaGFyIHJlY2xhaW1fY21kWzY0XTsKJiM0MzsJY2hhciBidWZbcGFnZXNpemVdOwomIzQzOwlsb25nIHpzd2FwX3VzYWdlOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCByYzsKJiM0MzsJY2hhciAqbWVtOwomIzQzOwomIzQzOwltZW0gPSAoY2hhciAqKW1hbGxvYyhtZW1zaXplKTsKJiM0MzsJaWYgKCFtZW0pCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHBhZ2VzaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCWJ1ZltpXSA9IGkgJmx0OyBwYWdlc2l6ZSAvIDIgPyAoY2hhcilpIDogMDsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBtZW1zaXplOyBpICYjNDM7PSBwYWdlc2l6ZSkKJiM0MzsJCW1lbWNweSgmYW1wO21lbVtpXSwgYnVmLCBwYWdlc2l6ZSk7CiYjNDM7CiYjNDM7CS8qIEV2aWN0IGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC4gKi8KJiM0MzsJaWYgKGNnX3dyaXRlX251bWVyaWMoY2dyb3VwLCAmIzM0O21lbW9yeS5yZWNsYWltJiMzNDssIG1lbXNpemUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0ZhaWxlZCB0byBwdXNoIHBhZ2VzIGludG8genN3YXBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgJiMzNDttZW1vcnkuenN3YXAuY3VycmVudCYjMzQ7KTsKJiM0MzsJaWYgKHpzd2FwX3VzYWdlICZsdDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8genN3YXAgcG9vbCB0byB3cml0ZSBiYWNrXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUcmlnZ2VyIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2suICovCiYjNDM7CXNucHJpbnRmKHJlY2xhaW1fY21kLCBzaXplb2YocmVjbGFpbV9jbWQpLCAmIzM0OyVsZCBzb3VyY2U9enN3YXAmIzM0OywgenN3YXBfdXNhZ2UpOwomIzQzOwlyYyA9IGNnX3dyaXRlKGNncm91cCwgJiMzNDttZW1vcnkucmVjbGFpbSYjMzQ7LCByZWNsYWltX2NtZCk7CiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHJjICE9IC1FQUdBSU4pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7cHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmYWlsZWQ6ICVkXG4mIzM0OywgcmMpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MztvdXQ6CiYjNDM7CWZyZWUobWVtKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHMoY29uc3QgY2hhciAqY2dyb3VwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNoYXIgKiBjb25zdCBiYWRfaW5wdXRzW10gPSB7CiYjNDM7CQkmIzM0O3NvdXJjZT16c3dhcCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz02MCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzd2FwcGluZXNzPTYwIHNvdXJjZT16c3dhcCYjMzQ7LAomIzQzOwkJJiMzNDsxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXgmIzM0OywKJiM0MzsJCSYjMzQ7MU0gc3dhcHBpbmVzcz1tYXggc291cmNlPXpzd2FwJiMzNDssCiYjNDM7CX07CiYjNDM7CWludCBpLCByYzsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoYmFkX2lucHV0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyYyA9IGNnX3dyaXRlKGNncm91cCwgJiMzNDttZW1vcnkucmVjbGFpbSYjMzQ7LCBiYWRfaW5wdXRzW2ldKTsKJiM0MzsJCWlmIChyYyAhPSAtRUlOVkFMKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkucmVjbGFpbSAmIzM5OyVzJiMzOTs6IHJldHVybmVkICVkLCBleHBlY3RlZCAlZFxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBiYWRfaW5wdXRzW2ldLCByYywgLUVJTlZBTCk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJbG9uZyB3Yl9iZWZvcmUsIHdiX2FmdGVyOwomIzQzOwlsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7CiYjNDM7CWxvbmcgd2JfZGVsdGEsIHB3Yl9iX2RlbHRhOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9GQUlMOwomIzQzOwljaGFyICp0ZXN0X2dyb3VwOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgJiMzNDttZW1vcnkuenN3YXAud3JpdGViYWNrJiMzNDssICYjMzQ7MSYjMzQ7KSkKJiM0MzsJCXJldHVybiBLU0ZUX1NLSVA7CiYjNDM7CiYjNDM7CXRlc3RfZ3JvdXAgPSBjZ19uYW1lKHJvb3QsICYjMzQ7enN3YXBfcHJvYWN0aXZlX3Rlc3QmIzM0Oyk7CiYjNDM7CWlmICghdGVzdF9ncm91cCkKJiM0MzsJCXJldHVybiBLU0ZUX0ZBSUw7CiYjNDM7CWlmIChjZ19jcmVhdGUodGVzdF9ncm91cCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJLyoKJiM0MzsJICogQSBtaXNzaW5nIHpzd3B3Yl9wcm9hY3RpdmVfYiBzdGF0IG1lYW5zIHRoZSBrZXJuZWwgbGFja3MgcHJvYWN0aXZlCiYjNDM7CSAqIHdyaXRlYmFjayBzdXBwb3J0LCBzbyBza2lwIHJhdGhlciB0aGFuIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IEtTRlRfU0tJUDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmIChjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHModGVzdF9ncm91cCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfYmVmb3JlID0gZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKTsKJiM0MzsJd2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApOwomIzQzOwlpZiAocHdiX2JfYmVmb3JlICZsdDsgMCB8fCB3Yl9iZWZvcmUgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChjZ19ydW4odGVzdF9ncm91cCwgcHJvYWN0aXZlX3dyaXRlYmFja193b3JrbG9hZCwgTlVMTCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfYWZ0ZXIgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApOwomIzQzOwl3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTsKJiM0MzsJaWYgKHB3Yl9iX2FmdGVyICZsdDsgMCB8fCB3Yl9hZnRlciAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHdiX2JfZGVsdGEgPSBwd2JfYl9hZnRlciAtIHB3Yl9iX2JlZm9yZTsKJiM0MzsJd2JfZGVsdGEgPSB3Yl9hZnRlciAtIHdiX2JlZm9yZTsKJiM0MzsKJiM0MzsJaWYgKHB3Yl9iX2RlbHRhICZsdDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7enN3cHdiX3Byb2FjdGl2ZV9iIGRpZCBub3QgaW5jcmVhc2U6IGRlbHRhPSVsZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIHB3Yl9iX2RlbHRhKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmICh3Yl9kZWx0YSAmbHQ7PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3pzd3B3YiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcbiYjMzQ7LCB3Yl9kZWx0YSk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBLU0ZUX1BBU1M7CiYjNDM7b3V0OgomIzQzOwljZ19kZXN0cm95KHRlc3RfZ3JvdXApOwomIzQzOwlmcmVlKHRlc3RfZ3JvdXApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVCh4KSB7IHgsICN4IH0KIHN0cnVjdCB6c3dhcF90ZXN0IHsKIAlpbnQgKCpmbikoY29uc3QgY2hhciAqcm9vdCk7CkBAIC03ODMsNiAmIzQzOzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHsKIAlUKHRlc3Rfbm9fa21lbV9ieXBhc3MpLAogCVQodGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKSwKIAlUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLAomIzQzOwlUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksCiB9OwogI3VuZGVmIFQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBac3dhcCBXcml0ZWJhY2sgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB0aHJvdWdoIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggYHNvdXJjZT16c3dhcGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGxldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzLiBJdCYjMzk7cyB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdGApIHRvIHJlZmxlY3QgdGhpcyBuZXcgY2FwYWJpbGl0eSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyAoYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYGluY2x1ZGUvbGludXgvenN3YXAuaGApIGFuZCBjb3JlIGltcGxlbWVudGF0aW9uIGZpbGVzIChgbW0vbWVtY29udHJvbC5jYCwgYG1tL3Ztc2Nhbi5jYCwgYG1tL3pzd2FwLmNgKS4gVGhlcmUmIzM5O3MgZXZlbiBhIHRlc3Qgc3VpdGUgYWRkaXRpb24gKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jYCksIHdoaWNoIGlzIGdyZWF0IOKAkyB3ZSBuZWVkIHRob3JvdWdoIHRlc3RpbmcgZm9yIGEgZmVhdHVyZSBsaWtlIHRoaXMuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdG8gcGFyc2UgdGhlIGBzb3VyY2U9enN3YXBgIG9wdGlvbi4gSWYgYHpzd2FwX3dyaXRlYmFja19vbmx5YCBpcyBlbmFibGVkLCBpdCBjYWxscyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AuIFRoZW4gYG1tL3pzd2FwLmNgIGltcGxlbWVudHMgYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgIGl0c2VsZiwgd2hpY2gsIGluIHR1cm4sIGl0ZXJhdGVzIHRocm91Z2ggbWVtY2dzIGFuZCBjYWxscyBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AuIFRoZSBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AgdGhlbiBjYWxscyBgc2hyaW5rX21lbWNnYC4gVGhlIGBzaHJpbmtfbWVtY2dgIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQgdG8gYWNjZXB0IGEgYG5yX3RvX3NjYW5gIGFyZ3VtZW50IGFuZCB0byByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjay4gVGhpcyBpcyBhbGwgY2xlYXJseSBmdW5jdGlvbmFsLCBpbnRyb2R1Y2luZyBhIHdheSB0byBwcm9hY3RpdmVseSB0cmlnZ2VyIHdyaXRlYmFjayBvZiB6c3dhcCBwYWdlcy4KCkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIEl0IHByb3ZpZGVzIGEgbmV3IG1lY2hhbmlzbSB0byBjb250cm9sIHpzd2FwIGJlaGF2aW9yIHRocm91Z2ggbWVtY2dzLiBCZWNhdXNlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdlIGFic29sdXRlbHkgbmVlZCB0byBjb25zaWRlciBpdCBhIHRhcmdldCBmb3IgZnV6emluZy4gQW55IG5ldyB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmVhbGx5IHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfWlNXQVBgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZSBmb3IgYW55IG9mIHRoaXMgdG8gd29yaywgYW5kIGBDT05GSUdfTUVNQ0dgIGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgdXNlcyB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UuIEl0JiMzOTtzIGEgYml0IGVhcmx5LCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3pzd2FwLmNgIGl0c2VsZiBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbi0tXG5tbS9tZW1jb250cm9sLmM9NTU0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01NzItXHRaU1dQSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU1Ny1cdHsgXCYjMzQ7c2htZW1cJiMzNDssXHRcdFx0TlJfU0hNRU1cdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NTg6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTE1NTktXHR7IFwmIzM0O3pzd2FwXCYjMzQ7LFx0XHRcdE1FTUNHX1pTV0FQX0JcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTYwPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MTczLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQxNzQ6I2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jLTQxNzUtXHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NzkyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cbm1tL21lbWNvbnRyb2wuYzo1ODI3OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy01ODI4LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDA0PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTYwMjItfTtcbm1tL21lbWNvbnRyb2wuYzo2MDIzOiNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbm1tL21lbWNvbnRyb2wuYy02MDI0LVxubW0vbWVtY29udHJvbC5jPTYwMjU9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzMy0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy02MDM1LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbi0tXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTE0NTAtI2VuZGlmXG5tbS92bXN0YXQuYzoxNDUxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL3Ztc3RhdC5jLTE0NTItXHRbSShaU1dQSU4pXVx0XHRcdFx0PSBcJiMzNDt6c3dwaW5cJiMzNDssXG4tLVxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYzo5MDpzdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTkxLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuLS1cbm1tL3pzd2FwLmM9OTc9bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbi0tXG5tbS96c3dhcC5jLTk5LS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0xMDEtc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jOjEyMjpcdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy0xMjMtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xubW0venN3YXAuYzoxMzI6XHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTEzMy19XG4tLVxubW0venN3YXAuYz0zNDk9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4tLVxubW0venN3YXAuYy0zNTEtXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXHUwMDI2XHUwMDI2XG5tbS96c3dhcC5jOjM1MjpcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcbm1tL3pzd2FwLmMtMzUzLVx0XHRwcl9lcnIoXCYjMzQ7Y29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxuXCYjMzQ7LFxubW0venN3YXAuYzozNTQ6XHRcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcbm1tL3pzd2FwLmMtMzU1LVx0XHRwYXJhbV9mcmVlX2NoYXJwKFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYzozNTY6XHRcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYy0zNTctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIFpzd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB6c3dhcCBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBoZWFkZXIgZmlsZSBzaG91bGQgY29udGFpbiB0aGUga2V5IGRlZmluaXRpb25zLiBTbywgbGV0IG1lIG9wZW4gdXAgYGluY2x1ZGUvbGludXgvenN3YXAuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgbWFjcm9zLCBzdHJ1Y3R1cmVzLCBhbmQgbGlrZWx5IHNvbWUgaW5saW5lIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGRpZmZlcmVudCBjb21waWxlLXRpbWUgYW5kIHJ1bnRpbWUgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggenN3YXAuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYnVmZmVyIHNpemVzLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCB0aHJlc2hvbGRzLCBhbmQgYW55IHR1bmFibGUgcGFyYW1ldGVycyB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZSB6c3dhcCYjMzk7cyBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbiwgYWxvbmcgd2l0aCBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgdXNlZC4gVGhlIGRvY3VtZW50YXRpb24gd2l0aGluIHRoYXQgaGVhZGVyIHNob3VsZCBiZSBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseSBkZXNpZ25lZC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcmVhc29uIGFib3V0IGhvdyB0byB0dW5lIG9yIG1vZGlmeSB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTEwPWV4dGVybiBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcztcbmluY2x1ZGUvbGludXgvenN3YXAuaC0xMS1cbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMjojaWZkZWYgQ09ORklHX1pTV0FQXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaU1dBUCBhbmQgTUVNQ0cgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgcGxheWVyczogYFpTV0FQYCBhbmQgYE1FTUNHYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCBncm91cHMsIHNwZWNpZmljYWxseSBob3cgenN3YXAgaW50ZXJhY3RzIHdpdGggdGhlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBhbHRlcmVkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgdGhlIHBhdGNoIGhpdHMgYG1tL3Ztc2Nhbi5jYCB3aXRoIGEgY2hhbmdlIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQgaW50cm9kdWNlcyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaW4gYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IHByb2FjdGl2ZSB3cml0ZWJhY2sgc3RyYXRlZ3kgc3BlY2lmaWNhbGx5IGZvciB6c3dhcC4gRnVydGhlcm1vcmUsIGl0IHRvdWNoZXMgYHNocmlua19tZW1jZ2AgYW5kIGFkZHMgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbHNvIGluIGBtbS96c3dhcC5jYC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBvZiBob3cgd2Ugc2hyaW5rIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aGVuIHVzaW5nIHpzd2FwLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AsIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYCwgYW5kIGBzaHJpbmtfbWVtY2dgLiBOb3csIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgaXRzIG9yaWdpbmFsIHNvdXJjZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02MzE9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC02MzMtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk5Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDk5Ny1cbm1tL21lbWNvbnRyb2wuYzo0OTk4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy00OTk5LVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03ODYyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDMxPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMzYtXG5tbS92bXNjYW4uYzo4MDM3Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAzOC1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBNZW1vcnkgUmVjbGFpbSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggenN3YXAgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGFsc28gZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gYG1lbW9yeV9yZWNsYWltYCBpcywgb2YgY291cnNlLCB0aGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgY2dyb3VwIGZpbGUsIHNvIHRoYXTigJlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB1c2VyLWluaXRpYXRlZCByZWNsYWltLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgcmVsYXRlcyB0byB6c3dhcCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgdGhlIGdlbmVyYWwgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGFyZSBjYWxsZWQuCgpUaGUgY29kZSBtZW50aW9ucyBgQ09ORklHX1pTV0FQYCBhbmQgYE1FTUNHYCBhcyByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB3b25kZXJpbmcgaWYganVzdCBgQ09ORklHX1pTV0FQYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBvciBpZiBJIG5lZWQgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHBhdGNoIHRleHQgcHJvdmlkZXMgc29tZSBjb250ZXh0LCBzdGF0aW5nIHRoYXQgenN3YXAgd3JpdGViYWNrIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMsIGFuZCB0aGF0IHlvdSBjYW5ub3QgbWl4IHRoZSBgenN3YXBgIHNvdXJjZSB3aXRoIHN3YXBwaW5lc3MuCgpEaWdnaW5nIGludG8gYG1tL3pzd2FwLmNgLCBJIGZpbmQgdGhlIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCBmdW5jdGlvbi4gSSBzZWUgaXQgY2hlY2tzIGBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IHRoYXQgaXMgc2V0IHVwLiBMZXQmIzM5O3Mgc2VlLi4uIGFuZCwgaXQgbG9va3MgbGlrZSB0aGlzIGNoZWNrICpkb2VzbiYjMzk7dCogZGVwZW5kIG9uIGBDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFNvLCBpdCBzZWVtcyBsaWtlIGhhdmluZyBib3RoIGBaU1dBUGAgYW5kIGBNRU1DR2AgZW5hYmxlZCBpcyBlbm91Z2guIEkgY2FuIG5vdyBiZSBjb25maWRlbnQgdGhhdCBgWlNXQVBgIGFuZCBgTUVNQ0dgIGFyZSB0aGUgY29ycmVjdCBjb25maWdzIHRvIGJlIGxvb2tpbmcgYXQuCgpOb3cgSSYjMzk7bGwganVzdCBkb3VibGUtY2hlY2ssIGlzIGl0IHRydWx5IGBDT05GSUdfTUVNQ0dgLCBvciBzaG91bGQgSSBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZWxzZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDYzPWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDcyLVxuaW5pdC9LY29uZmlnOjEwNzM6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4MS1cbmluaXQvS2NvbmZpZzoxMDgyOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4My1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA4OC1cbmluaXQvS2NvbmZpZzoxMDg5OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTAtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODkxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgYW5kIFJlZmluaW5nIE15IFVuZGVyc3RhbmRpbmcqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IHRlcm0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQmIzM5O3MgdGhlIGNvcmUgY29uY2VwdC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIgd2l0aCB0aGUgYW5hbHlzaXMsIEkganVzdCB3YW50IHRvIHF1aWNrbHkgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIG5leHQgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdOKAmXMgbWVudGlvbmVkLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2s6IGlzIGBDT05GSUdfWlNXQVBgIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGhlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBuYW1lIHRvIGVuc3VyZSBhY2N1cmFjeSBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFpTV0FQIFBhdGNoIGZvciBQcm9hY3RpdmUgV3JpdGViYWNrKioKCkFscmlnaHQsIHNvIHRoZSBmZWVkYmFjayBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoIOKAkyBgWlNXQVBgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGRpcmVjdGlvbiBoZXJlLiBBbmQgdGhpcyBwYXRjaC4uLiB5ZXMsIGl0JiMzOTtzIHNjcmVhbWluZyBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgYWRkcyBhIG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBmZWF0dXJlIHRvIGBtZW1vcnkucmVjbGFpbWAg4oCTIHRoYXQgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjaywgaW4gZWZmZWN0IOKAkyBjaGFuZ2VzIHRoZSBnYW1lLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIHNlZSB0aGF0IGltbWVkaWF0ZWx5LgoKTm93LCBteSBmb2N1cyBuZWVkcyB0byBob25lIGluIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaW5mbHVlbmNlcyB0aGUgcmVjbGFtYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnMsIGFuZCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/CgpBbHNvLCB0aGUgY29uZmlncyBhcmUgYW5vdGhlciBwb2ludCB0byBleHBsb3JlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBaU1dBUGAgYW5kIGBNRU1DR2AuIFRoZXkgYXJlIGdvaW5nIHRvIGhhdmUgYSBsb3Qgb2YgaW1wb3J0YW5jZSBpbiB0aGUgdGVzdGluZyBvZiB0aGUgcGF0Y2hlcy4KCkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgY29uY3JldGUgdGVzdGluZyBnb2FscyBhbmQgZ2V0IHNvbWUgcmVzdWx0cyBpbi4gTGV0JiMzOTtzIGNhbGwgYSBzZXQtcmVzdWx0cyBhbmQgZXN0YWJsaXNoIHNvbWUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O3pzd2FwX3Nocmlua19vbmVfbWVtY2cmIzM0OywKICAgICYjMzQ7c2hyaW5rX21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICYjMzk7bWVtb3J5LnJlY2xhaW0mIzM5OyBjZ3JvdXAgaW50ZXJmYWNlIHVzaW5nIHRoZSAmIzM5O3NvdXJjZT16c3dhcCYjMzk7IGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7enN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDt6c3dhcF9zaHJpbmtfb25lX21lbWNnJiMzNDssCiAgICAmIzM0O3Nocmlua19tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdmlhIHRoZSAmIzM5O21lbW9yeS5yZWNsYWltJiMzOTsgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJiMzOTtzb3VyY2U9enN3YXAmIzM5OyBrZXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhhdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB6c3dhcCBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjEzLjMyMzk5NjA1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTIxMDQ2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjEzLjMyNDAwNTcwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODU3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0OToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTE0MjUsOSArMTQyNSwxMCBAQCBQQUdFX1NJWkUgbXVsdGlwbGUgd2hlbiByZWFkIGJhY2suXFxuIFxcbiBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxcbiBcXG4tXFx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcXG4tXFx0ICA9PT09PT09PT09ICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ICBzb3VyY2U9enN3YXAgICAgICAgICAgT25seSBwZXJmb3JtIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2tcXG4rXFx0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFxcdFNwZWNpZnlpbmcgYSBzd2FwcGluZXNzIHZhbHVlIGluc3RydWN0cyB0aGUga2VybmVsIHRvIHBlcmZvcm1cXG4gXFx0dGhlIHJlY2xhaW0gd2l0aCB0aGF0IHN3YXBwaW5lc3MgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGVcXG5AQCAtMTQzNyw2ICsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdFRoZSB2YWxpZCByYW5nZSBmb3Igc3dhcHBpbmVzcyBpcyBbMC0yMDAsIG1heF0sIHNldHRpbmdcXG4gXFx0c3dhcHBpbmVzcz1tYXggZXhjbHVzaXZlbHkgcmVjbGFpbXMgYW5vbnltb3VzIG1lbW9yeS5cXG4gXFxuK1xcdFRoZSBzb3VyY2U9enN3YXAga2V5IHNraXBzIG9yZGluYXJ5IG1lbW9yeSByZWNsYWltIGFuZFxcbitcXHR3cml0ZXMgYmFjayBwYWdlcyBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlIHVudGlsXFxuK1xcdHRoZSByZXF1ZXN0ZWQgYW1vdW50IGhhcyBiZWVuIHdyaXR0ZW4gb3Igbm8gZnVydGhlciBjYW5kaWRhdGVzXFxuK1xcdGFyZSBmb3VuZC4gVGhpcyBpcyB1c2VmdWwgdG8gcHJvYWN0aXZlbHkgb2ZmbG9hZCBjb2xkIGNvbXByZXNzZWRcXG4rXFx0ZGF0YSBmcm9tIHRoZSB6c3dhcCBwb29sIHRvIHRoZSBzd2FwIGRldmljZS4gSXQgaXMgb25seSBhdmFpbGFibGVcXG4rXFx0aWYgenN3YXAgd3JpdGViYWNrIGlzIGVuYWJsZWQuIHNvdXJjZT16c3dhcCBjYW5ub3QgYmVcXG4rXFx0Y29tYmluZWQgd2l0aCBzd2FwcGluZXNzOyBzcGVjaWZ5aW5nIGJvdGggcmV0dXJucyAtRUlOVkFMLlxcbitcXG4rXFx0RXhhbXBsZTo6XFxuK1xcbitcXHQgICMgV3JpdGViYWNrIHVwIHRvIDEwTUIgb2YgY29tcHJlc3NlZCBkYXRhIGZyb20genN3YXAgdG8gdGhlIGJhY2tpbmcgc3dhcFxcbitcXHQgIGVjaG8gXFxcIjEwTSBzb3VyY2U9enN3YXBcXFwiIFxcdTAwM2UgbWVtb3J5LnJlY2xhaW1cXG4rXFxuICAgbWVtb3J5LnBlYWtcXG4gXFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxcbiBcXG5AQCAtMTczNCw2ICsxNzQ4LDEwIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdCAgenN3cHdiXFxuIFxcdFxcdE51bWJlciBvZiBwYWdlcyB3cml0dGVuIGZyb20genN3YXAgdG8gc3dhcC5cXG4gXFxuK1xcdCAgenN3cHdiX3Byb2FjdGl2ZV9iXFxuK1xcdFxcdEJ5dGVzIG9mIGNvbXByZXNzZWQgZGF0YSBwcm9hY3RpdmVseSB3cml0dGVuIGJhY2sgZnJvbVxcbitcXHRcXHR6c3dhcCB0byBzd2FwIHZpYSB0aGUgbWVtb3J5LnJlY2xhaW0gc291cmNlPXpzd2FwIGtleS5cXG4rXFxuIFxcdCAgenN3YXBfaW5jb21wXFxuIFxcdFxcdE51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwXFxuIFxcdFxcdHdpdGhvdXQgY29tcHJlc3Npb24uIFRoZXNlIHBhZ2VzIGNvdWxkIG5vdCBiZSBjb21wcmVzc2VkIHRvXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcXG5pbmRleCAyNDY0NDI1Yzc4M2RlMi4uYjQ5YjhjMTMwMzg5MDUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxcbkBAIC0xMzEsNyArMTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcXG4gICBlY2hvIFkgXFx1MDAzZSAvc3lzL21vZHVsZS96c3dhcC9wYXJhbWV0ZXJzL3Nocmlua2VyX2VuYWJsZWRcXG4gXFxuIFRoaXMgY2FuIGJlIGVuYWJsZWQgYXQgdGhlIGJvb3QgdGltZSBpZiBgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYGAgaXNcXG4tc2VsZWN0ZWQuXFxuK3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvXFxuK2JhY2tpbmcgc3dhcCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uXFxuK1xcbitJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljXFxuK21lbW9yeSBjZ3JvdXAgd2l0aG91dCBpbnZva2luZyBzdGFuZGFyZCBwYWdlIHJlY2xhaW0sIGl0IGNhbiBiZSBkb25lIGFzIGZvbGxvd3M6OlxcbitcXG4rXFx0ZWNobyBcXFwiMTBNIHNvdXJjZT16c3dhcFxcXCIgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cXHUwMDNjY2dyb3VwLW5hbWVcXHUwMDNlL21lbW9yeS5yZWNsYWltXFxuK1xcbitCb3RoIG9mIHRoZSBtZXRob2RzIG1lbnRpb25lZCBhYm92ZSBhcmUgc3ViamVjdCB0byB0aGUgYGBtZW1vcnkuenN3YXAud3JpdGViYWNrYGBcXG4rY29udHJvbC4gVGhpcyBtZWFucyB0aGF0IGBgbWVtb3J5Lnpzd2FwLndyaXRlYmFja2BgIGNhbiBwcmV2ZW50IGFsbCB6c3dhcCB3cml0ZWJhY2suXFxuIFxcbiBBIGRlYnVnZnMgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGZvciB2YXJpb3VzIHN0YXRpc3RpYyBhYm91dCBwb29sIHNpemUsIG51bWJlclxcbiBvZiBwYWdlcyBzdG9yZWQsIHNhbWUtdmFsdWUgZmlsbGVkIHBhZ2VzIGFuZCB2YXJpb3VzIGNvdW50ZXJzIGZvciB0aGUgcmVhc29uc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjU2NTgwYjI2NGRjNDI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtNDAsNiArNDAsNyBAQCBlbnVtIG1lbWNnX3N0YXRfaXRlbSB7XFxuIFxcdE1FTUNHX1pTV0FQX0IsXFxuIFxcdE1FTUNHX1pTV0FQUEVELFxcbiBcXHRNRU1DR19aU1dBUF9JTkNPTVAsXFxuK1xcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQixcXG4gXFx0TUVNQ0dfTlJfU1RBVCxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4raW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1NjQgYnl0ZXNfdG9fd3JpdGViYWNrKTtcXG4gI2Vsc2VcXG4gXFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XFxuQEAgLTY5LDYgKzcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBieXRlc190b193cml0ZWJhY2spXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uZDgxYzM0NDg0YmNhMjggMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTQzMyw2ICs0MzMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TUVNQ0dfWlNXQVBfQixcXG4gXFx0TUVNQ0dfWlNXQVBQRUQsXFxuIFxcdE1FTUNHX1pTV0FQX0lOQ09NUCxcXG4rXFx0TUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVMgQVJSQVlfU0laRShtZW1jZ19ub2RlX3N0YXRfaXRlbXMpXFxuQEAgLTE1NTgsNiArMTU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuIFxcdHsgXFxcInpzd2FwXFxcIixcXHRcXHRcXHRNRU1DR19aU1dBUF9CXFx0XFx0XFx0fSxcXG4gXFx0eyBcXFwienN3YXBwZWRcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQUEVEXFx0XFx0XFx0fSxcXG4gXFx0eyBcXFwienN3YXBfaW5jb21wXFxcIixcXHRcXHRNRU1DR19aU1dBUF9JTkNPTVBcXHRcXHR9LFxcbitcXHR7IFxcXCJ6c3dwd2JfcHJvYWN0aXZlX2JcXFwiLFxcdFxcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQlxcdH0sXFxuICNlbmRpZlxcbiBcXHR7IFxcXCJmaWxlX21hcHBlZFxcXCIsXFx0XFx0TlJfRklMRV9NQVBQRURcXHRcXHRcXHR9LFxcbiBcXHR7IFxcXCJmaWxlX2RpcnR5XFxcIixcXHRcXHRcXHROUl9GSUxFX0RJUlRZXFx0XFx0XFx0fSxcXG5AQCAtMTYxNCw2ICsxNjE2LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX3VuaXQoaW50IGl0ZW0pXFxuIFxcdHN3aXRjaCAoaXRlbSkge1xcbiBcXHRjYXNlIE1FTUNHX1BFUkNQVV9COlxcbiBcXHRjYXNlIE1FTUNHX1pTV0FQX0I6XFxuK1xcdGNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COlxcbiBcXHRjYXNlIE5SX1NMQUJfUkVDTEFJTUFCTEVfQjpcXG4gXFx0Y2FzZSBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQjpcXG4gXFx0XFx0cmV0dXJuIDE7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC02NCw2ICs2NCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuQEAgLTc4NTUsMTEgKzc4NTYsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIGVudW0ge1xcbiBcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcXG4gXFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuK1xcdE1FTU9SWV9SRUNMQUlNX1NPVVJDRSxcXG4gXFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG4gfTtcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbiBcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuIFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbitcXHR7IE1FTU9SWV9SRUNMQUlNX1NPVVJDRSwgXFxcInNvdXJjZT0lc1xcXCJ9LFxcbiBcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG4gfTtcXG4gXFxuQEAgLTc4NjksOSArNzg3MiwxMiBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbiBcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbitcXHRib29sIHpzd2FwX3dyaXRlYmFja19vbmx5ID0gZmFsc2U7XFxuIFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG4rXFx0Y2hhciBzb3VyY2VbMTZdO1xcbiBcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuIFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG4rXFx0dTY0IG5yX2J5dGVzO1xcbiBcXG4gXFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC03ODc5LDcgKzc4ODUsOCBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuIFxcbiBcXHRvbGRfYnVmID0gYnVmO1xcbi1cXHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcXG4rXFx0bnJfYnl0ZXMgPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpO1xcbitcXHRucl90b19yZWNsYWltID0gbnJfYnl0ZXMgLyBQQUdFX1NJWkU7XFxuIFxcdGlmIChidWYgPT0gb2xkX2J1ZilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC03ODk5LDExICs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4gXFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG4gXFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TT1VSQ0U6XFxuK1xcdFxcdFxcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXFx1MDAyNmFyZ3NbMF0sIHNpemVvZihzb3VyY2UpKSBcXHUwMDNlPSBzaXplb2Yoc291cmNlKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdC8qIE9ubHkgenN3YXAgaXMgc3VwcG9ydGVkIGFzIGEgcmVjbGFpbSBzb3VyY2UgZm9yIG5vdy4gKi9cXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChzb3VyY2UsIFxcXCJ6c3dhcFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0enN3YXBfd3JpdGViYWNrX29ubHkgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHpzd2FwX3dyaXRlYmFja19vbmx5KSB7XFxuK1xcdFxcdC8qIHNvdXJjZT16c3dhcCBhbmQgc3dhcHBpbmVzcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqL1xcbitcXHRcXHRpZiAoc3dhcHBpbmVzcyAhPSAtMSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHJldHVybiB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKG1lbWNnLCBucl9ieXRlcyk7XFxuK1xcdH1cXG4rXFxuIFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuIFxcdFxcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggNzYxY2Q2OTllMGEzZTYuLmQzNTZjMTczOWM2OGY5IDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTE2MCw2ICsxNjAsMTEgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rc3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcXG4rXFx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZTtcXG4rfTtcXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTEwODksOCArMTA5NCw5IEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXFxuIFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgenN3YXBfZW50cnksIGxydSk7XFxuLVxcdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgKndhbGtfYXJnID0gYXJnO1xcbiBcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4rXFx0dW5zaWduZWQgaW50IGxlbmd0aDtcXG4gXFx0ZW51bSBscnVfc3RhdHVzIHJldCA9IExSVV9SRU1PVkVEX1JFVFJZO1xcbiBcXHRpbnQgd3JpdGViYWNrX3Jlc3VsdDtcXG4gXFxuQEAgLTExMzMsMTAgKzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGxydSBsb2NrIGlzIGRyb3BwZWQsIHRoZSBlbnRyeSBtaWdodCBnZXQgZnJlZWQuIFRoZVxcbi1cXHQgKiBzd3BlbnRyeSBpcyBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZCBhZ2Fpblxcbi1cXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXFxuK1xcdCAqIG5lZWRlZCBmaWVsZHMgYXJlIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24ndCBkZXJlZidkXFxuK1xcdCAqIGFnYWluIHVudGlsIGl0IGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIGFsaXZlIGluIHRoZSB0cmVlLlxcbiBcXHQgKi9cXG4gXFx0c3dwZW50cnkgPSBlbnRyeS1cXHUwMDNlc3dwZW50cnk7XFxuK1xcdGxlbmd0aCA9IGVudHJ5LVxcdTAwM2VsZW5ndGg7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJdCdzIHNhZmUgdG8gZHJvcCB0aGUgbG9jayBoZXJlIGJlY2F1c2Ugd2UgcmV0dXJuIGVpdGhlclxcbkBAIC0xMTU1LDEyICsxMTYyLDEzIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXFxuIFxcdFxcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xcbiBcXHRcXHQgKiBzaHJpbmtlciBjb250ZXh0KS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXFx1MDAyNlxcdTAwMjYgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpIHtcXG4rXFx0XFx0aWYgKHdyaXRlYmFja19yZXN1bHQgPT0gLUVFWElTVCkge1xcbiBcXHRcXHRcXHRyZXQgPSBMUlVfU1RPUDtcXG4tXFx0XFx0XFx0KmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0d2Fsa19hcmctXFx1MDAzZWVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR6c3dhcF93cml0dGVuX2JhY2tfcGFnZXMrKztcXG4rXFx0XFx0d2Fsa19hcmctXFx1MDAzZWJ5dGVzX3dyaXR0ZW4gKz0gbGVuZ3RoO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xMTY5LDggKzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfd2Fsa19hcmcgd2Fsa19hcmcgPSB7XFxuK1xcdFxcdC5ieXRlc193cml0dGVuID0gMCxcXG4rXFx0XFx0LmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2UsXFxuK1xcdH07XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX3JldDtcXG4tXFx0Ym9vbCBlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKCF6c3dhcF9zaHJpbmtlcl9lbmFibGVkIHx8XFxuIFxcdFxcdFxcdCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHNjLVxcdTAwM2VtZW1jZykpIHtcXG5AQCAtMTE3OSw5ICsxMTkwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbiBcXHR9XFxuIFxcbiBcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG4tXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4rXFx0XFx0XFx1MDAyNndhbGtfYXJnKTtcXG4gXFxuLVxcdGlmIChlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSlcXG4rXFx0aWYgKHdhbGtfYXJnLmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxcbiBcXHRcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIFxcbiBcXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcXG5AQCAtMTI3NSw5ICsxMjg2LDMxIEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXFxuIFxcdHJldHVybiBzaHJpbmtlcjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbisjZGVmaW5lIE5SX1pTV0FQX1dCX0JBVENIXFx0NjRVTFxcbitcXG4rLypcXG4rICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnXFxuKyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxcbisgKlxcbisgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlXFxuKyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xcbisgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXFxuKyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZVxcbisgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcXG4rICogZW50cmllcy5cXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrIChcXHUwMDNlPSAwKSwgb3IgLUVOT0VOVFxcbisgKiBpZiBAbWVtY2cgaGFzIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHlcXG4rICogenN3YXAgTFJVcy5cXG4rICovXFxuK3N0YXRpYyBsb25nIHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4ge1xcbi1cXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcXG4rXFx0c3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHtcXG4rXFx0XFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxcbitcXHRcXHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xcbitcXHRpbnQgbmlkO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTEyOTAsMjMgKzEzMjMsOTcgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXFxuK1xcdFxcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9scnVfY291bnRfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xcbitcXHRcXHRpZiAoIW5yX3RvX3dhbGspXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XFxuK1xcdFxcdGxpc3RfbHJ1X3dhbGtfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2d2Fsa19hcmcsIFxcdTAwMjZucl90b193YWxrKTtcXG4rXFx0XFx0LyogUmV0dXJuIHRoZSB1bnVzZWQgc2hhcmUgb2YgdGhlIGJ1ZGdldCB0byB0aGUgcG9vbC4gKi9cXG4rXFx0XFx0bnJfcmVtYWluaW5nICs9IG5yX3RvX3dhbGs7XFxuIFxcbi1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbi1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcbitcXHRcXHRpZiAoIW5yX3JlbWFpbmluZylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghc2Nhbm5lZClcXG4rXFx0LyogTm90aGluZyB3YXMgc2Nhbm5lZDogZXZlcnkgTFJVIHVuZGVyIEBtZW1jZyB3YXMgZW1wdHkuICovXFxuK1xcdGlmIChucl9yZW1haW5pbmcgPT0gbnJfdG9fc2NhbilcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbi1cXHRyZXR1cm4gc2hydW5rID8gMCA6IC1FQUdBSU47XFxuK1xcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xcbit9XFxuK1xcbisvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXFxuK3N0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUge1xcbitcXHRpbnQgc2NhbnM7XFxuK1xcdGludCBmYWlsdXJlcztcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJ3NcXG4rICogaXRlcmF0b3IsIGFuZCBmb2xkIHRoZSByZXN1bHQgaW50byBAcywgdGhlIHJldHJ5IGJvb2trZWVwaW5nIHNoYXJlZFxcbisgKiBhY3Jvc3Mgc3RlcHMuIEBtZW1jZyBpcyB0aGUgaXRlcmF0b3IncyBjdXJyZW50IG1lbWNnLCBvciBOVUxMIG9uY2VcXG4rICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXFxuKyAqXFxuKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSB0byBzaWduYWwgdGhlIGNhbGxlciB0byBhYm9ydCB0aGUgd2FsayBhZnRlclxcbisgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcXG4rICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyB3ZXJlIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxcbisgKiAtIFNocmlua2luZyBhIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2cgZmFpbGVkLlxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGJhY2sgKFxcdTAwM2U9IDApLCBvciAtRUJVU1lcXG4rICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay5cXG4rICovXFxuK3N0YXRpYyBsb25nIHpzd2FwX3Nocmlua19vbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlICpzKVxcbit7XFxuK1xcdGxvbmcgc2hydW5rO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhY2hpbmcgYSBOVUxMIG1lbWNnIG1lYW5zIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyBjb21wbGV0ZWQuXFxuK1xcdCAqIEV4Y2x1ZGUgdGhlIG1lbWNnLWRpc2FibGVkIGNhc2UsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMLCBhbmRcXG4rXFx0ICogZmFsbCB0aHJvdWdoIHRvIHNocmluayB0aGUgcm9vdCBMUlUgZGlyZWN0bHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ29udGludWUgc2hyaW5raW5nIHdpdGhvdXQgaW5jcmVtZW50aW5nIGZhaWx1cmVzIGlmIHdlIGZvdW5kXFxuK1xcdFxcdCAqIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFzLVxcdTAwM2VzY2FucyBcXHUwMDI2XFx1MDAyNiArK3MtXFx1MDAzZWZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdHMtXFx1MDAzZXNjYW5zID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLiBXaXRoIG1lbWNnXFxuK1xcdCAqIGVuYWJsZWQgdGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXFxuK1xcdCAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS5cXG4rXFx0ICogV2l0aCBtZW1jZyBkaXNhYmxlZCB0aGUgcm9vdCBMUlUgaXMgdGhlIG9ubHkgdGFyZ2V0LCBzbyB3ZSBzaG91bGRcXG4rXFx0ICogYWJvcnQgaWYgaXQgaGFzIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2hydW5rID09IC1FTk9FTlQpXFxuK1xcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Rpc2FibGVkKCkgPyAtRUJVU1kgOiAwO1xcbitcXHRzLVxcdTAwM2VzY2FucysrO1xcbitcXG4rXFx0aWYgKHNocnVuayBcXHUwMDNjPSAwIFxcdTAwMjZcXHUwMDI2ICsrcy1cXHUwMDNlZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldHVybiBzaHJ1bms7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiB7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tXFx0aW50IHJldCwgZmFpbHVyZXMgPSAwLCBhdHRlbXB0cyA9IDA7XFxuK1xcdHN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgcyA9IHt9O1xcbiBcXHR1bnNpZ25lZCBsb25nIHRocjtcXG4gXFxuIFxcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xcbkBAIC0xMzE4LDExICsxNDI1LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdCAqIHdyaXRlYmFjay1kaXNhYmxlZCBtZW1jZ3MgKG1lbW9yeS56c3dhcC53cml0ZWJhY2s9MCkgYXJlIG5vdFxcbiBcXHQgKiBjYW5kaWRhdGVzIGZvciBzaHJpbmtpbmcuXFxuIFxcdCAqXFxuLVxcdCAqIFNocmlua2luZyB3aWxsIGJlIGFib3J0ZWQgaWYgd2UgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmdcXG4tXFx0ICogTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcXG4tXFx0ICogLSBObyB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNncyBmb3VuZCBpbiBhIG1lbWNnIHRyZWUgd2Fsay5cXG4tXFx0ICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cXG4tXFx0ICpcXG4gXFx0ICogV2Ugc2F2ZSBpdGVyYXRpb24gY3Vyc29yIG1lbWNnIGludG8genN3YXBfbmV4dF9zaHJpbmssXFxuIFxcdCAqIHdoaWNoIGNhbiBiZSBtb2RpZmllZCBieSB0aGUgb2ZmbGluZSBtZW1jZyBjbGVhbmVyXFxuIFxcdCAqIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cCgpLlxcbkBAIC0xMzM3LDcgKzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdCAqIG9mZmxpbmUgbWVtY2cgbGVmdCBpbiB6c3dhcF9uZXh0X3NocmluayB3aWxsIGhvbGQgdGhlIHJlZmVyZW5jZVxcbiBcXHQgKiB1bnRpbCB0aGUgbmV4dCBydW4gb2Ygc2hyaW5rX3dvcmtlcigpLlxcbiBcXHQgKi9cXG4tXFx0ZG8ge1xcbitcXHR3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcXHUwMDNlIHRocikge1xcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdFxcdGxvbmcgcmV0O1xcbitcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFN0YXJ0IHNocmlua2luZyBmcm9tIHRoZSBuZXh0IG1lbWNnIGFmdGVyIHpzd2FwX25leHRfc2hyaW5rLlxcbiBcXHRcXHQgKiBXaGVuIHRoZSBvZmZsaW5lIGNsZWFuZXIgaGFzIGFscmVhZHkgYWR2YW5jZWQgdGhlIGN1cnNvcixcXG5AQCAtMTM1NiwzNyArMTQ2MiwxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0XFx0fSB3aGlsZSAobWVtY2cgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2enN3YXBfc2hyaW5rX2xvY2spO1xcbiBcXG4tXFx0XFx0aWYgKCFtZW1jZykge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWZcXG4tXFx0XFx0XFx0ICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIWF0dGVtcHRzIFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRcXHRhdHRlbXB0cyA9IDA7XFxuLVxcdFxcdFxcdGdvdG8gcmVzY2hlZDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcXG4rXFx0XFx0cmV0ID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhtZW1jZywgXFx1MDAyNnMpO1xcbiBcXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4gXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlcmUgYXJlIG5vIHdyaXRlYmFjay1jYW5kaWRhdGUgcGFnZXMgaW4gdGhlIG1lbWNnLlxcbi1cXHRcXHQgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcXG4tXFx0XFx0ICogd2l0aCBwYWdlcyBpbiB6c3dhcC4gU2tpcCB0aGlzIHdpdGhvdXQgaW5jcmVtZW50aW5nIGF0dGVtcHRzXFxuLVxcdFxcdCAqIGFuZCBmYWlsdXJlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChyZXQgPT0gLUVOT0VOVClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdCsrYXR0ZW1wdHM7XFxuLVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1yZXNjaGVkOlxcbi1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0fSB3aGlsZSAoenN3YXBfdG90YWxfcGFnZXMoKSBcXHUwMDNlIHRocik7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbkBAIC0xNDkyLDcgKzE1NzMsNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGlmIChvYmpjZyBcXHUwMDI2XFx1MDAyNiAhb2JqX2Nncm91cF9tYXlfenN3YXAob2JqY2cpKSB7XFxuIFxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhvYmpjZyk7XFxuLVxcdFxcdGlmIChzaHJpbmtfbWVtY2cobWVtY2cpKSB7XFxuK1xcdFxcdGlmIChzaHJpbmtfbWVtY2cobWVtY2csIG51bV9ub2RlX3N0YXRlKE5fTk9STUFMX01FTU9SWSkpIFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRcXHRnb3RvIHB1dF9vYmpjZztcXG4gXFx0XFx0fVxcbkBAIC0xNjMyLDYgKzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaylcXG4re1xcbitcXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3N0YXRlIHMgPSB7fTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKml0ZXIgPSBOVUxMO1xcbitcXHR1NjQgYnl0ZXNfd3JpdHRlbiA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR3aGlsZSAoYnl0ZXNfd3JpdHRlbiBcXHUwMDNjIGJ5dGVzX3RvX3dyaXRlYmFjaykge1xcbitcXHRcXHRsb25nIHNocnVuaztcXG4rXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5UUjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVzZSBhIGxvY2FsIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIG1lbWNnIGFuZCBpdHMgb25saW5lIGRlc2NlbmRhbnRzXFxuK1xcdFxcdCAqIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBVcG9uIGV4aXRpbmcgdGhlIGxvb3AsIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpXFxuK1xcdFxcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0aXRlciA9IG1lbV9jZ3JvdXBfaXRlcihtZW1jZywgaXRlciwgTlVMTCk7XFxuK1xcdFxcdH0gd2hpbGUgKGl0ZXIgXFx1MDAyNlxcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShpdGVyKSk7XFxuK1xcbitcXHRcXHRzaHJ1bmsgPSB6c3dhcF9zaHJpbmtfb25lX21lbWNnKGl0ZXIsIFxcdTAwMjZzKTtcXG4rXFx0XFx0aWYgKHNocnVuayBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0Ynl0ZXNfd3JpdHRlbiArPSBzaHJ1bms7XFxuK1xcdFxcdFxcdG1vZF9tZW1jZ19zdGF0ZShpdGVyLCBNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IsIHNocnVuayk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqL1xcbitcXHRcXHRtZW1fY2dyb3VwX3B1dChpdGVyKTtcXG4rXFxuK1xcdFxcdGlmIChzaHJ1bmsgPT0gLUVCVVNZKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhtZW1jZywgaXRlcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxuIHtcXG4gXFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXFxuaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jXFxuQEAgLTYwLDcgKzYwLDEyIEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxcbiBcXG4gc3RhdGljIGxvbmcgZ2V0X2NnX3diX2NvdW50KGNvbnN0IGNoYXIgKmNnKVxcbiB7XFxuLVxcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiXFxcIik7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiIFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBnZXRfY2dfcHdiX2J5dGVzKGNvbnN0IGNoYXIgKmNnKVxcbit7XFxuK1xcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcXFwibWVtb3J5LnN0YXRcXFwiLCBcXFwienN3cHdiX3Byb2FjdGl2ZV9iIFxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfenN3cG91dChjb25zdCBjaGFyICpjZ3JvdXApXFxuQEAgLTM1NSw2ICszNjAsNyBAQCBzdGF0aWMgaW50IGF0dGVtcHRfd3JpdGViYWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIHtcXG4gXFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XFxuK1xcdGxvbmcgcHdiX2J5dGVzO1xcbiBcXG4gXFx0enN3cHdiX2JlZm9yZSA9IGdldF9jZ193Yl9jb3VudChjZ3JvdXApO1xcbiBcXHRpZiAoenN3cHdiX2JlZm9yZSAhPSAwKSB7XFxuQEAgLTM2Miw2ICszNjgsMTIgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX3dyaXRlYmFja19vbmUoY29uc3QgY2hhciAqY2dyb3VwLCBib29sIHdiKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuK1xcdHB3Yl9ieXRlcyA9IGdldF9jZ19wd2JfYnl0ZXMoY2dyb3VwKTtcXG4rXFx0aWYgKHB3Yl9ieXRlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxcXG5cXFwiLCBwd2JfYnl0ZXMpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjZ19ydW4oY2dyb3VwLCBhdHRlbXB0X3dyaXRlYmFjaywgKHZvaWQgKikgXFx1MDAyNndiKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMzc5LDYgKzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogYXR0ZW1wdF93cml0ZWJhY2soKSBkb2VzIG5vdCB1c2UgdGhlIHByb2FjdGl2ZSB3cml0ZWJhY2sgcGF0aCwgc29cXG4rXFx0ICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlclxcbitcXHQgKiB3cml0ZWJhY2sgd2FzIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7XFxuK1xcdGlmIChwd2JfYnl0ZXMgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2JfcHJvYWN0aXZlX2JfYWZ0ZXIgaXMgJWxkLCBleHBlY3RlZCAwXFxcXG5cXFwiLCBwd2JfYnl0ZXMpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC03NzAsNiArNzkzLDE0MSBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUoY29uc3QgY2hhciAqcm9vdClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcXG4rICogMS4gQWxsb2NhdGUgbWVtb3J5LlxcbisgKiAyLiBQdXNoIGFsbG9jYXRlZCBtZW1vcnkgaW50byB6c3dhcC5cXG4rICogMy4gUHJvYWN0aXZlbHkgd3JpdGUgYmFjayB6c3dhcCBwYWdlcyB0byBzd2FwXFxuKyAqICAgIHVzaW5nIFxcXCJzb3VyY2U9enN3YXBcXFwiLlxcbisgKi9cXG4rc3RhdGljIGludCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxcbit7XFxuK1xcdGxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdHNpemVfdCBtZW1zaXplID0gcGFnZXNpemUgKiAxMDI0O1xcbitcXHRjaGFyIHJlY2xhaW1fY21kWzY0XTtcXG4rXFx0Y2hhciBidWZbcGFnZXNpemVdO1xcbitcXHRsb25nIHpzd2FwX3VzYWdlO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCByYztcXG4rXFx0Y2hhciAqbWVtO1xcbitcXG4rXFx0bWVtID0gKGNoYXIgKiltYWxsb2MobWVtc2l6ZSk7XFxuK1xcdGlmICghbWVtKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBwYWdlc2l6ZTsgaSsrKVxcbitcXHRcXHRidWZbaV0gPSBpIFxcdTAwM2MgcGFnZXNpemUgLyAyID8gKGNoYXIpaSA6IDA7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbWVtc2l6ZTsgaSArPSBwYWdlc2l6ZSlcXG4rXFx0XFx0bWVtY3B5KFxcdTAwMjZtZW1baV0sIGJ1ZiwgcGFnZXNpemUpO1xcbitcXG4rXFx0LyogRXZpY3QgYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLiAqL1xcbitcXHRpZiAoY2dfd3JpdGVfbnVtZXJpYyhjZ3JvdXAsIFxcXCJtZW1vcnkucmVjbGFpbVxcXCIsIG1lbXNpemUpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgXFxcIm1lbW9yeS56c3dhcC5jdXJyZW50XFxcIik7XFxuK1xcdGlmICh6c3dhcF91c2FnZSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyB6c3dhcCBwb29sIHRvIHdyaXRlIGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xcbitcXHRzbnByaW50ZihyZWNsYWltX2NtZCwgc2l6ZW9mKHJlY2xhaW1fY21kKSwgXFxcIiVsZCBzb3VyY2U9enN3YXBcXFwiLCB6c3dhcF91c2FnZSk7XFxuK1xcdHJjID0gY2dfd3JpdGUoY2dyb3VwLCBcXFwibWVtb3J5LnJlY2xhaW1cXFwiLCByZWNsYWltX2NtZCk7XFxuK1xcdGlmIChyYyBcXHUwMDI2XFx1MDAyNiByYyAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0ZnJlZShtZW0pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyhjb25zdCBjaGFyICpjZ3JvdXApXFxuK3tcXG4rXFx0c3RhdGljIGNoYXIgKiBjb25zdCBiYWRfaW5wdXRzW10gPSB7XFxuK1xcdFxcdFxcXCJzb3VyY2U9enN3YXBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc291cmNlPXpzd2FwIHN3YXBwaW5lc3M9NjBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcXFwiLFxcbitcXHRcXHRcXFwiMU0gc291cmNlPXpzd2FwIHN3YXBwaW5lc3M9bWF4XFxcIixcXG4rXFx0XFx0XFxcIjFNIHN3YXBwaW5lc3M9bWF4IHNvdXJjZT16c3dhcFxcXCIsXFxuK1xcdH07XFxuK1xcdGludCBpLCByYztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9pbnB1dHMpOyBpKyspIHtcXG4rXFx0XFx0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFxcXCJtZW1vcnkucmVjbGFpbVxcXCIsIGJhZF9pbnB1dHNbaV0pO1xcbitcXHRcXHRpZiAocmMgIT0gLUVJTlZBTCkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibWVtb3J5LnJlY2xhaW0gJyVzJzogcmV0dXJuZWQgJWQsIGV4cGVjdGVkICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYmFkX2lucHV0c1tpXSwgcmMsIC1FSU5WQUwpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcXG4re1xcbitcXHRsb25nIHdiX2JlZm9yZSwgd2JfYWZ0ZXI7XFxuK1xcdGxvbmcgcHdiX2JfYmVmb3JlLCBwd2JfYl9hZnRlcjtcXG4rXFx0bG9uZyB3Yl9kZWx0YSwgcHdiX2JfZGVsdGE7XFxuK1xcdGludCByZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdGNoYXIgKnRlc3RfZ3JvdXA7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9zdHJjbXAocm9vdCwgXFxcIm1lbW9yeS56c3dhcC53cml0ZWJhY2tcXFwiLCBcXFwiMVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gS1NGVF9TS0lQO1xcbitcXG4rXFx0dGVzdF9ncm91cCA9IGNnX25hbWUocm9vdCwgXFxcInpzd2FwX3Byb2FjdGl2ZV90ZXN0XFxcIik7XFxuK1xcdGlmICghdGVzdF9ncm91cClcXG4rXFx0XFx0cmV0dXJuIEtTRlRfRkFJTDtcXG4rXFx0aWYgKGNnX2NyZWF0ZSh0ZXN0X2dyb3VwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgbWlzc2luZyB6c3dwd2JfcHJvYWN0aXZlX2Igc3RhdCBtZWFucyB0aGUga2VybmVsIGxhY2tzIHByb2FjdGl2ZVxcbitcXHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xcbitcXHR3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQodGVzdF9ncm91cCk7XFxuK1xcdGlmIChwd2JfYl9iZWZvcmUgXFx1MDAzYyAwIHx8IHdiX2JlZm9yZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkLCBOVUxMKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9hZnRlciA9IGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCk7XFxuK1xcdHdiX2FmdGVyID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApO1xcbitcXHRpZiAocHdiX2JfYWZ0ZXIgXFx1MDAzYyAwIHx8IHdiX2FmdGVyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwd2JfYl9kZWx0YSA9IHB3Yl9iX2FmdGVyIC0gcHdiX2JfYmVmb3JlO1xcbitcXHR3Yl9kZWx0YSA9IHdiX2FmdGVyIC0gd2JfYmVmb3JlO1xcbitcXG4rXFx0aWYgKHB3Yl9iX2RlbHRhIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInpzd3B3Yl9wcm9hY3RpdmVfYiBkaWQgbm90IGluY3JlYXNlOiBkZWx0YT0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBwd2JfYl9kZWx0YSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmICh3Yl9kZWx0YSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ6c3dwd2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxcXG5cXFwiLCB3Yl9kZWx0YSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBLU0ZUX1BBU1M7XFxuK291dDpcXG4rXFx0Y2dfZGVzdHJveSh0ZXN0X2dyb3VwKTtcXG4rXFx0ZnJlZSh0ZXN0X2dyb3VwKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxcbiBzdHJ1Y3QgenN3YXBfdGVzdCB7XFxuIFxcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcXG5AQCAtNzgzLDYgKzk0MSw3IEBAIHN0cnVjdCB6c3dhcF90ZXN0IHtcXG4gXFx0VCh0ZXN0X25vX2ttZW1fYnlwYXNzKSxcXG4gXFx0VCh0ZXN0X25vX2ludmFzaXZlX2Nncm91cF9zaHJpbmspLFxcbiBcXHRUKHRlc3RfenN3YXBfaW5jb21wcmVzc2libGUpLFxcbitcXHRUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksXFxuIH07XFxuICN1bmRlZiBUXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OToxMy43MDg2MjExNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzM2NDA1MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZjYThlZTFjM2I0MDMxMjcxZmM2MTRjMmMwMmMxMzY3NzM1YmE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjQ5OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZTFmNmE0NzI5YTY1ZTYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTE0MjUsOSArMTQyNSwxMCBAQCBQQUdFX1NJWkUgbXVsdGlwbGUgd2hlbiByZWFkIGJhY2suXG4gXG4gVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgID09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0ICBzd2FwcGluZXNzICAgICAgICAgICAgU3dhcHBpbmVzcyB2YWx1ZSB0byByZWNsYWltIHdpdGhcbi1cdCAgPT09PT09PT09PSAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgIHNvdXJjZT16c3dhcCAgICAgICAgICBPbmx5IHBlcmZvcm0gcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFja1xuK1x0ICA9PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBcdFNwZWNpZnlpbmcgYSBzd2FwcGluZXNzIHZhbHVlIGluc3RydWN0cyB0aGUga2VybmVsIHRvIHBlcmZvcm1cbiBcdHRoZSByZWNsYWltIHdpdGggdGhhdCBzd2FwcGluZXNzIHZhbHVlLiBOb3RlIHRoYXQgdGhpcyBoYXMgdGhlXG5AQCAtMTQzNyw2ICsxNDM4LDE5IEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGUgdmFsaWQgcmFuZ2UgZm9yIHN3YXBwaW5lc3MgaXMgWzAtMjAwLCBtYXhdLCBzZXR0aW5nXG4gXHRzd2FwcGluZXNzPW1heCBleGNsdXNpdmVseSByZWNsYWltcyBhbm9ueW1vdXMgbWVtb3J5LlxuIFxuK1x0VGhlIHNvdXJjZT16c3dhcCBrZXkgc2tpcHMgb3JkaW5hcnkgbWVtb3J5IHJlY2xhaW0gYW5kXG4rXHR3cml0ZXMgYmFjayBwYWdlcyBmcm9tIHpzd2FwIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlIHVudGlsXG4rXHR0aGUgcmVxdWVzdGVkIGFtb3VudCBoYXMgYmVlbiB3cml0dGVuIG9yIG5vIGZ1cnRoZXIgY2FuZGlkYXRlc1xuK1x0YXJlIGZvdW5kLiBUaGlzIGlzIHVzZWZ1bCB0byBwcm9hY3RpdmVseSBvZmZsb2FkIGNvbGQgY29tcHJlc3NlZFxuK1x0ZGF0YSBmcm9tIHRoZSB6c3dhcCBwb29sIHRvIHRoZSBzd2FwIGRldmljZS4gSXQgaXMgb25seSBhdmFpbGFibGVcbitcdGlmIHpzd2FwIHdyaXRlYmFjayBpcyBlbmFibGVkLiBzb3VyY2U9enN3YXAgY2Fubm90IGJlXG4rXHRjb21iaW5lZCB3aXRoIHN3YXBwaW5lc3M7IHNwZWNpZnlpbmcgYm90aCByZXR1cm5zIC1FSU5WQUwuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdCAgIyBXcml0ZWJhY2sgdXAgdG8gMTBNQiBvZiBjb21wcmVzc2VkIGRhdGEgZnJvbSB6c3dhcCB0byB0aGUgYmFja2luZyBzd2FwXG4rXHQgIGVjaG8gXCIxME0gc291cmNlPXpzd2FwXCIgXHUwMDNlIG1lbW9yeS5yZWNsYWltXG4rXG4gICBtZW1vcnkucGVha1xuIFx0QSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLlxuIFxuQEAgLTE3MzQsNiArMTc0OCwxMCBAQCBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxuIFx0ICB6c3dwd2JcbiBcdFx0TnVtYmVyIG9mIHBhZ2VzIHdyaXR0ZW4gZnJvbSB6c3dhcCB0byBzd2FwLlxuIFxuK1x0ICB6c3dwd2JfcHJvYWN0aXZlX2JcbitcdFx0Qnl0ZXMgb2YgY29tcHJlc3NlZCBkYXRhIHByb2FjdGl2ZWx5IHdyaXR0ZW4gYmFjayBmcm9tXG4rXHRcdHpzd2FwIHRvIHN3YXAgdmlhIHRoZSBtZW1vcnkucmVjbGFpbSBzb3VyY2U9enN3YXAga2V5LlxuK1xuIFx0ICB6c3dhcF9pbmNvbXBcbiBcdFx0TnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXBcbiBcdFx0d2l0aG91dCBjb21wcmVzc2lvbi4gVGhlc2UgcGFnZXMgY291bGQgbm90IGJlIGNvbXByZXNzZWQgdG9cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0venN3YXAucnN0XG5pbmRleCAyNDY0NDI1Yzc4M2RlMi4uYjQ5YjhjMTMwMzg5MDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS96c3dhcC5yc3RcbkBAIC0xMzEsNyArMTMxLDE2IEBAIFVzZXIgY2FuIGVuYWJsZSBpdCBhcyBmb2xsb3dzOjpcbiAgIGVjaG8gWSBcdTAwM2UgL3N5cy9tb2R1bGUvenN3YXAvcGFyYW1ldGVycy9zaHJpbmtlcl9lbmFibGVkXG4gXG4gVGhpcyBjYW4gYmUgZW5hYmxlZCBhdCB0aGUgYm9vdCB0aW1lIGlmIGBgQ09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gYCBpc1xuLXNlbGVjdGVkLlxuK3NlbGVjdGVkLiBPbmNlIGVuYWJsZWQsIHRoZSBzaHJpbmtlciBhdXRvbWF0aWNhbGx5IHdyaXRlcyBiYWNrIHpzd2FwIHBhZ2VzIHRvXG4rYmFja2luZyBzd2FwIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cbitcbitJZiB1c2VycyB3YW50IHRvIGV4cGxpY2l0bHkgdHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZvciBhIHNwZWNpZmljXG4rbWVtb3J5IGNncm91cCB3aXRob3V0IGludm9raW5nIHN0YW5kYXJkIHBhZ2UgcmVjbGFpbSwgaXQgY2FuIGJlIGRvbmUgYXMgZm9sbG93czo6XG4rXG4rXHRlY2hvIFwiMTBNIHNvdXJjZT16c3dhcFwiIFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9cdTAwM2NjZ3JvdXAtbmFtZVx1MDAzZS9tZW1vcnkucmVjbGFpbVxuK1xuK0JvdGggb2YgdGhlIG1ldGhvZHMgbWVudGlvbmVkIGFib3ZlIGFyZSBzdWJqZWN0IHRvIHRoZSBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYFxuK2NvbnRyb2wuIFRoaXMgbWVhbnMgdGhhdCBgYG1lbW9yeS56c3dhcC53cml0ZWJhY2tgYCBjYW4gcHJldmVudCBhbGwgenN3YXAgd3JpdGViYWNrLlxuIFxuIEEgZGVidWdmcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgZm9yIHZhcmlvdXMgc3RhdGlzdGljIGFib3V0IHBvb2wgc2l6ZSwgbnVtYmVyXG4gb2YgcGFnZXMgc3RvcmVkLCBzYW1lLXZhbHVlIGZpbGxlZCBwYWdlcyBhbmQgdmFyaW91cyBjb3VudGVycyBmb3IgdGhlIHJlYXNvbnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlMWY0NmEwMDE2ZmNmZC4uNTY1ODBiMjY0ZGM0MjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC00MCw2ICs0MCw3IEBAIGVudW0gbWVtY2dfc3RhdF9pdGVtIHtcbiBcdE1FTUNHX1pTV0FQX0IsXG4gXHRNRU1DR19aU1dBUFBFRCxcbiBcdE1FTUNHX1pTV0FQX0lOQ09NUCxcbitcdE1FTUNHX1pTV1BXQl9QUk9BQ1RJVkVfQixcbiBcdE1FTUNHX05SX1NUQVQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li5lNWYyMTc3NTk4OTRlZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MCwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHQgICAgdTY0IGJ5dGVzX3RvX3dyaXRlYmFjaylcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggZDIwZmZjODI3MzA2ZTkuLmQ4MWMzNDQ4NGJjYTI4IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MzMsNiArNDMzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19zdGF0X2l0ZW1zW10gPSB7XG4gXHRNRU1DR19aU1dBUF9CLFxuIFx0TUVNQ0dfWlNXQVBQRUQsXG4gXHRNRU1DR19aU1dBUF9JTkNPTVAsXG4rXHRNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0IsXG4gfTtcbiBcbiAjZGVmaW5lIE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyBBUlJBWV9TSVpFKG1lbWNnX25vZGVfc3RhdF9pdGVtcylcbkBAIC0xNTU4LDYgKzE1NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuIFx0eyBcInpzd2FwXCIsXHRcdFx0TUVNQ0dfWlNXQVBfQlx0XHRcdH0sXG4gXHR7IFwienN3YXBwZWRcIixcdFx0XHRNRU1DR19aU1dBUFBFRFx0XHRcdH0sXG4gXHR7IFwienN3YXBfaW5jb21wXCIsXHRcdE1FTUNHX1pTV0FQX0lOQ09NUFx0XHR9LFxuK1x0eyBcInpzd3B3Yl9wcm9hY3RpdmVfYlwiLFx0XHRNRU1DR19aU1dQV0JfUFJPQUNUSVZFX0JcdH0sXG4gI2VuZGlmXG4gXHR7IFwiZmlsZV9tYXBwZWRcIixcdFx0TlJfRklMRV9NQVBQRURcdFx0XHR9LFxuIFx0eyBcImZpbGVfZGlydHlcIixcdFx0XHROUl9GSUxFX0RJUlRZXHRcdFx0fSxcbkBAIC0xNjE0LDYgKzE2MTYsNyBAQCBzdGF0aWMgaW50IG1lbWNnX3BhZ2Vfc3RhdGVfdW5pdChpbnQgaXRlbSlcbiBcdHN3aXRjaCAoaXRlbSkge1xuIFx0Y2FzZSBNRU1DR19QRVJDUFVfQjpcbiBcdGNhc2UgTUVNQ0dfWlNXQVBfQjpcbitcdGNhc2UgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9COlxuIFx0Y2FzZSBOUl9TTEFCX1JFQ0xBSU1BQkxFX0I6XG4gXHRjYXNlIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9COlxuIFx0XHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNTZlZDdmZjQ4ZWM5ZGYgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02NCw2ICs2NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtNzg1NSwxMSArNzg1NiwxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbiBlbnVtIHtcbiBcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuIFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG4rXHRNRU1PUllfUkVDTEFJTV9TT1VSQ0UsXG4gXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxuIH07XG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuIFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcInN3YXBwaW5lc3M9JWRcIn0sXG4gXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcInN3YXBwaW5lc3M9bWF4XCJ9LFxuK1x0eyBNRU1PUllfUkVDTEFJTV9TT1VSQ0UsIFwic291cmNlPSVzXCJ9LFxuIFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG4gfTtcbiBcbkBAIC03ODY5LDkgKzc4NzIsMTIgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuIFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuIFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbitcdGJvb2wgenN3YXBfd3JpdGViYWNrX29ubHkgPSBmYWxzZTtcbiBcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbitcdGNoYXIgc291cmNlWzE2XTtcbiBcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbiBcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbitcdHU2NCBucl9ieXRlcztcbiBcbiBcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc4NzksNyArNzg4NSw4IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4gXG4gXHRvbGRfYnVmID0gYnVmO1xuLVx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbitcdG5yX2J5dGVzID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpO1xuK1x0bnJfdG9fcmVjbGFpbSA9IG5yX2J5dGVzIC8gUEFHRV9TSVpFO1xuIFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03ODk5LDExICs3OTA2LDI2IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiBcdFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcbiBcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU09VUkNFOlxuK1x0XHRcdGlmIChtYXRjaF9zdHJsY3B5KHNvdXJjZSwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKHNvdXJjZSkpIFx1MDAzZT0gc2l6ZW9mKHNvdXJjZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHQvKiBPbmx5IHpzd2FwIGlzIHN1cHBvcnRlZCBhcyBhIHJlY2xhaW0gc291cmNlIGZvciBub3cuICovXG4rXHRcdFx0aWYgKHN0cmNtcChzb3VyY2UsIFwienN3YXBcIikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR6c3dhcF93cml0ZWJhY2tfb25seSA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICh6c3dhcF93cml0ZWJhY2tfb25seSkge1xuK1x0XHQvKiBzb3VyY2U9enN3YXAgYW5kIHN3YXBwaW5lc3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gKi9cbitcdFx0aWYgKHN3YXBwaW5lc3MgIT0gLTEpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrKG1lbWNnLCBucl9ieXRlcyk7XG4rXHR9XG4rXG4gXHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG4gXHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG4gXHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMzU2YzE3MzljNjhmOSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbitzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHtcbitcdHVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjtcbitcdGJvb2wgZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGU7XG4rfTtcbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xMDg5LDggKzEwOTQsOSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb1xuIFx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB6c3dhcF9lbnRyeSwgbHJ1KTtcbi1cdGJvb2wgKmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gKGJvb2wgKilhcmc7XG4rXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnICp3YWxrX2FyZyA9IGFyZztcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuK1x0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGVudW0gbHJ1X3N0YXR1cyByZXQgPSBMUlVfUkVNT1ZFRF9SRVRSWTtcbiBcdGludCB3cml0ZWJhY2tfcmVzdWx0O1xuIFxuQEAgLTExMzMsMTAgKzExMzksMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBcbiBcdC8qXG4gXHQgKiBPbmNlIHRoZSBscnUgbG9jayBpcyBkcm9wcGVkLCB0aGUgZW50cnkgbWlnaHQgZ2V0IGZyZWVkLiBUaGVcbi1cdCAqIHN3cGVudHJ5IGlzIGNvcGllZCB0byB0aGUgc3RhY2ssIGFuZCBlbnRyeSBpc24ndCBkZXJlZidkIGFnYWluXG4tXHQgKiB1bnRpbCB0aGUgZW50cnkgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4rXHQgKiBuZWVkZWQgZmllbGRzIGFyZSBjb3BpZWQgdG8gdGhlIHN0YWNrLCBhbmQgZW50cnkgaXNuJ3QgZGVyZWYnZFxuK1x0ICogYWdhaW4gdW50aWwgaXQgaXMgdmVyaWZpZWQgdG8gc3RpbGwgYmUgYWxpdmUgaW4gdGhlIHRyZWUuXG4gXHQgKi9cbiBcdHN3cGVudHJ5ID0gZW50cnktXHUwMDNlc3dwZW50cnk7XG4rXHRsZW5ndGggPSBlbnRyeS1cdTAwM2VsZW5ndGg7XG4gXG4gXHQvKlxuIFx0ICogSXQncyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgaGVyZSBiZWNhdXNlIHdlIHJldHVybiBlaXRoZXJcbkBAIC0xMTU1LDEyICsxMTYyLDEzIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vXG4gXHRcdCAqIGludG8gdGhlIHdhcm1lciByZWdpb24uIFdlIHNob3VsZCB0ZXJtaW5hdGUgc2hyaW5raW5nIChpZiB3ZSdyZSBpbiB0aGUgZHluYW1pY1xuIFx0XHQgKiBzaHJpbmtlciBjb250ZXh0KS5cbiBcdFx0ICovXG4tXHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QgXHUwMDI2XHUwMDI2IGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKSB7XG4rXHRcdGlmICh3cml0ZWJhY2tfcmVzdWx0ID09IC1FRVhJU1QpIHtcbiBcdFx0XHRyZXQgPSBMUlVfU1RPUDtcbi1cdFx0XHQqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSB0cnVlO1xuK1x0XHRcdHdhbGtfYXJnLVx1MDAzZWVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gdHJ1ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0enN3YXBfd3JpdHRlbl9iYWNrX3BhZ2VzKys7XG4rXHRcdHdhbGtfYXJnLVx1MDAzZWJ5dGVzX3dyaXR0ZW4gKz0gbGVuZ3RoO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xMTY5LDggKzExNzcsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua193YWxrX2FyZyB3YWxrX2FyZyA9IHtcbitcdFx0LmJ5dGVzX3dyaXR0ZW4gPSAwLFxuK1x0XHQuZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSBmYWxzZSxcbitcdH07XG4gXHR1bnNpZ25lZCBsb25nIHNocmlua19yZXQ7XG4tXHRib29sIGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlID0gZmFsc2U7XG4gXG4gXHRpZiAoIXpzd2FwX3Nocmlua2VyX2VuYWJsZWQgfHxcbiBcdFx0XHQhbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzYy1cdTAwM2VtZW1jZykpIHtcbkBAIC0xMTc5LDkgKzExOTAsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXHR9XG4gXG4gXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG4tXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbitcdFx0XHUwMDI2d2Fsa19hcmcpO1xuIFxuLVx0aWYgKGVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuK1x0aWYgKHdhbGtfYXJnLmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2hyaW5rX3JldCA/IHNocmlua19yZXQgOiBTSFJJTktfU1RPUDtcbkBAIC0xMjc1LDkgKzEyODYsMzEgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbiBcdHJldHVybiBzaHJpbmtlcjtcbiB9XG4gXG4tc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuKyNkZWZpbmUgTlJfWlNXQVBfV0JfQkFUQ0hcdDY0VUxcbitcbisvKlxuKyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xuKyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxuKyAqXG4rICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxuKyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xuKyAqIGVhY2ggZW50cnkgaXMgc2Nhbm5lZCBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXJcbisgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcbisgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcbisgKiBlbnRyaWVzLlxuKyAqXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrIChcdTAwM2U9IDApLCBvciAtRU5PRU5UXG4rICogaWYgQG1lbWNnIGhhcyB3cml0ZWJhY2sgZGlzYWJsZWQsIGlzIGEgem9tYmllIGNncm91cCwgb3IgaGFzIGVtcHR5XG4rICogenN3YXAgTFJVcy5cbisgKi9cbitzdGF0aWMgbG9uZyBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4pXG4ge1xuLVx0aW50IG5pZCwgc2hydW5rID0gMCwgc2Nhbm5lZCA9IDA7XG4rXHRzdHJ1Y3QgenN3YXBfc2hyaW5rX3dhbGtfYXJnIHdhbGtfYXJnID0ge1xuK1x0XHQuYnl0ZXNfd3JpdHRlbiA9IDAsXG4rXHRcdC5lbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IGZhbHNlLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbitcdGludCBuaWQ7XG4gXG4gXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMjkwLDIzICsxMzIzLDk3IEBAIHN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9OT1JNQUxfTUVNT1JZKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsayA9IDE7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsaztcbitcbitcdFx0LypcbitcdFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXG4rXHRcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cbitcdFx0ICovXG4rXHRcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxuK1x0XHRcdFx0IGxpc3RfbHJ1X2NvdW50X29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xuK1x0XHRpZiAoIW5yX3RvX3dhbGspXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG5yX3JlbWFpbmluZyAtPSBucl90b193YWxrO1xuK1x0XHRsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZywgXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxuK1x0XHRcdFx0ICBcdTAwMjZ3YWxrX2FyZywgXHUwMDI2bnJfdG9fd2Fsayk7XG4rXHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4rXHRcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xuIFxuLVx0XHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsIE5VTEwsIFx1MDAyNm5yX3RvX3dhbGspO1xuLVx0XHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xuK1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbitcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xuK1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbitcdHJldHVybiB3YWxrX2FyZy5ieXRlc193cml0dGVuO1xuK31cbitcbisvKiBUcmFjayBwcm9ncmVzcyBvZiBhIG1lbWNnLXRyZWUgd3JpdGViYWNrIHdhbGsuICovXG4rc3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSB7XG4rXHRpbnQgc2NhbnM7XG4rXHRpbnQgZmFpbHVyZXM7XG4rfTtcbitcbisvKlxuKyAqIFRha2Ugb25lIHN0ZXAgb2YgYSBtZW1jZy10cmVlIHdyaXRlYmFjayB3YWxrIGRyaXZlbiBieSB0aGUgY2FsbGVyJ3NcbisgKiBpdGVyYXRvciwgYW5kIGZvbGQgdGhlIHJlc3VsdCBpbnRvIEBzLCB0aGUgcmV0cnkgYm9va2tlZXBpbmcgc2hhcmVkXG4rICogYWNyb3NzIHN0ZXBzLiBAbWVtY2cgaXMgdGhlIGl0ZXJhdG9yJ3MgY3VycmVudCBtZW1jZywgb3IgTlVMTCBvbmNlXG4rICogaXQgaGFzIHdyYXBwZWQgYXJvdW5kIGFmdGVyIGEgZnVsbCBwYXNzIG92ZXIgdGhlIHRyZWUuXG4rICpcbisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgdG8gc2lnbmFsIHRoZSBjYWxsZXIgdG8gYWJvcnQgdGhlIHdhbGsgYWZ0ZXJcbisgKiBlbmNvdW50ZXJpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgTUFYX1JFQ0xBSU1fUkVUUklFUyB0aW1lczpcbisgKiAtIE5vIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2dzIHdlcmUgZm91bmQgaW4gYSBtZW1jZyB0cmVlIHdhbGsuXG4rICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gYmFjayAoXHUwMDNlPSAwKSwgb3IgLUVCVVNZXG4rICogd2hlbiB0aGUgY2FsbGVyIHNob3VsZCBhYm9ydCB0aGUgd2Fsay5cbisgKi9cbitzdGF0aWMgbG9uZyB6c3dhcF9zaHJpbmtfb25lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9zaHJpbmtfc3RhdGUgKnMpXG4re1xuK1x0bG9uZyBzaHJ1bms7XG4rXG4rXHQvKlxuK1x0ICogUmVhY2hpbmcgYSBOVUxMIG1lbWNnIG1lYW5zIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyBjb21wbGV0ZWQuXG4rXHQgKiBFeGNsdWRlIHRoZSBtZW1jZy1kaXNhYmxlZCBjYXNlLCB3aGVyZSBpdCBpcyBhbHdheXMgTlVMTCwgYW5kXG4rXHQgKiBmYWxsIHRocm91Z2ggdG8gc2hyaW5rIHRoZSByb290IExSVSBkaXJlY3RseS5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWYgd2UgZm91bmRcbitcdFx0ICogY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXMtXHUwMDNlc2NhbnMgXHUwMDI2XHUwMDI2ICsrcy1cdTAwM2VmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdHMtXHUwMDNlc2NhbnMgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNocnVuayA9IHNocmlua19tZW1jZyhtZW1jZywgTlJfWlNXQVBfV0JfQkFUQ0gpO1xuK1xuK1x0LypcbitcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy4gV2l0aCBtZW1jZ1xuK1x0ICogZW5hYmxlZCB0aGlzIGlzIG5vdCBhbiBpc3N1ZSBhcyBsb25nIGFzIHdlIGNhbiBmaW5kIGFub3RoZXIgbWVtY2dcbitcdCAqIHdpdGggcGFnZXMgaW4genN3YXAsIHNvIHNraXAgd2l0aG91dCBjb3VudGluZyBpdCBhcyBhIGNhbmRpZGF0ZS5cbitcdCAqIFdpdGggbWVtY2cgZGlzYWJsZWQgdGhlIHJvb3QgTFJVIGlzIHRoZSBvbmx5IHRhcmdldCwgc28gd2Ugc2hvdWxkXG4rXHQgKiBhYm9ydCBpZiBpdCBoYXMgbm8gd3JpdGViYWNrLWNhbmRpZGF0ZSBwYWdlcy5cbitcdCAqL1xuK1x0aWYgKHNocnVuayA9PSAtRU5PRU5UKVxuK1x0XHRyZXR1cm4gbWVtX2Nncm91cF9kaXNhYmxlZCgpID8gLUVCVVNZIDogMDtcbitcdHMtXHUwMDNlc2NhbnMrKztcbitcbitcdGlmIChzaHJ1bmsgXHUwMDNjPSAwIFx1MDAyNlx1MDAyNiArK3MtXHUwMDNlZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldHVybiBzaHJ1bms7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi1cdGludCByZXQsIGZhaWx1cmVzID0gMCwgYXR0ZW1wdHMgPSAwO1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHRocjtcbiBcbiBcdC8qIFJlY2xhaW0gZG93biB0byB0aGUgYWNjZXB0IHRocmVzaG9sZCAqL1xuQEAgLTEzMTgsMTEgKzE0MjUsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdCAqIHdyaXRlYmFjay1kaXNhYmxlZCBtZW1jZ3MgKG1lbW9yeS56c3dhcC53cml0ZWJhY2s9MCkgYXJlIG5vdFxuIFx0ICogY2FuZGlkYXRlcyBmb3Igc2hyaW5raW5nLlxuIFx0ICpcbi1cdCAqIFNocmlua2luZyB3aWxsIGJlIGFib3J0ZWQgaWYgd2UgZW5jb3VudGVyIHRoZSBmb2xsb3dpbmdcbi1cdCAqIE1BWF9SRUNMQUlNX1JFVFJJRVMgdGltZXM6XG4tXHQgKiAtIE5vIHdyaXRlYmFjay1jYW5kaWRhdGUgbWVtY2dzIGZvdW5kIGluIGEgbWVtY2cgdHJlZSB3YWxrLlxuLVx0ICogLSBTaHJpbmtpbmcgYSB3cml0ZWJhY2stY2FuZGlkYXRlIG1lbWNnIGZhaWxlZC5cbi1cdCAqXG4gXHQgKiBXZSBzYXZlIGl0ZXJhdGlvbiBjdXJzb3IgbWVtY2cgaW50byB6c3dhcF9uZXh0X3NocmluayxcbiBcdCAqIHdoaWNoIGNhbiBiZSBtb2RpZmllZCBieSB0aGUgb2ZmbGluZSBtZW1jZyBjbGVhbmVyXG4gXHQgKiB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoKS5cbkBAIC0xMzM3LDcgKzE0MzksMTEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHQgKiBvZmZsaW5lIG1lbWNnIGxlZnQgaW4genN3YXBfbmV4dF9zaHJpbmsgd2lsbCBob2xkIHRoZSByZWZlcmVuY2VcbiBcdCAqIHVudGlsIHRoZSBuZXh0IHJ1biBvZiBzaHJpbmtfd29ya2VyKCkuXG4gXHQgKi9cbi1cdGRvIHtcbitcdHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpIHtcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0XHRsb25nIHJldDtcbitcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdC8qXG4gXHRcdCAqIFN0YXJ0IHNocmlua2luZyBmcm9tIHRoZSBuZXh0IG1lbWNnIGFmdGVyIHpzd2FwX25leHRfc2hyaW5rLlxuIFx0XHQgKiBXaGVuIHRoZSBvZmZsaW5lIGNsZWFuZXIgaGFzIGFscmVhZHkgYWR2YW5jZWQgdGhlIGN1cnNvcixcbkBAIC0xMzU2LDM3ICsxNDYyLDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIFx0XHR9IHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XG4gXG4tXHRcdGlmICghbWVtY2cpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxuLVx0XHRcdCAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICghYXR0ZW1wdHMgXHUwMDI2XHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGF0dGVtcHRzID0gMDtcbi1cdFx0XHRnb3RvIHJlc2NoZWQ7XG4tXHRcdH1cbi1cbi1cdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcbitcdFx0cmV0ID0genN3YXBfc2hyaW5rX29uZV9tZW1jZyhtZW1jZywgXHUwMDI2cyk7XG4gXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xuIFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZXJlIGFyZSBubyB3cml0ZWJhY2stY2FuZGlkYXRlIHBhZ2VzIGluIHRoZSBtZW1jZy5cbi1cdFx0ICogVGhpcyBpcyBub3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB3ZSBjYW4gZmluZCBhbm90aGVyIG1lbWNnXG4tXHRcdCAqIHdpdGggcGFnZXMgaW4genN3YXAuIFNraXAgdGhpcyB3aXRob3V0IGluY3JlbWVudGluZyBhdHRlbXB0c1xuLVx0XHQgKiBhbmQgZmFpbHVyZXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAocmV0ID09IC1FTk9FTlQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdCsrYXR0ZW1wdHM7XG4tXG4tXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICsrZmFpbHVyZXMgPT0gTUFYX1JFQ0xBSU1fUkVUUklFUylcbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdFx0YnJlYWs7XG4tcmVzY2hlZDpcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9IHdoaWxlICh6c3dhcF90b3RhbF9wYWdlcygpIFx1MDAzZSB0aHIpO1xuK1x0fVxuIH1cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5AQCAtMTQ5Miw3ICsxNTczLDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkge1xuIFx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xuLVx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xuK1x0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnLCBudW1fbm9kZV9zdGF0ZShOX05PUk1BTF9NRU1PUlkpKSBcdTAwM2M9IDApIHtcbiBcdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdFx0Z290byBwdXRfb2JqY2c7XG4gXHRcdH1cbkBAIC0xNjMyLDYgKzE3MTMsNTggQEAgaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBieXRlc190b193cml0ZWJhY2spXG4re1xuK1x0c3RydWN0IHpzd2FwX3Nocmlua19zdGF0ZSBzID0ge307XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlciA9IE5VTEw7XG4rXHR1NjQgYnl0ZXNfd3JpdHRlbiA9IDA7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWJ5dGVzX3RvX3dyaXRlYmFjaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR3aGlsZSAoYnl0ZXNfd3JpdHRlbiBcdTAwM2MgYnl0ZXNfdG9fd3JpdGViYWNrKSB7XG4rXHRcdGxvbmcgc2hydW5rO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gLUVJTlRSO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFVzZSBhIGxvY2FsIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIG1lbWNnIGFuZCBpdHMgb25saW5lIGRlc2NlbmRhbnRzXG4rXHRcdCAqIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBVcG9uIGV4aXRpbmcgdGhlIGxvb3AsIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpXG4rXHRcdCAqIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhlIGl0ZXJhdG9yIHJlZmVyZW5jZS5cbitcdFx0ICovXG4rXHRcdGRvIHtcbitcdFx0XHRpdGVyID0gbWVtX2Nncm91cF9pdGVyKG1lbWNnLCBpdGVyLCBOVUxMKTtcbitcdFx0fSB3aGlsZSAoaXRlciBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShpdGVyKSk7XG4rXG4rXHRcdHNocnVuayA9IHpzd2FwX3Nocmlua19vbmVfbWVtY2coaXRlciwgXHUwMDI2cyk7XG4rXHRcdGlmIChzaHJ1bmsgXHUwMDNlIDApIHtcbitcdFx0XHRieXRlc193cml0dGVuICs9IHNocnVuaztcbitcdFx0XHRtb2RfbWVtY2dfc3RhdGUoaXRlciwgTUVNQ0dfWlNXUFdCX1BST0FDVElWRV9CLCBzaHJ1bmspO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0YWtlbiBieSBtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUoKSAqL1xuK1x0XHRtZW1fY2dyb3VwX3B1dChpdGVyKTtcbitcbitcdFx0aWYgKHNocnVuayA9PSAtRUJVU1kpIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsobWVtY2csIGl0ZXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbiB7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuaW5kZXggNDliMzZlZTc5MTYwNmYuLmRmZDVmMjRiOWQ5OTBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY1xuQEAgLTYwLDcgKzYwLDEyIEBAIHN0YXRpYyBpbnQgZ2V0X3pzd2FwX3N0b3JlZF9wYWdlcyhzaXplX3QgKnZhbHVlKVxuIFxuIHN0YXRpYyBsb25nIGdldF9jZ193Yl9jb3VudChjb25zdCBjaGFyICpjZylcbiB7XG4tXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3YlwiKTtcbitcdHJldHVybiBjZ19yZWFkX2tleV9sb25nKGNnLCBcIm1lbW9yeS5zdGF0XCIsIFwienN3cHdiIFwiKTtcbit9XG4rXG4rc3RhdGljIGxvbmcgZ2V0X2NnX3B3Yl9ieXRlcyhjb25zdCBjaGFyICpjZylcbit7XG4rXHRyZXR1cm4gY2dfcmVhZF9rZXlfbG9uZyhjZywgXCJtZW1vcnkuc3RhdFwiLCBcInpzd3B3Yl9wcm9hY3RpdmVfYiBcIik7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF96c3dwb3V0KGNvbnN0IGNoYXIgKmNncm91cClcbkBAIC0zNTUsNiArMzYwLDcgQEAgc3RhdGljIGludCBhdHRlbXB0X3dyaXRlYmFjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4ge1xuIFx0bG9uZyB6c3dwd2JfYmVmb3JlLCB6c3dwd2JfYWZ0ZXI7XG4rXHRsb25nIHB3Yl9ieXRlcztcbiBcbiBcdHpzd3B3Yl9iZWZvcmUgPSBnZXRfY2dfd2JfY291bnQoY2dyb3VwKTtcbiBcdGlmICh6c3dwd2JfYmVmb3JlICE9IDApIHtcbkBAIC0zNjIsNiArMzY4LDEyIEBAIHN0YXRpYyBpbnQgdGVzdF96c3dhcF93cml0ZWJhY2tfb25lKGNvbnN0IGNoYXIgKmNncm91cCwgYm9vbCB3YilcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuK1x0cHdiX2J5dGVzID0gZ2V0X2NnX3B3Yl9ieXRlcyhjZ3JvdXApO1xuK1x0aWYgKHB3Yl9ieXRlcyBcdTAwM2UgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInpzd3B3Yl9wcm9hY3RpdmVfYl9iZWZvcmUgPSAlbGQgaW5zdGVhZCBvZiAwXFxuXCIsIHB3Yl9ieXRlcyk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbiBcdGlmIChjZ19ydW4oY2dyb3VwLCBhdHRlbXB0X3dyaXRlYmFjaywgKHZvaWQgKikgXHUwMDI2d2IpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMzc5LDYgKzM5MSwxNyBAQCBzdGF0aWMgaW50IHRlc3RfenN3YXBfd3JpdGViYWNrX29uZShjb25zdCBjaGFyICpjZ3JvdXAsIGJvb2wgd2IpXG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBhdHRlbXB0X3dyaXRlYmFjaygpIGRvZXMgbm90IHVzZSB0aGUgcHJvYWN0aXZlIHdyaXRlYmFjayBwYXRoLCBzb1xuK1x0ICogenN3cHdiX3Byb2FjdGl2ZV9iIG11c3Qgc3RheSBhdCB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlclxuK1x0ICogd3JpdGViYWNrIHdhcyBlbmFibGVkLlxuK1x0ICovXG4rXHRwd2JfYnl0ZXMgPSBnZXRfY2dfcHdiX2J5dGVzKGNncm91cCk7XG4rXHRpZiAocHdiX2J5dGVzIFx1MDAzZSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiX3Byb2FjdGl2ZV9iX2FmdGVyIGlzICVsZCwgZXhwZWN0ZWQgMFxcblwiLCBwd2JfYnl0ZXMpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzcwLDYgKzc5MywxNDEgQEAgc3RhdGljIGludCB0ZXN0X3pzd2FwX2luY29tcHJlc3NpYmxlKGNvbnN0IGNoYXIgKnJvb3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIFRyaWdnZXIgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB3aXRoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4rICogMS4gQWxsb2NhdGUgbWVtb3J5LlxuKyAqIDIuIFB1c2ggYWxsb2NhdGVkIG1lbW9yeSBpbnRvIHpzd2FwLlxuKyAqIDMuIFByb2FjdGl2ZWx5IHdyaXRlIGJhY2sgenN3YXAgcGFnZXMgdG8gc3dhcFxuKyAqICAgIHVzaW5nIFwic291cmNlPXpzd2FwXCIuXG4rICovXG4rc3RhdGljIGludCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuK3tcbitcdGxvbmcgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRzaXplX3QgbWVtc2l6ZSA9IHBhZ2VzaXplICogMTAyNDtcbitcdGNoYXIgcmVjbGFpbV9jbWRbNjRdO1xuK1x0Y2hhciBidWZbcGFnZXNpemVdO1xuK1x0bG9uZyB6c3dhcF91c2FnZTtcbitcdGludCByZXQgPSAtMTtcbitcdGludCByYztcbitcdGNoYXIgKm1lbTtcbitcbitcdG1lbSA9IChjaGFyICopbWFsbG9jKG1lbXNpemUpO1xuK1x0aWYgKCFtZW0pXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgcGFnZXNpemU7IGkrKylcbitcdFx0YnVmW2ldID0gaSBcdTAwM2MgcGFnZXNpemUgLyAyID8gKGNoYXIpaSA6IDA7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWVtc2l6ZTsgaSArPSBwYWdlc2l6ZSlcbitcdFx0bWVtY3B5KFx1MDAyNm1lbVtpXSwgYnVmLCBwYWdlc2l6ZSk7XG4rXG4rXHQvKiBFdmljdCBhbGxvY2F0ZWQgbWVtb3J5IGludG8genN3YXAuICovXG4rXHRpZiAoY2dfd3JpdGVfbnVtZXJpYyhjZ3JvdXAsIFwibWVtb3J5LnJlY2xhaW1cIiwgbWVtc2l6ZSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJGYWlsZWQgdG8gcHVzaCBwYWdlcyBpbnRvIHpzd2FwXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHpzd2FwX3VzYWdlID0gY2dfcmVhZF9sb25nKGNncm91cCwgXCJtZW1vcnkuenN3YXAuY3VycmVudFwiKTtcbitcdGlmICh6c3dhcF91c2FnZSBcdTAwM2M9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJubyB6c3dhcCBwb29sIHRvIHdyaXRlIGJhY2tcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogVHJpZ2dlciBwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrLiAqL1xuK1x0c25wcmludGYocmVjbGFpbV9jbWQsIHNpemVvZihyZWNsYWltX2NtZCksIFwiJWxkIHNvdXJjZT16c3dhcFwiLCB6c3dhcF91c2FnZSk7XG4rXHRyYyA9IGNnX3dyaXRlKGNncm91cCwgXCJtZW1vcnkucmVjbGFpbVwiLCByZWNsYWltX2NtZCk7XG4rXHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FQUdBSU4pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJwcm9hY3RpdmUgenN3YXAgd3JpdGViYWNrIGZhaWxlZDogJWRcXG5cIiwgcmMpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0ZnJlZShtZW0pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja193cml0ZWJhY2tfaW52YWxpZF9pbnB1dHMoY29uc3QgY2hhciAqY2dyb3VwKVxuK3tcbitcdHN0YXRpYyBjaGFyICogY29uc3QgYmFkX2lucHV0c1tdID0ge1xuK1x0XHRcInNvdXJjZT16c3dhcFwiLFxuK1x0XHRcIjFNIHNvdXJjZT16c3dhcCBzd2FwcGluZXNzPTYwXCIsXG4rXHRcdFwiMU0gc3dhcHBpbmVzcz02MCBzb3VyY2U9enN3YXBcIixcbitcdFx0XCIxTSBzb3VyY2U9enN3YXAgc3dhcHBpbmVzcz1tYXhcIixcbitcdFx0XCIxTSBzd2FwcGluZXNzPW1heCBzb3VyY2U9enN3YXBcIixcbitcdH07XG4rXHRpbnQgaSwgcmM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJhZF9pbnB1dHMpOyBpKyspIHtcbitcdFx0cmMgPSBjZ193cml0ZShjZ3JvdXAsIFwibWVtb3J5LnJlY2xhaW1cIiwgYmFkX2lucHV0c1tpXSk7XG4rXHRcdGlmIChyYyAhPSAtRUlOVkFMKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJtZW1vcnkucmVjbGFpbSAnJXMnOiByZXR1cm5lZCAlZCwgZXhwZWN0ZWQgJWRcXG5cIixcbitcdFx0XHRcdCAgICAgICBiYWRfaW5wdXRzW2ldLCByYywgLUVJTlZBTCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X3pzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2soY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRsb25nIHdiX2JlZm9yZSwgd2JfYWZ0ZXI7XG4rXHRsb25nIHB3Yl9iX2JlZm9yZSwgcHdiX2JfYWZ0ZXI7XG4rXHRsb25nIHdiX2RlbHRhLCBwd2JfYl9kZWx0YTtcbitcdGludCByZXQgPSBLU0ZUX0ZBSUw7XG4rXHRjaGFyICp0ZXN0X2dyb3VwO1xuK1xuK1x0aWYgKGNnX3JlYWRfc3RyY21wKHJvb3QsIFwibWVtb3J5Lnpzd2FwLndyaXRlYmFja1wiLCBcIjFcIikpXG4rXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4rXG4rXHR0ZXN0X2dyb3VwID0gY2dfbmFtZShyb290LCBcInpzd2FwX3Byb2FjdGl2ZV90ZXN0XCIpO1xuK1x0aWYgKCF0ZXN0X2dyb3VwKVxuK1x0XHRyZXR1cm4gS1NGVF9GQUlMO1xuK1x0aWYgKGNnX2NyZWF0ZSh0ZXN0X2dyb3VwKSlcbitcdFx0Z290byBvdXQ7XG4rXHQvKlxuK1x0ICogQSBtaXNzaW5nIHpzd3B3Yl9wcm9hY3RpdmVfYiBzdGF0IG1lYW5zIHRoZSBrZXJuZWwgbGFja3MgcHJvYWN0aXZlXG4rXHQgKiB3cml0ZWJhY2sgc3VwcG9ydCwgc28gc2tpcCByYXRoZXIgdGhhbiBmYWlsLlxuK1x0ICovXG4rXHRpZiAoZ2V0X2NnX3B3Yl9ieXRlcyh0ZXN0X2dyb3VwKSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0aWYgKGNoZWNrX3dyaXRlYmFja19pbnZhbGlkX2lucHV0cyh0ZXN0X2dyb3VwKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9iZWZvcmUgPSBnZXRfY2dfcHdiX2J5dGVzKHRlc3RfZ3JvdXApO1xuK1x0d2JfYmVmb3JlID0gZ2V0X2NnX3diX2NvdW50KHRlc3RfZ3JvdXApO1xuK1x0aWYgKHB3Yl9iX2JlZm9yZSBcdTAwM2MgMCB8fCB3Yl9iZWZvcmUgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKGNnX3J1bih0ZXN0X2dyb3VwLCBwcm9hY3RpdmVfd3JpdGViYWNrX3dvcmtsb2FkLCBOVUxMKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9hZnRlciA9IGdldF9jZ19wd2JfYnl0ZXModGVzdF9ncm91cCk7XG4rXHR3Yl9hZnRlciA9IGdldF9jZ193Yl9jb3VudCh0ZXN0X2dyb3VwKTtcbitcdGlmIChwd2JfYl9hZnRlciBcdTAwM2MgMCB8fCB3Yl9hZnRlciBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwd2JfYl9kZWx0YSA9IHB3Yl9iX2FmdGVyIC0gcHdiX2JfYmVmb3JlO1xuK1x0d2JfZGVsdGEgPSB3Yl9hZnRlciAtIHdiX2JlZm9yZTtcbitcbitcdGlmIChwd2JfYl9kZWx0YSBcdTAwM2M9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJ6c3dwd2JfcHJvYWN0aXZlX2IgZGlkIG5vdCBpbmNyZWFzZTogZGVsdGE9JWxkXFxuXCIsXG4rXHRcdFx0ICAgICAgIHB3Yl9iX2RlbHRhKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAod2JfZGVsdGEgXHUwMDNjPSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwienN3cHdiIGRpZCBub3QgaW5jcmVhc2U6IGRlbHRhPSVsZFxcblwiLCB3Yl9kZWx0YSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gS1NGVF9QQVNTO1xuK291dDpcbitcdGNnX2Rlc3Ryb3kodGVzdF9ncm91cCk7XG4rXHRmcmVlKHRlc3RfZ3JvdXApO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuIHN0cnVjdCB6c3dhcF90ZXN0IHtcbiBcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbkBAIC03ODMsNiArOTQxLDcgQEAgc3RydWN0IHpzd2FwX3Rlc3Qge1xuIFx0VCh0ZXN0X25vX2ttZW1fYnlwYXNzKSxcbiBcdFQodGVzdF9ub19pbnZhc2l2ZV9jZ3JvdXBfc2hyaW5rKSxcbiBcdFQodGVzdF96c3dhcF9pbmNvbXByZXNzaWJsZSksXG4rXHRUKHRlc3RfenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFjayksXG4gfTtcbiAjdW5kZWYgVFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MTMuNzA4NjI0MTQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzMTQ1NjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBac3dhcCBXcml0ZWJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSB3aXRoIGBzb3VyY2U9enN3YXBgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBsZXQncyBicmVhayBkb3duIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIG51bWJlciBvZiBmaWxlcy4gSXQncyB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3pzd2FwLnJzdGApIHRvIHJlZmxlY3QgdGhpcyBuZXcgY2FwYWJpbGl0eSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZS4gV2UncmUgYWxzbyBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgaGVhZGVyIGZpbGVzIChgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYCkgYW5kIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgKGBtbS9tZW1jb250cm9sLmNgLCBgbW0vdm1zY2FuLmNgLCBgbW0venN3YXAuY2ApLiBUaGVyZSdzIGV2ZW4gYSB0ZXN0IHN1aXRlIGFkZGl0aW9uIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuY2ApLCB3aGljaCBpcyBncmVhdCDigJMgd2UgbmVlZCB0aG9yb3VnaCB0ZXN0aW5nIGZvciBhIGZlYXR1cmUgbGlrZSB0aGlzLlxuXG5UaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgbW9kaWZ5aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCB0byBwYXJzZSB0aGUgYHNvdXJjZT16c3dhcGAgb3B0aW9uLiBJZiBgenN3YXBfd3JpdGViYWNrX29ubHlgIGlzIGVuYWJsZWQsIGl0IGNhbGxzIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYC4gVGhlbiBgbW0venN3YXAuY2AgaW1wbGVtZW50cyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaXRzZWxmLCB3aGljaCwgaW4gdHVybiwgaXRlcmF0ZXMgdGhyb3VnaCBtZW1jZ3MgYW5kIGNhbGxzIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYC4gVGhlIGB6c3dhcF9zaHJpbmtfb25lX21lbWNnYCB0aGVuIGNhbGxzIGBzaHJpbmtfbWVtY2dgLiBUaGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCB0byBhY2NlcHQgYSBgbnJfdG9fc2NhbmAgYXJndW1lbnQgYW5kIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBiYWNrLiBUaGlzIGlzIGFsbCBjbGVhcmx5IGZ1bmN0aW9uYWwsIGludHJvZHVjaW5nIGEgd2F5IHRvIHByb2FjdGl2ZWx5IHRyaWdnZXIgd3JpdGViYWNrIG9mIHpzd2FwIHBhZ2VzLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uLiBJdCBwcm92aWRlcyBhIG5ldyBtZWNoYW5pc20gdG8gY29udHJvbCB6c3dhcCBiZWhhdmlvciB0aHJvdWdoIG1lbWNncy4gQmVjYXVzZSBpdCdzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdlIGFic29sdXRlbHkgbmVlZCB0byBjb25zaWRlciBpdCBhIHRhcmdldCBmb3IgZnV6emluZy4gQW55IG5ldyB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmVhbGx5IHJvYnVzdC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX1pTV0FQYCBpcyBvYnZpb3VzbHkgYSBtdXN0LWhhdmUgZm9yIGFueSBvZiB0aGlzIHRvIHdvcmssIGFuZCBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBiZWNhdXNlIGl0IHVzZXMgdGhlIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBJdCdzIGEgYml0IGVhcmx5LCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3pzd2FwLmNgIGl0c2VsZiBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjIwLjk0MDA4Mzc2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU3OTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNTcyLVxcdFpTV1BJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU1Ny1cXHR7IFxcXCJzaG1lbVxcXCIsXFx0XFx0XFx0TlJfU0hNRU1cXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTU4OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtMTU1OS1cXHR7IFxcXCJ6c3dhcFxcXCIsXFx0XFx0XFx0TUVNQ0dfWlNXQVBfQlxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDE2MD1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTczLVxcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmM6NDE3NDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTQxNzUtXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc5Mj1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cXG5tbS9tZW1jb250cm9sLmM6NTgyNzojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU4MjgtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjAwND1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwMjItfTtcXG5tbS9tZW1jb250cm9sLmM6NjAyMzojZW5kaWYgLyogQ09ORklHX1pTV0FQICovXFxubW0vbWVtY29udHJvbC5jLTYwMjQtXFxubW0vbWVtY29udHJvbC5jPTYwMjU9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDMzLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS9tZW1jb250cm9sLmMtNjAzNS1cXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcXG4tLVxcbm1tL3Ztc3RhdC5jPTExODc9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xNDUwLSNlbmRpZlxcbm1tL3Ztc3RhdC5jOjE0NTE6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL3Ztc3RhdC5jLTE0NTItXFx0W0koWlNXUElOKV1cXHRcXHRcXHRcXHQ9IFxcXCJ6c3dwaW5cXFwiLFxcbi0tXFxubW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xcbi0tXFxubW0venN3YXAuYy04OC0vKiBFbmFibGUvZGlzYWJsZSB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmM6OTA6c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmMtOTEtc3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxuLS1cXG5tbS96c3dhcC5jPTk3PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmMtOTktLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXFxubW0venN3YXAuYzoxMDA6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMTAxLXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXFxubW0venN3YXAuYzoxMjI6XFx0XFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmMtMTIzLW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG5tbS96c3dhcC5jOjEzMjpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMTMzLX1cXG4tLVxcbm1tL3pzd2FwLmM9MzQ5PXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0zNTEtXFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFxcdTAwMjZcXHUwMDI2XFxubW0venN3YXAuYzozNTI6XFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xcbm1tL3pzd2FwLmMtMzUzLVxcdFxcdHByX2VycihcXFwiY29tcHJlc3NvciAlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBkZWZhdWx0ICVzXFxcXG5cXFwiLFxcbm1tL3pzd2FwLmM6MzU0OlxcdFxcdCAgICAgICB6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKTtcXG5tbS96c3dhcC5jLTM1NS1cXHRcXHRwYXJhbV9mcmVlX2NoYXJwKFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jOjM1NjpcXHRcXHR6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5tbS96c3dhcC5jLTM1Ny1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjIxLjAwMDY5NTI1MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA5Mjk4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBMaW51eCBrZXJuZWwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKkNoZWNraW5nIFpzd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHpzd2FwIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGhlYWRlciBmaWxlIHNob3VsZCBjb250YWluIHRoZSBrZXkgZGVmaW5pdGlvbnMuIFNvLCBsZXQgbWUgb3BlbiB1cCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IG1hY3Jvcywgc3RydWN0dXJlcywgYW5kIGxpa2VseSBzb21lIGlubGluZSBjb21tZW50cyBleHBsYWluaW5nIHRoZSBkaWZmZXJlbnQgY29tcGlsZS10aW1lIGFuZCBydW50aW1lIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHpzd2FwLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYnVmZmVyIHNpemVzLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCB0aHJlc2hvbGRzLCBhbmQgYW55IHR1bmFibGUgcGFyYW1ldGVycyB0aGF0IGRpcmVjdGx5IGluZmx1ZW5jZSB6c3dhcCdzIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGluLCBhbG9uZyB3aXRoIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSB1c2VkLiBUaGUgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBoZWFkZXIgc2hvdWxkIGJlIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY3VycmVudGx5IGRlc2lnbmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRvIHR1bmUgb3IgbW9kaWZ5IHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjI0LjY2MTYyOTkxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTMzMDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvenN3YXAuaD0xMD1leHRlcm4gYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXM7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMjojaWZkZWYgQ09ORklHX1pTV0FQXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OToyNC43MjI5NzI4MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ4NDcwNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlNXQVAgYW5kIE1FTUNHIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBwbGF5ZXJzOiBgWlNXQVBgIGFuZCBgTUVNQ0dgLiBXZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZ3JvdXBzLCBzcGVjaWZpY2FsbHkgaG93IHpzd2FwIGludGVyYWN0cyB3aXRoIHRoZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYWx0ZXJlZCBieSB0aGlzIHBhdGNoLlxuXG5SaWdodCwgdGhlIHBhdGNoIGhpdHMgYG1tL3Ztc2Nhbi5jYCB3aXRoIGEgY2hhbmdlIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQgaW50cm9kdWNlcyBgenN3YXBfcHJvYWN0aXZlX3dyaXRlYmFja2AgaW4gYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IHByb2FjdGl2ZSB3cml0ZWJhY2sgc3RyYXRlZ3kgc3BlY2lmaWNhbGx5IGZvciB6c3dhcC4gRnVydGhlcm1vcmUsIGl0IHRvdWNoZXMgYHNocmlua19tZW1jZ2AgYW5kIGFkZHMgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbHNvIGluIGBtbS96c3dhcC5jYC4gVGhpcyBsb29rcyBsaWtlIGEgcmVmaW5lbWVudCBvZiBob3cgd2Ugc2hyaW5rIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aGVuIHVzaW5nIHpzd2FwLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIE5vdywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IGNoZWNrIGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzdGF0aWMgb3IgZXhwb3J0ZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBvcmlnaW5hbCBzb3VyY2UgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzAuOTcxNDQ3ODczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTg5ODIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNjMzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDk5Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTk3LVxcbm1tL21lbWNvbnRyb2wuYzo0OTk4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTQ5OTktXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2OC1cXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzE9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDM2LVxcbm1tL3Ztc2Nhbi5jOjgwMzc6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMzgtXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzEuMjMzMzUzNjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3NzkwMzM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIE1lbW9yeSBSZWNsYWltIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggenN3YXAgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGFsc28gZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gYG1lbW9yeV9yZWNsYWltYCBpcywgb2YgY291cnNlLCB0aGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgY2dyb3VwIGZpbGUsIHNvIHRoYXTigJlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB1c2VyLWluaXRpYXRlZCByZWNsYWltLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZWxhdGVzIHRvIHpzd2FwLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgLCBgenN3YXBfc2hyaW5rX29uZV9tZW1jZ2AsIGFuZCB0aGUgZ2VuZXJhbCBgc2hyaW5rX21lbWNnYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgYXJlIGNhbGxlZC5cblxuVGhlIGNvZGUgbWVudGlvbnMgYENPTkZJR19aU1dBUGAgYW5kIGBNRU1DR2AgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEknbSB3b25kZXJpbmcgaWYganVzdCBgQ09ORklHX1pTV0FQYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBvciBpZiBJIG5lZWQgYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHBhdGNoIHRleHQgcHJvdmlkZXMgc29tZSBjb250ZXh0LCBzdGF0aW5nIHRoYXQgenN3YXAgd3JpdGViYWNrIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMsIGFuZCB0aGF0IHlvdSBjYW5ub3QgbWl4IHRoZSBgenN3YXBgIHNvdXJjZSB3aXRoIHN3YXBwaW5lc3MuXG5cbkRpZ2dpbmcgaW50byBgbW0venN3YXAuY2AsIEkgZmluZCB0aGUgYHpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tgIGZ1bmN0aW9uLiBJIHNlZSBpdCBjaGVja3MgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpYC4gSSdsbCBjb25maXJtIGhvdyB0aGF0IGlzIHNldCB1cC4gTGV0J3Mgc2VlLi4uIGFuZCwgaXQgbG9va3MgbGlrZSB0aGlzIGNoZWNrICpkb2Vzbid0KiBkZXBlbmQgb24gYENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIGl0IHNlZW1zIGxpa2UgaGF2aW5nIGJvdGggYFpTV0FQYCBhbmQgYE1FTUNHYCBlbmFibGVkIGlzIGVub3VnaC4gSSBjYW4gbm93IGJlIGNvbmZpZGVudCB0aGF0IGBaU1dBUGAgYW5kIGBNRU1DR2AgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3MgdG8gYmUgbG9va2luZyBhdC5cblxuTm93IEknbGwganVzdCBkb3VibGUtY2hlY2ssIGlzIGl0IHRydWx5IGBDT05GSUdfTUVNQ0dgLCBvciBzaG91bGQgSSBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgZWxzZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6MzguMzExMjYzNjkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyNDg5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0OTozOC40MzQ1MjczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIxNjM4MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ29uZmlybWluZyBhbmQgUmVmaW5pbmcgTXkgVW5kZXJzdGFuZGluZyoqXG5cblllcywgdGhhdCdzIHJpZ2h0LCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IHRlcm0gd2UncmUgZGVhbGluZyB3aXRoLiBJdCdzIHRoZSBjb3JlIGNvbmNlcHQuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyIHdpdGggdGhlIGFuYWx5c2lzLCBJIGp1c3Qgd2FudCB0byBxdWlja2x5IG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBuZXh0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXTigJlzIG1lbnRpb25lZC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrOiBpcyBgQ09ORklHX1pTV0FQYCB0aGUgcHJlY2lzZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBsb29raW5nIGF0IGhlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBuYW1lIHRvIGVuc3VyZSBhY2N1cmFjeSBpbiBteSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQ5OjQxLjU1NjE2OTgwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1OTQwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6NDEuNjM5NzcxMjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzIwMTk0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFpTV0FQIFBhdGNoIGZvciBQcm9hY3RpdmUgV3JpdGViYWNrKipcblxuQWxyaWdodCwgc28gdGhlIGZlZWRiYWNrIGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2gg4oCTIGBaU1dBUGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgZGlyZWN0aW9uIGhlcmUuIEFuZCB0aGlzIHBhdGNoLi4uIHllcywgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IGFkZHMgYSBuZXcgdXNlcnNwYWNlLWFjY2Vzc2libGUgZmVhdHVyZSB0byBgbWVtb3J5LnJlY2xhaW1gIOKAkyB0aGF0IHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2ssIGluIGVmZmVjdCDigJMgY2hhbmdlcyB0aGUgZ2FtZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzLCBJIGNhbiBzZWUgdGhhdCBpbW1lZGlhdGVseS5cblxuTm93LCBteSBmb2N1cyBuZWVkcyB0byBob25lIGluIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrYCwgYHpzd2FwX3Nocmlua19vbmVfbWVtY2dgLCBhbmQgYHNocmlua19tZW1jZ2AuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBpbmZsdWVuY2VzIHRoZSByZWNsYW1hdGlvbiBwcm9jZXNzLiBXaGF0IGFyZSB0aGUgcHJlY29uZGl0aW9ucywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz9cblxuQWxzbywgdGhlIGNvbmZpZ3MgYXJlIGFub3RoZXIgcG9pbnQgdG8gZXhwbG9yZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IGF3YXJlIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgWlNXQVBgIGFuZCBgTUVNQ0dgLiBUaGV5IGFyZSBnb2luZyB0byBoYXZlIGEgbG90IG9mIGltcG9ydGFuY2UgaW4gdGhlIHRlc3Rpbmcgb2YgdGhlIHBhdGNoZXMuXG5cbkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgY29uY3JldGUgdGVzdGluZyBnb2FscyBhbmQgZ2V0IHNvbWUgcmVzdWx0cyBpbi4gTGV0J3MgY2FsbCBhIHNldC1yZXN1bHRzIGFuZCBlc3RhYmxpc2ggc29tZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwNywiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDk6NDguMjcxNzk1Mjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjIwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJ6c3dhcF9wcm9hY3RpdmVfd3JpdGViYWNrXCIsXG4gICAgXCJ6c3dhcF9zaHJpbmtfb25lX21lbWNnXCIsXG4gICAgXCJzaHJpbmtfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHByb2FjdGl2ZSB6c3dhcCB3cml0ZWJhY2sgdmlhIHRoZSAnbWVtb3J5LnJlY2xhaW0nIGNncm91cCBpbnRlcmZhY2UgdXNpbmcgdGhlICdzb3VyY2U9enN3YXAnIGtleS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aGF0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHpzd2FwIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInpzd2FwX3Byb2FjdGl2ZV93cml0ZWJhY2tcIixcbiAgICBcInpzd2FwX3Nocmlua19vbmVfbWVtY2dcIixcbiAgICBcInNocmlua19tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcHJvYWN0aXZlIHpzd2FwIHdyaXRlYmFjayB2aWEgdGhlICdtZW1vcnkucmVjbGFpbScgY2dyb3VwIGludGVyZmFjZSB1c2luZyB0aGUgJ3NvdXJjZT16c3dhcCcga2V5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRoYXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgenN3YXAgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw55c[1] Phase: Succeeded StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 11:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 11:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2] Phase: Succeeded StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 12:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 12:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 11:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 11:49:59 +0000 UTC FinishedAt: 2026-06-29 11:50:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcw55c/series-workflowcw55c-convert-artifact-2977372630/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 11:50:19 +0000 UTC FinishedAt: 2026-06-29 12:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 11:50:19 +0000 UTC FinishedAt: 2026-06-29 12:30:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1fbb6f10-084d-4ba4-b33a-013ab2a9218e,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-workflowcw55c/series-workflowcw55c-convert-artifact-2977372630/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": "b20eb8ae-aefb-4ff8-ade8-ec90ecd0a339", "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-workflowcw55c/series-workflowcw55c-build-action-3936089708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 11:50:19 +0000 UTC FinishedAt: 2026-06-29 12:30:12 +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:*1fbb6f10-084d-4ba4-b33a-013ab2a9218e,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-workflowcw55c/series-workflowcw55c-convert-artifact-2977372630/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": "b20eb8ae-aefb-4ff8-ade8-ec90ecd0a339", "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-workflowcw55c/series-workflowcw55c-build-action-3936089708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 12:30:22 +0000 UTC FinishedAt: 2026-06-29 12:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 12:30:22 +0000 UTC FinishedAt: 2026-06-29 12:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Failed StartedAt: 2026-06-29 12:30:22 +0000 UTC FinishedAt: 2026-06-29 12:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw55c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","zswap_proactive_writeback","zswap_shrink_one_memcg","shrink_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Error StartedAt: 2026-06-29 12:30:22 +0000 UTC FinishedAt: 2026-06-29 12:30:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"019ee523e8a7f28d75dfa9d322a210cb11f097cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","MEMCG"],"series_id":"2ad34779-3380-4f62-87c3-27fdbeb2fbee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}