Name: series-workflow4p4zp Phase: Failed StartedAt: 2026-09-07 06:42:13 +0000 UTC FinishedAt: 2026-09-07 07:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p4zp[0] Phase: Succeeded StartedAt: 2026-09-07 06:42:13 +0000 UTC FinishedAt: 2026-09-07 07:27:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p4zp[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 06:42:13 +0000 UTC FinishedAt: 2026-09-07 07:27:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNDA2Yjc5ZGMyZWM4ZmJkZWI2YzdhYWM0ZDZiZTQxNjg4YjM2NDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzoyNjowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG5pbmRleCAyZjMxMmQxZjY3ZDY5Li4zZDZhZWMyMDNjM2Y3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4mIzQzO1x0Rk4oSVBfVFRMX0VYQ0VFREVEKVx0XHRcXFxuIFx0Rk5lKE1BWClcbiBcbiAvKipcbkBAIC02MDYsNiAmIzQzOzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4gXHRTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCxcbiBcdC8qKiBAU0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVDogRGVhZCBsb29wIG9uIHZpcnR1YWwgZGV2aWNlLiAqL1xuIFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRDogSVB2NCBUVEwgb3IgSVB2NiBob3AgbGltaXQgXHUwMDNjPSAxXG4mIzQzO1x0ICogKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUylcbiYjNDM7XHQgKi9cbiYjNDM7XHRTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELFxuIFx0LyoqXG4gXHQgKiBAU0tCX0RST1BfUkVBU09OX01BWDogdGhlIG1heGltdW0gb2YgY29yZSBkcm9wIHJlYXNvbnMsIHdoaWNoXG4gXHQgKiBzaG91bGRuJiMzOTt0IGJlIHVzZWQgYXMgYSByZWFsICYjMzk7cmVhc29uJiMzOTsgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5pbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXG4gXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTtcbi1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4mIzQzO1x0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggMDlhNDU1MmY3ZjA4YS4uNTUzOTFlMmU1NjEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiBcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTYyMyw3ICYjNDM7NjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5AQCAtODE1LDcgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxuIFx0XHRcdFx0ICAgIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gXHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcbi1cdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQwNmI3OWRjMmVjOGZiZGViNmM3YWFjNGQ2YmU0MTY4OGIzNjQ3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjY6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCmluZGV4IDJmMzEyZDFmNjdkNjkuLjNkNmFlYzIwM2MzZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBACiAJRk4oUFNQX0lOUFVUKQkJCVwKIAlGTihQU1BfT1VUUFVUKQkJCVwKIAlGTihSRUNVUlNJT05fTElNSVQpCQlcCiYjNDM7CUZOKElQX1RUTF9FWENFRURFRCkJCVwKIAlGTmUoTUFYKQogCiAvKioKQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHsKIAlTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCwKIAkvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi8KIAlTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULAomIzQzOwkvKioKJiM0MzsJICogQFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQ6IElQdjQgVFRMIG9yIElQdjYgaG9wIGxpbWl0ICZsdDs9IDEKJiM0MzsJICogKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUykKJiM0MzsJICovCiYjNDM7CVNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQsCiAJLyoqCiAJICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaAogCSAqIHNob3VsZG4mIzM5O3QgYmUgdXNlZCBhcyBhIHJlYWwgJiMzOTtyZWFzb24mIzM5OyAtIG9ubHkgZm9yIHRyYWNpbmcgY29kZSBnZW4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwppbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpCiAJLyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqLwogCV9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCWljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTsKLQlTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpOwomIzQzOwlTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTsKIGRyb3A6CiAJa2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jCmluZGV4IDA5YTQ1NTJmN2YwOGEuLjU1MzkxZTJlNTYxMjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2V4dGhkcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmMKQEAgLTQ2NCw3ICYjNDM7NDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldikKIAkJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELAogCQkJCSAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTsKLQkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpcHY2X2hkcihza2IpLSZndDtob3BfbGltaXQtLTsKQEAgLTYyMyw3ICYjNDM7NjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwKIAkJCQkgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAogCQkJCSAgICAwKTsKLQkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpcHY2X2hkcihza2IpLSZndDtob3BfbGltaXQtLTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7CiAJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAotCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHdlIHRyYWNrIHBhY2tldCBkcm9wcyBkdWUgdG8gVFRMIGV4cGlyYXRpb24uIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBlbnVtIHZhbHVlLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAgYW5kIHRoZW4gcHJvcGFnYXRpbmcgdGhpcyByZWFzb24gdGhyb3VnaCBjYWxscyB0byBga2ZyZWVfc2tiX3JlYXNvbmAgaW4gYGlwX2ZvcndhcmQuY2AsIGBleHRoZHJzLmNgLCBhbmQgYGlwNl9vdXRwdXQuY2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgdHJpYWdlIGNyaXRlcmlhIGFuZCB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHNvbWV0aGluZyBjb3JlPyBBYnNvbHV0ZWx5LiBUaGUgZnVuY3Rpb25zIG1vZGlmaWVkLCBgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGBpcHY2X3J0aGRyX3JjdmAsIGFuZCBgaXA2X2ZvcndhcmRgLCBhcmUgYWxsIGRlZXAgaW5zaWRlIHRoZSBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyBwYXRod2F5cy4gVGhpcyBoaXRzIHRoZSAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IGNyaXRlcmlhLCBubyBxdWVzdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgY29kZS4KCk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBzYXkgdGhhdCBiZWNhdXNlIGl0JiMzOTtzICpqdXN0KiBhZGRpbmcgYSBkcm9wIHJlYXNvbiwgYW5kIG5vdCBhbHRlcmluZyAqY29udHJvbCBmbG93KiBvciB0aGUgKmxvZ2ljKiBvZiB0aGUgY29kZSwgdGhpcyBtaWdodCBub3QgYmUgKndvcnRoZnV6emluZyouIEl0JiMzOTtzIGFsbW9zdC4uLmRlY29yYXRpdmUgbG9nZ2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGlzLiBUaGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHRoYXQgd2Ugc2hvdWxkIE5PVCBibGluZGx5IHRydXN0IHRoYXQuCgpMb29raW5nIGF0IFNlY3Rpb24gMiwgdGhlIGNyaXRlcmlhIGFyZSAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgKmp1c3QqIGxvZ2dpbmc/IE5vLCBiZWNhdXNlIGl0JiMzOTtzIG1vcmUgdGhhbiB0aGF0OyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBkcm9wIHJlYXNvbiBiZWluZyBwYXNzZWQgaW50byBga2ZyZWVfc2tiX3JlYXNvbmAuICpUaGF0KiBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUuIFNvLCBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdz8gTm8uIERvZXMgaXQgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzPyBJdCBhZGRzIGFuIGVudW0gY29uc3RhbnQuIERvZXMgdGhpcyBjaGFuZ2UgdGhlIGRyb3AgcmVhc29uPyBZZXMsIHRoaXMgY2hhbmdlIHRoZSBga2ZyZWVfc2tiX3JlYXNvbmAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBTZWN0aW9uIDMgZW1waGFzaXplcyB0aGF0IGBSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nLi4uQ29yZSBTdWJzeXN0ZW1zOiAuLi5jb3JlIG5ldHdvcmtpbmdgLiBXZWxsLCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGZhbGwgc3F1YXJlbHkgaW50byAmIzM0O2NvcmUgbmV0d29ya2luZy4mIzM0OyBUaGlzIGNoYW5nZSBwYXNzZXMgdGhlIHJlYXNvbiB0byBga2ZyZWVfc2tiX3JlYXNvbmAsIHdoaWNoICppcyogdGhlbiB1c2VkIGJ5IHRyYWNlcG9pbnRzIGFuZCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBoYXZlIHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBhcmUgdXNlZC4gRHJvcCByZWFzb25zIGFyZSAqbm90KiBqdXN0IGluZm9ybWF0aW9uYWwuIFNvLCBjaGFuZ2luZyB0aGUgZHJvcCByZWFzb24gaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGlzIGluIGEgY29yZSBzdWJzeXN0ZW0sIG1vZGlmaWVzIGFuIGVudW0sIGFuZCBoYXMgcmVhY2hhYmxlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVx0XHRcdGdvdG8gZGlzYWJsZWQ7XG5uZXQvaXB2Ni9leHRoZHJzLmM6Njg0Olx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjg1LVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gaG93IElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGZpbGUsIHBhcnRpY3VsYXJseSBsaW5lcyA3ODAgdG8gODIwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBsb2dpYyBmb3IgdGhlc2UgaGVhZGVycyByZXNpZGVzLCBvciBhdCBsZWFzdCBhIHNpZ25pZmljYW50IGNodW5rIG9mIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRpc3NlY3RzLCB2YWxpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB0aGVzZSBoZWFkZXJzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBJJiMzOTtsbCBsaWtlbHkgbmVlZCB0byBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleHRlbnNpb24gaGVhZGVyIHR5cGVzLCBlc3BlY2lhbGx5IHRoZSBsZXNzIGNvbW1vbiBvbmVzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGlzc3VlcyBsaWtlIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIChsaWtlIHRoZSBBSCBhbmQgRVNQIGhlYWRlcnMpLCBhbmQgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIGltcGxlbWVudGF0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmsgY29tcG9uZW50cywgc3VjaCBhcyB0aGUgcm91dGluZyBhbmQgZm9yd2FyZGluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNDY4Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDQ2OTpcdFx0XHR9XG4gNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4gNDgwOlx0XG4gNDgxOlx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gNDgyOlx0e1xuIDQ4MzpcdFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gNDg0Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNDg1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDQ4NjpcdFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcbiA0ODc6XHRcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcbiA0ODg6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcbiA0ODk6XHRcdGludCBhY2NlcHRfcnBsX3NlZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGluZyBIZWFkZXIgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgZGVlcGVyIGludG8gSVB2Niwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRob3JvdWdobHkgY292ZXJpbmcgYWxsIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgcmVsYXRlZCB0byByb3V0aW5nIGhlYWRlcnMuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBpcHY2X3J0aGRyX3JjdmAgdG8gdGhlIGxpc3Qg4oCTIHRoYXQgY292ZXJzIHRoZSBnZW5lcmFsIHJvdXRpbmcgaGVhZGVyIHByb2Nlc3Npbmcg4oCTIGJ1dCBJIGFsc28gbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGBpcHY2X3JwbF9zcmhfcmN2YC4gV2l0aCBSUEwgYW5kIFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSBwb3RlbnRpYWxseSBiZWluZyBkZXBsb3llZCBtb3JlIHdpZGVseSwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueSBpbnRlcmFjdGlvbiBwb2ludHMgb3IgZWRnZSBjYXNlcyB0aGVyZS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBib3RoIG9mIHRoZXNlIGFyZSBhaXJ0aWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE1Olx0XG4gNjE2Olx0XHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4gNjE3Olx0XHRcdGRzdF9pbnB1dChza2IpO1xuIDYxODpcdFx0XHRyZXR1cm4gLTE7XG4gNjE5Olx0XHR9XG4gNjIwOlx0XG4gNjIxOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gNjIyOlx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA2MjM6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNjI0Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gNjI1Olx0XHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNjI2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDYyNzpcdFx0XHRcdHJldHVybiAtMTtcbiA2Mjg6XHRcdFx0fVxuIDYyOTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDYzMDpcdFxuIDYzMTpcdFx0XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuIDYzMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDYzMzpcdFx0fVxuIDYzNDpcdFxuIDYzNTpcdFx0ZHN0X2lucHV0KHNrYik7XG4gNjM2Olx0XG4gNjM3Olx0XHRyZXR1cm4gLTE7XG4gNjM4Olx0fVxuIDYzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGlwdjZfcnRoZHJfcmN2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIHJlY2VpdmluZyBJUHY2IHBhY2tldHMgd2l0aCByb3V0aW5nIGhlYWRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBpdCBjYXJlZnVsbHkuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGhvdyBpdCB2ZXJpZmllcyB0aGUgaGVhZGVyJiMzOTtzIGludGVncml0eSwgY2hlY2tzIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgbmV4dCBkZXN0aW5hdGlvbiBiYXNlZCBvbiB0aGUgcm91dGluZyBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCB3aGV0aGVyIHRoZSBjb2RlIGFkaGVyZXMgdG8gUkZDIHNwZWNpZmljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaG9wLWJ5LWhvcCBvcHRpb25zIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDU6XHRcbiA4MDY6XHRcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIDgwNzpcdFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuIDgwODpcdFx0XHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gODA5Olx0XHRcdGRzdF9pbnB1dChza2IpO1xuIDgxMDpcdFx0XHRyZXR1cm4gLTE7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gODE0Olx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA4MTU6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gODE2Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXG4gODE3Olx0XHRcdFx0XHQgICAgMCk7XG4gODE4Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDgxOTpcdFx0XHRcdHJldHVybiAtMTtcbiA4MjA6XHRcdFx0fVxuIDgyMTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDgyMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIDgyNjpcdFx0ZHN0X2lucHV0KHNrYik7XG4gODI3Olx0XHRyZXR1cm4gLTE7XG4gODI4Olx0XG4gODI5Olx0dW5rbm93bl9yaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgSVB2NiBvdXRwdXQgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIFRoYXQgZmlsZSBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGxvZ2ljYWxseS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjYW5vbmljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWN0dWFsbHkgc2VuZGluZyBhbiBJUHY2IHBhY2tldC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGluZ3MgbGlrZSBwYWNrZXQgaGVhZGVyIGNyZWF0aW9uLCBhZGRyZXNzIHJlc29sdXRpb24sIGZyYWdtZW50YXRpb24gaGFuZGxpbmcgKGlmIG5lY2Vzc2FyeSksIGFuZCB0aGUgdWx0aW1hdGUgdHJhbnNtaXNzaW9uIGNhbGwgZG93biB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGF5ZXIuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU2NTpcdFx0ICpcdGNhbm5vdCBiZSBmcmFnbWVudGVkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdhcnJhbnR5XG4gNTY2Olx0XHQgKlx0dGhhdCBkaWZmZXJlbnQgZnJhZ21lbnRzIHdpbGwgZ28gYWxvbmcgb25lIHBhdGguIC0tQU5LXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdGlmICh1bmxpa2VseShvcHQtXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9ST1VURVJBTEVSVCkpIHtcbiA1Njk6XHRcdFx0aWYgKGlwNl9jYWxsX3JhX2NoYWluKHNrYiwgbnRvaHMob3B0LVx1MDAzZXJhKSkpXG4gNTcwOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHQvKlxuIDU3NDpcdFx0ICpcdGNoZWNrIGFuZCBkZWNyZW1lbnQgdHRsXG4gNTc1Olx0XHQgKi9cbiA1NzY6XHRcdGlmIChoZHItXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDU3NzpcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNTc4Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA1Nzk6XHRcbiA1ODA6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDU4MTpcdFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIFhYWDogaWRldi1cdTAwM2VjbmYucHJveHlfbmRwPyAqL1xuIDU4NTpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2Vwcm94eV9uZHApIFx1MDAyNlx1MDAyNlxuIDU4NjpcdFx0ICAgIHBuZWlnaF9sb29rdXAobmRfdGFibGUobmV0KSwgXHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBza2ItXHUwMDNlZGV2KSkge1xuIDU4NzpcdFx0XHRpbnQgcHJveGllZCA9IGlwNl9mb3J3YXJkX3Byb3h5X2NoZWNrKHNrYik7XG4gNTg4Olx0XG4gNTg5Olx0XHRcdGhkciA9IGlwdjZfaGRyKHNrYik7XG4gNTkwOlx0XHRcdGlmIChwcm94aWVkIFx1MDAzZSAwKSB7XG4gNTkxOlx0XHRcdFx0LyogSXQmIzM5O3MgdGVtcHRpbmcgdG8gZGVjcmVhc2UgdGhlIGhvcCBsaW1pdFxuIDU5MjpcdFx0XHRcdCAqIGhlcmUgYnkgMSwgYXMgd2UgZG8gYXQgdGhlIGVuZCBvZiB0aGVcbiA1OTM6XHRcdFx0XHQgKiBmdW5jdGlvbiB0b28uXG4gNTk0Olx0XHRcdFx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVAgRm9yd2FyZGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIElQIGZvcndhcmRpbmcuIFRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgZ290IHRvIGJlIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBJUHY0LiBHaXZlbiB0aGUgZnVuY3Rpb24mIzM5O3MgZGVzY3JpcHRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBjb2RlIGluIGBpcF9mb3J3YXJkLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGNvcmUgZm9yd2FyZGluZyBsb2dpYy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZm9yd2FyZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gcnRfdG9zMnByaW9yaXR5KGlwaC1cdTAwM2V0b3MpO1xuIDE2MTpcdFxuIDE2MjpcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX0ZPUldBUkQsXG4gMTYzOlx0XHRcdCAgICAgICBuZXQsIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldiwgcnQtXHUwMDNlZHN0LmRldixcbiAxNjQ6XHRcdFx0ICAgICAgIGlwX2ZvcndhcmRfZmluaXNoKTtcbiAxNjU6XHRcbiAxNjY6XHRzcl9mYWlsZWQ6XG4gMTY3Olx0XHQvKlxuIDE2ODpcdFx0ICpcdFN0cmljdCByb3V0aW5nIHBlcm1pdHMgbm8gZ2F0ZXdheWluZ1xuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHQgaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfU1JfRkFJTEVELCAwKTtcbiAxNzE6XHRcdCBnb3RvIGRyb3A7XG4gMTcyOlx0XG4gMTczOlx0dG9vX21hbnlfaG9wczpcbiAxNzQ6XHRcdC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi9cbiAxNzU6XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIDE3NjpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xuIDE3NzpcdFx0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gMTc4Olx0ZHJvcDpcbiAxNzk6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIDE4MDpcdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuIDE4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IFNLQiBEcm9wIFJlYXNvbiBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgKGBpcF9mb3J3YXJkYCwgYGlwdjZfc3JoX3JjdmAsIGV0Yy4pIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gaW5zdGVhZCBvZiBleGlzdGluZyBvbmVzLiBNeSBleHBlcnRpc2UgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29udGV4dCwgc28gcmVhY2hhYmlsaXR5IGlzbiYjMzk7dCBhbiBpc3N1ZS4KCk5vdywgdGhlIHRyaWFnZSBndWlkZWxpbmVzIGFyZSBrZXkgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYSBjYXJlZnVsIGFzc2Vzc21lbnQuIFRoZSBjb3JlIHBoaWxvc29waHkgY2VudGVycyBvbiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBhbmQgbGF0ZW50IGJ1Z3MgaW4gKnJlYWNoYWJsZSogY29kZS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUg4oCTIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB1c2luZyBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55ICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgZWl0aGVyLCBzbyBsZXQmIzM5O3MgZGlnIGRlZXBlci4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgYSAmIzM0O3B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuLi5vciB0cmFjZXBvaW50IHRoYXQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcyYjMzQ7PyBUaGUgZHJvcCByZWFzb24gaXRzZWxmIGlzIHBhc3NlZCB0byBga2ZyZWVfc2tiX3JlYXNvbmAsIHdoaWNoIHRyYWNlcyB0aGUgZHJvcC4gSG93ZXZlciwgdGhlIHRyaWFnZSBndWlkZWxpbmVzIGFyZSB2ZXJ5IHNwZWNpZmljLgoKKiAgIEFkZGluZyBhIG5ldyBlbnVtIGFuZCBjaGFuZ2luZyB0aGUgdmFsdWVzIHBhc3NlZCB0byBga2ZyZWVfc2tiX3JlYXNvbmAgKm1vZGlmaWVzKiB3aGF0IGlzIHBhc3NlZCB0byB0aGUgdHJhY2Vwb2ludC4gU28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBiZSBhIG1vZGlmaWNhdGlvbiBvZiBhIGRhdGEgc3RydWN0dXJlICh0aGUgZW51bSBpdHNlbGYpIGFuZCBhbiBhbHRlcmF0aW9uIG9mIGEgY2FsbCBmdW5jdGlvbiwgYW5kIGFzIGEgcmVzdWx0LCB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYWNpbmcsIGV2ZW4gaWYgdGhlIG1haW4gY29udHJvbCBmbG93ICpzZWVtcyogdW5jaGFuZ2VkLgoqICAgVGhpcyBpcyBub3QgYSBwdXJlICYjMzQ7bWVzc2FnZSBzdHJpbmcmIzM0OyBjaGFuZ2UsIGl0IGlzIGEgY2hhbmdlIG9mIGEgKnBhcmFtZXRlciouIEluIGZhY3QsIHRoZSBlbnVtIGlzIHBhc3NlZCB0byBhbiBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uLgoKU28sIGFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGEgJiMzNDtyZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmUmIzM0OywgYSAmIzM0O2hlbHBlciBhYnN0cmFjdGlvbiYjMzQ7IG9yICYjMzQ7YWxnb3JpdGhtIGZsb3dzJiMzNDsuIFRoZSBjb2RlIGNsZWFybHkgbW9kaWZpZXMgYSBkcm9wIHJlYXNvbiBlbnVtIHZhbHVlIHBhc3NlZCB0byBhIHRyYWNlcG9pbnQgZnVuY3Rpb24uCgpJIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJdCBpcyAqTk9UKiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhlICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiYjMzQ7IGNsYXVzZSBpcyBtZWFudCB0byBwcmV2ZW50IHVzIGZyb20gZnV6emluZyBzaW1wbGUgcHJpbnRpbmcgc3RhdGVtZW50IG1vZGlmaWNhdGlvbnMsIG5vdCBmcm9tICptb2RpZnlpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy4qCgpJbiB0aGUgZW5kLCBzaW5jZSB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBkYXRhIHRoYXQgZmVlZHMgaW50byByZWFjaGFibGUgY29kZSAodGhlIGtlcm5lbCBmdW5jdGlvbnMgaW4gcXVlc3Rpb24pLCBJJiMzOTttIGdvaW5nIHRvIGxlYW4gdG93YXJkcyBmdXp6aW5nIHRoaXMgdG8gc2VlIGlmIGFueSBsYXRlbnQgYnVncyBhcHBlYXIsIG9yIHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gY2hlY2sgaG93IGV4YWN0bHkgYGtmcmVlX3NrYl9yZWFzb25gIGFuZCBgc2tiX2Ryb3BfcmVhc29uYCB3b3JrIGluIHRoZSBrZXJuZWwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQga2ZyZWVfc2tiX3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIGZyZWVpbmcgb2YgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4g4oCTIGJhc2ljYWxseSwgZXZlcnl0aGluZyB0aGF0IGlsbHVtaW5hdGVzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MzUxMT12b2lkIGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2NvcmUvZGV2LmMtMzUxNS1cdGVsc2Vcbm5ldC9jb3JlL2Rldi5jOjM1MTY6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtMzUxNy19XG4tLVxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cdFx0XHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xubmV0L2NvcmUvZGV2LmM6NDI4NzpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XG5uZXQvY29yZS9kZXYuYy00Mjg4LVx0XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDU1NS1cdGNhc2UgVENfQUNUX1NIT1Q6XG5uZXQvY29yZS9kZXYuYzo0NTU2Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDU1Ny1cdFx0KnJldCA9IE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDYwNi1cdGNhc2UgVENfQUNUX1NIT1Q6XG5uZXQvY29yZS9kZXYuYzo0NjA3Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDYwOC1cdFx0KnJldCA9IE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDgxOT1pbnQgX19kZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTQ4MzctXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG5uZXQvY29yZS9kZXYuYzo0ODM4Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL2Rldi5jLTQ4MzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0Mjk9c3RhdGljIGludCBlbnF1ZXVlX3RvX2JhY2tsb2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNwdSxcbi0tXG5uZXQvY29yZS9kZXYuYy01NDc4LVx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoc2tiLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYzo1NDc5Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5uZXQvY29yZS9kZXYuYy01NDgwLVx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NzQ4LVx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xubmV0L2NvcmUvZGV2LmM6NTc0OTpcdGtmcmVlX3NrYl9yZWFzb24oKnBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRFApO1xubmV0L2NvcmUvZGV2LmMtNTc1MC1cdHJldHVybiBYRFBfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYyMzctXG5uZXQvY29yZS9kZXYuYzo2MjM4Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNjIzOS1cdFx0LyogSmFtYWwsIG5vdyB5b3Ugd2lsbCBub3QgYWJsZSB0byBlc2NhcGUgZXhwbGFpbmluZ1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM1LVx0XHRcdHJldHVybiAxO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXHRcdFx0XHRuZWlnaC1cdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXHUwMDNldHJ1ZXNpemU7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjU2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXHRcdFx0XHRORUlHSF9DQUNIRV9TVEFUX0lOQyhuZWlnaC1cdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc3LVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5laWdoLVx1MDAzZWxvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc5LVx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjAwPWludCBuZWlnaF9yZXNvbHZlX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVx0cmMgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyOS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MzQ9aW50IG5laWdoX2Nvbm5lY3RlZF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cdFx0ZXJyID0gLUVJTlZBTDtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb2RlLCBpcyB0byBmaW5kIHRoZSBwcmVjaXNlIGRlZmluaXRpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgYnVyaWVkIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc28gYG5ldC9jb3JlL3NrYnVmZi5jYCBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGZpbGUgZm9yIFNLQnMsIHNvIGl0IG1ha2VzIHNlbnNlIGl0IG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUsIG9yIGF0IGxlYXN0IGhhdmUgYSBoZWFkZXIgZmlsZSB3aGVyZSBpdCBpcy4gSWYgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGluIGBza2J1ZmYuY2AsIHRoZW4gSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaXQgdXNlcy4gR290dGEgZmlndXJlIG91dCBleGFjdGx5ICp3aGF0KiB0aGlzIGBrZnJlZV9za2JfcmVhc29uYCBpcywgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkgc29tZW9uZSBpcyBjdXJpb3VzIGFib3V0IGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19rZnJlZV9za2JfcmVhc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBTS0JzIGFyZSBiZWluZyBmcmVlZCwgYW5kLCBjcml0aWNhbGx5LCAqd2h5Ki4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgd2hlcmUgYGtmcmVlX3NrYl9yZWFzb25gIGlzIGJlaW5nIGNhbGxlZC4gSSBrbm93IHRoZSBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBnaXZlbiBpdHMgcm9sZSBpbiBTS0IgbWFuYWdlbWVudC4gVGhlIGNoYWxsZW5nZSwgYXMgYWx3YXlzLCB3aWxsIGJlIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGVhY2ggdXNlLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSYjMzk7bGwgYmUgbXVsdGlwbGUgY2FsbCBzaXRlcywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJiMzOTttIGhvcGluZyB0aGVyZSYjMzk7cyB1c2VmdWwgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBjb21tZW50cyBzdXJyb3VuZGluZyB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5kaW5nIGBrZnJlZV9za2JfcmVhc29uYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBga2ZyZWVfc2tiX3JlYXNvbmAgaXMgdXNlZC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgY291bGQgZ28gYWJvdXQgdGhpcyBpbiBhIGZldyB3YXlzLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJIGNvdWxkIHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCwgYnV0IHRoYXQmIzM5O3MgZ29pbmcgdG8gcHJvZHVjZSBhIG5vaXN5IG91dHB1dC4gSSBjb3VsZCBsZXZlcmFnZSBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIHNlYXJjaCB0b29sIGlmIGl0JiMzOTtzIGF2YWlsYWJsZS4gSWYgaXQmIzM5O3MgYSBrZXJuZWwgc3ltYm9sLCBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IHdpdGggYG5tYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHRoZW4gbW92ZSBvbnRvIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBzeW1ib2wgdGFibGVzLiBJZiBJIHN1c3BlY3QgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudCBhcyB3ZWxsLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8sIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBjcmVhdGUgdGhlIGJlc3Qgc2VhcmNoIHN0cmF0ZWd5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdHJ5aW5nIGEgYmFzaWMgc2VhcmNoIHRvIGZpbmQgdGhlIG9jY3VycmVuY2VzLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga2ZyZWVfc2tiX3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJiMzOTtzIGhhbmRsaW5nIG9mIGBza2JgIGRlYWxsb2NhdGlvbiBpcyBkb25lLCBhbmQsIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBkZWFsbG9jYXRpb25zLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2ZyZWVfc2tiX3JlYXNvbmAgZmlyc3QuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSB0byBwcm92aWRlIGNvbnRleHQgZm9yIGRlYnVnZ2luZyBvciBhdWRpdGluZyBwdXJwb3Nlcy4gVGhlIGluY2x1ZGUgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgc2tiYCBzdHJ1Y3R1cmUgbGl2ZSwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBpbmRpY2F0aW9uIG9uIHRoZSAqcmVhc29uKiBmb3IgZnJlZWluZywgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIHBsYWNlIHRvIGZpbmQgaXQuIEkmIzM5O2xsIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgc3RhcnQgbG9va2luZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3NrYl9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTMyMTprZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTMzMS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2OS1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KSkgIT0gTlVMTClcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzQ3MDpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTMxNS0xMzQwIG9mIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHdlIHJlYWxseSBsb29raW5nIGF0IGhlcmU/IEdpdmVuIHRoZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgc29tZXRoaW5nIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggY29yZSBwYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pc21zLCBkYXRhIGFjY2VzcyBtZXRob2RzLCBvciBldmVuIHNvbWUgZm9ybSBvZiBtZXRhZGF0YSBoYW5kbGluZy4KCktub3dpbmcgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlciBmaWxlcywgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBlaXRoZXIgbWFjcm8gZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG9yIGlubGluZSBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBkaXJlY3RseSByZWxhdGUgdG8gYHNrX2J1ZmZgLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQgaXMgdmVyeSBsaWtlbHkgYSBzdWJzZWN0aW9uIG9mIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIAoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IG9mIGFueSByZWxldmFudCBtYWNyb3Mgb3IgZnVuY3Rpb25zIGRlZmluZWQgbmVhcmJ5LCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoaXMgc2VnbWVudC4gTXkgcHJpb3JpdHkgd2lsbCBiZSB0byBncmFzcCAqaG93KiBpdCBmdW5jdGlvbnMgYW5kICp3aHkqIHRoZSBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgbm9uLW9idmlvdXMuIEkgd2FudCB0byByZWxhdGUgaXQgdG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBmaXQgaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHN1YnN5c3RlbSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGRlbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzE1Olx0XG4xMzE2Olx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4xMzE3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMxODpcdFx0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMTk6XHRcbjEzMjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjEzMjE6XHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEzMjI6XHR7XG4xMzIzOlx0XHRza19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2tiLCByZWFzb24pO1xuMTMyNDpcdH1cbjEzMjU6XHRcbjEzMjY6XHQvKipcbjEzMjc6XHQgKlx0a2ZyZWVfc2tiIC0gZnJlZSBhbiBza19idWZmIHdpdGggJiMzOTtOT1RfU1BFQ0lGSUVEJiMzOTsgcmVhc29uXG4xMzI4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBmcmVlXG4xMzI5Olx0ICovXG4xMzMwOlx0c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTMzMTpcdHtcbjEzMzI6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4xMzMzOlx0fVxuMTMzNDpcdFxuMTMzNTpcdHZvaWQgc2tiX3JlbGVhc2VfaGVhZF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjEzMzY6XHR2b2lkIGtmcmVlX3NrYl9saXN0X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2VncyxcbjEzMzc6XHRcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xuMTMzODpcdHZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuMTMzOTpcdHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuMTM0MDpcdFxuMTM0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2VncylcbjEzNDI6XHR7XG4xMzQzOlx0XHRrZnJlZV9za2JfbGlzdF9yZWFzb24oc2VncywgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTM0NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBza19za2JfcmVhc29uX2Ryb3BgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoZSBgc2tfc2tiX3JlYXNvbl9kcm9wYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWNrZXQgZHJvcHMgYXQgdGhpcyBsZXZlbC4gSSB3YW50IHRvIGtub3cgdGhlIHBvdGVudGlhbCBmYWN0b3JzIHRoYXQgYXJlIGNhdXNpbmcgdGhlc2UgZHJvcHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgLSBrbm93aW5nIHRoZSBleGFjdCByZWFzb24gZm9yIHRoZSBkcm9wIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19za2JfcmVhc29uX2Ryb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xMjE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMTc6Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xMjE4LVx0XHRcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzUtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxMjM2OiAqXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxubmV0L2NvcmUvc2tidWZmLmMtMTIzNy0gKlx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTEyNDU9dm9pZCBfX2ZpeF9hZGRyZXNzXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ2OnNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ3LVx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ4LXtcbm5ldC9jb3JlL3NrYnVmZi5jOjEyNDk6XHRpZiAoX19za19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTAtXHRcdF9fa2ZyZWVfc2tiKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xMjUxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjEyNTI6RVhQT1JUX1NZTUJPTChza19za2JfcmVhc29uX2Ryb3ApO1xubmV0L2NvcmUvc2tidWZmLmMtMTI1My1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMjgyPWtmcmVlX3NrYl9saXN0X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTAtXG5uZXQvY29yZS9za2J1ZmYuYzoxMjkxOlx0XHRpZiAoX19za19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2VncywgcmVhc29uKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTI5Mi1cdFx0XHRza2JfcG9pc29uX2xpc3Qoc2Vncyk7XG4tLVxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc29jay5jLTU5MC1kaXNjYXJkX2FuZF9yZWxzZTpcbm5ldC9jb3JlL3NvY2suYzo1OTE6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL3NvY2suYy01OTItXHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19za19za2JfcmVhc29uX2Ryb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBfX3NrX3NrYl9yZWFzb25fZHJvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyByZWFzb25zIHBhY2tldHMgYXJlIGJlaW5nIGRyb3BwZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBwYWNrZXRzIGFyZSBoaXR0aW5nIHRoZSBmbG9vciBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4ganVzdCBnZW5lcmFsIG5ldHdvcmsgaGVhbHRoLiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBpc3N1ZT8gQSBmaXJld2FsbCBydWxlIGdvbmUgd3Jvbmc/IE1heWJlIGEgbWVtb3J5IGNvbnN0cmFpbnQgc29tZXdoZXJlPyBLbm93aW5nIHdoZXJlIGFuZCB3aHkgdGhlc2UgZHJvcHMgb2NjdXIgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGZpeGluZyB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyBjYWxsZXJzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBkcm9wLCBhbmQgdXNlIG15IGV4cGVyaWVuY2UgdG8gaHlwb3RoZXNpemUgcG9zc2libGUgcm9vdCBjYXVzZXMuIFRpbWUgdG8gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0e1xuMTIxMTpcdFx0c2tiX3JlbGVhc2VfYWxsKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTIxMjpcdFx0a2ZyZWVfc2tibWVtKHNrYik7XG4xMjEzOlx0fVxuMTIxNDpcdEVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpO1xuMTIxNTpcdFxuMTIxNjpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbjEyMTc6XHRib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEyMTg6XHRcdFx0XHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEyMTk6XHR7XG4xMjIwOlx0XHRpZiAodW5saWtlbHkoIXNrYl91bnJlZihza2IpKSlcbjEyMjE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTIyMjpcdFxuMTIyMzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShyZWFzb24gPT0gU0tCX05PVF9EUk9QUEVEX1lFVCB8fFxuMTIyNDpcdFx0XHRcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxuMTIyNTpcdFx0XHRcdFx0XHQgICAgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKSBcdTAwM2U9XG4xMjI2Olx0XHRcdFx0XHRTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSk7XG4xMjI3Olx0XG4xMjI4Olx0XHRpZiAocmVhc29uID09IFNLQl9DT05TVU1FRClcbjEyMjk6XHRcdFx0dHJhY2VfY29uc3VtZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuMTIzMDpcdFx0ZWxzZVxuMTIzMTpcdFx0XHR0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO1xuMTIzMjpcdFx0cmV0dXJuIHRydWU7XG4xMjMzOlx0fVxuMTIzNDpcdFxuMTIzNTpcdC8qKlxuMTIzNjpcdCAqXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxuMTIzNzpcdCAqXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXG4xMjM4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBmcmVlXG4xMjM5Olx0ICpcdEByZWFzb246IHJlYXNvbiB3aHkgdGhpcyBza2IgaXMgZHJvcHBlZFxuMTI0MDpcdCAqXG4xMjQxOlx0ICpcdERyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdFxuMTI0MjpcdCAqXHR6ZXJvLiBNZWFud2hpbGUsIHBhc3MgdGhlIHJlY2VpdmluZyBzb2NrZXQgYW5kIGRyb3AgcmVhc29uIHRvXG4xMjQzOlx0ICpcdCYjMzk7a2ZyZWVfc2tiJiMzOTsgdHJhY2Vwb2ludC5cbjEyNDQ6XHQgKi9cbjEyNDU6XHR2b2lkIF9fZml4X2FkZHJlc3NcbjEyNDY6XHRza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTI0NzpcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMjQ4Olx0e1xuMTI0OTpcdFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgX19za19za2JfcmVhc29uX2Ryb3BgIGZvciBQb3RlbnRpYWwgQmFja3BvcnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgYHJlYXNvbmAgcGFyYW1ldGVyIGluIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAgd2FzIHNvbWV0aGluZyB0aGF0IGFmZmVjdGVkIGFueXRoaW5nIHN1YnN0YW50aWFsLiBJdCBsb29rZWQgbGlrZSBpdCBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gYHRyYWNlX2tmcmVlX3NrYmAuIE5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93LCBhbGxvY2F0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gQmFja3BvcnRpbmcgaGFzIHRvIGJlIHByZWNpc2UuIFRpbWUgdG8gcmUtcmVhZCBTZWN0aW9uIDIuIEFoLCB0aGVyZSBpdCBpczogJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhhdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGluZGljYXRvciB0aGlzIGlzIG9rLCBidXQgc3RpbGwsIEkgY2FuJiMzOTt0IGFzc3VtZS4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgZW51bSBza2JfZHJvcF9yZWFzb25gIGFjdHVhbGx5IGRvZXMuIEFoLCBpdCYjMzk7cyAqb25seSogdXNlZCBmb3IgdGhlIGB0cmFjZV9rZnJlZV9za2JgIHRyYWNlcG9pbnQhIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHNvbWUgZnVuY3Rpb25zIGBrZnJlZV9za2Ioc2tiKWAgdGhhdCBwYXNzZXMgYFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEYCwgYnV0IGBrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKWAgcGFzc2VzIHRoZSBzcGVjaWZpYyBgU0tCX0RST1BfUkVBU09OXy4uLmAgZW51bSB0byBgdHJhY2Vfa2ZyZWVfc2tiYC4gU28gdGhlIGByZWFzb25gIHZhbHVlcyBhcmUgZ2V0dGluZyBzZXQgd2hlbiBwYWNrZXRzIGFyZSBkcm9wcGVkLiBJIHNlZSBzb21lIGV4YW1wbGVzIHdoZXJlIHRoZSByZWFzb24gaXMgYmVpbmcgY2hhbmdlZCB3aGVuIHBhY2tldHMgYXJlIGRyb3BwZWQsIHN1Y2ggYXMgaW4gYGlwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIAoKT2theSwgYnV0IGFyZSB0aGVzZSBgcmVhc29uYCBjb2RlcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBmb3IgY29udHJvbCBmbG93PyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIGNoZWNrIGlmIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBvciBhbnkgb3RoZXIgZHJvcCByZWFzb25zIGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgdHJ1bHkgJiMzNDtwdXJlbHkgZGVjb3JhdGl2ZSYjMzQ7LiBMZXQmIzM5O3MgZG8gdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NLQl9EUk9QX1JFQVNPTl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yMDE9dm9pZCBicl9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjA0LXtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjIwNTpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19UWF9UQVJHRVQ7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yMDYtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNDYtXHRcdGlmIChJU19FUlIocHJldikpIHtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI0NzpcdFx0XHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ4Olx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjQ5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTI5OT12b2lkIGJyX211bHRpY2FzdF9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzAzLXtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMwNDpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19UWF9UQVJHRVQ7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMDUtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zNDYtXHRcdGlmIChJU19FUlIocHJldikpIHtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0NzpcdFx0XHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzQ4Olx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzQ5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Nzg6XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBicl9wb3J0X2dldF9yY3Uoc2tiLVx1MDAzZWRldik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTEwMC1cdFx0aWYgKHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxMDE6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDItXHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNjEtXHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNjI6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTYzLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzOT1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzQxOlx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ5LVx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSkpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTA6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSU5WQUxJRF9TT1VSQ0U7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzUxLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5My1cdFx0Y2FzZSAweDAxOlx0LyogSUVFRSBNQUMgKFBhdXNlKSAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM5NDpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTUFDX0lFRUVfTUFDX0NPTlRST0w7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk1LVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQzLVx0ZGVmYXVsdDpcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDQ6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQ1LWRyb3A6XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5NDpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEwsIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTUtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTctXHRpZiAocCA9PSBOVUxMKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0OTg6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTktXHRiciA9IHAtXHUwMDNlYnI7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDgtXHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O01vZHVsZSBpcHY2IGlzIGRpc2FibGVkLCBzbyBjYWxsX2lwNnRhYmxlcyBpcyBub3Qgc3VwcG9ydGVkLlwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwOTpcdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVELCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTEwLVx0XHR9XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjUtXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNjpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI3LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjgtXHRpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1Mjk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMC1cdGlmICghc2V0dXBfcHJlX3JvdXRpbmcoc2tiLCBzdGF0ZS1cdTAwM2VuZXQpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MzE6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz02NzM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2lwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODYtXHRpZiAoIW5mX2JyaWRnZV91bnNoYXJlKHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY4NzpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjg4LVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkwLVx0aWYgKCFuZl9icmlkZ2UpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5MTpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkyLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjk0LVx0aWYgKCFwYXJlbnQpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5NTpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY5Ni1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNS1cdFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQoc3RhdGUtXHUwMDNlbmV0LCBza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3MDY6XHRcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA3LVx0XHRJUENCKHNrYiktXHUwMDNlZnJhZ19tYXhfc2l6ZSA9IG5mX2JyaWRnZS1cdTAwM2VmcmFnX21heF9zaXplO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzEwLVx0XHRpZiAoYnJfdmFsaWRhdGVfaXB2NihzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcxMTpcdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MTItXHRcdElQNkNCKHNrYiktXHUwMDNlZnJhZ19tYXhfc2l6ZSA9IG5mX2JyaWRnZS1cdTAwM2VmcmFnX21heF9zaXplO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0OC1cdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYXJwaGRyKSkpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NDk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzUwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NDEtXHRpZiAoIXJlYWxvdXRkZXYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk0MjpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk0My1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9MTYyPXVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZ19pcHY2KHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE2OC1cdGlmIChicl92YWxpZGF0ZV9pcHY2KHN0YXRlLVx1MDAzZW5ldCwgc2tiKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNjk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTcwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNzItXHRpZiAoIW5mX2JyaWRnZSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNzM6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTc0LVx0aWYgKCFzZXR1cF9wcmVfcm91dGluZyhza2IsIHN0YXRlLVx1MDAzZW5ldCkpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTc1Olx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNzYtXG4tLVxubmV0L2Nhbi9hZl9jYW4uYz02ODc9c3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy02OTQtXG5uZXQvY2FuL2FmX2Nhbi5jOjY5NTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5fUlhfSU5WQUxJRF9GUkFNRSk7XG5uZXQvY2FuL2FmX2Nhbi5jLTY5Ni1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jYW4vYWZfY2FuLmM9NzAzPXN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy03MTAtXG5uZXQvY2FuL2FmX2Nhbi5jOjcxMTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5GRF9SWF9JTlZBTElEX0ZSQU1FKTtcbm5ldC9jYW4vYWZfY2FuLmMtNzEyLVx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4tLVxubmV0L2Nhbi9hZl9jYW4uYz03MTk9c3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY2FuL2FmX2Nhbi5jLTcyNi1cbm5ldC9jYW4vYWZfY2FuLmM6NzI3Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0NBTlhMX1JYX0lOVkFMSURfRlJBTUUpO1xubmV0L2Nhbi9hZl9jYW4uYy03MjgtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00MTU5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBxZGlzY19wa3RfbGVuX3NlZ3NfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTQxODktXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSlcbm5ldC9jb3JlL2Rldi5jOjQxOTA6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TS0JfQkFEX0dTTztcbm5ldC9jb3JlL2Rldi5jLTQxOTEtXG4tLVxubmV0L2NvcmUvZGV2LmMtNDE5NC1cdFx0aWYgKHRsZW4gXHUwMDNjIHNpemVvZigqdGgpKVxubmV0L2NvcmUvZGV2LmM6NDE5NTpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDE5Ni1cdFx0aGRyX2xlbiAmIzQzOz0gdGxlbjtcbm5ldC9jb3JlL2Rldi5jLTQxOTctXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9sZW4pKVxubmV0L2NvcmUvZGV2LmM6NDE5ODpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDE5OS1cdH0gZWxzZSBpZiAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9MNCkge1xubmV0L2NvcmUvZGV2LmMtNDIwMC1cdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxubmV0L2NvcmUvZGV2LmM6NDIwMTpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDIwMi1cdFx0aGRyX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTQyMTEtXHRcdGlmIChwYXlsb2FkIFx1MDAzYz0gMClcbm5ldC9jb3JlL2Rldi5jOjQyMTI6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TS0JfQkFEX0dTTztcbm5ldC9jb3JlL2Rldi5jLTQyMTMtXHRcdGdzb19zZWdzID0gRElWX1JPVU5EX1VQKHBheWxvYWQsIHNoaW5mby1cdTAwM2Vnc29fc2l6ZSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cdFx0XHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xubmV0L2NvcmUvZGV2LmM6NDI4NzpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XG5uZXQvY29yZS9kZXYuYy00Mjg4LVx0XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDUxNi1cdHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrYi1cdTAwM2VkZXYtXHUwMDNldGN4X2luZ3Jlc3MpO1xubmV0L2NvcmUvZGV2LmM6NDUxNzpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0lOR1JFU1M7XG5uZXQvY29yZS9kZXYuYy00NTE4LVx0c3RydWN0IGJwZl9uZXRfY29udGV4dCBfX2JwZl9uZXRfY3R4LCAqYnBmX25ldF9jdHg7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy00NTc5LVx0c3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfYmgoZGV2LVx1MDAzZXRjeF9lZ3Jlc3MpO1xubmV0L2NvcmUvZGV2LmM6NDU4MDpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0VHUkVTUztcbm5ldC9jb3JlL2Rldi5jLTQ1ODEtXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbi0tXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDkwMC1cdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpIHtcbm5ldC9jb3JlL2Rldi5jOjQ5MDE6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XG5uZXQvY29yZS9kZXYuYy00OTAyLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2NvcmUvZGV2LmMtNDk1Mi1cbm5ldC9jb3JlL2Rldi5jOjQ5NTM6XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUO1xubmV0L2NvcmUvZGV2LmMtNDk1NC1kcm9wOlxuLS1cbm5ldC9jb3JlL2Rldi5jPTU0Mjk9c3RhdGljIGludCBlbnF1ZXVlX3RvX2JhY2tsb2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNwdSxcbi0tXG5uZXQvY29yZS9kZXYuYy01NDM4LVxubmV0L2NvcmUvZGV2LmM6NTQzOTpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XG5uZXQvY29yZS9kZXYuYy01NDQwLVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NzQtY3B1X2JhY2tsb2dfZHJvcDpcbm5ldC9jb3JlL2Rldi5jOjU0NzU6XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQ1BVX0JBQ0tMT0c7XG5uZXQvY29yZS9kZXYuYy01NDc2LVx0bnVtYV9kcm9wX2FkZChcdTAwMjZzZC1cdTAwM2Vkcm9wX2NvdW50ZXJzLCAxKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01NzE4PWludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTc0OC1cdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XHRrZnJlZV9za2JfcmVhc29uKCpwc2tiLCBTS0JfRFJPUF9SRUFTT05fWERQKTtcbm5ldC9jb3JlL2Rldi5jLTU3NTAtXHRyZXR1cm4gWERQX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjAzND1zdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGJvb2wgcGZtZW1hbGxvYyxcbi0tXG5uZXQvY29yZS9kZXYuYy02MDM2LXtcbm5ldC9jb3JlL2Rldi5jOjYwMzc6XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTkhBTkRMRURfUFJPVE87XG5uZXQvY29yZS9kZXYuYy02MDM4LVx0c3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgKnB0X3ByZXY7XG4tLVxubmV0L2NvcmUvZGV2LmMtNjEyOS1cdGlmIChwZm1lbWFsbG9jIFx1MDAyNlx1MDAyNiAhc2tiX3BmbWVtYWxsb2NfcHJvdG9jb2woc2tiKSkge1xubmV0L2NvcmUvZGV2LmM6NjEzMDpcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcbm5ldC9jb3JlL2Rldi5jLTYxMzEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvY29yZS9kZXYuYz02NTU1PXN0YXRpYyB2b2lkIGZsdXNoX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY1ODUtXG5uZXQvY29yZS9kZXYuYzo2NTg2Olx0X19za2JfcXVldWVfcHVyZ2VfcmVhc29uKFx1MDAyNmxpc3QsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpO1xubmV0L2NvcmUvZGV2LmMtNjU4Ny19XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NjExPXN0YXRpYyBpbnQgbmV0X2RtX3BhY2tldF9yZXBvcnRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjYzNTpcdHN1YnN5cyA9IHUzMl9nZXRfYml0cyhjYi1cdTAwM2VyZWFzb24sIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSyk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2MzY6XHRpZiAoc3Vic3lzIFx1MDAzYyBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSlcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNy1cdFx0bGlzdCA9IHJjdV9kZXJlZmVyZW5jZShkcm9wX3JlYXNvbnNfYnlfc3Vic3lzW3N1YnN5c10pO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjM4Olx0c3Vic3lzX3JlYXNvbiA9IGNiLVx1MDAzZXJlYXNvbiBcdTAwMjYgflNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSztcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzOS1cdGlmICghbGlzdCB8fFxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY0Mi1cdCAgICBzdHJsZW4obGlzdC1cdTAwM2VyZWFzb25zW3N1YnN5c19yZWFzb25dKSBcdTAwM2UgTkVUX0RNX01BWF9SRUFTT05fTEVOKSB7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NDM6XHRcdGxpc3QgPSByY3VfZGVyZWZlcmVuY2UoZHJvcF9yZWFzb25zX2J5X3N1YnN5c1tTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkVdKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjY0NDpcdFx0c3Vic3lzX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNjQ1LVx0fVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEzNz1za19maWx0ZXJfdHJpbV9jYXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgY2FwKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0OS1cdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QRk1FTUFMTE9DRFJPUCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxNTA6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MS1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNTMtXHRpZiAoZXJyKVxubmV0L2NvcmUvZmlsdGVyLmM6MTU0Olx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9GSUxURVI7XG5uZXQvY29yZS9maWx0ZXIuYy0xNTUtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTU3LVx0aWYgKGVycilcbm5ldC9jb3JlL2ZpbHRlci5jOjE1ODpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TRUNVUklUWV9IT09LO1xubmV0L2NvcmUvZmlsdGVyLmMtMTU5LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE3MS1cdFx0aWYgKGVycilcbm5ldC9jb3JlL2ZpbHRlci5jOjE3MjpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfRklMVEVSO1xubmV0L2NvcmUvZmlsdGVyLmMtMTczLVx0fVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM1LVx0XHRcdHJldHVybiAxO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXHRcdFx0XHRuZWlnaC1cdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXHUwMDNldHJ1ZXNpemU7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjU2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXHRcdFx0XHRORUlHSF9DQUNIRV9TVEFUX0lOQyhuZWlnaC1cdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc3LVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5laWdoLVx1MDAzZWxvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc5LVx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjAwPWludCBuZWlnaF9yZXNvbHZlX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVx0cmMgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyOS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MzQ9aW50IG5laWdoX2Nvbm5lY3RlZF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cdFx0ZXJyID0gLUVJTlZBTDtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMzY9c3RhdGljX2Fzc2VydChzaXplb2ZfZmllbGQoc3RydWN0IGJpb192ZWMsIGJ2X29mZnNldCkgPT1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMzktI3VuZGVmIEZOXG5uZXQvY29yZS9za2J1ZmYuYzoxNDA6I2RlZmluZSBGTihyZWFzb24pIFtTS0JfRFJPUF9SRUFTT05fIyNyZWFzb25dID0gI3JlYXNvbixcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MS1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyb3BfcmVhc29uc1tdID0ge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE1MT1jb25zdCBzdHJ1Y3QgZHJvcF9yZWFzb25fbGlzdCBfX3JjdSAqXG5uZXQvY29yZS9za2J1ZmYuYzoxNTI6ZHJvcF9yZWFzb25zX2J5X3N1YnN5c1tTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTV0gPSB7XG5uZXQvY29yZS9za2J1ZmYuYzoxNTM6XHRbU0tCX0RST1BfUkVBU09OX1NVQlNZU19DT1JFXSA9IFJDVV9JTklUSUFMSVpFUihcdTAwMjZkcm9wX3JlYXNvbnNfY29yZSksXG5uZXQvY29yZS9za2J1ZmYuYy0xNTQtfTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xNjM9dm9pZCBkcm9wX3JlYXNvbnNfcmVnaXN0ZXJfc3Vic3lzKGVudW0gc2tiX2Ryb3BfcmVhc29uX3N1YnN5cyBzdWJzeXMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY1LXtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2NjpcdGlmIChXQVJOKHN1YnN5cyBcdTAwM2M9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRSB8fFxubmV0L2NvcmUvc2tidWZmLmMtMTY3LVx0XHQgc3Vic3lzIFx1MDAzZT0gQVJSQVlfU0laRShkcm9wX3JlYXNvbnNfYnlfc3Vic3lzKSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODI9dm9pZCBkcm9wX3JlYXNvbnNfdW5yZWdpc3Rlcl9zdWJzeXMoZW51bSBza2JfZHJvcF9yZWFzb25fc3Vic3lzIHN1YnN5cylcbm5ldC9jb3JlL3NrYnVmZi5jLTE4My17XG5uZXQvY29yZS9za2J1ZmYuYzoxODQ6XHRpZiAoV0FSTihzdWJzeXMgXHUwMDNjPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkUgfHxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NS1cdFx0IHN1YnN5cyBcdTAwM2U9IEFSUkFZX1NJWkUoZHJvcF9yZWFzb25zX2J5X3N1YnN5cyksXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIwOT12b2lkIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEwLXtcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMTE6XHRza2JfcmVsZWFzZV9hbGwoc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xMjEyLVx0a2ZyZWVfc2tibWVtKHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIxNz1ib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjI0LVx0XHRcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxubmV0L2NvcmUvc2tidWZmLmM6MTIyNTpcdFx0XHRcdFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXHUwMDNlPVxubmV0L2NvcmUvc2tidWZmLmM6MTIyNjpcdFx0XHRcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjctXG4tLVxubmV0L2NvcmUvc29jay5jPTUyND1zb2NrX3F1ZXVlX3Jjdl9za2JfcmVhc29uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9zb2NrLmMtNTM1LVx0Y2FzZSAtRU5PTUVNOlxubmV0L2NvcmUvc29jay5jOjUzNjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfUkNWQlVGRjtcbm5ldC9jb3JlL3NvY2suYy01MzctXHRjYXNlIC1FTk9CVUZTOlxubmV0L2NvcmUvc29jay5jOjUzODpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QUk9UT19NRU07XG5uZXQvY29yZS9zb2NrLmMtNTM5LVx0fVxuLS1cbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2suYy01NTgtXHRcdHNrX2Ryb3BzX2luYyhzayk7XG5uZXQvY29yZS9zb2NrLmM6NTU5Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkY7XG5uZXQvY29yZS9zb2NrLmMtNTYwLVx0XHRnb3RvIGRpc2NhcmRfYW5kX3JlbHNlO1xuLS1cbm5ldC9jb3JlL3NvY2suYy01NzctXHRcdGlmIChlcnIgPT0gLUVOT01FTSlcbm5ldC9jb3JlL3NvY2suYzo1Nzg6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BGTUVNQUxMT0M7XG5uZXQvY29yZS9zb2NrLmMtNTc5LVx0XHRpZiAoZXJyID09IC1FTk9CVUZTKVxubmV0L2NvcmUvc29jay5jOjU4MDpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0c7XG5uZXQvY29yZS9zb2NrLmMtNTgxLVx0XHRza19kcm9wc19pbmMoc2spO1xuLS1cbm5ldC9pcHY0L2FycC5jPTI5Nz1zdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTI5OS1cdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcbm5ldC9pcHY0L2FycC5jOjMwMDpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfRkFJTEVEKTtcbm5ldC9pcHY0L2FycC5jLTMwMS19XG4tLVxubmV0L2lwdjQvYXJwLmM9OTcwPXN0YXRpYyBpbnQgYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2FycC5jLTk5Mi1cdGlmIChhcnAtXHUwMDNlYXJfaGxuICE9IGRldi1cdTAwM2VhZGRyX2xlbiB8fCBhcnAtXHUwMDNlYXJfcGxuICE9IDQpIHtcbm5ldC9pcHY0L2FycC5jOjk5MzpcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L2FycC5jLTk5NC1cdFx0Z290byBmcmVlc2tiO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTM2NT1zdGF0aWMgaW50IF9fZmliX3ZhbGlkYXRlX3NvdXJjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwMy1cdFx0aWYgKHJlcy50eXBlICE9IFJUTl9MT0NBTCkge1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NDA0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JUF9JTlZBTElEX1NPVVJDRTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwNS1cdFx0XHRnb3RvIGVfaW52YWw7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00MDYtXHRcdH0gZWxzZSBpZiAoIUlOX0RFVl9BQ0NFUFRfTE9DQUwoaWRldikpIHtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQwNzpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSVBfTE9DQUxfU09VUkNFO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDA4LVx0XHRcdGdvdG8gZV9pbnZhbDtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NDQtZV9ycGY6XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0NDU6XHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9SUEZJTFRFUjtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQ0Ni19XG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NDQ5PWludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcwLVx0XHRpZiAoaW5ldF9sb29rdXBfaWZhZGRyX3JjdShuZXQsIHNyYykpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0NzE6XHRcdFx0cmV0dXJuIC1TS0JfRFJPUF9SRUFTT05fSVBfTE9DQUxfU09VUkNFO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcyLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMTEyPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTEzNC1cdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KSAgeyAvKiBNYW5nbGVkIGhlYWRlciwgZHJvcC4gKi9cbm5ldC9pcHY0L2ljbXAuYzoxMTM1Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFI7XG5uZXQvaXB2NC9pY21wLmMtMTEzNi1cdFx0Z290byBvdXRfZXJyO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMjE5LVx0X19JQ01QX0lOQ19TVEFUUyhuZXQsIElDTVBfTUlCX0lORVJST1JTKTtcbm5ldC9pcHY0L2ljbXAuYzoxMjIwOlx0cmV0dXJuIHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L2ljbXAuYy0xMjIxLX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTIyOD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMjMxLVx0XHRfX0lDTVBfSU5DX1NUQVRTKGRldl9uZXRfcmN1KHNrYi1cdTAwM2VkZXYpLCBJQ01QX01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2NC9pY21wLmM6MTIzMjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xubmV0L2lwdjQvaWNtcC5jLTEyMzMtXHR9XG4tLVxubmV0L2lwdjQvaWNtcC5jLTEyMzYtXHRcdC8qIHRoZXJlIGF1Z2h0IHRvIGJlIGEgc3RhdCAqL1xubmV0L2lwdjQvaWNtcC5jOjEyMzc6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG5uZXQvaXB2NC9pY21wLmMtMTIzOC1cdH1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTQwNT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTQzNC1cdF9fSUNNUF9JTkNfU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLCBJQ01QX01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2NC9pY21wLmM6MTQzNTpcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbm5ldC9pcHY0L2ljbXAuYy0xNDM2LX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTQ0Nz1pbnQgaWNtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2ljbXAuYy0xNDQ4LXtcbm5ldC9pcHY0L2ljbXAuYzoxNDQ5Olx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pY21wLmMtMTQ1MC1cdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xNDU5LVx0XHRcdFx0IFhGUk1fU1RBVEVfSUNNUCkpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNDYwOlx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbm5ldC9pcHY0L2ljbXAuYy0xNDYxLVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTQ3MS1cdFx0XHRcdFx0XHRza2IpKSB7XG5uZXQvaXB2NC9pY21wLmM6MTQ3MjpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG5uZXQvaXB2NC9pY21wLmMtMTQ3My1cdFx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjQvaWNtcC5jLTE1MTMtXHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNTE0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JTlZBTElEX1BST1RPO1xubmV0L2lwdjQvaWNtcC5jLTE1MTUtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTUyMC1cdFx0ICAgIGljbXBoLVx1MDAzZXR5cGUgIT0gSUNNUF9BRERSRVNTUkVQTFkpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNTIxOlx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JTlZBTElEX1BST1RPO1xubmV0L2lwdjQvaWNtcC5jLTE1MjItXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTUzOC1cdGlmIChpY21waC1cdTAwM2V0eXBlIFx1MDAzZSBOUl9JQ01QX1RZUEVTKSB7XG5uZXQvaXB2NC9pY21wLmM6MTUzOTpcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1VOSEFORExFRF9QUk9UTztcbm5ldC9pcHY0L2ljbXAuYy0xNTQwLVx0XHRnb3RvIGVycm9yO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xNTUzLWNzdW1fZXJyb3I6XG5uZXQvaXB2NC9pY21wLmM6MTU1NDpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JQ01QX0NTVU07XG5uZXQvaXB2NC9pY21wLmMtMTU1NS1cdF9fSUNNUF9JTkNfU1RBVFMobmV0LCBJQ01QX01JQl9DU1VNRVJST1JTKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmM9MzIxPXZvaWQgaW5ldF9mcmFnX3F1ZXVlX2ZsdXNoKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsXG4tLVxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jLTMyNS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYzozMjY6XHRyZWFzb24gPSByZWFzb24gPzogU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVDtcbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zMjctXHRzdW0gPSBpbmV0X2ZyYWdfcmJ0cmVlX3B1cmdlKFx1MDAyNnEtXHUwMDNlcmJfZnJhZ21lbnRzLCByZWFzb24pO1xuLS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYz0zMzU9dm9pZCBpbmV0X2ZyYWdfZGVzdHJveShzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxKVxuLS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zNDMtXHRyZWFzb24gPSAocS1cdTAwM2VmbGFncyBcdTAwMjYgSU5FVF9GUkFHX0RST1ApID9cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYzozNDQ6XHRcdFx0U0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVCA6XG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQ1LVx0XHRcdFNLQl9DT05TVU1FRDtcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTEyMz1zdGF0aWMgdm9pZCBpcF9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNC17XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjEyNTpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNi1cdHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmZyYWcgPSB0aW1lcl9jb250YWluZXJfb2YoZnJhZywgdCwgdGltZXIpO1xuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTc4LVx0ICovXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjE3OTpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTE4MC1cdGlmIChmcmFnX2V4cGlyZV9za2lwX2ljbXAocXAtXHUwMDNlcS5rZXkudjQudXNlcikgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz0yNDM9c3RhdGljIGludCBpcF9mcmFnX3JlaW5pdChzdHJ1Y3QgaXBxICpxcClcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0Ny1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MjQ4Olx0aW5ldF9mcmFnX3F1ZXVlX2ZsdXNoKFx1MDAyNnFwLVx1MDAzZXEsIFNLQl9EUk9QX1JFQVNPTl9GUkFHX1RPT19GQVIpO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0yNDktXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0xODk9dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMS1cdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMDI6XHRcdFx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMy1cdFx0XHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMC1cdFx0XHR9XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIyMTpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX05PUFJPVE8pO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0yMjItXHRcdH0gZWxzZSB7XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjMzOlx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNKTtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMjgyLVx0XHRfX0lQX0lOQ19TVEFUUyhkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyODM6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI4NC1cdH1cbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5MS1cdFx0X19JUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI5MjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUjtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjkzLVx0fVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMzAzLVx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzozMDQ6XHRcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMwNS1cdFx0XHR9XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDgtXHRcdGlmIChpcF9vcHRpb25zX3Jjdl9zcnIoc2tiLCBkZXYpKVxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDk6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0zMTAtXHR9XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0zNjE9c3RhdGljIGludCBpcF9yY3ZfZmluaXNoX2NvcmUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtNDYwLVx0XHQgICAgSU5fREVWX09SQ09ORihpbl9kZXYsIERST1BfVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1QpKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ2MTpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTklDQVNUX0lOX0wyX01VTFRJQ0FTVDtcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDYyLVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQ3Mi1kcm9wX2Vycm9yOlxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NzM6XHRpZiAoZHJvcF9yZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX0lQX1JQRklMVEVSKVxubmV0L2lwdjQvaXBfaW5wdXQuYy00NzQtXHRcdF9fTkVUX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9JUFJQRklMVEVSKTtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTQ5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwX3Jjdl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUwOS1cdFx0ZGV2X2NvcmVfc3RhdHNfcnhfb3RoZXJob3N0X2Ryb3BwZWRfaW5jKHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzo1MTA6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX09USEVSSE9TVDtcbm5ldC9pcHY0L2lwX2lucHV0LmMtNTExLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy01MjEtXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjUyMjpcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUyMy1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSlcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTU1OC1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBsZW4pIHtcbm5ldC9pcHY0L2lwX2lucHV0LmM6NTU5Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTk0CgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDE2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERyb3AgUmVhc29uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVmaW5pbmcgdGhlIGdyYW51bGFyaXR5IG9mIHBhY2tldCBkcm9wIHJlYXNvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjay4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaW50cm9kdWNpbmcgYSBuZXcgZW51bSBlbnRyeSwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdGhlbiB1cGRhdGluZyB2YXJpb3VzIElQdjQgYW5kIElQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBjb2RlIHBhdGhzIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gd2hlbiBhIHBhY2tldCYjMzk7cyBUaW1lLVRvLUxpdmUgKFRUTCkgZXhwaXJlcy4gVGhlIGNydWNpYWwgcGFydCBmb3IgbWUsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnVydGhlciBmdXp6aW5nLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGlwX2ZvcndhcmQoKWAsIGBpcHY2X3NyaF9yY3YoKWAsIGBpcHY2X3JwbF9zcmhfcmN2KClgLCBgaXB2Nl9ydGhkcl9yY3YoKWAsIGFuZCBgaXA2X2ZvcndhcmQoKWAuIEluc3RlYWQgb2YgdXNpbmcgYSBnZW5lcmljICYjMzQ7SVBfSU5IRFImIzM0OyByZWFzb24gZm9yIGRyb3BwaW5nIHBhY2tldHMgaW4gdGhlc2UgZnVuY3Rpb25zLCB0aGV5IGFyZSBub3cgdXBkYXRlZCB0byBzcGVjaWZ5ICYjMzQ7SVBfVFRMX0VYQ0VFREVEJiMzNDsgdXNpbmcgdGhlIGBrZnJlZV9za2JfcmVhc29uKClgIGZ1bmN0aW9uLiBUaGUgb25seSB0aGluZyB0aGF0JiMzOTtzIGRpZmZlcmVudCBoZXJlIGlzIHRoYXQgYSBuZXcgZW51bSB2YWx1ZSBpcyBwYXNzZWQsIG9yIHRoZSBleGlzdGluZyBlbnVtIHZhbHVlIGlzIGNoYW5nZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhbHRlciB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW4gYSB3YXkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIGRldGVjdGFibGUgdGhyb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggZml0cyB0aGUgY3JpdGVyaWEgb2YgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLiYjMzQ7IEl0IGRvZXMgbm90IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBjb2RlIHBhdGhzIHN0aWxsIGRyb3AgdGhlIHBhY2tldCBhbmQgZnJlZSB0aGUgc2tiLiBUaGUgY2hhbmdlIGp1c3QgdXBkYXRlcyB0aGUgJiMzNDtyZWFzb24mIzM0OyBhcmd1bWVudC4gVGhlcmUgYXJlIG5vIGRhdGEgc3RydWN0dXJlcyBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGNhbiBpbnRyb2R1Y2UgYSBidWcuIE5vIG5ldyBsb2dpYyBpcyBhZGRlZC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgdGhlIHRyYWNlcG9pbnQvZHJvcF9tb25pdG9yLgoKTGV0JiMzOTtzIGRvIGEgY29tcGxldGUgZG91YmxlLWNoZWNrLiBJbnNwZWN0aW5nIHRoZSBjb2RlLCBJIHNlZToKCiogICBUaGUgYGluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oYCBmaWxlIG5vdyBjb250YWlucyB0aGUgbmV3IGVudW0gZW50cnkgYW5kIGFzc29jaWF0ZWQgc3RyaW5nIG1hY3JvLgoqICAgSW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIHRoZSBwYXRjaCBub3cgc2V0cyB0aGUgZHJvcCByZWFzb24gYXMgYElQX1RUTF9FWENFRURFRGAgaW5zdGVhZCBvZiBgSVBfSU5IRFJgLgoqICAgSW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGluc3RhbmNlcyBvZiBga2ZyZWVfc2tiKClgIGFyZSBjaGFuZ2VkIHRvIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRClgLgoqICAgSW4gYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIHRoZSByZWFzb24gcGFzc2VkIHRvIGBrZnJlZV9za2JfcmVhc29uKClgIGlzIHVwZGF0ZWQgdG8gYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLgoKVGhlcmUgYXJlIG5vIGVkZ2UgY2FzZXMsIG5vIGFycmF5IGluZGV4aW5nIGlzc3VlcywgYW5kIG5vIGNoYW5nZXMgdG8ga2VybmVsIGxvZ2ljLCBjb250cm9sIGZsb3csIGxvY2tpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBmdW5jdGlvbmFsIGJlaGF2aW9yLiBUaGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoZSBza2IgaXMgZnJlZWQuIEl0JiMzOTtzIGp1c3QgdGhhdCB0aGUgZHJvcCByZWFzb24gaXMgdXBkYXRlZC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBzdHJpY3RseSBmYWxscyB1bmRlciBwdXJlbHkgdXBkYXRpbmcgdHJhY2Vwb2ludHMsIGl0JiMzOTtzIHNhZmUgdG8gY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXJ0aGVyIGZ1enppbmcuCgpUaHVzLCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3b3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBFbmFibGVDb25maWdzOiBbXSBvciBudWxsYAoqICAgYEZvY3VzU3ltYm9sczogW10gb3IgbnVsbGAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcyBhIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBkcm9wIHJlYXNvbiBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBmdW5jdGlvbnMgdG8gcGFzcyBpdCB0byBga2ZyZWVfc2tiX3JlYXNvbigpYC4gSXQgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludCAvIGRpYWdub3N0aWMgZHJvcCByZWFzb24gdXBkYXRlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgSVB2NC9JUHY2IGZvcndhcmRpbmcgYW5kIHJvdXRpbmcgaGVhZGVyIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHJlcG9ydCB0aGlzIHJlYXNvbiB3aGVuIGZyZWVpbmcgZXhwaXJlZCBwYWNrZXRzLiBUaGlzIGlzIHB1cmVseSBhIHRyYWNlcG9pbnQvbW9uaXRvcmluZyBtZXRhZGF0YSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV4ZWN1dGlvbiBsb2dpYywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxMC43MTk1NDkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5OTY5MzIwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgSVB2NC9JUHY2IGZvcndhcmRpbmcgYW5kIHJvdXRpbmcgaGVhZGVyIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHJlcG9ydCB0aGlzIHJlYXNvbiB3aGVuIGZyZWVpbmcgZXhwaXJlZCBwYWNrZXRzLiBUaGlzIGlzIHB1cmVseSBhIHRyYWNlcG9pbnQvbW9uaXRvcmluZyBtZXRhZGF0YSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV4ZWN1dGlvbiBsb2dpYywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MTAuNzE5NTYyMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTkzMTY0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDA2Yjc5ZGMyZWM4ZmJkZWI2YzdhYWM0ZDZiZTQxNjg4YjM2NDc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjY6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbmluZGV4IDJmMzEyZDFmNjdkNjkuLjNkNmFlYzIwM2MzZjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEBcXG4gXFx0Rk4oUFNQX0lOUFVUKVxcdFxcdFxcdFxcXFxcXG4gXFx0Rk4oUFNQX09VVFBVVClcXHRcXHRcXHRcXFxcXFxuIFxcdEZOKFJFQ1VSU0lPTl9MSU1JVClcXHRcXHRcXFxcXFxuK1xcdEZOKElQX1RUTF9FWENFRURFRClcXHRcXHRcXFxcXFxuIFxcdEZOZShNQVgpXFxuIFxcbiAvKipcXG5AQCAtNjA2LDYgKzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuIFxcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxcbiBcXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cXG4gXFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcXG4rXFx0LyoqXFxuK1xcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBcXHUwMDNjPSAxXFxuK1xcdCAqIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXFxuK1xcdCAqL1xcbitcXHRTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELFxcbiBcXHQvKipcXG4gXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxcbiBcXHQgKiBzaG91bGRuJ3QgYmUgdXNlZCBhcyBhIHJlYWwgJ3JlYXNvbicgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbmluZGV4IDhiNjVmMTI1ODNlYjYuLmIyNDI1NjFkMzdlNzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXFxuKysrIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXFxuQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXFxuIFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XFxuLVxcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XFxuK1xcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9UVExfRVhDRUVERUQpO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gXFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5pbmRleCAwOWE0NTUyZjdmMDhhLi41NTM5MWUyZTU2MTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xcbkBAIC00NjQsNyArNDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gXFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbi1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gXFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbi1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXFxuIFxcdFxcdFxcdFxcdCAgICAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xcbkBAIC01NzcsNyArNTc3LDcgQEAgaW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gXFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXG4tXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7XFxuK1xcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjEyLjMxOTcwNzQxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzMzOTY3NTk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0MDZiNzlkYzJlYzhmYmRlYjZjN2FhYzRkNmJlNDE2ODhiMzY0NzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI2OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuaW5kZXggMmYzMTJkMWY2N2Q2OS4uM2Q2YWVjMjAzYzNmNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4rXHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICs2MDcsMTEgQEAgZW51bSBza2JfZHJvcF9yZWFzb24ge1xuIFx0U0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQsXG4gXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cbiBcdFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQsXG4rXHQvKipcbitcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBcdTAwM2M9IDFcbitcdCAqIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXG4rXHQgKi9cbitcdFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQsXG4gXHQvKipcbiBcdCAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2hcbiBcdCAqIHNob3VsZG4ndCBiZSB1c2VkIGFzIGEgcmVhbCAncmVhc29uJyAtIG9ubHkgZm9yIHRyYWNpbmcgY29kZSBnZW5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbmluZGV4IDhiNjVmMTI1ODNlYjYuLmIyNDI1NjFkMzdlNzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4tXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xuK1x0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggMDlhNDU1MmY3ZjA4YS4uNTUzOTFlMmU1NjEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC02MjMsNyArNjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcbiBcdFx0XHRcdCAgICAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC01NzcsNyArNTc3LDcgQEAgaW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiBcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFxuLVx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjEyLjMxOTcwOTEwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjM1MzUzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB3ZSB0cmFjayBwYWNrZXQgZHJvcHMgZHVlIHRvIFRUTCBleHBpcmF0aW9uLiBJdCdzIGFkZGluZyBhIG5ldyBlbnVtIHZhbHVlLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAgYW5kIHRoZW4gcHJvcGFnYXRpbmcgdGhpcyByZWFzb24gdGhyb3VnaCBjYWxscyB0byBga2ZyZWVfc2tiX3JlYXNvbmAgaW4gYGlwX2ZvcndhcmQuY2AsIGBleHRoZHJzLmNgLCBhbmQgYGlwNl9vdXRwdXQuY2AuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgY29yZSB0cmlhZ2UgY3JpdGVyaWEgYW5kIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuRmlyc3QsIGlzIHRoaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgY29yZT8gQWJzb2x1dGVseS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCwgYGlwX2ZvcndhcmRgLCBgaXB2Nl9zcmhfcmN2YCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgYGlwNl9mb3J3YXJkYCwgYXJlIGFsbCBkZWVwIGluc2lkZSB0aGUgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgcGF0aHdheXMuIFRoaXMgaGl0cyB0aGUgXCJDb3JlIFN1YnN5c3RlbXNcIiBjcml0ZXJpYSwgbm8gcXVlc3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGNvZGUuXG5cbk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBzYXkgdGhhdCBiZWNhdXNlIGl0J3MgKmp1c3QqIGFkZGluZyBhIGRyb3AgcmVhc29uLCBhbmQgbm90IGFsdGVyaW5nICpjb250cm9sIGZsb3cqIG9yIHRoZSAqbG9naWMqIG9mIHRoZSBjb2RlLCB0aGlzIG1pZ2h0IG5vdCBiZSAqd29ydGhmdXp6aW5nKi4gSXQncyBhbG1vc3QuLi5kZWNvcmF0aXZlIGxvZ2dpbmcuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhpcy4gVGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB0aGF0IHdlIHNob3VsZCBOT1QgYmxpbmRseSB0cnVzdCB0aGF0LlxuXG5Mb29raW5nIGF0IFNlY3Rpb24gMiwgdGhlIGNyaXRlcmlhIGFyZSBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgKmp1c3QqIGxvZ2dpbmc/IE5vLCBiZWNhdXNlIGl0J3MgbW9yZSB0aGFuIHRoYXQ7IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGRyb3AgcmVhc29uIGJlaW5nIHBhc3NlZCBpbnRvIGBrZnJlZV9za2JfcmVhc29uYC4gKlRoYXQqIGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZS4gU28sIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93PyBOby4gRG9lcyBpdCBhbHRlciBkYXRhIHN0cnVjdHVyZXM/IEl0IGFkZHMgYW4gZW51bSBjb25zdGFudC4gRG9lcyB0aGlzIGNoYW5nZSB0aGUgZHJvcCByZWFzb24/IFllcywgdGhpcyBjaGFuZ2UgdGhlIGBrZnJlZV9za2JfcmVhc29uYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gU2VjdGlvbiAzIGVtcGhhc2l6ZXMgdGhhdCBgUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZy4uLkNvcmUgU3Vic3lzdGVtczogLi4uY29yZSBuZXR3b3JraW5nYC4gV2VsbCwgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBmYWxsIHNxdWFyZWx5IGludG8gXCJjb3JlIG5ldHdvcmtpbmcuXCIgVGhpcyBjaGFuZ2UgcGFzc2VzIHRoZSByZWFzb24gdG8gYGtmcmVlX3NrYl9yZWFzb25gLCB3aGljaCAqaXMqIHRoZW4gdXNlZCBieSB0cmFjZXBvaW50cyBhbmQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgaGF2ZSB0byB2ZXJpZnkgd2hlcmUgdGhlc2UgYXJlIHVzZWQuIERyb3AgcmVhc29ucyBhcmUgKm5vdCoganVzdCBpbmZvcm1hdGlvbmFsLiBTbywgY2hhbmdpbmcgdGhlIGRyb3AgcmVhc29uIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBpbiBhIGNvcmUgc3Vic3lzdGVtLCBtb2RpZmllcyBhbiBlbnVtLCBhbmQgaGFzIHJlYWNoYWJsZSBjb2RlLiBJJ20gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MTguMjgzMjQ1OTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ5NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxubmV0L2lwdjYvZXh0aGRycy5jOjY4NDpcXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY4NS1cXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxOC4zMzA0OTg2OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDM2ODUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGZpbGUsIHBhcnRpY3VsYXJseSBsaW5lcyA3ODAgdG8gODIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBwcm9jZXNzaW5nIGxvZ2ljIGZvciB0aGVzZSBoZWFkZXJzIHJlc2lkZXMsIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGlzc2VjdHMsIHZhbGlkYXRlcywgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVzIHRoZXNlIGhlYWRlcnMgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4gSSdsbCBsaWtlbHkgbmVlZCB0byBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleHRlbnNpb24gaGVhZGVyIHR5cGVzLCBlc3BlY2lhbGx5IHRoZSBsZXNzIGNvbW1vbiBvbmVzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGlzc3VlcyBsaWtlIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIChsaWtlIHRoZSBBSCBhbmQgRVNQIGhlYWRlcnMpLCBhbmQgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgcG9zc2libGUuIEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbXBvbmVudHMsIHN1Y2ggYXMgdGhlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIxLjc2NzM1MTc0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQ2OTpcXHRcXHRcXHR9XFxuIDQ3MDpcXHRcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDczOlxcdFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRyZXR1cm4gLTE7XFxuIDQ3OTpcXHR9XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbiA0ODI6XFx0e1xcbiA0ODM6XFx0XFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XFxuIDQ4NDpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNDg2OlxcdFxcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XFxuIDQ4NzpcXHRcXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XFxuIDQ4ODpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuIDQ4OTpcXHRcXHRpbnQgYWNjZXB0X3JwbF9zZWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIxLjc2NzQ1MjQyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODcwNzgzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBkZWVwZXIgaW50byBJUHY2LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHRoZSB1c3VhbCBzdXNwZWN0cywgYnV0IG5vdyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZS4gSXQncyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgdGhvcm91Z2hseSBjb3ZlcmluZyBhbGwgdGhlIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyByZWxhdGVkIHRvIHJvdXRpbmcgaGVhZGVycy4gSSdtIGdvaW5nIHRvIGFkZCBgaXB2Nl9ydGhkcl9yY3ZgIHRvIHRoZSBsaXN0IOKAkyB0aGF0IGNvdmVycyB0aGUgZ2VuZXJhbCByb3V0aW5nIGhlYWRlciBwcm9jZXNzaW5nIOKAkyBidXQgSSBhbHNvIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBgaXB2Nl9ycGxfc3JoX3JjdmAuIFdpdGggUlBMIGFuZCBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgcG90ZW50aWFsbHkgYmVpbmcgZGVwbG95ZWQgbW9yZSB3aWRlbHksIEkgY2FuJ3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueSBpbnRlcmFjdGlvbiBwb2ludHMgb3IgZWRnZSBjYXNlcyB0aGVyZS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0J3MgbWFrZSBzdXJlIGJvdGggb2YgdGhlc2UgYXJlIGFpcnRpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoyMy42NTQ1MzI3NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxNTpcXHRcXG4gNjE2OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDYxNzpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNjE4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjE5OlxcdFxcdH1cXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0aWYgKHNrYl9kc3RfZGV2KHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuIDYyMjpcXHRcXHRcXHRpZiAoaXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNjIzOlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNjI0OlxcdFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxcbiA2MjU6XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbiA2MjY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA2Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2Mjg6XFx0XFx0XFx0fVxcbiA2Mjk6XFx0XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDYzMjpcXHRcXHRcXHRnb3RvIGxvb3BlZF9iYWNrO1xcbiA2MzM6XFx0XFx0fVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0cmV0dXJuIC0xO1xcbiA2Mzg6XFx0fVxcbiA2Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIzLjY1NDY0MTk2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDczOTc3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGBpcHY2X3J0aGRyX3JjdmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyByZWNlaXZpbmcgSVB2NiBwYWNrZXRzIHdpdGggcm91dGluZyBoZWFkZXJzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBpdCBjYXJlZnVsbHkuIEknbGwgaGF2ZSB0byBzZWUgaG93IGl0IHZlcmlmaWVzIHRoZSBoZWFkZXIncyBpbnRlZ3JpdHksIGNoZWNrcyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGRldGVybWluZXMgdGhlIG5leHQgZGVzdGluYXRpb24gYmFzZWQgb24gdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHdoZXRoZXIgdGhlIGNvZGUgYWRoZXJlcyB0byBSRkMgc3BlY2lmaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBob3AtYnktaG9wIG9wdGlvbnMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcm91dGluZyBoZWFkZXIgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MjUuNzYyMDQyOTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODA1OlxcdFxcbiA4MDY6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDgwNzpcXHRcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbiA4MDg6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MDk6XFx0XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDgxMTpcXHRcXHR9XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA4MTQ6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDgxNTpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDgxNjpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcXG4gODE3OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gODE4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gODE5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gODIwOlxcdFxcdFxcdH1cXG4gODIxOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA4MjI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MjY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgyNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgyODpcXHRcXG4gODI5OlxcdHVua25vd25fcmg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjI1Ljc2MjE3ODE2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA2ODY5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBJUHY2IG91dHB1dCBwYXRoLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IGZpbGUgbmFtZSBtYWtlcyBwZXJmZWN0IHNlbnNlLCBsb2dpY2FsbHkuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY2Fub25pY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWN0dWFsbHkgc2VuZGluZyBhbiBJUHY2IHBhY2tldC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoaW5ncyBsaWtlIHBhY2tldCBoZWFkZXIgY3JlYXRpb24sIGFkZHJlc3MgcmVzb2x1dGlvbiwgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyAoaWYgbmVjZXNzYXJ5KSwgYW5kIHRoZSB1bHRpbWF0ZSB0cmFuc21pc3Npb24gY2FsbCBkb3duIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBsYXllci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoyOC4wNjkwNTAwOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0XFx0ICpcXHRjYW5ub3QgYmUgZnJhZ21lbnRlZCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXJyYW50eVxcbiA1NjY6XFx0XFx0ICpcXHR0aGF0IGRpZmZlcmVudCBmcmFnbWVudHMgd2lsbCBnbyBhbG9uZyBvbmUgcGF0aC4gLS1BTktcXG4gNTY3OlxcdFxcdCAqL1xcbiA1Njg6XFx0XFx0aWYgKHVubGlrZWx5KG9wdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfUk9VVEVSQUxFUlQpKSB7XFxuIDU2OTpcXHRcXHRcXHRpZiAoaXA2X2NhbGxfcmFfY2hhaW4oc2tiLCBudG9ocyhvcHQtXFx1MDAzZXJhKSkpXFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcxOlxcdFxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0LypcXG4gNTc0OlxcdFxcdCAqXFx0Y2hlY2sgYW5kIGRlY3JlbWVudCB0dGxcXG4gNTc1OlxcdFxcdCAqL1xcbiA1NzY6XFx0XFx0aWYgKGhkci1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNTc3OlxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNTc4OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIDU4MjpcXHRcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdC8qIFhYWDogaWRldi1cXHUwMDNlY25mLnByb3h5X25kcD8gKi9cXG4gNTg1OlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2Vwcm94eV9uZHApIFxcdTAwMjZcXHUwMDI2XFxuIDU4NjpcXHRcXHQgICAgcG5laWdoX2xvb2t1cChuZF90YWJsZShuZXQpLCBcXHUwMDI2aGRyLVxcdTAwM2VkYWRkciwgc2tiLVxcdTAwM2VkZXYpKSB7XFxuIDU4NzpcXHRcXHRcXHRpbnQgcHJveGllZCA9IGlwNl9mb3J3YXJkX3Byb3h5X2NoZWNrKHNrYik7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdFxcdGhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDU5MDpcXHRcXHRcXHRpZiAocHJveGllZCBcXHUwMDNlIDApIHtcXG4gNTkxOlxcdFxcdFxcdFxcdC8qIEl0J3MgdGVtcHRpbmcgdG8gZGVjcmVhc2UgdGhlIGhvcCBsaW1pdFxcbiA1OTI6XFx0XFx0XFx0XFx0ICogaGVyZSBieSAxLCBhcyB3ZSBkbyBhdCB0aGUgZW5kIG9mIHRoZVxcbiA1OTM6XFx0XFx0XFx0XFx0ICogZnVuY3Rpb24gdG9vLlxcbiA1OTQ6XFx0XFx0XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MjguMDY5MTc2ODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjUxMDc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBJUCBGb3J3YXJkaW5nIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyBJUCBmb3J3YXJkaW5nLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIGdvdCB0byBiZSBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggSVB2NC4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgZGVzY3JpcHRpb24sIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGNvZGUgaW4gYGlwX2ZvcndhcmQuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBmb3J3YXJkaW5nIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjMwLjI5NDI4Njk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2ZvcndhcmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IHJ0X3RvczJwcmlvcml0eShpcGgtXFx1MDAzZXRvcyk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9GT1JXQVJELFxcbiAxNjM6XFx0XFx0XFx0ICAgICAgIG5ldCwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgcnQtXFx1MDAzZWRzdC5kZXYsXFxuIDE2NDpcXHRcXHRcXHQgICAgICAgaXBfZm9yd2FyZF9maW5pc2gpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRzcl9mYWlsZWQ6XFxuIDE2NzpcXHRcXHQvKlxcbiAxNjg6XFx0XFx0ICpcXHRTdHJpY3Qgcm91dGluZyBwZXJtaXRzIG5vIGdhdGV3YXlpbmdcXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0IGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1NSX0ZBSUxFRCwgMCk7XFxuIDE3MTpcXHRcXHQgZ290byBkcm9wO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHR0b29fbWFueV9ob3BzOlxcbiAxNzQ6XFx0XFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xcbiAxNzU6XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDE3NjpcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XFxuIDE3NzpcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcXG4gMTc4OlxcdGRyb3A6XFxuIDE3OTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gMTgwOlxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4gMTgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MzAuMjk0MzUyNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MjMwMjkyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUcmlhZ2U6IFNLQiBEcm9wIFJlYXNvbiBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTS0IgZHJvcCByZWFzb24sIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBldGMuKSB0byB1c2UgdGhpcyBuZXcgcmVhc29uIGluc3RlYWQgb2YgZXhpc3Rpbmcgb25lcy4gTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbnRleHQsIHNvIHJlYWNoYWJpbGl0eSBpc24ndCBhbiBpc3N1ZS5cblxuTm93LCB0aGUgdHJpYWdlIGd1aWRlbGluZXMgYXJlIGtleSBoZXJlLiBJIG5lZWQgdG8gbWFrZSBhIGNhcmVmdWwgYXNzZXNzbWVudC4gVGhlIGNvcmUgcGhpbG9zb3BoeSBjZW50ZXJzIG9uIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGFuZCBsYXRlbnQgYnVncyBpbiAqcmVhY2hhYmxlKiBjb2RlLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSDigJMgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUsIHVzaW5nIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIG5vdCBnb2luZyB0byBibGluZGx5IHRydXN0IGFueSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zIGVpdGhlciwgc28gbGV0J3MgZGlnIGRlZXBlci5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhpcyBhIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLm9yIHRyYWNlcG9pbnQgdGhhdCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzXCI/IFRoZSBkcm9wIHJlYXNvbiBpdHNlbGYgaXMgcGFzc2VkIHRvIGBrZnJlZV9za2JfcmVhc29uYCwgd2hpY2ggdHJhY2VzIHRoZSBkcm9wLiBIb3dldmVyLCB0aGUgdHJpYWdlIGd1aWRlbGluZXMgYXJlIHZlcnkgc3BlY2lmaWMuXG5cbiogICBBZGRpbmcgYSBuZXcgZW51bSBhbmQgY2hhbmdpbmcgdGhlIHZhbHVlcyBwYXNzZWQgdG8gYGtmcmVlX3NrYl9yZWFzb25gICptb2RpZmllcyogd2hhdCBpcyBwYXNzZWQgdG8gdGhlIHRyYWNlcG9pbnQuIFNvIHRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBtb2RpZmljYXRpb24gb2YgYSBkYXRhIHN0cnVjdHVyZSAodGhlIGVudW0gaXRzZWxmKSBhbmQgYW4gYWx0ZXJhdGlvbiBvZiBhIGNhbGwgZnVuY3Rpb24sIGFuZCBhcyBhIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFjaW5nLCBldmVuIGlmIHRoZSBtYWluIGNvbnRyb2wgZmxvdyAqc2VlbXMqIHVuY2hhbmdlZC5cbiogICBUaGlzIGlzIG5vdCBhIHB1cmUgXCJtZXNzYWdlIHN0cmluZ1wiIGNoYW5nZSwgaXQgaXMgYSBjaGFuZ2Ugb2YgYSAqcGFyYW1ldGVyKi4gSW4gZmFjdCwgdGhlIGVudW0gaXMgcGFzc2VkIHRvIGFuIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24uXG5cblNvLCBhbSBJIHJpZ2h0IGluIHRoaW5raW5nIHRoZSBwYXRjaCBtb2RpZmllcyBhIFwicmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlXCIsIGEgXCJoZWxwZXIgYWJzdHJhY3Rpb25cIiBvciBcImFsZ29yaXRobSBmbG93c1wiLiBUaGUgY29kZSBjbGVhcmx5IG1vZGlmaWVzIGEgZHJvcCByZWFzb24gZW51bSB2YWx1ZSBwYXNzZWQgdG8gYSB0cmFjZXBvaW50IGZ1bmN0aW9uLlxuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJdCBpcyAqTk9UKiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhlIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLlwiIGNsYXVzZSBpcyBtZWFudCB0byBwcmV2ZW50IHVzIGZyb20gZnV6emluZyBzaW1wbGUgcHJpbnRpbmcgc3RhdGVtZW50IG1vZGlmaWNhdGlvbnMsIG5vdCBmcm9tICptb2RpZnlpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy4qXG5cbkluIHRoZSBlbmQsIHNpbmNlIHRoZSBwYXRjaCAqbW9kaWZpZXMqIGRhdGEgdGhhdCBmZWVkcyBpbnRvIHJlYWNoYWJsZSBjb2RlICh0aGUga2VybmVsIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiksIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgZnV6emluZyB0aGlzIHRvIHNlZSBpZiBhbnkgbGF0ZW50IGJ1Z3MgYXBwZWFyLCBvciByZWdyZXNzaW9ucy4gSSBuZWVkIHRvIGNoZWNrIGhvdyBleGFjdGx5IGBrZnJlZV9za2JfcmVhc29uYCBhbmQgYHNrYl9kcm9wX3JlYXNvbmAgd29yayBpbiB0aGUga2VybmVsIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjo0OC43MTczODUxNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0OTY0NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjQ4LjgwMjM1ODEzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU5Mzk5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGZyZWVpbmcgb2YgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4g4oCTIGJhc2ljYWxseSwgZXZlcnl0aGluZyB0aGF0IGlsbHVtaW5hdGVzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6NTEuMDYxNzYxMjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE4MzY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZnJlZV9za2JfcmVhc29uXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MzUxMT12b2lkIGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNTE1LVxcdGVsc2VcXG5uZXQvY29yZS9kZXYuYzozNTE2OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTM1MTctfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00Mjg2LVxcdFxcdFxcdGlmICh1bmxpa2VseShkZWZlcl9jb3VudCBcXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjQyODc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9RRElTQ19CVVJTVF9EUk9QKTtcXG5uZXQvY29yZS9kZXYuYy00Mjg4LVxcdFxcdFxcdFxcdHJldHVybiBORVRfWE1JVF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NTU1LVxcdGNhc2UgVENfQUNUX1NIT1Q6XFxubmV0L2NvcmUvZGV2LmM6NDU1NjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ1NTctXFx0XFx0KnJldCA9IE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ2MDYtXFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG5uZXQvY29yZS9kZXYuYzo0NjA3OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2NvcmUvZGV2LmMtNDYwOC1cXHRcXHQqcmV0ID0gTkVUX1hNSVRfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ4MTk9aW50IF9fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ4MzctXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYzo0ODM4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ4MzktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDI5PXN0YXRpYyBpbnQgZW5xdWV1ZV90b19iYWNrbG9nKHN0cnVjdCBza19idWZmICpza2IsIGludCBjcHUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDc4LVxcdGRldl9jb3JlX3N0YXRzX3J4X2Ryb3BwZWRfaW5jKHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvY29yZS9kZXYuYzo1NDc5OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTU0ODAtXFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTcxOD1pbnQgZG9feGRwX2dlbmVyaWMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTc0OC1cXHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XFxubmV0L2NvcmUvZGV2LmM6NTc0OTpcXHRrZnJlZV9za2JfcmVhc29uKCpwc2tiLCBTS0JfRFJPUF9SRUFTT05fWERQKTtcXG5uZXQvY29yZS9kZXYuYy01NzUwLVxcdHJldHVybiBYRFBfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYwMzQ9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBib29sIHBmbWVtYWxsb2MsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02MjM3LVxcbm5ldC9jb3JlL2Rldi5jOjYyMzg6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy02MjM5LVxcdFxcdC8qIEphbWFsLCBub3cgeW91IHdpbGwgbm90IGFibGUgdG8gZXNjYXBlIGV4cGxhaW5pbmdcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzMtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTIzNS1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXFx0XFx0XFx0XFx0bmVpZ2gtXFx1MDAzZWFycF9xdWV1ZV9sZW5fYnl0ZXMgLT0gYnVmZi1cXHUwMDNldHJ1ZXNpemU7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI1NjpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9RVUVVRUZVTEwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXFx0XFx0XFx0XFx0TkVJR0hfQ0FDSEVfU1RBVF9JTkMobmVpZ2gtXFx1MDAzZXRibCwgdW5yZXNfZGlzY2FyZHMpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI3Ny1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5laWdoLVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjc4OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI3OS1cXHR0cmFjZV9uZWlnaF9ldmVudF9zZW5kX2RlYWQobmVpZ2gsIDEpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYwMD1pbnQgbmVpZ2hfcmVzb2x2ZV9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVxcdHJjID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjI4OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2MjktXFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjM0PWludCBuZWlnaF9jb25uZWN0ZWRfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjUxLjEzMjk1Njk3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0Njg3MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBrZnJlZV9za2JfcmVhc29uYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29kZSwgaXMgdG8gZmluZCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLiBJJ20gcHJldHR5IHN1cmUgaXQncyBidXJpZWQgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBgbmV0L2NvcmUvc2tidWZmLmNgIGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdC4gSXQncyB0aGUgY2VudHJhbCBmaWxlIGZvciBTS0JzLCBzbyBpdCBtYWtlcyBzZW5zZSBpdCBtaWdodCBiZSBkZWZpbmVkIHRoZXJlLCBvciBhdCBsZWFzdCBoYXZlIGEgaGVhZGVyIGZpbGUgd2hlcmUgaXQgaXMuIElmIGl0J3Mgbm90IGRpcmVjdGx5IGluIGBza2J1ZmYuY2AsIHRoZW4gSSdsbCBzdGFydCBjaGVja2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpdCB1c2VzLiBHb3R0YSBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgYGtmcmVlX3NrYl9yZWFzb25gIGlzLCBob3cgaXQncyB1c2VkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2h5IHNvbWVvbmUgaXMgY3VyaW91cyBhYm91dCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjo1My4wMzc2NDg5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Mjk4MDQ0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX2tmcmVlX3NrYl9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjU1LjcwMDYzODUwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4MjcwMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24ncyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyByb2xlIGluIFNLQiBtYW5hZ2VtZW50LiBUaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMsIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UsIHBhcnRpY3VsYXJseSBpbiB0aGUgbW9yZSBjb21wbGV4IGFzcGVjdHMgb2YgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJ20gaG9waW5nIHRoZXJlJ3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6NTguMTA4OTExMDY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4OTI4ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjU4LjIxMzgxMTk2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc2NjM1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRmluZGluZyBga2ZyZWVfc2tiX3JlYXNvbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBga2ZyZWVfc2tiX3JlYXNvbmAgaXMgdXNlZC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBjb3VsZCBnbyBhYm91dCB0aGlzIGluIGEgZmV3IHdheXMsIGRlcGVuZGluZyBvbiB3aGF0IEknbSBsb29raW5nIGZvci4gSSBjb3VsZCBzdGFydCB3aXRoIGEgc2ltcGxlIGdyZXAsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gcHJvZHVjZSBhIG5vaXN5IG91dHB1dC4gSSBjb3VsZCBsZXZlcmFnZSBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIHNlYXJjaCB0b29sIGlmIGl0J3MgYXZhaWxhYmxlLiBJZiBpdCdzIGEga2VybmVsIHN5bWJvbCwgSSdkIHByb2JhYmx5IHN0YXJ0IHdpdGggYG5tYCB0byBtYWtlIHN1cmUgaXQncyBleHBvcnRlZCBhbmQgdGhlbiBtb3ZlIG9udG8gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgc3ltYm9sIHRhYmxlcy4gSWYgSSBzdXNwZWN0IGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudCBhcyB3ZWxsLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8sIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBjcmVhdGUgdGhlIGJlc3Qgc2VhcmNoIHN0cmF0ZWd5LiBMZXQncyBzdGFydCBieSB0cnlpbmcgYSBiYXNpYyBzZWFyY2ggdG8gZmluZCB0aGUgb2NjdXJyZW5jZXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjAwLjI5MDQ1MTM3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MzgwODk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGtmcmVlX3NrYl9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjAyLjQzNDI3MDgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg3MzA3MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgYHNrYmAgZGVhbGxvY2F0aW9uIGlzIGRvbmUsIGFuZCwgSSdtIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IHRoZSAqd2h5KiBiZWhpbmQgdGhvc2UgZGVhbGxvY2F0aW9ucy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtmcmVlX3NrYl9yZWFzb25gIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gcHJvdmlkZSBjb250ZXh0IGZvciBkZWJ1Z2dpbmcgb3IgYXVkaXRpbmcgcHVycG9zZXMuIFRoZSBpbmNsdWRlIGRpcmVjdG9yeSBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGlzIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgYHNrYmAgc3RydWN0dXJlIGxpdmUsIGFuZCBpZiB0aGVyZSdzIGFueSBpbmRpY2F0aW9uIG9uIHRoZSAqcmVhc29uKiBmb3IgZnJlZWluZywgdGhhdCdzIGxpa2VseSB0aGUgcGxhY2UgdG8gZmluZCBpdC4gSSdsbCBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA0LjQyMTU4MDYyOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NzcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfc2tiX3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMjE6a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzMD1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2OS1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDcwOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ3MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA0LjUxMjI2MzY2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY3OTc4OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDEzMTUtMTM0MCBvZiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSByZWFsbHkgbG9va2luZyBhdCBoZXJlPyBHaXZlbiB0aGUgZmlsZSwgaXQncyBsaWtlbHkgc29tZXRoaW5nIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBjb3JlIHBhY2tldCBidWZmZXIgbWFuYWdlbWVudC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG1lY2hhbmlzbXMsIGRhdGEgYWNjZXNzIG1ldGhvZHMsIG9yIGV2ZW4gc29tZSBmb3JtIG9mIG1ldGFkYXRhIGhhbmRsaW5nLlxuXG5Lbm93aW5nIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGVzZSBoZWFkZXIgZmlsZXMsIEknZCBleHBlY3QgdG8gZmluZCBlaXRoZXIgbWFjcm8gZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG9yIGlubGluZSBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBkaXJlY3RseSByZWxhdGUgdG8gYHNrX2J1ZmZgLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQgaXMgdmVyeSBsaWtlbHkgYSBzdWJzZWN0aW9uIG9mIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIFxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IG9mIGFueSByZWxldmFudCBtYWNyb3Mgb3IgZnVuY3Rpb25zIGRlZmluZWQgbmVhcmJ5LCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoaXMgc2VnbWVudC4gTXkgcHJpb3JpdHkgd2lsbCBiZSB0byBncmFzcCAqaG93KiBpdCBmdW5jdGlvbnMgYW5kICp3aHkqIHRoZSBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgbm9uLW9idmlvdXMuIEkgd2FudCB0byByZWxhdGUgaXQgdG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBmaXQgaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHN1YnN5c3RlbSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA2Ljg4MDI0NjIxMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzE1OlxcdFxcbjEzMTY6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTMxNzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzE5OlxcdFxcbjEzMjA6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuMTMyMTpcXHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMzIyOlxcdHtcXG4xMzIzOlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChOVUxMLCBza2IsIHJlYXNvbik7XFxuMTMyNDpcXHR9XFxuMTMyNTpcXHRcXG4xMzI2OlxcdC8qKlxcbjEzMjc6XFx0ICpcXHRrZnJlZV9za2IgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCAnTk9UX1NQRUNJRklFRCcgcmVhc29uXFxuMTMyODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBmcmVlXFxuMTMyOTpcXHQgKi9cXG4xMzMwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzMxOlxcdHtcXG4xMzMyOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTMzMzpcXHR9XFxuMTMzNDpcXHRcXG4xMzM1OlxcdHZvaWQgc2tiX3JlbGVhc2VfaGVhZF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4xMzM2OlxcdHZvaWQga2ZyZWVfc2tiX2xpc3RfcmVhc29uKHN0cnVjdCBza19idWZmICpzZWdzLFxcbjEzMzc6XFx0XFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzM4OlxcdHZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xcbjEzMzk6XFx0dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuMTM0MDpcXHRcXG4xMzQxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2VncylcXG4xMzQyOlxcdHtcXG4xMzQzOlxcdFxcdGtmcmVlX3NrYl9saXN0X3JlYXNvbihzZWdzLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTM0NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA2Ljg4MDYxMzc5MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgzMzU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBza19za2JfcmVhc29uX2Ryb3BgKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHNrX3NrYl9yZWFzb25fZHJvcGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFja2V0IGRyb3BzIGF0IHRoaXMgbGV2ZWwuIEkgd2FudCB0byBrbm93IHRoZSBwb3RlbnRpYWwgZmFjdG9ycyB0aGF0IGFyZSBjYXVzaW5nIHRoZXNlIGRyb3BzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgLSBrbm93aW5nIHRoZSBleGFjdCByZWFzb24gZm9yIHRoZSBkcm9wIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6Mjc6MDguNzYzOTc2MjI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ1MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19za2JfcmVhc29uX2Ryb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTIxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubmV0L2NvcmUvc2tidWZmLmM6MTIxNzpib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjE4LVxcdFxcdFxcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTIzNS0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjM2OiAqXFx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM3LSAqXFx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTI0NT12b2lkIF9fZml4X2FkZHJlc3NcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ2OnNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTI0Ny1cXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxubmV0L2NvcmUvc2tidWZmLmMtMTI0OC17XFxubmV0L2NvcmUvc2tidWZmLmM6MTI0OTpcXHRpZiAoX19za19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUwLVxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTI1MS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTI1MjpFWFBPUlRfU1lNQk9MKHNrX3NrYl9yZWFzb25fZHJvcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTI1My1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEyODI9a2ZyZWVfc2tiX2xpc3RfcmVhc29uKHN0cnVjdCBza19idWZmICpzZWdzLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyOTE6XFx0XFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNlZ3MsIHJlYXNvbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkyLVxcdFxcdFxcdHNrYl9wb2lzb25fbGlzdChzZWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTU5MC1kaXNjYXJkX2FuZF9yZWxzZTpcXG5uZXQvY29yZS9zb2NrLmM6NTkxOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL3NvY2suYy01OTItXFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA4LjgzNDQzNTQ1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4NzY3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19za19za2JfcmVhc29uX2Ryb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSdtIHRoaW5raW5nIGFib3V0IGBfX3NrX3NrYl9yZWFzb25fZHJvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyByZWFzb25zIHBhY2tldHMgYXJlIGJlaW5nIGRyb3BwZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBwYWNrZXRzIGFyZSBoaXR0aW5nIHRoZSBmbG9vciBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4ganVzdCBnZW5lcmFsIG5ldHdvcmsgaGVhbHRoLiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBpc3N1ZT8gQSBmaXJld2FsbCBydWxlIGdvbmUgd3Jvbmc/IE1heWJlIGEgbWVtb3J5IGNvbnN0cmFpbnQgc29tZXdoZXJlPyBLbm93aW5nIHdoZXJlIGFuZCB3aHkgdGhlc2UgZHJvcHMgb2NjdXIgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGZpeGluZyB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyBjYWxsZXJzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBkcm9wLCBhbmQgdXNlIG15IGV4cGVyaWVuY2UgdG8gaHlwb3RoZXNpemUgcG9zc2libGUgcm9vdCBjYXVzZXMuIFRpbWUgdG8gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjEwLjk0MzIwNjc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMDpcXHR7XFxuMTIxMTpcXHRcXHRza2JfcmVsZWFzZV9hbGwoc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTIxMjpcXHRcXHRrZnJlZV9za2JtZW0oc2tiKTtcXG4xMjEzOlxcdH1cXG4xMjE0OlxcdEVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpO1xcbjEyMTU6XFx0XFxuMTIxNjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFxuMTIxNzpcXHRib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMjE4OlxcdFxcdFxcdFxcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEyMTk6XFx0e1xcbjEyMjA6XFx0XFx0aWYgKHVubGlrZWx5KCFza2JfdW5yZWYoc2tiKSkpXFxuMTIyMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTIyMjpcXHRcXG4xMjIzOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocmVhc29uID09IFNLQl9OT1RfRFJPUFBFRF9ZRVQgfHxcXG4xMjI0OlxcdFxcdFxcdFxcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxcbjEyMjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXFx1MDAzZT1cXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKTtcXG4xMjI3OlxcdFxcbjEyMjg6XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfQ09OU1VNRUQpXFxuMTIyOTpcXHRcXHRcXHR0cmFjZV9jb25zdW1lX3NrYihza2IsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuMTIzMDpcXHRcXHRlbHNlXFxuMTIzMTpcXHRcXHRcXHR0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO1xcbjEyMzI6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTIzMzpcXHR9XFxuMTIzNDpcXHRcXG4xMjM1OlxcdC8qKlxcbjEyMzY6XFx0ICpcXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxcbjEyMzc6XFx0ICpcXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXFxuMTIzODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBmcmVlXFxuMTIzOTpcXHQgKlxcdEByZWFzb246IHJlYXNvbiB3aHkgdGhpcyBza2IgaXMgZHJvcHBlZFxcbjEyNDA6XFx0ICpcXG4xMjQxOlxcdCAqXFx0RHJvcCBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGFuZCBmcmVlIGl0IGlmIHRoZSB1c2FnZSBjb3VudCBoYXMgaGl0XFxuMTI0MjpcXHQgKlxcdHplcm8uIE1lYW53aGlsZSwgcGFzcyB0aGUgcmVjZWl2aW5nIHNvY2tldCBhbmQgZHJvcCByZWFzb24gdG9cXG4xMjQzOlxcdCAqXFx0J2tmcmVlX3NrYicgdHJhY2Vwb2ludC5cXG4xMjQ0OlxcdCAqL1xcbjEyNDU6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzXFxuMTI0NjpcXHRza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEyNDc6XFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEyNDg6XFx0e1xcbjEyNDk6XFx0XFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjEwLjk0Mzc5MTQyOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE3NjU5OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19za19za2JfcmVhc29uX2Ryb3BgIGZvciBQb3RlbnRpYWwgQmFja3BvcnRpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGByZWFzb25gIHBhcmFtZXRlciBpbiBgX19za19za2JfcmVhc29uX2Ryb3BgIHdhcyBzb21ldGhpbmcgdGhhdCBhZmZlY3RlZCBhbnl0aGluZyBzdWJzdGFudGlhbC4gSXQgbG9va2VkIGxpa2UgaXQganVzdCB3ZW50IHN0cmFpZ2h0IHRvIGB0cmFjZV9rZnJlZV9za2JgLiBObyBjaGFuZ2VzIHRvIGNvbnRyb2wgZmxvdywgYWxsb2NhdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLlxuXG5CdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gQmFja3BvcnRpbmcgaGFzIHRvIGJlIHByZWNpc2UuIFRpbWUgdG8gcmUtcmVhZCBTZWN0aW9uIDIuIEFoLCB0aGVyZSBpdCBpczogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgVGhhdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGluZGljYXRvciB0aGlzIGlzIG9rLCBidXQgc3RpbGwsIEkgY2FuJ3QgYXNzdW1lLlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgZW51bSBza2JfZHJvcF9yZWFzb25gIGFjdHVhbGx5IGRvZXMuIEFoLCBpdCdzICpvbmx5KiB1c2VkIGZvciB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludCEgSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBmdW5jdGlvbnMgYGtmcmVlX3NrYihza2IpYCB0aGF0IHBhc3NlcyBgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRURgLCBidXQgYGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pYCBwYXNzZXMgdGhlIHNwZWNpZmljIGBTS0JfRFJPUF9SRUFTT05fLi4uYCBlbnVtIHRvIGB0cmFjZV9rZnJlZV9za2JgLiBTbyB0aGUgYHJlYXNvbmAgdmFsdWVzIGFyZSBnZXR0aW5nIHNldCB3aGVuIHBhY2tldHMgYXJlIGRyb3BwZWQuIEkgc2VlIHNvbWUgZXhhbXBsZXMgd2hlcmUgdGhlIHJlYXNvbiBpcyBiZWluZyBjaGFuZ2VkIHdoZW4gcGFja2V0cyBhcmUgZHJvcHBlZCwgc3VjaCBhcyBpbiBgaXBfZm9yd2FyZC5jYCwgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gXG5cbk9rYXksIGJ1dCBhcmUgdGhlc2UgYHJlYXNvbmAgY29kZXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgZm9yIGNvbnRyb2wgZmxvdz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIGNoZWNrIGlmIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBvciBhbnkgb3RoZXIgZHJvcCByZWFzb25zIGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgdHJ1bHkgXCJwdXJlbHkgZGVjb3JhdGl2ZVwiLiBMZXQncyBkbyB0aGF0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoxNC45NjE0NTY2MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjU0ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTS0JfRFJPUF9SRUFTT05fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQyIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yMDE9dm9pZCBicl9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yMDQte1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjIwNTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fVFhfVEFSR0VUO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTIwNi1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI0Ni1cXHRcXHRpZiAoSVNfRVJSKHByZXYpKSB7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ3OlxcdFxcdFxcdHJlYXNvbiA9IFBUUl9FUlIocHJldikgPT0gLUVOT01FTSA/IFNLQl9EUk9QX1JFQVNPTl9OT01FTSA6XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ4OlxcdFxcdFxcdFxcdCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNDktXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yOTk9dm9pZCBicl9tdWx0aWNhc3RfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzAzLXtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzozMDQ6XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1RYX1RBUkdFVDtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMDUtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcHJldiA9IE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zNDYtXFx0XFx0aWYgKElTX0VSUihwcmV2KSkge1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0NzpcXHRcXHRcXHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0ODpcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzQ5LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjc4OlxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDAtXFx0XFx0aWYgKHAtXFx1MDAzZXN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVEKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjEwMTpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDItXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE2MS1cXHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTYyOlxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE2My1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM5PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ5LVxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXFx1MDAzZWhfc291cmNlKSkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTA6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JTlZBTElEX1NPVVJDRTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzUxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zOTMtXFx0XFx0Y2FzZSAweDAxOlxcdC8qIElFRUUgTUFDIChQYXVzZSkgKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mzk0OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSUVFRV9NQUNfQ09OVFJPTDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk1LVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDMtXFx0ZGVmYXVsdDpcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDQ0OlxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ0NS1kcm9wOlxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTMtXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0OTQ6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEwsIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDk1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTctXFx0aWYgKHAgPT0gTlVMTClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5ODpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ5OS1cXHRiciA9IHAtXFx1MDAzZWJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDgtXFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJNb2R1bGUgaXB2NiBpcyBkaXNhYmxlZCwgc28gY2FsbF9pcDZ0YWJsZXMgaXMgbm90IHN1cHBvcnRlZC5cXFwiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwOTpcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVELCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUxMC1cXHRcXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyNS1cXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTI2OlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjctXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjgtXFx0aWYgKCFuZl9icmlkZ2VfYWxsb2Moc2tiKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyOTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0sIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTMwLVxcdGlmICghc2V0dXBfcHJlX3JvdXRpbmcoc2tiLCBzdGF0ZS1cXHUwMDNlbmV0KSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzMTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NjczPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODYtXFx0aWYgKCFuZl9icmlkZ2VfdW5zaGFyZShza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Njg3OlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY5MC1cXHRpZiAoIW5mX2JyaWRnZSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5MTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0sIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02OTQtXFx0aWYgKCFwYXJlbnQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2OTU6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02OTYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNS1cXHRcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzA2OlxcdFxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmcmFnX21heF9zaXplID0gbmZfYnJpZGdlLVxcdTAwM2VmcmFnX21heF9zaXplO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MTAtXFx0XFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjYoc3RhdGUtXFx1MDAzZW5ldCwgc2tiKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcxMTpcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzEyLVxcdFxcdElQNkNCKHNrYiktXFx1MDAzZWZyYWdfbWF4X3NpemUgPSBuZl9icmlkZ2UtXFx1MDAzZWZyYWdfbWF4X3NpemU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTcyOD1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0OC1cXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFycGhkcikpKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjc0OTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTCwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NTAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTkyNT1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3Bvc3Rfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NDEtXFx0aWYgKCFyZWFsb3V0ZGV2KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTQyOlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTQzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTE2Mj11bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfaXB2Nih2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE2OC1cXHRpZiAoYnJfdmFsaWRhdGVfaXB2NihzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNjk6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTcwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE3Mi1cXHRpZiAoIW5mX2JyaWRnZSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTczOlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE3NC1cXHRpZiAoIXNldHVwX3ByZV9yb3V0aW5nKHNrYiwgc3RhdGUtXFx1MDAzZW5ldCkpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE3NTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTc2LVxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYz02ODc9c3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jLTY5NC1cXG5uZXQvY2FuL2FmX2Nhbi5jOjY5NTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0NBTl9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTY5Ni1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jPTcwMz1zdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy03MTAtXFxubmV0L2Nhbi9hZl9jYW4uYzo3MTE6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5GRF9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTcxMi1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jPTcxOT1zdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy03MjYtXFxubmV0L2Nhbi9hZl9jYW4uYzo3Mjc6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5YTF9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTcyOC1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MTU5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBxZGlzY19wa3RfbGVuX3NlZ3NfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDE4OS1cXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSlcXG5uZXQvY29yZS9kZXYuYzo0MTkwOlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5MS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQxOTQtXFx0XFx0aWYgKHRsZW4gXFx1MDAzYyBzaXplb2YoKnRoKSlcXG5uZXQvY29yZS9kZXYuYzo0MTk1OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5Ni1cXHRcXHRoZHJfbGVuICs9IHRsZW47XFxubmV0L2NvcmUvZGV2LmMtNDE5Ny1cXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfbGVuKSlcXG5uZXQvY29yZS9kZXYuYzo0MTk4OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5OS1cXHR9IGVsc2UgaWYgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUF9MNCkge1xcbm5ldC9jb3JlL2Rldi5jLTQyMDAtXFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxubmV0L2NvcmUvZGV2LmM6NDIwMTpcXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xcbm5ldC9jb3JlL2Rldi5jLTQyMDItXFx0XFx0aGRyX2xlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy00MjExLVxcdFxcdGlmIChwYXlsb2FkIFxcdTAwM2M9IDApXFxubmV0L2NvcmUvZGV2LmM6NDIxMjpcXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xcbm5ldC9jb3JlL2Rldi5jLTQyMTMtXFx0XFx0Z3NvX3NlZ3MgPSBESVZfUk9VTkRfVVAocGF5bG9hZCwgc2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MjMzPXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQyODYtXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRlZmVyX2NvdW50IFxcdTAwM2UgUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnFkaXNjX21heF9idXJzdCkpKSB7XFxubmV0L2NvcmUvZGV2LmM6NDI4NzpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1FESVNDX0JVUlNUX0RST1ApO1xcbm5ldC9jb3JlL2Rldi5jLTQyODgtXFx0XFx0XFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00NTEzPXNjaF9oYW5kbGVfaW5ncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LCBpbnQgKnJldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ1MTYtXFx0c3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXRjeF9pbmdyZXNzKTtcXG5uZXQvY29yZS9kZXYuYzo0NTE3OlxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0lOR1JFU1M7XFxubmV0L2NvcmUvZGV2LmMtNDUxOC1cXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NTc5LVxcdHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cXHUwMDNldGN4X2VncmVzcyk7XFxubmV0L2NvcmUvZGV2LmM6NDU4MDpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ19FR1JFU1M7XFxubmV0L2NvcmUvZGV2LmMtNDU4MS1cXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ4MTk9aW50IF9fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ5MDAtXFx0aWYgKHVubGlrZWx5KCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpKSB7XFxubmV0L2NvcmUvZGV2LmM6NDkwMTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZO1xcbm5ldC9jb3JlL2Rldi5jLTQ5MDItXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDk1Mi1cXG5uZXQvY29yZS9kZXYuYzo0OTUzOlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ7XFxubmV0L2NvcmUvZGV2LmMtNDk1NC1kcm9wOlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQzOC1cXG5uZXQvY29yZS9kZXYuYzo1NDM5OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XFxubmV0L2NvcmUvZGV2LmMtNTQ0MC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NzQtY3B1X2JhY2tsb2dfZHJvcDpcXG5uZXQvY29yZS9kZXYuYzo1NDc1OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9DUFVfQkFDS0xPRztcXG5uZXQvY29yZS9kZXYuYy01NDc2LVxcdG51bWFfZHJvcF9hZGQoXFx1MDAyNnNkLVxcdTAwM2Vkcm9wX2NvdW50ZXJzLCAxKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3NDgtXFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XFx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XFxubmV0L2NvcmUvZGV2LmMtNTc1MC1cXHRyZXR1cm4gWERQX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAzNi17XFxubmV0L2NvcmUvZGV2LmM6NjAzNzpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTkhBTkRMRURfUFJPVE87XFxubmV0L2NvcmUvZGV2LmMtNjAzOC1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYxMjktXFx0aWYgKHBmbWVtYWxsb2MgXFx1MDAyNlxcdTAwMjYgIXNrYl9wZm1lbWFsbG9jX3Byb3RvY29sKHNrYikpIHtcXG5uZXQvY29yZS9kZXYuYzo2MTMwOlxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BGTUVNQUxMT0M7XFxubmV0L2NvcmUvZGV2LmMtNjEzMS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NTU1PXN0YXRpYyB2b2lkIGZsdXNoX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjU4NS1cXG5uZXQvY29yZS9kZXYuYzo2NTg2OlxcdF9fc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcXHUwMDI2bGlzdCwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XFxubmV0L2NvcmUvZGV2LmMtNjU4Ny19XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz02MTE9c3RhdGljIGludCBuZXRfZG1fcGFja2V0X3JlcG9ydF9maWxsKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02MzQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjYzNTpcXHRzdWJzeXMgPSB1MzJfZ2V0X2JpdHMoY2ItXFx1MDAzZXJlYXNvbiwgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2MzY6XFx0aWYgKHN1YnN5cyBcXHUwMDNjIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNy1cXHRcXHRsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGRyb3BfcmVhc29uc19ieV9zdWJzeXNbc3Vic3lzXSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjM4OlxcdHN1YnN5c19yZWFzb24gPSBjYi1cXHUwMDNlcmVhc29uIFxcdTAwMjYgflNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSztcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02MzktXFx0aWYgKCFsaXN0IHx8XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NDItXFx0ICAgIHN0cmxlbihsaXN0LVxcdTAwM2VyZWFzb25zW3N1YnN5c19yZWFzb25dKSBcXHUwMDNlIE5FVF9ETV9NQVhfUkVBU09OX0xFTikge1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjY0MzpcXHRcXHRsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGRyb3BfcmVhc29uc19ieV9zdWJzeXNbU0tCX0RST1BfUkVBU09OX1NVQlNZU19DT1JFXSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjQ0OlxcdFxcdHN1YnN5c19yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NDUtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTM3PXNrX2ZpbHRlcl90cmltX2NhcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBjYXApXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNDktXFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QRk1FTUFMTE9DRFJPUCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTUwOlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcXG5uZXQvY29yZS9maWx0ZXIuYy0xNTEtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUzLVxcdGlmIChlcnIpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTU0OlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0ZJTFRFUjtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNTUtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNTctXFx0aWYgKGVycilcXG5uZXQvY29yZS9maWx0ZXIuYzoxNTg6XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TRUNVUklUWV9IT09LO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE1OS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE3MS1cXHRcXHRpZiAoZXJyKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjE3MjpcXHRcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfRklMVEVSO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE3My1cXHR9XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xMTk2PWludCBfX25laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyMzQ6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9GQUlMRUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzUtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjU1LVxcdFxcdFxcdFxcdG5laWdoLVxcdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXFx1MDAzZXRydWVzaXplO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNTY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjU3LVxcdFxcdFxcdFxcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVxcdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNzctXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZWlnaC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0RFQUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNzktXFx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MDA9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyNy1cXHRyYyA9IC1FSU5WQUw7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0hIX0ZJTExGQUlMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI5LVxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzND1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NTAtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjUxOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NTItXFx0fVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTM2PXN0YXRpY19hc3NlcnQoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBiaW9fdmVjLCBidl9vZmZzZXQpID09XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMzktI3VuZGVmIEZOXFxubmV0L2NvcmUvc2tidWZmLmM6MTQwOiNkZWZpbmUgRk4ocmVhc29uKSBbU0tCX0RST1BfUkVBU09OXyMjcmVhc29uXSA9ICNyZWFzb24sXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJvcF9yZWFzb25zW10gPSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNTE9Y29uc3Qgc3RydWN0IGRyb3BfcmVhc29uX2xpc3QgX19yY3UgKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjE1Mjpkcm9wX3JlYXNvbnNfYnlfc3Vic3lzW1NLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNXSA9IHtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNTM6XFx0W1NLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRV0gPSBSQ1VfSU5JVElBTElaRVIoXFx1MDAyNmRyb3BfcmVhc29uc19jb3JlKSxcXG5uZXQvY29yZS9za2J1ZmYuYy0xNTQtfTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2Mz12b2lkIGRyb3BfcmVhc29uc19yZWdpc3Rlcl9zdWJzeXMoZW51bSBza2JfZHJvcF9yZWFzb25fc3Vic3lzIHN1YnN5cyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NS17XFxubmV0L2NvcmUvc2tidWZmLmM6MTY2OlxcdGlmIChXQVJOKHN1YnN5cyBcXHUwMDNjPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkUgfHxcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjctXFx0XFx0IHN1YnN5cyBcXHUwMDNlPSBBUlJBWV9TSVpFKGRyb3BfcmVhc29uc19ieV9zdWJzeXMpLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgyPXZvaWQgZHJvcF9yZWFzb25zX3VucmVnaXN0ZXJfc3Vic3lzKGVudW0gc2tiX2Ryb3BfcmVhc29uX3N1YnN5cyBzdWJzeXMpXFxubmV0L2NvcmUvc2tidWZmLmMtMTgzLXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxODQ6XFx0aWYgKFdBUk4oc3Vic3lzIFxcdTAwM2M9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NS1cXHRcXHQgc3Vic3lzIFxcdTAwM2U9IEFSUkFZX1NJWkUoZHJvcF9yZWFzb25zX2J5X3N1YnN5cyksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjA5PXZvaWQgX19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEwLXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjExOlxcdHNrYl9yZWxlYXNlX2FsbChza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEyLVxcdGtmcmVlX3NrYm1lbShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTIxNz1ib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjQtXFx0XFx0XFx0ICAgICAgIHUzMl9nZXRfYml0cyhyZWFzb24sXFxubmV0L2NvcmUvc2tidWZmLmM6MTIyNTpcXHRcXHRcXHRcXHRcXHQgICAgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKSBcXHUwMDNlPVxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMjY6XFx0XFx0XFx0XFx0U0tCX0RST1BfUkVBU09OX1NVQlNZU19OVU0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjctXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9NTI0PXNvY2tfcXVldWVfcmN2X3NrYl9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTUzNS1cXHRjYXNlIC1FTk9NRU06XFxubmV0L2NvcmUvc29jay5jOjUzNjpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGO1xcbm5ldC9jb3JlL3NvY2suYy01MzctXFx0Y2FzZSAtRU5PQlVGUzpcXG5uZXQvY29yZS9zb2NrLmM6NTM4OlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUFJPVE9fTUVNO1xcbm5ldC9jb3JlL3NvY2suYy01MzktXFx0fVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNTU4LVxcdFxcdHNrX2Ryb3BzX2luYyhzayk7XFxubmV0L2NvcmUvc29jay5jOjU1OTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkY7XFxubmV0L2NvcmUvc29jay5jLTU2MC1cXHRcXHRnb3RvIGRpc2NhcmRfYW5kX3JlbHNlO1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTU3Ny1cXHRcXHRpZiAoZXJyID09IC1FTk9NRU0pXFxubmV0L2NvcmUvc29jay5jOjU3ODpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcXG5uZXQvY29yZS9zb2NrLmMtNTc5LVxcdFxcdGlmIChlcnIgPT0gLUVOT0JVRlMpXFxubmV0L2NvcmUvc29jay5jOjU4MDpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0c7XFxubmV0L2NvcmUvc29jay5jLTU4MS1cXHRcXHRza19kcm9wc19pbmMoc2spO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9Mjk3PXN0YXRpYyB2b2lkIGFycF9lcnJvcl9yZXBvcnQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy0yOTktXFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xcbm5ldC9pcHY0L2FycC5jOjMwMDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XFxubmV0L2lwdjQvYXJwLmMtMzAxLX1cXG4tLVxcbm5ldC9pcHY0L2FycC5jPTk3MD1zdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2FycC5jLTk5Mi1cXHRpZiAoYXJwLVxcdTAwM2Vhcl9obG4gIT0gZGV2LVxcdTAwM2VhZGRyX2xlbiB8fCBhcnAtXFx1MDAzZWFyX3BsbiAhPSA0KSB7XFxubmV0L2lwdjQvYXJwLmM6OTkzOlxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxubmV0L2lwdjQvYXJwLmMtOTk0LVxcdFxcdGdvdG8gZnJlZXNrYjtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTM2NT1zdGF0aWMgaW50IF9fZmliX3ZhbGlkYXRlX3NvdXJjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDAzLVxcdFxcdGlmIChyZXMudHlwZSAhPSBSVE5fTE9DQUwpIHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0MDQ6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0lOVkFMSURfU09VUkNFO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwNS1cXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDA2LVxcdFxcdH0gZWxzZSBpZiAoIUlOX0RFVl9BQ0NFUFRfTE9DQUwoaWRldikpIHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0MDc6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0xPQ0FMX1NPVVJDRTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00MDgtXFx0XFx0XFx0Z290byBlX2ludmFsO1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDQ0LWVfcnBmOlxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQ0NTpcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9SUEZJTFRFUjtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NDYtfVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NDQ5PWludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NzAtXFx0XFx0aWYgKGluZXRfbG9va3VwX2lmYWRkcl9yY3UobmV0LCBzcmMpKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQ3MTpcXHRcXHRcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9MT0NBTF9TT1VSQ0U7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcyLVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTExMTI9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXBfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTExMzQtXFx0aWYgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSkgIHsgLyogTWFuZ2xlZCBoZWFkZXIsIGRyb3AuICovXFxubmV0L2lwdjQvaWNtcC5jOjExMzU6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0lOSERSO1xcbm5ldC9pcHY0L2ljbXAuYy0xMTM2LVxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xMjE5LVxcdF9fSUNNUF9JTkNfU1RBVFMobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvaWNtcC5jOjEyMjA6XFx0cmV0dXJuIHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pY21wLmMtMTIyMS19XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MTIyOD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEyMzEtXFx0XFx0X19JQ01QX0lOQ19TVEFUUyhkZXZfbmV0X3JjdShza2ItXFx1MDAzZWRldiksIElDTVBfTUlCX0lORVJST1JTKTtcXG5uZXQvaXB2NC9pY21wLmM6MTIzMjpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEw7XFxubmV0L2lwdjQvaWNtcC5jLTEyMzMtXFx0fVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEyMzYtXFx0XFx0LyogdGhlcmUgYXVnaHQgdG8gYmUgYSBzdGF0ICovXFxubmV0L2lwdjQvaWNtcC5jOjEyMzc6XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG5uZXQvaXB2NC9pY21wLmMtMTIzOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MTQwNT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDM0LVxcdF9fSUNNUF9JTkNfU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLCBJQ01QX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvaWNtcC5jOjE0MzU6XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbm5ldC9pcHY0L2ljbXAuYy0xNDM2LX1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0xNDQ3PWludCBpY21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2ljbXAuYy0xNDQ4LXtcXG5uZXQvaXB2NC9pY21wLmM6MTQ0OTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pY21wLmMtMTQ1MC1cXHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDU5LVxcdFxcdFxcdFxcdCBYRlJNX1NUQVRFX0lDTVApKSB7XFxubmV0L2lwdjQvaWNtcC5jOjE0NjA6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbm5ldC9pcHY0L2ljbXAuYy0xNDYxLVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDcxLVxcdFxcdFxcdFxcdFxcdFxcdHNrYikpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTQ3MjpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxubmV0L2lwdjQvaWNtcC5jLTE0NzMtXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTE1MTMtXFx0XFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTUxNDpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSU5WQUxJRF9QUk9UTztcXG5uZXQvaXB2NC9pY21wLmMtMTUxNS1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTE1MjAtXFx0XFx0ICAgIGljbXBoLVxcdTAwM2V0eXBlICE9IElDTVBfQUREUkVTU1JFUExZKSB7XFxubmV0L2lwdjQvaWNtcC5jOjE1MjE6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lOVkFMSURfUFJPVE87XFxubmV0L2lwdjQvaWNtcC5jLTE1MjItXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNTM4LVxcdGlmIChpY21waC1cXHUwMDNldHlwZSBcXHUwMDNlIE5SX0lDTVBfVFlQRVMpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTUzOTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVU5IQU5ETEVEX1BST1RPO1xcbm5ldC9pcHY0L2ljbXAuYy0xNTQwLVxcdFxcdGdvdG8gZXJyb3I7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTU1My1jc3VtX2Vycm9yOlxcbm5ldC9pcHY0L2ljbXAuYzoxNTU0OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JQ01QX0NTVU07XFxubmV0L2lwdjQvaWNtcC5jLTE1NTUtXFx0X19JQ01QX0lOQ19TVEFUUyhuZXQsIElDTVBfTUlCX0NTVU1FUlJPUlMpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jPTMyMT12b2lkIGluZXRfZnJhZ19xdWV1ZV9mbHVzaChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jLTMyNS1cXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmM6MzI2OlxcdHJlYXNvbiA9IHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fRlJBR19SRUFTTV9USU1FT1VUO1xcbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zMjctXFx0c3VtID0gaW5ldF9mcmFnX3JidHJlZV9wdXJnZShcXHUwMDI2cS1cXHUwMDNlcmJfZnJhZ21lbnRzLCByZWFzb24pO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jPTMzNT12b2lkIGluZXRfZnJhZ19kZXN0cm95KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQzLVxcdHJlYXNvbiA9IChxLVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVRfRlJBR19EUk9QKSA/XFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jOjM0NDpcXHRcXHRcXHRTS0JfRFJPUF9SRUFTT05fRlJBR19SRUFTTV9USU1FT1VUIDpcXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQ1LVxcdFxcdFxcdFNLQl9DT05TVU1FRDtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MTIzPXN0YXRpYyB2b2lkIGlwX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNC17XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzoxMjU6XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVDtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNi1cXHRzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpmcmFnID0gdGltZXJfY29udGFpbmVyX29mKGZyYWcsIHQsIHRpbWVyKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTc4LVxcdCAqL1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MTc5OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODAtXFx0aWYgKGZyYWdfZXhwaXJlX3NraXBfaWNtcChxcC1cXHUwMDNlcS5rZXkudjQudXNlcikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MjQzPXN0YXRpYyBpbnQgaXBfZnJhZ19yZWluaXQoc3RydWN0IGlwcSAqcXApXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0Ny1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjI0ODpcXHRpbmV0X2ZyYWdfcXVldWVfZmx1c2goXFx1MDAyNnFwLVxcdTAwM2VxLCBTS0JfRFJPUF9SRUFTT05fRlJBR19UT09fRkFSKTtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0OS1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MTg5PXZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMS1cXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYixcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwMjpcXHRcXHRcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMy1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMC1cXHRcXHRcXHR9XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMjE6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjMyLVxcdFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzM6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yODItXFx0XFx0X19JUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI4MzpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX05PTUVNO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjg0LVxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjkxLVxcdFxcdF9fSVBfSU5DX1NUQVRTKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjkyOlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFI7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yOTMtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtMzA1LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMzA4LVxcdFxcdGlmIChpcF9vcHRpb25zX3Jjdl9zcnIoc2tiLCBkZXYpKVxcbm5ldC9pcHY0L2lwX2lucHV0LmM6MzA5OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMxMC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTM2MT1zdGF0aWMgaW50IGlwX3Jjdl9maW5pc2hfY29yZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQ2MC1cXHRcXHQgICAgSU5fREVWX09SQ09ORihpbl9kZXYsIERST1BfVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1QpKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NjE6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1Q7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NjItXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NzItZHJvcF9lcnJvcjpcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ3MzpcXHRpZiAoZHJvcF9yZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX0lQX1JQRklMVEVSKVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDc0LVxcdFxcdF9fTkVUX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9JUFJQRklMVEVSKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9NDk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXBfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MDktXFx0XFx0ZGV2X2NvcmVfc3RhdHNfcnhfb3RoZXJob3N0X2Ryb3BwZWRfaW5jKHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjUxMDpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9PVEhFUkhPU1Q7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MTEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MjEtXFxubmV0L2lwdjQvaXBfaW5wdXQuYzo1MjI6XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUyMy1cXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTU1OC1cXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBsZW4pIHtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjU1OTpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoxNS45MTQwMTQzMjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTgwMjQyNTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRHJvcCBSZWFzb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVmaW5pbmcgdGhlIGdyYW51bGFyaXR5IG9mIHBhY2tldCBkcm9wIHJlYXNvbnMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBlbnVtIGVudHJ5LCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGFuZCB0aGVuIHVwZGF0aW5nIHZhcmlvdXMgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGNvZGUgcGF0aHMgdG8gdXNlIHRoaXMgbmV3IHJlYXNvbiB3aGVuIGEgcGFja2V0J3MgVGltZS1Uby1MaXZlIChUVEwpIGV4cGlyZXMuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IHRoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfZm9yd2FyZCgpYCwgYGlwdjZfc3JoX3JjdigpYCwgYGlwdjZfcnBsX3NyaF9yY3YoKWAsIGBpcHY2X3J0aGRyX3JjdigpYCwgYW5kIGBpcDZfZm9yd2FyZCgpYC4gSW5zdGVhZCBvZiB1c2luZyBhIGdlbmVyaWMgXCJJUF9JTkhEUlwiIHJlYXNvbiBmb3IgZHJvcHBpbmcgcGFja2V0cyBpbiB0aGVzZSBmdW5jdGlvbnMsIHRoZXkgYXJlIG5vdyB1cGRhdGVkIHRvIHNwZWNpZnkgXCJJUF9UVExfRVhDRUVERURcIiB1c2luZyB0aGUgYGtmcmVlX3NrYl9yZWFzb24oKWAgZnVuY3Rpb24uIFRoZSBvbmx5IHRoaW5nIHRoYXQncyBkaWZmZXJlbnQgaGVyZSBpcyB0aGF0IGEgbmV3IGVudW0gdmFsdWUgaXMgcGFzc2VkLCBvciB0aGUgZXhpc3RpbmcgZW51bSB2YWx1ZSBpcyBjaGFuZ2VkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhbHRlciB0aGUga2VybmVsJ3MgZnVuY3Rpb25hbCBiZWhhdmlvciBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgZGV0ZWN0YWJsZSB0aHJvdWdoIGZ1enppbmcuIFRoZSBwYXRjaCBmaXRzIHRoZSBjcml0ZXJpYSBvZiBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgSXQgZG9lcyBub3QgYWZmZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGNvZGUgcGF0aHMgc3RpbGwgZHJvcCB0aGUgcGFja2V0IGFuZCBmcmVlIHRoZSBza2IuIFRoZSBjaGFuZ2UganVzdCB1cGRhdGVzIHRoZSBcInJlYXNvblwiIGFyZ3VtZW50LiBUaGVyZSBhcmUgbm8gZGF0YSBzdHJ1Y3R1cmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgY2FuIGludHJvZHVjZSBhIGJ1Zy4gTm8gbmV3IGxvZ2ljIGlzIGFkZGVkLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCB0aGUgdHJhY2Vwb2ludC9kcm9wX21vbml0b3IuXG5cbkxldCdzIGRvIGEgY29tcGxldGUgZG91YmxlLWNoZWNrLiBJbnNwZWN0aW5nIHRoZSBjb2RlLCBJIHNlZTpcblxuKiAgIFRoZSBgaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhgIGZpbGUgbm93IGNvbnRhaW5zIHRoZSBuZXcgZW51bSBlbnRyeSBhbmQgYXNzb2NpYXRlZCBzdHJpbmcgbWFjcm8uXG4qICAgSW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIHRoZSBwYXRjaCBub3cgc2V0cyB0aGUgZHJvcCByZWFzb24gYXMgYElQX1RUTF9FWENFRURFRGAgaW5zdGVhZCBvZiBgSVBfSU5IRFJgLlxuKiAgIEluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBpbnN0YW5jZXMgb2YgYGtmcmVlX3NrYigpYCBhcmUgY2hhbmdlZCB0byBga2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpYC5cbiogICBJbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgdGhlIHJlYXNvbiBwYXNzZWQgdG8gYGtmcmVlX3NrYl9yZWFzb24oKWAgaXMgdXBkYXRlZCB0byBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAuXG5cblRoZXJlIGFyZSBubyBlZGdlIGNhc2VzLCBubyBhcnJheSBpbmRleGluZyBpc3N1ZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBsb2dpYywgY29udHJvbCBmbG93LCBsb2NraW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZnVuY3Rpb25hbCBiZWhhdmlvci4gVGhlIHBhY2tldCBpcyBkcm9wcGVkLiBUaGUgc2tiIGlzIGZyZWVkLiBJdCdzIGp1c3QgdGhhdCB0aGUgZHJvcCByZWFzb24gaXMgdXBkYXRlZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHN0cmljdGx5IGZhbGxzIHVuZGVyIHB1cmVseSB1cGRhdGluZyB0cmFjZXBvaW50cywgaXQncyBzYWZlIHRvIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIHdhcnJhbnQgZnVydGhlciBmdXp6aW5nLlxuXG5UaHVzLCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3b3VsZCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuKiAgIGBFbmFibGVDb25maWdzOiBbXSBvciBudWxsYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdIG9yIG51bGxgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGEgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIGRyb3AgcmVhc29uIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGZ1bmN0aW9ucyB0byBwYXNzIGl0IHRvIGBrZnJlZV9za2JfcmVhc29uKClgLiBJdCBpcyBwdXJlbHkgYSB0cmFjZXBvaW50IC8gZGlhZ25vc3RpYyBkcm9wIHJlYXNvbiB1cGRhdGUgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE5NCwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjI1LjcxNjQ0MzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoyNS43MTY0Njk0MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4p4zp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 06:42:13 +0000 UTC FinishedAt: 2026-09-07 07:27:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNDA2Yjc5ZGMyZWM4ZmJkZWI2YzdhYWM0ZDZiZTQxNjg4YjM2NDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzoyNjowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG5pbmRleCAyZjMxMmQxZjY3ZDY5Li4zZDZhZWMyMDNjM2Y3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4mIzQzO1x0Rk4oSVBfVFRMX0VYQ0VFREVEKVx0XHRcXFxuIFx0Rk5lKE1BWClcbiBcbiAvKipcbkBAIC02MDYsNiAmIzQzOzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4gXHRTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCxcbiBcdC8qKiBAU0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVDogRGVhZCBsb29wIG9uIHZpcnR1YWwgZGV2aWNlLiAqL1xuIFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRDogSVB2NCBUVEwgb3IgSVB2NiBob3AgbGltaXQgXHUwMDNjPSAxXG4mIzQzO1x0ICogKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUylcbiYjNDM7XHQgKi9cbiYjNDM7XHRTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELFxuIFx0LyoqXG4gXHQgKiBAU0tCX0RST1BfUkVBU09OX01BWDogdGhlIG1heGltdW0gb2YgY29yZSBkcm9wIHJlYXNvbnMsIHdoaWNoXG4gXHQgKiBzaG91bGRuJiMzOTt0IGJlIHVzZWQgYXMgYSByZWFsICYjMzk7cmVhc29uJiMzOTsgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5pbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXG4gXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTtcbi1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4mIzQzO1x0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggMDlhNDU1MmY3ZjA4YS4uNTUzOTFlMmU1NjEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiBcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTYyMyw3ICYjNDM7NjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5AQCAtODE1LDcgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxuIFx0XHRcdFx0ICAgIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gXHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcbi1cdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQwNmI3OWRjMmVjOGZiZGViNmM3YWFjNGQ2YmU0MTY4OGIzNjQ3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjY6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCmluZGV4IDJmMzEyZDFmNjdkNjkuLjNkNmFlYzIwM2MzZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBACiAJRk4oUFNQX0lOUFVUKQkJCVwKIAlGTihQU1BfT1VUUFVUKQkJCVwKIAlGTihSRUNVUlNJT05fTElNSVQpCQlcCiYjNDM7CUZOKElQX1RUTF9FWENFRURFRCkJCVwKIAlGTmUoTUFYKQogCiAvKioKQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHsKIAlTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCwKIAkvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi8KIAlTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULAomIzQzOwkvKioKJiM0MzsJICogQFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQ6IElQdjQgVFRMIG9yIElQdjYgaG9wIGxpbWl0ICZsdDs9IDEKJiM0MzsJICogKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUykKJiM0MzsJICovCiYjNDM7CVNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQsCiAJLyoqCiAJICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaAogCSAqIHNob3VsZG4mIzM5O3QgYmUgdXNlZCBhcyBhIHJlYWwgJiMzOTtyZWFzb24mIzM5OyAtIG9ubHkgZm9yIHRyYWNpbmcgY29kZSBnZW4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwppbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpCiAJLyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqLwogCV9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCWljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTsKLQlTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpOwomIzQzOwlTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTsKIGRyb3A6CiAJa2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jCmluZGV4IDA5YTQ1NTJmN2YwOGEuLjU1MzkxZTJlNTYxMjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2V4dGhkcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmMKQEAgLTQ2NCw3ICYjNDM7NDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldikKIAkJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELAogCQkJCSAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTsKLQkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpcHY2X2hkcihza2IpLSZndDtob3BfbGltaXQtLTsKQEAgLTYyMyw3ICYjNDM7NjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwKIAkJCQkgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAogCQkJCSAgICAwKTsKLQkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpcHY2X2hkcihza2IpLSZndDtob3BfbGltaXQtLTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC01NzcsNyAmIzQzOzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7CiAJCV9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAotCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHdlIHRyYWNrIHBhY2tldCBkcm9wcyBkdWUgdG8gVFRMIGV4cGlyYXRpb24uIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBlbnVtIHZhbHVlLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAgYW5kIHRoZW4gcHJvcGFnYXRpbmcgdGhpcyByZWFzb24gdGhyb3VnaCBjYWxscyB0byBga2ZyZWVfc2tiX3JlYXNvbmAgaW4gYGlwX2ZvcndhcmQuY2AsIGBleHRoZHJzLmNgLCBhbmQgYGlwNl9vdXRwdXQuY2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgdHJpYWdlIGNyaXRlcmlhIGFuZCB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHNvbWV0aGluZyBjb3JlPyBBYnNvbHV0ZWx5LiBUaGUgZnVuY3Rpb25zIG1vZGlmaWVkLCBgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGBpcHY2X3J0aGRyX3JjdmAsIGFuZCBgaXA2X2ZvcndhcmRgLCBhcmUgYWxsIGRlZXAgaW5zaWRlIHRoZSBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyBwYXRod2F5cy4gVGhpcyBoaXRzIHRoZSAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IGNyaXRlcmlhLCBubyBxdWVzdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgY29kZS4KCk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBzYXkgdGhhdCBiZWNhdXNlIGl0JiMzOTtzICpqdXN0KiBhZGRpbmcgYSBkcm9wIHJlYXNvbiwgYW5kIG5vdCBhbHRlcmluZyAqY29udHJvbCBmbG93KiBvciB0aGUgKmxvZ2ljKiBvZiB0aGUgY29kZSwgdGhpcyBtaWdodCBub3QgYmUgKndvcnRoZnV6emluZyouIEl0JiMzOTtzIGFsbW9zdC4uLmRlY29yYXRpdmUgbG9nZ2luZy4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGlzLiBUaGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHRoYXQgd2Ugc2hvdWxkIE5PVCBibGluZGx5IHRydXN0IHRoYXQuCgpMb29raW5nIGF0IFNlY3Rpb24gMiwgdGhlIGNyaXRlcmlhIGFyZSAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgKmp1c3QqIGxvZ2dpbmc/IE5vLCBiZWNhdXNlIGl0JiMzOTtzIG1vcmUgdGhhbiB0aGF0OyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBkcm9wIHJlYXNvbiBiZWluZyBwYXNzZWQgaW50byBga2ZyZWVfc2tiX3JlYXNvbmAuICpUaGF0KiBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUuIFNvLCBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdz8gTm8uIERvZXMgaXQgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzPyBJdCBhZGRzIGFuIGVudW0gY29uc3RhbnQuIERvZXMgdGhpcyBjaGFuZ2UgdGhlIGRyb3AgcmVhc29uPyBZZXMsIHRoaXMgY2hhbmdlIHRoZSBga2ZyZWVfc2tiX3JlYXNvbmAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBTZWN0aW9uIDMgZW1waGFzaXplcyB0aGF0IGBSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nLi4uQ29yZSBTdWJzeXN0ZW1zOiAuLi5jb3JlIG5ldHdvcmtpbmdgLiBXZWxsLCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGZhbGwgc3F1YXJlbHkgaW50byAmIzM0O2NvcmUgbmV0d29ya2luZy4mIzM0OyBUaGlzIGNoYW5nZSBwYXNzZXMgdGhlIHJlYXNvbiB0byBga2ZyZWVfc2tiX3JlYXNvbmAsIHdoaWNoICppcyogdGhlbiB1c2VkIGJ5IHRyYWNlcG9pbnRzIGFuZCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBoYXZlIHRvIHZlcmlmeSB3aGVyZSB0aGVzZSBhcmUgdXNlZC4gRHJvcCByZWFzb25zIGFyZSAqbm90KiBqdXN0IGluZm9ybWF0aW9uYWwuIFNvLCBjaGFuZ2luZyB0aGUgZHJvcCByZWFzb24gaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGlzIGluIGEgY29yZSBzdWJzeXN0ZW0sIG1vZGlmaWVzIGFuIGVudW0sIGFuZCBoYXMgcmVhY2hhYmxlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVx0XHRcdGdvdG8gZGlzYWJsZWQ7XG5uZXQvaXB2Ni9leHRoZHJzLmM6Njg0Olx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjg1LVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gaG93IElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGZpbGUsIHBhcnRpY3VsYXJseSBsaW5lcyA3ODAgdG8gODIwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBsb2dpYyBmb3IgdGhlc2UgaGVhZGVycyByZXNpZGVzLCBvciBhdCBsZWFzdCBhIHNpZ25pZmljYW50IGNodW5rIG9mIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRpc3NlY3RzLCB2YWxpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB0aGVzZSBoZWFkZXJzIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3csIGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBJJiMzOTtsbCBsaWtlbHkgbmVlZCB0byBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleHRlbnNpb24gaGVhZGVyIHR5cGVzLCBlc3BlY2lhbGx5IHRoZSBsZXNzIGNvbW1vbiBvbmVzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGlzc3VlcyBsaWtlIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIChsaWtlIHRoZSBBSCBhbmQgRVNQIGhlYWRlcnMpLCBhbmQgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIGltcGxlbWVudGF0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmsgY29tcG9uZW50cywgc3VjaCBhcyB0aGUgcm91dGluZyBhbmQgZm9yd2FyZGluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNDY4Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDQ2OTpcdFx0XHR9XG4gNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4gNDgwOlx0XG4gNDgxOlx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gNDgyOlx0e1xuIDQ4MzpcdFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gNDg0Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNDg1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDQ4NjpcdFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcbiA0ODc6XHRcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcbiA0ODg6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcbiA0ODk6XHRcdGludCBhY2NlcHRfcnBsX3NlZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgUm91dGluZyBIZWFkZXIgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgZGVlcGVyIGludG8gSVB2Niwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRob3JvdWdobHkgY292ZXJpbmcgYWxsIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgcmVsYXRlZCB0byByb3V0aW5nIGhlYWRlcnMuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBpcHY2X3J0aGRyX3JjdmAgdG8gdGhlIGxpc3Qg4oCTIHRoYXQgY292ZXJzIHRoZSBnZW5lcmFsIHJvdXRpbmcgaGVhZGVyIHByb2Nlc3Npbmcg4oCTIGJ1dCBJIGFsc28gbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGBpcHY2X3JwbF9zcmhfcmN2YC4gV2l0aCBSUEwgYW5kIFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSBwb3RlbnRpYWxseSBiZWluZyBkZXBsb3llZCBtb3JlIHdpZGVseSwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueSBpbnRlcmFjdGlvbiBwb2ludHMgb3IgZWRnZSBjYXNlcyB0aGVyZS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBib3RoIG9mIHRoZXNlIGFyZSBhaXJ0aWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE1Olx0XG4gNjE2Olx0XHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4gNjE3Olx0XHRcdGRzdF9pbnB1dChza2IpO1xuIDYxODpcdFx0XHRyZXR1cm4gLTE7XG4gNjE5Olx0XHR9XG4gNjIwOlx0XG4gNjIxOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gNjIyOlx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA2MjM6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNjI0Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gNjI1Olx0XHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNjI2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDYyNzpcdFx0XHRcdHJldHVybiAtMTtcbiA2Mjg6XHRcdFx0fVxuIDYyOTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDYzMDpcdFxuIDYzMTpcdFx0XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuIDYzMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDYzMzpcdFx0fVxuIDYzNDpcdFxuIDYzNTpcdFx0ZHN0X2lucHV0KHNrYik7XG4gNjM2Olx0XG4gNjM3Olx0XHRyZXR1cm4gLTE7XG4gNjM4Olx0fVxuIDYzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGlwdjZfcnRoZHJfcmN2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIHJlY2VpdmluZyBJUHY2IHBhY2tldHMgd2l0aCByb3V0aW5nIGhlYWRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBpdCBjYXJlZnVsbHkuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGhvdyBpdCB2ZXJpZmllcyB0aGUgaGVhZGVyJiMzOTtzIGludGVncml0eSwgY2hlY2tzIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgbmV4dCBkZXN0aW5hdGlvbiBiYXNlZCBvbiB0aGUgcm91dGluZyBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCB3aGV0aGVyIHRoZSBjb2RlIGFkaGVyZXMgdG8gUkZDIHNwZWNpZmljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaG9wLWJ5LWhvcCBvcHRpb25zIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDU6XHRcbiA4MDY6XHRcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIDgwNzpcdFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuIDgwODpcdFx0XHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gODA5Olx0XHRcdGRzdF9pbnB1dChza2IpO1xuIDgxMDpcdFx0XHRyZXR1cm4gLTE7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gODE0Olx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA4MTU6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gODE2Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXG4gODE3Olx0XHRcdFx0XHQgICAgMCk7XG4gODE4Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDgxOTpcdFx0XHRcdHJldHVybiAtMTtcbiA4MjA6XHRcdFx0fVxuIDgyMTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDgyMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIDgyNjpcdFx0ZHN0X2lucHV0KHNrYik7XG4gODI3Olx0XHRyZXR1cm4gLTE7XG4gODI4Olx0XG4gODI5Olx0dW5rbm93bl9yaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgSVB2NiBvdXRwdXQgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIFRoYXQgZmlsZSBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGxvZ2ljYWxseS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjYW5vbmljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWN0dWFsbHkgc2VuZGluZyBhbiBJUHY2IHBhY2tldC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGluZ3MgbGlrZSBwYWNrZXQgaGVhZGVyIGNyZWF0aW9uLCBhZGRyZXNzIHJlc29sdXRpb24sIGZyYWdtZW50YXRpb24gaGFuZGxpbmcgKGlmIG5lY2Vzc2FyeSksIGFuZCB0aGUgdWx0aW1hdGUgdHJhbnNtaXNzaW9uIGNhbGwgZG93biB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGF5ZXIuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU2NTpcdFx0ICpcdGNhbm5vdCBiZSBmcmFnbWVudGVkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdhcnJhbnR5XG4gNTY2Olx0XHQgKlx0dGhhdCBkaWZmZXJlbnQgZnJhZ21lbnRzIHdpbGwgZ28gYWxvbmcgb25lIHBhdGguIC0tQU5LXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdGlmICh1bmxpa2VseShvcHQtXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9ST1VURVJBTEVSVCkpIHtcbiA1Njk6XHRcdFx0aWYgKGlwNl9jYWxsX3JhX2NoYWluKHNrYiwgbnRvaHMob3B0LVx1MDAzZXJhKSkpXG4gNTcwOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHQvKlxuIDU3NDpcdFx0ICpcdGNoZWNrIGFuZCBkZWNyZW1lbnQgdHRsXG4gNTc1Olx0XHQgKi9cbiA1NzY6XHRcdGlmIChoZHItXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDU3NzpcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNTc4Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA1Nzk6XHRcbiA1ODA6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDU4MTpcdFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIFhYWDogaWRldi1cdTAwM2VjbmYucHJveHlfbmRwPyAqL1xuIDU4NTpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2Vwcm94eV9uZHApIFx1MDAyNlx1MDAyNlxuIDU4NjpcdFx0ICAgIHBuZWlnaF9sb29rdXAobmRfdGFibGUobmV0KSwgXHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBza2ItXHUwMDNlZGV2KSkge1xuIDU4NzpcdFx0XHRpbnQgcHJveGllZCA9IGlwNl9mb3J3YXJkX3Byb3h5X2NoZWNrKHNrYik7XG4gNTg4Olx0XG4gNTg5Olx0XHRcdGhkciA9IGlwdjZfaGRyKHNrYik7XG4gNTkwOlx0XHRcdGlmIChwcm94aWVkIFx1MDAzZSAwKSB7XG4gNTkxOlx0XHRcdFx0LyogSXQmIzM5O3MgdGVtcHRpbmcgdG8gZGVjcmVhc2UgdGhlIGhvcCBsaW1pdFxuIDU5MjpcdFx0XHRcdCAqIGhlcmUgYnkgMSwgYXMgd2UgZG8gYXQgdGhlIGVuZCBvZiB0aGVcbiA1OTM6XHRcdFx0XHQgKiBmdW5jdGlvbiB0b28uXG4gNTk0Olx0XHRcdFx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVAgRm9yd2FyZGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIElQIGZvcndhcmRpbmcuIFRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgZ290IHRvIGJlIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBJUHY0LiBHaXZlbiB0aGUgZnVuY3Rpb24mIzM5O3MgZGVzY3JpcHRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBjb2RlIGluIGBpcF9mb3J3YXJkLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGNvcmUgZm9yd2FyZGluZyBsb2dpYy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZm9yd2FyZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gcnRfdG9zMnByaW9yaXR5KGlwaC1cdTAwM2V0b3MpO1xuIDE2MTpcdFxuIDE2MjpcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX0ZPUldBUkQsXG4gMTYzOlx0XHRcdCAgICAgICBuZXQsIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldiwgcnQtXHUwMDNlZHN0LmRldixcbiAxNjQ6XHRcdFx0ICAgICAgIGlwX2ZvcndhcmRfZmluaXNoKTtcbiAxNjU6XHRcbiAxNjY6XHRzcl9mYWlsZWQ6XG4gMTY3Olx0XHQvKlxuIDE2ODpcdFx0ICpcdFN0cmljdCByb3V0aW5nIHBlcm1pdHMgbm8gZ2F0ZXdheWluZ1xuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHQgaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfU1JfRkFJTEVELCAwKTtcbiAxNzE6XHRcdCBnb3RvIGRyb3A7XG4gMTcyOlx0XG4gMTczOlx0dG9vX21hbnlfaG9wczpcbiAxNzQ6XHRcdC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi9cbiAxNzU6XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIDE3NjpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xuIDE3NzpcdFx0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gMTc4Olx0ZHJvcDpcbiAxNzk6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIDE4MDpcdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuIDE4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IFNLQiBEcm9wIFJlYXNvbiBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgKGBpcF9mb3J3YXJkYCwgYGlwdjZfc3JoX3JjdmAsIGV0Yy4pIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gaW5zdGVhZCBvZiBleGlzdGluZyBvbmVzLiBNeSBleHBlcnRpc2UgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29udGV4dCwgc28gcmVhY2hhYmlsaXR5IGlzbiYjMzk7dCBhbiBpc3N1ZS4KCk5vdywgdGhlIHRyaWFnZSBndWlkZWxpbmVzIGFyZSBrZXkgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYSBjYXJlZnVsIGFzc2Vzc21lbnQuIFRoZSBjb3JlIHBoaWxvc29waHkgY2VudGVycyBvbiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBhbmQgbGF0ZW50IGJ1Z3MgaW4gKnJlYWNoYWJsZSogY29kZS4gUmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUg4oCTIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB1c2luZyBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55ICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgZWl0aGVyLCBzbyBsZXQmIzM5O3MgZGlnIGRlZXBlci4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgYSAmIzM0O3B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuLi5vciB0cmFjZXBvaW50IHRoYXQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcyYjMzQ7PyBUaGUgZHJvcCByZWFzb24gaXRzZWxmIGlzIHBhc3NlZCB0byBga2ZyZWVfc2tiX3JlYXNvbmAsIHdoaWNoIHRyYWNlcyB0aGUgZHJvcC4gSG93ZXZlciwgdGhlIHRyaWFnZSBndWlkZWxpbmVzIGFyZSB2ZXJ5IHNwZWNpZmljLgoKKiAgIEFkZGluZyBhIG5ldyBlbnVtIGFuZCBjaGFuZ2luZyB0aGUgdmFsdWVzIHBhc3NlZCB0byBga2ZyZWVfc2tiX3JlYXNvbmAgKm1vZGlmaWVzKiB3aGF0IGlzIHBhc3NlZCB0byB0aGUgdHJhY2Vwb2ludC4gU28gdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBiZSBhIG1vZGlmaWNhdGlvbiBvZiBhIGRhdGEgc3RydWN0dXJlICh0aGUgZW51bSBpdHNlbGYpIGFuZCBhbiBhbHRlcmF0aW9uIG9mIGEgY2FsbCBmdW5jdGlvbiwgYW5kIGFzIGEgcmVzdWx0LCB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYWNpbmcsIGV2ZW4gaWYgdGhlIG1haW4gY29udHJvbCBmbG93ICpzZWVtcyogdW5jaGFuZ2VkLgoqICAgVGhpcyBpcyBub3QgYSBwdXJlICYjMzQ7bWVzc2FnZSBzdHJpbmcmIzM0OyBjaGFuZ2UsIGl0IGlzIGEgY2hhbmdlIG9mIGEgKnBhcmFtZXRlciouIEluIGZhY3QsIHRoZSBlbnVtIGlzIHBhc3NlZCB0byBhbiBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uLgoKU28sIGFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGEgJiMzNDtyZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmUmIzM0OywgYSAmIzM0O2hlbHBlciBhYnN0cmFjdGlvbiYjMzQ7IG9yICYjMzQ7YWxnb3JpdGhtIGZsb3dzJiMzNDsuIFRoZSBjb2RlIGNsZWFybHkgbW9kaWZpZXMgYSBkcm9wIHJlYXNvbiBlbnVtIHZhbHVlIHBhc3NlZCB0byBhIHRyYWNlcG9pbnQgZnVuY3Rpb24uCgpJIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJdCBpcyAqTk9UKiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhlICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiYjMzQ7IGNsYXVzZSBpcyBtZWFudCB0byBwcmV2ZW50IHVzIGZyb20gZnV6emluZyBzaW1wbGUgcHJpbnRpbmcgc3RhdGVtZW50IG1vZGlmaWNhdGlvbnMsIG5vdCBmcm9tICptb2RpZnlpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy4qCgpJbiB0aGUgZW5kLCBzaW5jZSB0aGUgcGF0Y2ggKm1vZGlmaWVzKiBkYXRhIHRoYXQgZmVlZHMgaW50byByZWFjaGFibGUgY29kZSAodGhlIGtlcm5lbCBmdW5jdGlvbnMgaW4gcXVlc3Rpb24pLCBJJiMzOTttIGdvaW5nIHRvIGxlYW4gdG93YXJkcyBmdXp6aW5nIHRoaXMgdG8gc2VlIGlmIGFueSBsYXRlbnQgYnVncyBhcHBlYXIsIG9yIHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gY2hlY2sgaG93IGV4YWN0bHkgYGtmcmVlX3NrYl9yZWFzb25gIGFuZCBgc2tiX2Ryb3BfcmVhc29uYCB3b3JrIGluIHRoZSBrZXJuZWwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQga2ZyZWVfc2tiX3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIGZyZWVpbmcgb2YgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4g4oCTIGJhc2ljYWxseSwgZXZlcnl0aGluZyB0aGF0IGlsbHVtaW5hdGVzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MzUxMT12b2lkIGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2NvcmUvZGV2LmMtMzUxNS1cdGVsc2Vcbm5ldC9jb3JlL2Rldi5jOjM1MTY6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtMzUxNy19XG4tLVxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cdFx0XHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xubmV0L2NvcmUvZGV2LmM6NDI4NzpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XG5uZXQvY29yZS9kZXYuYy00Mjg4LVx0XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDU1NS1cdGNhc2UgVENfQUNUX1NIT1Q6XG5uZXQvY29yZS9kZXYuYzo0NTU2Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDU1Ny1cdFx0KnJldCA9IE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDYwNi1cdGNhc2UgVENfQUNUX1NIT1Q6XG5uZXQvY29yZS9kZXYuYzo0NjA3Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDYwOC1cdFx0KnJldCA9IE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDgxOT1pbnQgX19kZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTQ4MzctXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG5uZXQvY29yZS9kZXYuYzo0ODM4Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL2Rldi5jLTQ4MzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0Mjk9c3RhdGljIGludCBlbnF1ZXVlX3RvX2JhY2tsb2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNwdSxcbi0tXG5uZXQvY29yZS9kZXYuYy01NDc4LVx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoc2tiLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYzo1NDc5Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5uZXQvY29yZS9kZXYuYy01NDgwLVx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NzQ4LVx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xubmV0L2NvcmUvZGV2LmM6NTc0OTpcdGtmcmVlX3NrYl9yZWFzb24oKnBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRFApO1xubmV0L2NvcmUvZGV2LmMtNTc1MC1cdHJldHVybiBYRFBfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYyMzctXG5uZXQvY29yZS9kZXYuYzo2MjM4Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNjIzOS1cdFx0LyogSmFtYWwsIG5vdyB5b3Ugd2lsbCBub3QgYWJsZSB0byBlc2NhcGUgZXhwbGFpbmluZ1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM1LVx0XHRcdHJldHVybiAxO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXHRcdFx0XHRuZWlnaC1cdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXHUwMDNldHJ1ZXNpemU7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjU2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXHRcdFx0XHRORUlHSF9DQUNIRV9TVEFUX0lOQyhuZWlnaC1cdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc3LVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5laWdoLVx1MDAzZWxvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc5LVx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjAwPWludCBuZWlnaF9yZXNvbHZlX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVx0cmMgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyOS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MzQ9aW50IG5laWdoX2Nvbm5lY3RlZF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cdFx0ZXJyID0gLUVJTlZBTDtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb2RlLCBpcyB0byBmaW5kIHRoZSBwcmVjaXNlIGRlZmluaXRpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgYnVyaWVkIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc28gYG5ldC9jb3JlL3NrYnVmZi5jYCBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGZpbGUgZm9yIFNLQnMsIHNvIGl0IG1ha2VzIHNlbnNlIGl0IG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUsIG9yIGF0IGxlYXN0IGhhdmUgYSBoZWFkZXIgZmlsZSB3aGVyZSBpdCBpcy4gSWYgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGluIGBza2J1ZmYuY2AsIHRoZW4gSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaXQgdXNlcy4gR290dGEgZmlndXJlIG91dCBleGFjdGx5ICp3aGF0KiB0aGlzIGBrZnJlZV9za2JfcmVhc29uYCBpcywgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkgc29tZW9uZSBpcyBjdXJpb3VzIGFib3V0IGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgX19rZnJlZV9za2JfcmVhc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBTS0JzIGFyZSBiZWluZyBmcmVlZCwgYW5kLCBjcml0aWNhbGx5LCAqd2h5Ki4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgd2hlcmUgYGtmcmVlX3NrYl9yZWFzb25gIGlzIGJlaW5nIGNhbGxlZC4gSSBrbm93IHRoZSBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBnaXZlbiBpdHMgcm9sZSBpbiBTS0IgbWFuYWdlbWVudC4gVGhlIGNoYWxsZW5nZSwgYXMgYWx3YXlzLCB3aWxsIGJlIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGVhY2ggdXNlLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG1vcmUgY29tcGxleCBhc3BlY3RzIG9mIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSYjMzk7bGwgYmUgbXVsdGlwbGUgY2FsbCBzaXRlcywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJiMzOTttIGhvcGluZyB0aGVyZSYjMzk7cyB1c2VmdWwgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBjb21tZW50cyBzdXJyb3VuZGluZyB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5kaW5nIGBrZnJlZV9za2JfcmVhc29uYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBga2ZyZWVfc2tiX3JlYXNvbmAgaXMgdXNlZC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgY291bGQgZ28gYWJvdXQgdGhpcyBpbiBhIGZldyB3YXlzLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJIGNvdWxkIHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCwgYnV0IHRoYXQmIzM5O3MgZ29pbmcgdG8gcHJvZHVjZSBhIG5vaXN5IG91dHB1dC4gSSBjb3VsZCBsZXZlcmFnZSBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIHNlYXJjaCB0b29sIGlmIGl0JiMzOTtzIGF2YWlsYWJsZS4gSWYgaXQmIzM5O3MgYSBrZXJuZWwgc3ltYm9sLCBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IHdpdGggYG5tYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHRoZW4gbW92ZSBvbnRvIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBzeW1ib2wgdGFibGVzLiBJZiBJIHN1c3BlY3QgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudCBhcyB3ZWxsLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8sIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBjcmVhdGUgdGhlIGJlc3Qgc2VhcmNoIHN0cmF0ZWd5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdHJ5aW5nIGEgYmFzaWMgc2VhcmNoIHRvIGZpbmQgdGhlIG9jY3VycmVuY2VzLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga2ZyZWVfc2tiX3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJiMzOTtzIGhhbmRsaW5nIG9mIGBza2JgIGRlYWxsb2NhdGlvbiBpcyBkb25lLCBhbmQsIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgdGhlICp3aHkqIGJlaGluZCB0aG9zZSBkZWFsbG9jYXRpb25zLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2ZyZWVfc2tiX3JlYXNvbmAgZmlyc3QuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSB0byBwcm92aWRlIGNvbnRleHQgZm9yIGRlYnVnZ2luZyBvciBhdWRpdGluZyBwdXJwb3Nlcy4gVGhlIGluY2x1ZGUgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgc2tiYCBzdHJ1Y3R1cmUgbGl2ZSwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBpbmRpY2F0aW9uIG9uIHRoZSAqcmVhc29uKiBmb3IgZnJlZWluZywgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIHBsYWNlIHRvIGZpbmQgaXQuIEkmIzM5O2xsIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgc3RhcnQgbG9va2luZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3NrYl9yZWFzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTMyMTprZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTMzMS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2OS1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KSkgIT0gTlVMTClcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzQ3MDpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTMxNS0xMzQwIG9mIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHdlIHJlYWxseSBsb29raW5nIGF0IGhlcmU/IEdpdmVuIHRoZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgc29tZXRoaW5nIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggY29yZSBwYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pc21zLCBkYXRhIGFjY2VzcyBtZXRob2RzLCBvciBldmVuIHNvbWUgZm9ybSBvZiBtZXRhZGF0YSBoYW5kbGluZy4KCktub3dpbmcgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlciBmaWxlcywgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBlaXRoZXIgbWFjcm8gZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG9yIGlubGluZSBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBkaXJlY3RseSByZWxhdGUgdG8gYHNrX2J1ZmZgLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQgaXMgdmVyeSBsaWtlbHkgYSBzdWJzZWN0aW9uIG9mIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIAoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IG9mIGFueSByZWxldmFudCBtYWNyb3Mgb3IgZnVuY3Rpb25zIGRlZmluZWQgbmVhcmJ5LCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoaXMgc2VnbWVudC4gTXkgcHJpb3JpdHkgd2lsbCBiZSB0byBncmFzcCAqaG93KiBpdCBmdW5jdGlvbnMgYW5kICp3aHkqIHRoZSBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgbm9uLW9idmlvdXMuIEkgd2FudCB0byByZWxhdGUgaXQgdG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBmaXQgaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHN1YnN5c3RlbSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIGhpZGRlbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzE1Olx0XG4xMzE2Olx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4xMzE3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMxODpcdFx0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMTk6XHRcbjEzMjA6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjEzMjE6XHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEzMjI6XHR7XG4xMzIzOlx0XHRza19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2tiLCByZWFzb24pO1xuMTMyNDpcdH1cbjEzMjU6XHRcbjEzMjY6XHQvKipcbjEzMjc6XHQgKlx0a2ZyZWVfc2tiIC0gZnJlZSBhbiBza19idWZmIHdpdGggJiMzOTtOT1RfU1BFQ0lGSUVEJiMzOTsgcmVhc29uXG4xMzI4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBmcmVlXG4xMzI5Olx0ICovXG4xMzMwOlx0c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTMzMTpcdHtcbjEzMzI6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4xMzMzOlx0fVxuMTMzNDpcdFxuMTMzNTpcdHZvaWQgc2tiX3JlbGVhc2VfaGVhZF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjEzMzY6XHR2b2lkIGtmcmVlX3NrYl9saXN0X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2VncyxcbjEzMzc6XHRcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xuMTMzODpcdHZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuMTMzOTpcdHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuMTM0MDpcdFxuMTM0MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2VncylcbjEzNDI6XHR7XG4xMzQzOlx0XHRrZnJlZV9za2JfbGlzdF9yZWFzb24oc2VncywgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTM0NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBza19za2JfcmVhc29uX2Ryb3BgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoZSBgc2tfc2tiX3JlYXNvbl9kcm9wYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gTXkgaW1tZWRpYXRlIGludGVyZXN0IGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWNrZXQgZHJvcHMgYXQgdGhpcyBsZXZlbC4gSSB3YW50IHRvIGtub3cgdGhlIHBvdGVudGlhbCBmYWN0b3JzIHRoYXQgYXJlIGNhdXNpbmcgdGhlc2UgZHJvcHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgLSBrbm93aW5nIHRoZSBleGFjdCByZWFzb24gZm9yIHRoZSBkcm9wIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19za2JfcmVhc29uX2Ryb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xMjE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMTc6Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xMjE4LVx0XHRcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzUtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxMjM2OiAqXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxubmV0L2NvcmUvc2tidWZmLmMtMTIzNy0gKlx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTEyNDU9dm9pZCBfX2ZpeF9hZGRyZXNzXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ2OnNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ3LVx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ4LXtcbm5ldC9jb3JlL3NrYnVmZi5jOjEyNDk6XHRpZiAoX19za19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTAtXHRcdF9fa2ZyZWVfc2tiKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xMjUxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjEyNTI6RVhQT1JUX1NZTUJPTChza19za2JfcmVhc29uX2Ryb3ApO1xubmV0L2NvcmUvc2tidWZmLmMtMTI1My1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMjgyPWtmcmVlX3NrYl9saXN0X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTAtXG5uZXQvY29yZS9za2J1ZmYuYzoxMjkxOlx0XHRpZiAoX19za19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2VncywgcmVhc29uKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTI5Mi1cdFx0XHRza2JfcG9pc29uX2xpc3Qoc2Vncyk7XG4tLVxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc29jay5jLTU5MC1kaXNjYXJkX2FuZF9yZWxzZTpcbm5ldC9jb3JlL3NvY2suYzo1OTE6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL3NvY2suYy01OTItXHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19za19za2JfcmVhc29uX2Ryb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBfX3NrX3NrYl9yZWFzb25fZHJvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyByZWFzb25zIHBhY2tldHMgYXJlIGJlaW5nIGRyb3BwZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBwYWNrZXRzIGFyZSBoaXR0aW5nIHRoZSBmbG9vciBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4ganVzdCBnZW5lcmFsIG5ldHdvcmsgaGVhbHRoLiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBpc3N1ZT8gQSBmaXJld2FsbCBydWxlIGdvbmUgd3Jvbmc/IE1heWJlIGEgbWVtb3J5IGNvbnN0cmFpbnQgc29tZXdoZXJlPyBLbm93aW5nIHdoZXJlIGFuZCB3aHkgdGhlc2UgZHJvcHMgb2NjdXIgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGZpeGluZyB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyBjYWxsZXJzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBkcm9wLCBhbmQgdXNlIG15IGV4cGVyaWVuY2UgdG8gaHlwb3RoZXNpemUgcG9zc2libGUgcm9vdCBjYXVzZXMuIFRpbWUgdG8gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0e1xuMTIxMTpcdFx0c2tiX3JlbGVhc2VfYWxsKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTIxMjpcdFx0a2ZyZWVfc2tibWVtKHNrYik7XG4xMjEzOlx0fVxuMTIxNDpcdEVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpO1xuMTIxNTpcdFxuMTIxNjpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbjEyMTc6XHRib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEyMTg6XHRcdFx0XHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEyMTk6XHR7XG4xMjIwOlx0XHRpZiAodW5saWtlbHkoIXNrYl91bnJlZihza2IpKSlcbjEyMjE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTIyMjpcdFxuMTIyMzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShyZWFzb24gPT0gU0tCX05PVF9EUk9QUEVEX1lFVCB8fFxuMTIyNDpcdFx0XHRcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxuMTIyNTpcdFx0XHRcdFx0XHQgICAgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKSBcdTAwM2U9XG4xMjI2Olx0XHRcdFx0XHRTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSk7XG4xMjI3Olx0XG4xMjI4Olx0XHRpZiAocmVhc29uID09IFNLQl9DT05TVU1FRClcbjEyMjk6XHRcdFx0dHJhY2VfY29uc3VtZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuMTIzMDpcdFx0ZWxzZVxuMTIzMTpcdFx0XHR0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO1xuMTIzMjpcdFx0cmV0dXJuIHRydWU7XG4xMjMzOlx0fVxuMTIzNDpcdFxuMTIzNTpcdC8qKlxuMTIzNjpcdCAqXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxuMTIzNzpcdCAqXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXG4xMjM4Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBmcmVlXG4xMjM5Olx0ICpcdEByZWFzb246IHJlYXNvbiB3aHkgdGhpcyBza2IgaXMgZHJvcHBlZFxuMTI0MDpcdCAqXG4xMjQxOlx0ICpcdERyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdFxuMTI0MjpcdCAqXHR6ZXJvLiBNZWFud2hpbGUsIHBhc3MgdGhlIHJlY2VpdmluZyBzb2NrZXQgYW5kIGRyb3AgcmVhc29uIHRvXG4xMjQzOlx0ICpcdCYjMzk7a2ZyZWVfc2tiJiMzOTsgdHJhY2Vwb2ludC5cbjEyNDQ6XHQgKi9cbjEyNDU6XHR2b2lkIF9fZml4X2FkZHJlc3NcbjEyNDY6XHRza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTI0NzpcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMjQ4Olx0e1xuMTI0OTpcdFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgX19za19za2JfcmVhc29uX2Ryb3BgIGZvciBQb3RlbnRpYWwgQmFja3BvcnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgYHJlYXNvbmAgcGFyYW1ldGVyIGluIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAgd2FzIHNvbWV0aGluZyB0aGF0IGFmZmVjdGVkIGFueXRoaW5nIHN1YnN0YW50aWFsLiBJdCBsb29rZWQgbGlrZSBpdCBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gYHRyYWNlX2tmcmVlX3NrYmAuIE5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93LCBhbGxvY2F0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gQmFja3BvcnRpbmcgaGFzIHRvIGJlIHByZWNpc2UuIFRpbWUgdG8gcmUtcmVhZCBTZWN0aW9uIDIuIEFoLCB0aGVyZSBpdCBpczogJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhhdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGluZGljYXRvciB0aGlzIGlzIG9rLCBidXQgc3RpbGwsIEkgY2FuJiMzOTt0IGFzc3VtZS4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgZW51bSBza2JfZHJvcF9yZWFzb25gIGFjdHVhbGx5IGRvZXMuIEFoLCBpdCYjMzk7cyAqb25seSogdXNlZCBmb3IgdGhlIGB0cmFjZV9rZnJlZV9za2JgIHRyYWNlcG9pbnQhIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHNvbWUgZnVuY3Rpb25zIGBrZnJlZV9za2Ioc2tiKWAgdGhhdCBwYXNzZXMgYFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEYCwgYnV0IGBrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKWAgcGFzc2VzIHRoZSBzcGVjaWZpYyBgU0tCX0RST1BfUkVBU09OXy4uLmAgZW51bSB0byBgdHJhY2Vfa2ZyZWVfc2tiYC4gU28gdGhlIGByZWFzb25gIHZhbHVlcyBhcmUgZ2V0dGluZyBzZXQgd2hlbiBwYWNrZXRzIGFyZSBkcm9wcGVkLiBJIHNlZSBzb21lIGV4YW1wbGVzIHdoZXJlIHRoZSByZWFzb24gaXMgYmVpbmcgY2hhbmdlZCB3aGVuIHBhY2tldHMgYXJlIGRyb3BwZWQsIHN1Y2ggYXMgaW4gYGlwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIAoKT2theSwgYnV0IGFyZSB0aGVzZSBgcmVhc29uYCBjb2RlcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBmb3IgY29udHJvbCBmbG93PyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIGNoZWNrIGlmIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBvciBhbnkgb3RoZXIgZHJvcCByZWFzb25zIGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgdHJ1bHkgJiMzNDtwdXJlbHkgZGVjb3JhdGl2ZSYjMzQ7LiBMZXQmIzM5O3MgZG8gdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NLQl9EUk9QX1JFQVNPTl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yMDE9dm9pZCBicl9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjA0LXtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjIwNTpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19UWF9UQVJHRVQ7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yMDYtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNDYtXHRcdGlmIChJU19FUlIocHJldikpIHtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI0NzpcdFx0XHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ4Olx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjQ5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTI5OT12b2lkIGJyX211bHRpY2FzdF9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzAzLXtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMwNDpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19UWF9UQVJHRVQ7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMDUtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zNDYtXHRcdGlmIChJU19FUlIocHJldikpIHtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0NzpcdFx0XHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzQ4Olx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzQ5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Nzg6XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBicl9wb3J0X2dldF9yY3Uoc2tiLVx1MDAzZWRldik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTEwMC1cdFx0aWYgKHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxMDE6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDItXHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNjEtXHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNjI6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTYzLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzOT1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzQxOlx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ5LVx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSkpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTA6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSU5WQUxJRF9TT1VSQ0U7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzUxLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5My1cdFx0Y2FzZSAweDAxOlx0LyogSUVFRSBNQUMgKFBhdXNlKSAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM5NDpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTUFDX0lFRUVfTUFDX0NPTlRST0w7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk1LVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQzLVx0ZGVmYXVsdDpcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDQ6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQ1LWRyb3A6XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5NDpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEwsIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTUtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTctXHRpZiAocCA9PSBOVUxMKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0OTg6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTktXHRiciA9IHAtXHUwMDNlYnI7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDgtXHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O01vZHVsZSBpcHY2IGlzIGRpc2FibGVkLCBzbyBjYWxsX2lwNnRhYmxlcyBpcyBub3Qgc3VwcG9ydGVkLlwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwOTpcdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVELCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTEwLVx0XHR9XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjUtXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNjpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI3LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjgtXHRpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1Mjk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMC1cdGlmICghc2V0dXBfcHJlX3JvdXRpbmcoc2tiLCBzdGF0ZS1cdTAwM2VuZXQpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MzE6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz02NzM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2lwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODYtXHRpZiAoIW5mX2JyaWRnZV91bnNoYXJlKHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY4NzpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjg4LVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkwLVx0aWYgKCFuZl9icmlkZ2UpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5MTpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkyLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjk0LVx0aWYgKCFwYXJlbnQpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5NTpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY5Ni1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNS1cdFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQoc3RhdGUtXHUwMDNlbmV0LCBza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3MDY6XHRcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA3LVx0XHRJUENCKHNrYiktXHUwMDNlZnJhZ19tYXhfc2l6ZSA9IG5mX2JyaWRnZS1cdTAwM2VmcmFnX21heF9zaXplO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzEwLVx0XHRpZiAoYnJfdmFsaWRhdGVfaXB2NihzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcxMTpcdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MTItXHRcdElQNkNCKHNrYiktXHUwMDNlZnJhZ19tYXhfc2l6ZSA9IG5mX2JyaWRnZS1cdTAwM2VmcmFnX21heF9zaXplO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0OC1cdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYXJwaGRyKSkpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NDk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzUwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NDEtXHRpZiAoIXJlYWxvdXRkZXYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk0MjpcdFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk0My1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9MTYyPXVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZ19pcHY2KHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE2OC1cdGlmIChicl92YWxpZGF0ZV9pcHY2KHN0YXRlLVx1MDAzZW5ldCwgc2tiKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNjk6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTcwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNzItXHRpZiAoIW5mX2JyaWRnZSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNzM6XHRcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTc0LVx0aWYgKCFzZXR1cF9wcmVfcm91dGluZyhza2IsIHN0YXRlLVx1MDAzZW5ldCkpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTc1Olx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNzYtXG4tLVxubmV0L2Nhbi9hZl9jYW4uYz02ODc9c3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy02OTQtXG5uZXQvY2FuL2FmX2Nhbi5jOjY5NTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5fUlhfSU5WQUxJRF9GUkFNRSk7XG5uZXQvY2FuL2FmX2Nhbi5jLTY5Ni1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9jYW4vYWZfY2FuLmM9NzAzPXN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy03MTAtXG5uZXQvY2FuL2FmX2Nhbi5jOjcxMTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5GRF9SWF9JTlZBTElEX0ZSQU1FKTtcbm5ldC9jYW4vYWZfY2FuLmMtNzEyLVx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4tLVxubmV0L2Nhbi9hZl9jYW4uYz03MTk9c3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY2FuL2FmX2Nhbi5jLTcyNi1cbm5ldC9jYW4vYWZfY2FuLmM6NzI3Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0NBTlhMX1JYX0lOVkFMSURfRlJBTUUpO1xubmV0L2Nhbi9hZl9jYW4uYy03MjgtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00MTU5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBxZGlzY19wa3RfbGVuX3NlZ3NfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTQxODktXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSlcbm5ldC9jb3JlL2Rldi5jOjQxOTA6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TS0JfQkFEX0dTTztcbm5ldC9jb3JlL2Rldi5jLTQxOTEtXG4tLVxubmV0L2NvcmUvZGV2LmMtNDE5NC1cdFx0aWYgKHRsZW4gXHUwMDNjIHNpemVvZigqdGgpKVxubmV0L2NvcmUvZGV2LmM6NDE5NTpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDE5Ni1cdFx0aGRyX2xlbiAmIzQzOz0gdGxlbjtcbm5ldC9jb3JlL2Rldi5jLTQxOTctXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9sZW4pKVxubmV0L2NvcmUvZGV2LmM6NDE5ODpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDE5OS1cdH0gZWxzZSBpZiAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9MNCkge1xubmV0L2NvcmUvZGV2LmMtNDIwMC1cdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxubmV0L2NvcmUvZGV2LmM6NDIwMTpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xubmV0L2NvcmUvZGV2LmMtNDIwMi1cdFx0aGRyX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTQyMTEtXHRcdGlmIChwYXlsb2FkIFx1MDAzYz0gMClcbm5ldC9jb3JlL2Rldi5jOjQyMTI6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TS0JfQkFEX0dTTztcbm5ldC9jb3JlL2Rldi5jLTQyMTMtXHRcdGdzb19zZWdzID0gRElWX1JPVU5EX1VQKHBheWxvYWQsIHNoaW5mby1cdTAwM2Vnc29fc2l6ZSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cdFx0XHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xubmV0L2NvcmUvZGV2LmM6NDI4NzpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XG5uZXQvY29yZS9kZXYuYy00Mjg4LVx0XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDUxNi1cdHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrYi1cdTAwM2VkZXYtXHUwMDNldGN4X2luZ3Jlc3MpO1xubmV0L2NvcmUvZGV2LmM6NDUxNzpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0lOR1JFU1M7XG5uZXQvY29yZS9kZXYuYy00NTE4LVx0c3RydWN0IGJwZl9uZXRfY29udGV4dCBfX2JwZl9uZXRfY3R4LCAqYnBmX25ldF9jdHg7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy00NTc5LVx0c3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfYmgoZGV2LVx1MDAzZXRjeF9lZ3Jlc3MpO1xubmV0L2NvcmUvZGV2LmM6NDU4MDpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0VHUkVTUztcbm5ldC9jb3JlL2Rldi5jLTQ1ODEtXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbi0tXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDkwMC1cdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpIHtcbm5ldC9jb3JlL2Rldi5jOjQ5MDE6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XG5uZXQvY29yZS9kZXYuYy00OTAyLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2NvcmUvZGV2LmMtNDk1Mi1cbm5ldC9jb3JlL2Rldi5jOjQ5NTM6XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUO1xubmV0L2NvcmUvZGV2LmMtNDk1NC1kcm9wOlxuLS1cbm5ldC9jb3JlL2Rldi5jPTU0Mjk9c3RhdGljIGludCBlbnF1ZXVlX3RvX2JhY2tsb2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNwdSxcbi0tXG5uZXQvY29yZS9kZXYuYy01NDM4LVxubmV0L2NvcmUvZGV2LmM6NTQzOTpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XG5uZXQvY29yZS9kZXYuYy01NDQwLVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NzQtY3B1X2JhY2tsb2dfZHJvcDpcbm5ldC9jb3JlL2Rldi5jOjU0NzU6XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQ1BVX0JBQ0tMT0c7XG5uZXQvY29yZS9kZXYuYy01NDc2LVx0bnVtYV9kcm9wX2FkZChcdTAwMjZzZC1cdTAwM2Vkcm9wX2NvdW50ZXJzLCAxKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01NzE4PWludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTc0OC1cdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XHRrZnJlZV9za2JfcmVhc29uKCpwc2tiLCBTS0JfRFJPUF9SRUFTT05fWERQKTtcbm5ldC9jb3JlL2Rldi5jLTU3NTAtXHRyZXR1cm4gWERQX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjAzND1zdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGJvb2wgcGZtZW1hbGxvYyxcbi0tXG5uZXQvY29yZS9kZXYuYy02MDM2LXtcbm5ldC9jb3JlL2Rldi5jOjYwMzc6XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTkhBTkRMRURfUFJPVE87XG5uZXQvY29yZS9kZXYuYy02MDM4LVx0c3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgKnB0X3ByZXY7XG4tLVxubmV0L2NvcmUvZGV2LmMtNjEyOS1cdGlmIChwZm1lbWFsbG9jIFx1MDAyNlx1MDAyNiAhc2tiX3BmbWVtYWxsb2NfcHJvdG9jb2woc2tiKSkge1xubmV0L2NvcmUvZGV2LmM6NjEzMDpcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcbm5ldC9jb3JlL2Rldi5jLTYxMzEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvY29yZS9kZXYuYz02NTU1PXN0YXRpYyB2b2lkIGZsdXNoX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY1ODUtXG5uZXQvY29yZS9kZXYuYzo2NTg2Olx0X19za2JfcXVldWVfcHVyZ2VfcmVhc29uKFx1MDAyNmxpc3QsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpO1xubmV0L2NvcmUvZGV2LmMtNjU4Ny19XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NjExPXN0YXRpYyBpbnQgbmV0X2RtX3BhY2tldF9yZXBvcnRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjYzNTpcdHN1YnN5cyA9IHUzMl9nZXRfYml0cyhjYi1cdTAwM2VyZWFzb24sIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSyk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2MzY6XHRpZiAoc3Vic3lzIFx1MDAzYyBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSlcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNy1cdFx0bGlzdCA9IHJjdV9kZXJlZmVyZW5jZShkcm9wX3JlYXNvbnNfYnlfc3Vic3lzW3N1YnN5c10pO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjM4Olx0c3Vic3lzX3JlYXNvbiA9IGNiLVx1MDAzZXJlYXNvbiBcdTAwMjYgflNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSztcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzOS1cdGlmICghbGlzdCB8fFxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTY0Mi1cdCAgICBzdHJsZW4obGlzdC1cdTAwM2VyZWFzb25zW3N1YnN5c19yZWFzb25dKSBcdTAwM2UgTkVUX0RNX01BWF9SRUFTT05fTEVOKSB7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2NDM6XHRcdGxpc3QgPSByY3VfZGVyZWZlcmVuY2UoZHJvcF9yZWFzb25zX2J5X3N1YnN5c1tTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkVdKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjY0NDpcdFx0c3Vic3lzX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNjQ1LVx0fVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEzNz1za19maWx0ZXJfdHJpbV9jYXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgY2FwKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE0OS1cdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QRk1FTUFMTE9DRFJPUCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxNTA6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MS1cdH1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNTMtXHRpZiAoZXJyKVxubmV0L2NvcmUvZmlsdGVyLmM6MTU0Olx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9GSUxURVI7XG5uZXQvY29yZS9maWx0ZXIuYy0xNTUtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTU3LVx0aWYgKGVycilcbm5ldC9jb3JlL2ZpbHRlci5jOjE1ODpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TRUNVUklUWV9IT09LO1xubmV0L2NvcmUvZmlsdGVyLmMtMTU5LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE3MS1cdFx0aWYgKGVycilcbm5ldC9jb3JlL2ZpbHRlci5jOjE3MjpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfRklMVEVSO1xubmV0L2NvcmUvZmlsdGVyLmMtMTczLVx0fVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM1LVx0XHRcdHJldHVybiAxO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXHRcdFx0XHRuZWlnaC1cdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXHUwMDNldHJ1ZXNpemU7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjU2Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXHRcdFx0XHRORUlHSF9DQUNIRV9TVEFUX0lOQyhuZWlnaC1cdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc3LVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm5laWdoLVx1MDAzZWxvY2spO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjc5LVx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjAwPWludCBuZWlnaF9yZXNvbHZlX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVx0cmMgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyOS1cdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MzQ9aW50IG5laWdoX2Nvbm5lY3RlZF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cdFx0ZXJyID0gLUVJTlZBTDtcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMzY9c3RhdGljX2Fzc2VydChzaXplb2ZfZmllbGQoc3RydWN0IGJpb192ZWMsIGJ2X29mZnNldCkgPT1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMzktI3VuZGVmIEZOXG5uZXQvY29yZS9za2J1ZmYuYzoxNDA6I2RlZmluZSBGTihyZWFzb24pIFtTS0JfRFJPUF9SRUFTT05fIyNyZWFzb25dID0gI3JlYXNvbixcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MS1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyb3BfcmVhc29uc1tdID0ge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE1MT1jb25zdCBzdHJ1Y3QgZHJvcF9yZWFzb25fbGlzdCBfX3JjdSAqXG5uZXQvY29yZS9za2J1ZmYuYzoxNTI6ZHJvcF9yZWFzb25zX2J5X3N1YnN5c1tTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTV0gPSB7XG5uZXQvY29yZS9za2J1ZmYuYzoxNTM6XHRbU0tCX0RST1BfUkVBU09OX1NVQlNZU19DT1JFXSA9IFJDVV9JTklUSUFMSVpFUihcdTAwMjZkcm9wX3JlYXNvbnNfY29yZSksXG5uZXQvY29yZS9za2J1ZmYuYy0xNTQtfTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xNjM9dm9pZCBkcm9wX3JlYXNvbnNfcmVnaXN0ZXJfc3Vic3lzKGVudW0gc2tiX2Ryb3BfcmVhc29uX3N1YnN5cyBzdWJzeXMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY1LXtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2NjpcdGlmIChXQVJOKHN1YnN5cyBcdTAwM2M9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRSB8fFxubmV0L2NvcmUvc2tidWZmLmMtMTY3LVx0XHQgc3Vic3lzIFx1MDAzZT0gQVJSQVlfU0laRShkcm9wX3JlYXNvbnNfYnlfc3Vic3lzKSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODI9dm9pZCBkcm9wX3JlYXNvbnNfdW5yZWdpc3Rlcl9zdWJzeXMoZW51bSBza2JfZHJvcF9yZWFzb25fc3Vic3lzIHN1YnN5cylcbm5ldC9jb3JlL3NrYnVmZi5jLTE4My17XG5uZXQvY29yZS9za2J1ZmYuYzoxODQ6XHRpZiAoV0FSTihzdWJzeXMgXHUwMDNjPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkUgfHxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NS1cdFx0IHN1YnN5cyBcdTAwM2U9IEFSUkFZX1NJWkUoZHJvcF9yZWFzb25zX2J5X3N1YnN5cyksXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIwOT12b2lkIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEwLXtcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMTE6XHRza2JfcmVsZWFzZV9hbGwoc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xMjEyLVx0a2ZyZWVfc2tibWVtKHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIxNz1ib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjI0LVx0XHRcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxubmV0L2NvcmUvc2tidWZmLmM6MTIyNTpcdFx0XHRcdFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXHUwMDNlPVxubmV0L2NvcmUvc2tidWZmLmM6MTIyNjpcdFx0XHRcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjctXG4tLVxubmV0L2NvcmUvc29jay5jPTUyND1zb2NrX3F1ZXVlX3Jjdl9za2JfcmVhc29uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9zb2NrLmMtNTM1LVx0Y2FzZSAtRU5PTUVNOlxubmV0L2NvcmUvc29jay5jOjUzNjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfUkNWQlVGRjtcbm5ldC9jb3JlL3NvY2suYy01MzctXHRjYXNlIC1FTk9CVUZTOlxubmV0L2NvcmUvc29jay5jOjUzODpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QUk9UT19NRU07XG5uZXQvY29yZS9zb2NrLmMtNTM5LVx0fVxuLS1cbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2suYy01NTgtXHRcdHNrX2Ryb3BzX2luYyhzayk7XG5uZXQvY29yZS9zb2NrLmM6NTU5Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkY7XG5uZXQvY29yZS9zb2NrLmMtNTYwLVx0XHRnb3RvIGRpc2NhcmRfYW5kX3JlbHNlO1xuLS1cbm5ldC9jb3JlL3NvY2suYy01NzctXHRcdGlmIChlcnIgPT0gLUVOT01FTSlcbm5ldC9jb3JlL3NvY2suYzo1Nzg6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BGTUVNQUxMT0M7XG5uZXQvY29yZS9zb2NrLmMtNTc5LVx0XHRpZiAoZXJyID09IC1FTk9CVUZTKVxubmV0L2NvcmUvc29jay5jOjU4MDpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0c7XG5uZXQvY29yZS9zb2NrLmMtNTgxLVx0XHRza19kcm9wc19pbmMoc2spO1xuLS1cbm5ldC9pcHY0L2FycC5jPTI5Nz1zdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTI5OS1cdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcbm5ldC9pcHY0L2FycC5jOjMwMDpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfRkFJTEVEKTtcbm5ldC9pcHY0L2FycC5jLTMwMS19XG4tLVxubmV0L2lwdjQvYXJwLmM9OTcwPXN0YXRpYyBpbnQgYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2FycC5jLTk5Mi1cdGlmIChhcnAtXHUwMDNlYXJfaGxuICE9IGRldi1cdTAwM2VhZGRyX2xlbiB8fCBhcnAtXHUwMDNlYXJfcGxuICE9IDQpIHtcbm5ldC9pcHY0L2FycC5jOjk5MzpcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L2FycC5jLTk5NC1cdFx0Z290byBmcmVlc2tiO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTM2NT1zdGF0aWMgaW50IF9fZmliX3ZhbGlkYXRlX3NvdXJjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwMy1cdFx0aWYgKHJlcy50eXBlICE9IFJUTl9MT0NBTCkge1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NDA0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JUF9JTlZBTElEX1NPVVJDRTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwNS1cdFx0XHRnb3RvIGVfaW52YWw7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00MDYtXHRcdH0gZWxzZSBpZiAoIUlOX0RFVl9BQ0NFUFRfTE9DQUwoaWRldikpIHtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQwNzpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSVBfTE9DQUxfU09VUkNFO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDA4LVx0XHRcdGdvdG8gZV9pbnZhbDtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NDQtZV9ycGY6XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0NDU6XHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9SUEZJTFRFUjtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQ0Ni19XG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NDQ5PWludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcwLVx0XHRpZiAoaW5ldF9sb29rdXBfaWZhZGRyX3JjdShuZXQsIHNyYykpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0NzE6XHRcdFx0cmV0dXJuIC1TS0JfRFJPUF9SRUFTT05fSVBfTE9DQUxfU09VUkNFO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcyLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMTEyPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTEzNC1cdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KSAgeyAvKiBNYW5nbGVkIGhlYWRlciwgZHJvcC4gKi9cbm5ldC9pcHY0L2ljbXAuYzoxMTM1Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFI7XG5uZXQvaXB2NC9pY21wLmMtMTEzNi1cdFx0Z290byBvdXRfZXJyO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMjE5LVx0X19JQ01QX0lOQ19TVEFUUyhuZXQsIElDTVBfTUlCX0lORVJST1JTKTtcbm5ldC9pcHY0L2ljbXAuYzoxMjIwOlx0cmV0dXJuIHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L2ljbXAuYy0xMjIxLX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTIyOD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMjMxLVx0XHRfX0lDTVBfSU5DX1NUQVRTKGRldl9uZXRfcmN1KHNrYi1cdTAwM2VkZXYpLCBJQ01QX01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2NC9pY21wLmM6MTIzMjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xubmV0L2lwdjQvaWNtcC5jLTEyMzMtXHR9XG4tLVxubmV0L2lwdjQvaWNtcC5jLTEyMzYtXHRcdC8qIHRoZXJlIGF1Z2h0IHRvIGJlIGEgc3RhdCAqL1xubmV0L2lwdjQvaWNtcC5jOjEyMzc6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG5uZXQvaXB2NC9pY21wLmMtMTIzOC1cdH1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTQwNT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTQzNC1cdF9fSUNNUF9JTkNfU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLCBJQ01QX01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2NC9pY21wLmM6MTQzNTpcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbm5ldC9pcHY0L2ljbXAuYy0xNDM2LX1cbi0tXG5uZXQvaXB2NC9pY21wLmM9MTQ0Nz1pbnQgaWNtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2ljbXAuYy0xNDQ4LXtcbm5ldC9pcHY0L2ljbXAuYzoxNDQ5Olx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pY21wLmMtMTQ1MC1cdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xNDU5LVx0XHRcdFx0IFhGUk1fU1RBVEVfSUNNUCkpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNDYwOlx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbm5ldC9pcHY0L2ljbXAuYy0xNDYxLVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTQ3MS1cdFx0XHRcdFx0XHRza2IpKSB7XG5uZXQvaXB2NC9pY21wLmM6MTQ3MjpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG5uZXQvaXB2NC9pY21wLmMtMTQ3My1cdFx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjQvaWNtcC5jLTE1MTMtXHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNTE0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JTlZBTElEX1BST1RPO1xubmV0L2lwdjQvaWNtcC5jLTE1MTUtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTUyMC1cdFx0ICAgIGljbXBoLVx1MDAzZXR5cGUgIT0gSUNNUF9BRERSRVNTUkVQTFkpIHtcbm5ldC9pcHY0L2ljbXAuYzoxNTIxOlx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JTlZBTElEX1BST1RPO1xubmV0L2lwdjQvaWNtcC5jLTE1MjItXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTUzOC1cdGlmIChpY21waC1cdTAwM2V0eXBlIFx1MDAzZSBOUl9JQ01QX1RZUEVTKSB7XG5uZXQvaXB2NC9pY21wLmM6MTUzOTpcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1VOSEFORExFRF9QUk9UTztcbm5ldC9pcHY0L2ljbXAuYy0xNTQwLVx0XHRnb3RvIGVycm9yO1xuLS1cbm5ldC9pcHY0L2ljbXAuYy0xNTUzLWNzdW1fZXJyb3I6XG5uZXQvaXB2NC9pY21wLmM6MTU1NDpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JQ01QX0NTVU07XG5uZXQvaXB2NC9pY21wLmMtMTU1NS1cdF9fSUNNUF9JTkNfU1RBVFMobmV0LCBJQ01QX01JQl9DU1VNRVJST1JTKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmM9MzIxPXZvaWQgaW5ldF9mcmFnX3F1ZXVlX2ZsdXNoKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsXG4tLVxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jLTMyNS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYzozMjY6XHRyZWFzb24gPSByZWFzb24gPzogU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVDtcbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zMjctXHRzdW0gPSBpbmV0X2ZyYWdfcmJ0cmVlX3B1cmdlKFx1MDAyNnEtXHUwMDNlcmJfZnJhZ21lbnRzLCByZWFzb24pO1xuLS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYz0zMzU9dm9pZCBpbmV0X2ZyYWdfZGVzdHJveShzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxKVxuLS1cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zNDMtXHRyZWFzb24gPSAocS1cdTAwM2VmbGFncyBcdTAwMjYgSU5FVF9GUkFHX0RST1ApID9cbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYzozNDQ6XHRcdFx0U0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVCA6XG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQ1LVx0XHRcdFNLQl9DT05TVU1FRDtcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jPTEyMz1zdGF0aWMgdm9pZCBpcF9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNC17XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjEyNTpcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNi1cdHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmZyYWcgPSB0aW1lcl9jb250YWluZXJfb2YoZnJhZywgdCwgdGltZXIpO1xuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTc4LVx0ICovXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjE3OTpcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTE4MC1cdGlmIChmcmFnX2V4cGlyZV9za2lwX2ljbXAocXAtXHUwMDNlcS5rZXkudjQudXNlcikgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz0yNDM9c3RhdGljIGludCBpcF9mcmFnX3JlaW5pdChzdHJ1Y3QgaXBxICpxcClcbi0tXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0Ny1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MjQ4Olx0aW5ldF9mcmFnX3F1ZXVlX2ZsdXNoKFx1MDAyNnFwLVx1MDAzZXEsIFNLQl9EUk9QX1JFQVNPTl9GUkFHX1RPT19GQVIpO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0yNDktXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0xODk9dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMS1cdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMDI6XHRcdFx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMy1cdFx0XHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMC1cdFx0XHR9XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIyMTpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX05PUFJPVE8pO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0yMjItXHRcdH0gZWxzZSB7XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjMzOlx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNKTtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMjgyLVx0XHRfX0lQX0lOQ19TVEFUUyhkZXZfbmV0KGRldiksIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyODM6XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI4NC1cdH1cbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5MS1cdFx0X19JUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI5MjpcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUjtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjkzLVx0fVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMzAzLVx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzozMDQ6XHRcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMwNS1cdFx0XHR9XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDgtXHRcdGlmIChpcF9vcHRpb25zX3Jjdl9zcnIoc2tiLCBkZXYpKVxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDk6XHRcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0zMTAtXHR9XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0zNjE9c3RhdGljIGludCBpcF9yY3ZfZmluaXNoX2NvcmUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtNDYwLVx0XHQgICAgSU5fREVWX09SQ09ORihpbl9kZXYsIERST1BfVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1QpKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ2MTpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTklDQVNUX0lOX0wyX01VTFRJQ0FTVDtcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDYyLVx0XHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQ3Mi1kcm9wX2Vycm9yOlxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NzM6XHRpZiAoZHJvcF9yZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX0lQX1JQRklMVEVSKVxubmV0L2lwdjQvaXBfaW5wdXQuYy00NzQtXHRcdF9fTkVUX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9JUFJQRklMVEVSKTtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTQ5OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwX3Jjdl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUwOS1cdFx0ZGV2X2NvcmVfc3RhdHNfcnhfb3RoZXJob3N0X2Ryb3BwZWRfaW5jKHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYzo1MTA6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX09USEVSSE9TVDtcbm5ldC9pcHY0L2lwX2lucHV0LmMtNTExLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy01MjEtXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjUyMjpcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUyMy1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSlcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTU1OC1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBsZW4pIHtcbm5ldC9pcHY0L2lwX2lucHV0LmM6NTU5Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTk0CgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDE2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERyb3AgUmVhc29uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVmaW5pbmcgdGhlIGdyYW51bGFyaXR5IG9mIHBhY2tldCBkcm9wIHJlYXNvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjay4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaW50cm9kdWNpbmcgYSBuZXcgZW51bSBlbnRyeSwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdGhlbiB1cGRhdGluZyB2YXJpb3VzIElQdjQgYW5kIElQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBjb2RlIHBhdGhzIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gd2hlbiBhIHBhY2tldCYjMzk7cyBUaW1lLVRvLUxpdmUgKFRUTCkgZXhwaXJlcy4gVGhlIGNydWNpYWwgcGFydCBmb3IgbWUsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnVydGhlciBmdXp6aW5nLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGlwX2ZvcndhcmQoKWAsIGBpcHY2X3NyaF9yY3YoKWAsIGBpcHY2X3JwbF9zcmhfcmN2KClgLCBgaXB2Nl9ydGhkcl9yY3YoKWAsIGFuZCBgaXA2X2ZvcndhcmQoKWAuIEluc3RlYWQgb2YgdXNpbmcgYSBnZW5lcmljICYjMzQ7SVBfSU5IRFImIzM0OyByZWFzb24gZm9yIGRyb3BwaW5nIHBhY2tldHMgaW4gdGhlc2UgZnVuY3Rpb25zLCB0aGV5IGFyZSBub3cgdXBkYXRlZCB0byBzcGVjaWZ5ICYjMzQ7SVBfVFRMX0VYQ0VFREVEJiMzNDsgdXNpbmcgdGhlIGBrZnJlZV9za2JfcmVhc29uKClgIGZ1bmN0aW9uLiBUaGUgb25seSB0aGluZyB0aGF0JiMzOTtzIGRpZmZlcmVudCBoZXJlIGlzIHRoYXQgYSBuZXcgZW51bSB2YWx1ZSBpcyBwYXNzZWQsIG9yIHRoZSBleGlzdGluZyBlbnVtIHZhbHVlIGlzIGNoYW5nZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhbHRlciB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW4gYSB3YXkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIGRldGVjdGFibGUgdGhyb3VnaCBmdXp6aW5nLiBUaGUgcGF0Y2ggZml0cyB0aGUgY3JpdGVyaWEgb2YgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiBvciB0cmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLiYjMzQ7IEl0IGRvZXMgbm90IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBjb2RlIHBhdGhzIHN0aWxsIGRyb3AgdGhlIHBhY2tldCBhbmQgZnJlZSB0aGUgc2tiLiBUaGUgY2hhbmdlIGp1c3QgdXBkYXRlcyB0aGUgJiMzNDtyZWFzb24mIzM0OyBhcmd1bWVudC4gVGhlcmUgYXJlIG5vIGRhdGEgc3RydWN0dXJlcyBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGNhbiBpbnRyb2R1Y2UgYSBidWcuIE5vIG5ldyBsb2dpYyBpcyBhZGRlZC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgdGhlIHRyYWNlcG9pbnQvZHJvcF9tb25pdG9yLgoKTGV0JiMzOTtzIGRvIGEgY29tcGxldGUgZG91YmxlLWNoZWNrLiBJbnNwZWN0aW5nIHRoZSBjb2RlLCBJIHNlZToKCiogICBUaGUgYGluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oYCBmaWxlIG5vdyBjb250YWlucyB0aGUgbmV3IGVudW0gZW50cnkgYW5kIGFzc29jaWF0ZWQgc3RyaW5nIG1hY3JvLgoqICAgSW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIHRoZSBwYXRjaCBub3cgc2V0cyB0aGUgZHJvcCByZWFzb24gYXMgYElQX1RUTF9FWENFRURFRGAgaW5zdGVhZCBvZiBgSVBfSU5IRFJgLgoqICAgSW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGluc3RhbmNlcyBvZiBga2ZyZWVfc2tiKClgIGFyZSBjaGFuZ2VkIHRvIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRClgLgoqICAgSW4gYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIHRoZSByZWFzb24gcGFzc2VkIHRvIGBrZnJlZV9za2JfcmVhc29uKClgIGlzIHVwZGF0ZWQgdG8gYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLgoKVGhlcmUgYXJlIG5vIGVkZ2UgY2FzZXMsIG5vIGFycmF5IGluZGV4aW5nIGlzc3VlcywgYW5kIG5vIGNoYW5nZXMgdG8ga2VybmVsIGxvZ2ljLCBjb250cm9sIGZsb3csIGxvY2tpbmcsIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBmdW5jdGlvbmFsIGJlaGF2aW9yLiBUaGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoZSBza2IgaXMgZnJlZWQuIEl0JiMzOTtzIGp1c3QgdGhhdCB0aGUgZHJvcCByZWFzb24gaXMgdXBkYXRlZC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBzdHJpY3RseSBmYWxscyB1bmRlciBwdXJlbHkgdXBkYXRpbmcgdHJhY2Vwb2ludHMsIGl0JiMzOTtzIHNhZmUgdG8gY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXJ0aGVyIGZ1enppbmcuCgpUaHVzLCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3b3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBFbmFibGVDb25maWdzOiBbXSBvciBudWxsYAoqICAgYEZvY3VzU3ltYm9sczogW10gb3IgbnVsbGAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcyBhIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBkcm9wIHJlYXNvbiBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBmdW5jdGlvbnMgdG8gcGFzcyBpdCB0byBga2ZyZWVfc2tiX3JlYXNvbigpYC4gSXQgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludCAvIGRpYWdub3N0aWMgZHJvcCByZWFzb24gdXBkYXRlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgSVB2NC9JUHY2IGZvcndhcmRpbmcgYW5kIHJvdXRpbmcgaGVhZGVyIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHJlcG9ydCB0aGlzIHJlYXNvbiB3aGVuIGZyZWVpbmcgZXhwaXJlZCBwYWNrZXRzLiBUaGlzIGlzIHB1cmVseSBhIHRyYWNlcG9pbnQvbW9uaXRvcmluZyBtZXRhZGF0YSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV4ZWN1dGlvbiBsb2dpYywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxMC43MTk1NDkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5OTY5MzIwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IFNLQiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgSVB2NC9JUHY2IGZvcndhcmRpbmcgYW5kIHJvdXRpbmcgaGVhZGVyIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHJlcG9ydCB0aGlzIHJlYXNvbiB3aGVuIGZyZWVpbmcgZXhwaXJlZCBwYWNrZXRzLiBUaGlzIGlzIHB1cmVseSBhIHRyYWNlcG9pbnQvbW9uaXRvcmluZyBtZXRhZGF0YSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV4ZWN1dGlvbiBsb2dpYywgbWFraW5nIGl0IG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MTAuNzE5NTYyMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTkzMTY0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDA2Yjc5ZGMyZWM4ZmJkZWI2YzdhYWM0ZDZiZTQxNjg4YjM2NDc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjY6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbmluZGV4IDJmMzEyZDFmNjdkNjkuLjNkNmFlYzIwM2MzZjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEBcXG4gXFx0Rk4oUFNQX0lOUFVUKVxcdFxcdFxcdFxcXFxcXG4gXFx0Rk4oUFNQX09VVFBVVClcXHRcXHRcXHRcXFxcXFxuIFxcdEZOKFJFQ1VSU0lPTl9MSU1JVClcXHRcXHRcXFxcXFxuK1xcdEZOKElQX1RUTF9FWENFRURFRClcXHRcXHRcXFxcXFxuIFxcdEZOZShNQVgpXFxuIFxcbiAvKipcXG5AQCAtNjA2LDYgKzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuIFxcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxcbiBcXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cXG4gXFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcXG4rXFx0LyoqXFxuK1xcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBcXHUwMDNjPSAxXFxuK1xcdCAqIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXFxuK1xcdCAqL1xcbitcXHRTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELFxcbiBcXHQvKipcXG4gXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxcbiBcXHQgKiBzaG91bGRuJ3QgYmUgdXNlZCBhcyBhIHJlYWwgJ3JlYXNvbicgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbmluZGV4IDhiNjVmMTI1ODNlYjYuLmIyNDI1NjFkMzdlNzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXFxuKysrIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXFxuQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXFxuIFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XFxuLVxcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XFxuK1xcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9UVExfRVhDRUVERUQpO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gXFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5pbmRleCAwOWE0NTUyZjdmMDhhLi41NTM5MWUyZTU2MTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xcbkBAIC00NjQsNyArNDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gXFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbi1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gXFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbi1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXFxuIFxcdFxcdFxcdFxcdCAgICAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xcbkBAIC01NzcsNyArNTc3LDcgQEAgaW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gXFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiBcXG4tXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7XFxuK1xcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjEyLjMxOTcwNzQxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzMzOTY3NTk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0MDZiNzlkYzJlYzhmYmRlYjZjN2FhYzRkNmJlNDE2ODhiMzY0NzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI2OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuaW5kZXggMmYzMTJkMWY2N2Q2OS4uM2Q2YWVjMjAzYzNmNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4rXHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICs2MDcsMTEgQEAgZW51bSBza2JfZHJvcF9yZWFzb24ge1xuIFx0U0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQsXG4gXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cbiBcdFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQsXG4rXHQvKipcbitcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBcdTAwM2M9IDFcbitcdCAqIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXG4rXHQgKi9cbitcdFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQsXG4gXHQvKipcbiBcdCAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2hcbiBcdCAqIHNob3VsZG4ndCBiZSB1c2VkIGFzIGEgcmVhbCAncmVhc29uJyAtIG9ubHkgZm9yIHRyYWNpbmcgY29kZSBnZW5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbmluZGV4IDhiNjVmMTI1ODNlYjYuLmIyNDI1NjFkMzdlNzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcbisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4tXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xuK1x0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuIFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggMDlhNDU1MmY3ZjA4YS4uNTUzOTFlMmU1NjEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC02MjMsNyArNjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxuIFx0XHRcdFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcbiBcdFx0XHRcdCAgICAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA5NmVlM2RlNTVmOTMwLi5kZGFiYTBhZWJjYjExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC01NzcsNyArNTc3LDcgQEAgaW50IGlwNl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiBcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFxuLVx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjEyLjMxOTcwOTEwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjM1MzUzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhpbmVzcyBvZiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB3ZSB0cmFjayBwYWNrZXQgZHJvcHMgZHVlIHRvIFRUTCBleHBpcmF0aW9uLiBJdCdzIGFkZGluZyBhIG5ldyBlbnVtIHZhbHVlLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAgYW5kIHRoZW4gcHJvcGFnYXRpbmcgdGhpcyByZWFzb24gdGhyb3VnaCBjYWxscyB0byBga2ZyZWVfc2tiX3JlYXNvbmAgaW4gYGlwX2ZvcndhcmQuY2AsIGBleHRoZHJzLmNgLCBhbmQgYGlwNl9vdXRwdXQuY2AuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgY29yZSB0cmlhZ2UgY3JpdGVyaWEgYW5kIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuRmlyc3QsIGlzIHRoaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgY29yZT8gQWJzb2x1dGVseS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCwgYGlwX2ZvcndhcmRgLCBgaXB2Nl9zcmhfcmN2YCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgYGlwNl9mb3J3YXJkYCwgYXJlIGFsbCBkZWVwIGluc2lkZSB0aGUgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgcGF0aHdheXMuIFRoaXMgaGl0cyB0aGUgXCJDb3JlIFN1YnN5c3RlbXNcIiBjcml0ZXJpYSwgbm8gcXVlc3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGNvZGUuXG5cbk5vdywgbXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBzYXkgdGhhdCBiZWNhdXNlIGl0J3MgKmp1c3QqIGFkZGluZyBhIGRyb3AgcmVhc29uLCBhbmQgbm90IGFsdGVyaW5nICpjb250cm9sIGZsb3cqIG9yIHRoZSAqbG9naWMqIG9mIHRoZSBjb2RlLCB0aGlzIG1pZ2h0IG5vdCBiZSAqd29ydGhmdXp6aW5nKi4gSXQncyBhbG1vc3QuLi5kZWNvcmF0aXZlIGxvZ2dpbmcuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhpcy4gVGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB0aGF0IHdlIHNob3VsZCBOT1QgYmxpbmRseSB0cnVzdCB0aGF0LlxuXG5Mb29raW5nIGF0IFNlY3Rpb24gMiwgdGhlIGNyaXRlcmlhIGFyZSBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoaXMgKmp1c3QqIGxvZ2dpbmc/IE5vLCBiZWNhdXNlIGl0J3MgbW9yZSB0aGFuIHRoYXQ7IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGRyb3AgcmVhc29uIGJlaW5nIHBhc3NlZCBpbnRvIGBrZnJlZV9za2JfcmVhc29uYC4gKlRoYXQqIGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZS4gU28sIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93PyBOby4gRG9lcyBpdCBhbHRlciBkYXRhIHN0cnVjdHVyZXM/IEl0IGFkZHMgYW4gZW51bSBjb25zdGFudC4gRG9lcyB0aGlzIGNoYW5nZSB0aGUgZHJvcCByZWFzb24/IFllcywgdGhpcyBjaGFuZ2UgdGhlIGBrZnJlZV9za2JfcmVhc29uYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gU2VjdGlvbiAzIGVtcGhhc2l6ZXMgdGhhdCBgUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZy4uLkNvcmUgU3Vic3lzdGVtczogLi4uY29yZSBuZXR3b3JraW5nYC4gV2VsbCwgdGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBmYWxsIHNxdWFyZWx5IGludG8gXCJjb3JlIG5ldHdvcmtpbmcuXCIgVGhpcyBjaGFuZ2UgcGFzc2VzIHRoZSByZWFzb24gdG8gYGtmcmVlX3NrYl9yZWFzb25gLCB3aGljaCAqaXMqIHRoZW4gdXNlZCBieSB0cmFjZXBvaW50cyBhbmQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgaGF2ZSB0byB2ZXJpZnkgd2hlcmUgdGhlc2UgYXJlIHVzZWQuIERyb3AgcmVhc29ucyBhcmUgKm5vdCoganVzdCBpbmZvcm1hdGlvbmFsLiBTbywgY2hhbmdpbmcgdGhlIGRyb3AgcmVhc29uIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBpbiBhIGNvcmUgc3Vic3lzdGVtLCBtb2RpZmllcyBhbiBlbnVtLCBhbmQgaGFzIHJlYWNoYWJsZSBjb2RlLiBJJ20gZ29pbmcgdG8gY29uc2lkZXIgdGhpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MTguMjgzMjQ1OTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ5NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxubmV0L2lwdjYvZXh0aGRycy5jOjY4NDpcXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY4NS1cXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxOC4zMzA0OTg2OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDM2ODUxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGZpbGUsIHBhcnRpY3VsYXJseSBsaW5lcyA3ODAgdG8gODIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBwcm9jZXNzaW5nIGxvZ2ljIGZvciB0aGVzZSBoZWFkZXJzIHJlc2lkZXMsIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGlzc2VjdHMsIHZhbGlkYXRlcywgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVzIHRoZXNlIGhlYWRlcnMgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4gSSdsbCBsaWtlbHkgbmVlZCB0byBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleHRlbnNpb24gaGVhZGVyIHR5cGVzLCBlc3BlY2lhbGx5IHRoZSBsZXNzIGNvbW1vbiBvbmVzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGlzc3VlcyBsaWtlIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIChsaWtlIHRoZSBBSCBhbmQgRVNQIGhlYWRlcnMpLCBhbmQgbWFsZm9ybWVkIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgcG9zc2libGUuIEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbXBvbmVudHMsIHN1Y2ggYXMgdGhlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIxLjc2NzM1MTc0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQ2OTpcXHRcXHRcXHR9XFxuIDQ3MDpcXHRcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcXG4gNDczOlxcdFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRyZXR1cm4gLTE7XFxuIDQ3OTpcXHR9XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbiA0ODI6XFx0e1xcbiA0ODM6XFx0XFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XFxuIDQ4NDpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNDg2OlxcdFxcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XFxuIDQ4NzpcXHRcXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XFxuIDQ4ODpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuIDQ4OTpcXHRcXHRpbnQgYWNjZXB0X3JwbF9zZWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIxLjc2NzQ1MjQyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODcwNzgzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBkZWVwZXIgaW50byBJUHY2LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHRoZSB1c3VhbCBzdXNwZWN0cywgYnV0IG5vdyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZS4gSXQncyBub3QgZW5vdWdoIHRvIGp1c3QgbG9vayBhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgdGhvcm91Z2hseSBjb3ZlcmluZyBhbGwgdGhlIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyByZWxhdGVkIHRvIHJvdXRpbmcgaGVhZGVycy4gSSdtIGdvaW5nIHRvIGFkZCBgaXB2Nl9ydGhkcl9yY3ZgIHRvIHRoZSBsaXN0IOKAkyB0aGF0IGNvdmVycyB0aGUgZ2VuZXJhbCByb3V0aW5nIGhlYWRlciBwcm9jZXNzaW5nIOKAkyBidXQgSSBhbHNvIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBgaXB2Nl9ycGxfc3JoX3JjdmAuIFdpdGggUlBMIGFuZCBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgcG90ZW50aWFsbHkgYmVpbmcgZGVwbG95ZWQgbW9yZSB3aWRlbHksIEkgY2FuJ3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueSBpbnRlcmFjdGlvbiBwb2ludHMgb3IgZWRnZSBjYXNlcyB0aGVyZS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0J3MgbWFrZSBzdXJlIGJvdGggb2YgdGhlc2UgYXJlIGFpcnRpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoyMy42NTQ1MzI3NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxNTpcXHRcXG4gNjE2OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDYxNzpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNjE4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjE5OlxcdFxcdH1cXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0aWYgKHNrYl9kc3RfZGV2KHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuIDYyMjpcXHRcXHRcXHRpZiAoaXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNjIzOlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNjI0OlxcdFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxcbiA2MjU6XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbiA2MjY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA2Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2Mjg6XFx0XFx0XFx0fVxcbiA2Mjk6XFx0XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDYzMjpcXHRcXHRcXHRnb3RvIGxvb3BlZF9iYWNrO1xcbiA2MzM6XFx0XFx0fVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0cmV0dXJuIC0xO1xcbiA2Mzg6XFx0fVxcbiA2Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjIzLjY1NDY0MTk2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDczOTc3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGBpcHY2X3J0aGRyX3JjdmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyByZWNlaXZpbmcgSVB2NiBwYWNrZXRzIHdpdGggcm91dGluZyBoZWFkZXJzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBpdCBjYXJlZnVsbHkuIEknbGwgaGF2ZSB0byBzZWUgaG93IGl0IHZlcmlmaWVzIHRoZSBoZWFkZXIncyBpbnRlZ3JpdHksIGNoZWNrcyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGRldGVybWluZXMgdGhlIG5leHQgZGVzdGluYXRpb24gYmFzZWQgb24gdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHdoZXRoZXIgdGhlIGNvZGUgYWRoZXJlcyB0byBSRkMgc3BlY2lmaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBob3AtYnktaG9wIG9wdGlvbnMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcm91dGluZyBoZWFkZXIgcHJvY2Vzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MjUuNzYyMDQyOTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODA1OlxcdFxcbiA4MDY6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDgwNzpcXHRcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbiA4MDg6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MDk6XFx0XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDgxMTpcXHRcXHR9XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA4MTQ6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDgxNTpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDgxNjpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcXG4gODE3OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gODE4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gODE5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gODIwOlxcdFxcdFxcdH1cXG4gODIxOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA4MjI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MjY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgyNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgyODpcXHRcXG4gODI5OlxcdHVua25vd25fcmg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjI1Ljc2MjE3ODE2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA2ODY5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBJUHY2IG91dHB1dCBwYXRoLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IGZpbGUgbmFtZSBtYWtlcyBwZXJmZWN0IHNlbnNlLCBsb2dpY2FsbHkuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY2Fub25pY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYWN0dWFsbHkgc2VuZGluZyBhbiBJUHY2IHBhY2tldC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoaW5ncyBsaWtlIHBhY2tldCBoZWFkZXIgY3JlYXRpb24sIGFkZHJlc3MgcmVzb2x1dGlvbiwgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyAoaWYgbmVjZXNzYXJ5KSwgYW5kIHRoZSB1bHRpbWF0ZSB0cmFuc21pc3Npb24gY2FsbCBkb3duIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBsYXllci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoyOC4wNjkwNTAwOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0XFx0ICpcXHRjYW5ub3QgYmUgZnJhZ21lbnRlZCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXJyYW50eVxcbiA1NjY6XFx0XFx0ICpcXHR0aGF0IGRpZmZlcmVudCBmcmFnbWVudHMgd2lsbCBnbyBhbG9uZyBvbmUgcGF0aC4gLS1BTktcXG4gNTY3OlxcdFxcdCAqL1xcbiA1Njg6XFx0XFx0aWYgKHVubGlrZWx5KG9wdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfUk9VVEVSQUxFUlQpKSB7XFxuIDU2OTpcXHRcXHRcXHRpZiAoaXA2X2NhbGxfcmFfY2hhaW4oc2tiLCBudG9ocyhvcHQtXFx1MDAzZXJhKSkpXFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcxOlxcdFxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0LypcXG4gNTc0OlxcdFxcdCAqXFx0Y2hlY2sgYW5kIGRlY3JlbWVudCB0dGxcXG4gNTc1OlxcdFxcdCAqL1xcbiA1NzY6XFx0XFx0aWYgKGhkci1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNTc3OlxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNTc4OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIDU4MjpcXHRcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdC8qIFhYWDogaWRldi1cXHUwMDNlY25mLnByb3h5X25kcD8gKi9cXG4gNTg1OlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2Vwcm94eV9uZHApIFxcdTAwMjZcXHUwMDI2XFxuIDU4NjpcXHRcXHQgICAgcG5laWdoX2xvb2t1cChuZF90YWJsZShuZXQpLCBcXHUwMDI2aGRyLVxcdTAwM2VkYWRkciwgc2tiLVxcdTAwM2VkZXYpKSB7XFxuIDU4NzpcXHRcXHRcXHRpbnQgcHJveGllZCA9IGlwNl9mb3J3YXJkX3Byb3h5X2NoZWNrKHNrYik7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdFxcdGhkciA9IGlwdjZfaGRyKHNrYik7XFxuIDU5MDpcXHRcXHRcXHRpZiAocHJveGllZCBcXHUwMDNlIDApIHtcXG4gNTkxOlxcdFxcdFxcdFxcdC8qIEl0J3MgdGVtcHRpbmcgdG8gZGVjcmVhc2UgdGhlIGhvcCBsaW1pdFxcbiA1OTI6XFx0XFx0XFx0XFx0ICogaGVyZSBieSAxLCBhcyB3ZSBkbyBhdCB0aGUgZW5kIG9mIHRoZVxcbiA1OTM6XFx0XFx0XFx0XFx0ICogZnVuY3Rpb24gdG9vLlxcbiA1OTQ6XFx0XFx0XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MjguMDY5MTc2ODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjUxMDc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBJUCBGb3J3YXJkaW5nIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBMaW51eCBrZXJuZWwgaGFuZGxlcyBJUCBmb3J3YXJkaW5nLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIGdvdCB0byBiZSBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggSVB2NC4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgZGVzY3JpcHRpb24sIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGNvZGUgaW4gYGlwX2ZvcndhcmQuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgY29yZSBmb3J3YXJkaW5nIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjMwLjI5NDI4Njk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2ZvcndhcmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IHJ0X3RvczJwcmlvcml0eShpcGgtXFx1MDAzZXRvcyk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHJldHVybiBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9GT1JXQVJELFxcbiAxNjM6XFx0XFx0XFx0ICAgICAgIG5ldCwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgcnQtXFx1MDAzZWRzdC5kZXYsXFxuIDE2NDpcXHRcXHRcXHQgICAgICAgaXBfZm9yd2FyZF9maW5pc2gpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRzcl9mYWlsZWQ6XFxuIDE2NzpcXHRcXHQvKlxcbiAxNjg6XFx0XFx0ICpcXHRTdHJpY3Qgcm91dGluZyBwZXJtaXRzIG5vIGdhdGV3YXlpbmdcXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0IGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1NSX0ZBSUxFRCwgMCk7XFxuIDE3MTpcXHRcXHQgZ290byBkcm9wO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHR0b29fbWFueV9ob3BzOlxcbiAxNzQ6XFx0XFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xcbiAxNzU6XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDE3NjpcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XFxuIDE3NzpcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcXG4gMTc4OlxcdGRyb3A6XFxuIDE3OTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gMTgwOlxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4gMTgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MzAuMjk0MzUyNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MjMwMjkyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUcmlhZ2U6IFNLQiBEcm9wIFJlYXNvbiBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTS0IgZHJvcCByZWFzb24sIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIChgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBldGMuKSB0byB1c2UgdGhpcyBuZXcgcmVhc29uIGluc3RlYWQgb2YgZXhpc3Rpbmcgb25lcy4gTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbnRleHQsIHNvIHJlYWNoYWJpbGl0eSBpc24ndCBhbiBpc3N1ZS5cblxuTm93LCB0aGUgdHJpYWdlIGd1aWRlbGluZXMgYXJlIGtleSBoZXJlLiBJIG5lZWQgdG8gbWFrZSBhIGNhcmVmdWwgYXNzZXNzbWVudC4gVGhlIGNvcmUgcGhpbG9zb3BoeSBjZW50ZXJzIG9uIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGFuZCBsYXRlbnQgYnVncyBpbiAqcmVhY2hhYmxlKiBjb2RlLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSDigJMgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUsIHVzaW5nIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIG5vdCBnb2luZyB0byBibGluZGx5IHRydXN0IGFueSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zIGVpdGhlciwgc28gbGV0J3MgZGlnIGRlZXBlci5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhpcyBhIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLm9yIHRyYWNlcG9pbnQgdGhhdCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzXCI/IFRoZSBkcm9wIHJlYXNvbiBpdHNlbGYgaXMgcGFzc2VkIHRvIGBrZnJlZV9za2JfcmVhc29uYCwgd2hpY2ggdHJhY2VzIHRoZSBkcm9wLiBIb3dldmVyLCB0aGUgdHJpYWdlIGd1aWRlbGluZXMgYXJlIHZlcnkgc3BlY2lmaWMuXG5cbiogICBBZGRpbmcgYSBuZXcgZW51bSBhbmQgY2hhbmdpbmcgdGhlIHZhbHVlcyBwYXNzZWQgdG8gYGtmcmVlX3NrYl9yZWFzb25gICptb2RpZmllcyogd2hhdCBpcyBwYXNzZWQgdG8gdGhlIHRyYWNlcG9pbnQuIFNvIHRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBtb2RpZmljYXRpb24gb2YgYSBkYXRhIHN0cnVjdHVyZSAodGhlIGVudW0gaXRzZWxmKSBhbmQgYW4gYWx0ZXJhdGlvbiBvZiBhIGNhbGwgZnVuY3Rpb24sIGFuZCBhcyBhIHJlc3VsdCwgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFjaW5nLCBldmVuIGlmIHRoZSBtYWluIGNvbnRyb2wgZmxvdyAqc2VlbXMqIHVuY2hhbmdlZC5cbiogICBUaGlzIGlzIG5vdCBhIHB1cmUgXCJtZXNzYWdlIHN0cmluZ1wiIGNoYW5nZSwgaXQgaXMgYSBjaGFuZ2Ugb2YgYSAqcGFyYW1ldGVyKi4gSW4gZmFjdCwgdGhlIGVudW0gaXMgcGFzc2VkIHRvIGFuIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24uXG5cblNvLCBhbSBJIHJpZ2h0IGluIHRoaW5raW5nIHRoZSBwYXRjaCBtb2RpZmllcyBhIFwicmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlXCIsIGEgXCJoZWxwZXIgYWJzdHJhY3Rpb25cIiBvciBcImFsZ29yaXRobSBmbG93c1wiLiBUaGUgY29kZSBjbGVhcmx5IG1vZGlmaWVzIGEgZHJvcCByZWFzb24gZW51bSB2YWx1ZSBwYXNzZWQgdG8gYSB0cmFjZXBvaW50IGZ1bmN0aW9uLlxuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJdCBpcyAqTk9UKiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhlIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLlwiIGNsYXVzZSBpcyBtZWFudCB0byBwcmV2ZW50IHVzIGZyb20gZnV6emluZyBzaW1wbGUgcHJpbnRpbmcgc3RhdGVtZW50IG1vZGlmaWNhdGlvbnMsIG5vdCBmcm9tICptb2RpZnlpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy4qXG5cbkluIHRoZSBlbmQsIHNpbmNlIHRoZSBwYXRjaCAqbW9kaWZpZXMqIGRhdGEgdGhhdCBmZWVkcyBpbnRvIHJlYWNoYWJsZSBjb2RlICh0aGUga2VybmVsIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbiksIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgZnV6emluZyB0aGlzIHRvIHNlZSBpZiBhbnkgbGF0ZW50IGJ1Z3MgYXBwZWFyLCBvciByZWdyZXNzaW9ucy4gSSBuZWVkIHRvIGNoZWNrIGhvdyBleGFjdGx5IGBrZnJlZV9za2JfcmVhc29uYCBhbmQgYHNrYl9kcm9wX3JlYXNvbmAgd29yayBpbiB0aGUga2VybmVsIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjo0OC43MTczODUxNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0OTY0NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjQ4LjgwMjM1ODEzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU5Mzk5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbiBga2ZyZWVfc2tiX3JlYXNvbmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgZXhhY3QgZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGZyZWVpbmcgb2YgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyB3aXRoaW4g4oCTIGJhc2ljYWxseSwgZXZlcnl0aGluZyB0aGF0IGlsbHVtaW5hdGVzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBkZWVwZXIgZGl2ZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6NTEuMDYxNzYxMjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE4MzY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZnJlZV9za2JfcmVhc29uXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MzUxMT12b2lkIGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNTE1LVxcdGVsc2VcXG5uZXQvY29yZS9kZXYuYzozNTE2OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTM1MTctfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDIzMz1zdGF0aWMgaW5saW5lIGludCBfX2Rldl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00Mjg2LVxcdFxcdFxcdGlmICh1bmxpa2VseShkZWZlcl9jb3VudCBcXHUwMDNlIFJFQURfT05DRShuZXRfaG90ZGF0YS5xZGlzY19tYXhfYnVyc3QpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjQyODc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9RRElTQ19CVVJTVF9EUk9QKTtcXG5uZXQvY29yZS9kZXYuYy00Mjg4LVxcdFxcdFxcdFxcdHJldHVybiBORVRfWE1JVF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDUxMz1zY2hfaGFuZGxlX2luZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhY2tldF90eXBlICoqcHRfcHJldiwgaW50ICpyZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NTU1LVxcdGNhc2UgVENfQUNUX1NIT1Q6XFxubmV0L2NvcmUvZGV2LmM6NDU1NjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ1NTctXFx0XFx0KnJldCA9IE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ2MDYtXFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG5uZXQvY29yZS9kZXYuYzo0NjA3OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2NvcmUvZGV2LmMtNDYwOC1cXHRcXHQqcmV0ID0gTkVUX1hNSVRfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ4MTk9aW50IF9fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ4MzctXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYzo0ODM4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ4MzktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDI5PXN0YXRpYyBpbnQgZW5xdWV1ZV90b19iYWNrbG9nKHN0cnVjdCBza19idWZmICpza2IsIGludCBjcHUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDc4LVxcdGRldl9jb3JlX3N0YXRzX3J4X2Ryb3BwZWRfaW5jKHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvY29yZS9kZXYuYzo1NDc5OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTU0ODAtXFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTcxOD1pbnQgZG9feGRwX2dlbmVyaWMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTc0OC1cXHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XFxubmV0L2NvcmUvZGV2LmM6NTc0OTpcXHRrZnJlZV9za2JfcmVhc29uKCpwc2tiLCBTS0JfRFJPUF9SRUFTT05fWERQKTtcXG5uZXQvY29yZS9kZXYuYy01NzUwLVxcdHJldHVybiBYRFBfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYwMzQ9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBib29sIHBmbWVtYWxsb2MsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02MjM3LVxcbm5ldC9jb3JlL2Rldi5jOjYyMzg6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy02MjM5LVxcdFxcdC8qIEphbWFsLCBub3cgeW91IHdpbGwgbm90IGFibGUgdG8gZXNjYXBlIGV4cGxhaW5pbmdcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTExOTY9aW50IF9fbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzMtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTIzNDpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTIzNS1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTUtXFx0XFx0XFx0XFx0bmVpZ2gtXFx1MDAzZWFycF9xdWV1ZV9sZW5fYnl0ZXMgLT0gYnVmZi1cXHUwMDNldHJ1ZXNpemU7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI1NjpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9RVUVVRUZVTEwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNTctXFx0XFx0XFx0XFx0TkVJR0hfQ0FDSEVfU1RBVF9JTkMobmVpZ2gtXFx1MDAzZXRibCwgdW5yZXNfZGlzY2FyZHMpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI3Ny1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm5laWdoLVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjc4OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfREVBRCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI3OS1cXHR0cmFjZV9uZWlnaF9ldmVudF9zZW5kX2RlYWQobmVpZ2gsIDEpO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYwMD1pbnQgbmVpZ2hfcmVzb2x2ZV9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI3LVxcdHJjID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjI4OlxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2MjktXFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xNjM0PWludCBuZWlnaF9jb25uZWN0ZWRfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1MC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjE2NTE6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTY1Mi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjUxLjEzMjk1Njk3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0Njg3MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBrZnJlZV9za2JfcmVhc29uYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29kZSwgaXMgdG8gZmluZCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLiBJJ20gcHJldHR5IHN1cmUgaXQncyBidXJpZWQgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBgbmV0L2NvcmUvc2tidWZmLmNgIGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdC4gSXQncyB0aGUgY2VudHJhbCBmaWxlIGZvciBTS0JzLCBzbyBpdCBtYWtlcyBzZW5zZSBpdCBtaWdodCBiZSBkZWZpbmVkIHRoZXJlLCBvciBhdCBsZWFzdCBoYXZlIGEgaGVhZGVyIGZpbGUgd2hlcmUgaXQgaXMuIElmIGl0J3Mgbm90IGRpcmVjdGx5IGluIGBza2J1ZmYuY2AsIHRoZW4gSSdsbCBzdGFydCBjaGVja2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpdCB1c2VzLiBHb3R0YSBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgYGtmcmVlX3NrYl9yZWFzb25gIGlzLCBob3cgaXQncyB1c2VkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2h5IHNvbWVvbmUgaXMgY3VyaW91cyBhYm91dCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjo1My4wMzc2NDg5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Mjk4MDQ0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX2tmcmVlX3NrYl9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjU1LjcwMDYzODUwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4MjcwMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24ncyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyByb2xlIGluIFNLQiBtYW5hZ2VtZW50LiBUaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMsIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UsIHBhcnRpY3VsYXJseSBpbiB0aGUgbW9yZSBjb21wbGV4IGFzcGVjdHMgb2YgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJ20gaG9waW5nIHRoZXJlJ3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6NTguMTA4OTExMDY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4OTI4ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjU4LjIxMzgxMTk2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc2NjM1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRmluZGluZyBga2ZyZWVfc2tiX3JlYXNvbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBga2ZyZWVfc2tiX3JlYXNvbmAgaXMgdXNlZC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBjb3VsZCBnbyBhYm91dCB0aGlzIGluIGEgZmV3IHdheXMsIGRlcGVuZGluZyBvbiB3aGF0IEknbSBsb29raW5nIGZvci4gSSBjb3VsZCBzdGFydCB3aXRoIGEgc2ltcGxlIGdyZXAsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gcHJvZHVjZSBhIG5vaXN5IG91dHB1dC4gSSBjb3VsZCBsZXZlcmFnZSBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIHNlYXJjaCB0b29sIGlmIGl0J3MgYXZhaWxhYmxlLiBJZiBpdCdzIGEga2VybmVsIHN5bWJvbCwgSSdkIHByb2JhYmx5IHN0YXJ0IHdpdGggYG5tYCB0byBtYWtlIHN1cmUgaXQncyBleHBvcnRlZCBhbmQgdGhlbiBtb3ZlIG9udG8gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgc3ltYm9sIHRhYmxlcy4gSWYgSSBzdXNwZWN0IGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudCBhcyB3ZWxsLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8sIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBjcmVhdGUgdGhlIGJlc3Qgc2VhcmNoIHN0cmF0ZWd5LiBMZXQncyBzdGFydCBieSB0cnlpbmcgYSBiYXNpYyBzZWFyY2ggdG8gZmluZCB0aGUgb2NjdXJyZW5jZXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjAwLjI5MDQ1MTM3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MzgwODk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGtmcmVlX3NrYl9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjAyLjQzNDI3MDgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg3MzA3MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBrZnJlZV9za2JfcmVhc29uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgYHNrYmAgZGVhbGxvY2F0aW9uIGlzIGRvbmUsIGFuZCwgSSdtIHNwZWNpZmljYWxseSBjdXJpb3VzIGFib3V0IHRoZSAqd2h5KiBiZWhpbmQgdGhvc2UgZGVhbGxvY2F0aW9ucy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtmcmVlX3NrYl9yZWFzb25gIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gcHJvdmlkZSBjb250ZXh0IGZvciBkZWJ1Z2dpbmcgb3IgYXVkaXRpbmcgcHVycG9zZXMuIFRoZSBpbmNsdWRlIGRpcmVjdG9yeSBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGlzIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgYHNrYmAgc3RydWN0dXJlIGxpdmUsIGFuZCBpZiB0aGVyZSdzIGFueSBpbmRpY2F0aW9uIG9uIHRoZSAqcmVhc29uKiBmb3IgZnJlZWluZywgdGhhdCdzIGxpa2VseSB0aGUgcGxhY2UgdG8gZmluZCBpdC4gSSdsbCBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA0LjQyMTU4MDYyOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NzcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfc2tiX3JlYXNvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMjE6a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzMD1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2OS1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDcwOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ3MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA0LjUxMjI2MzY2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY3OTc4OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDEzMTUtMTM0MCBvZiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSByZWFsbHkgbG9va2luZyBhdCBoZXJlPyBHaXZlbiB0aGUgZmlsZSwgaXQncyBsaWtlbHkgc29tZXRoaW5nIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgbmV0d29yayBwYWNrZXRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGF0IG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBjb3JlIHBhY2tldCBidWZmZXIgbWFuYWdlbWVudC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG1lY2hhbmlzbXMsIGRhdGEgYWNjZXNzIG1ldGhvZHMsIG9yIGV2ZW4gc29tZSBmb3JtIG9mIG1ldGFkYXRhIGhhbmRsaW5nLlxuXG5Lbm93aW5nIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGVzZSBoZWFkZXIgZmlsZXMsIEknZCBleHBlY3QgdG8gZmluZCBlaXRoZXIgbWFjcm8gZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG9yIGlubGluZSBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBkaXJlY3RseSByZWxhdGUgdG8gYHNrX2J1ZmZgLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQgaXMgdmVyeSBsaWtlbHkgYSBzdWJzZWN0aW9uIG9mIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIFxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IG9mIGFueSByZWxldmFudCBtYWNyb3Mgb3IgZnVuY3Rpb25zIGRlZmluZWQgbmVhcmJ5LCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoaXMgc2VnbWVudC4gTXkgcHJpb3JpdHkgd2lsbCBiZSB0byBncmFzcCAqaG93KiBpdCBmdW5jdGlvbnMgYW5kICp3aHkqIHRoZSBkZXNpZ24gY2hvaWNlcyB3ZXJlIG1hZGUsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgbm9uLW9idmlvdXMuIEkgd2FudCB0byByZWxhdGUgaXQgdG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLCBzbyBJIGNhbiBmaXQgaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHN1YnN5c3RlbSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA2Ljg4MDI0NjIxMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzE1OlxcdFxcbjEzMTY6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTMxNzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzE5OlxcdFxcbjEzMjA6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuMTMyMTpcXHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMzIyOlxcdHtcXG4xMzIzOlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChOVUxMLCBza2IsIHJlYXNvbik7XFxuMTMyNDpcXHR9XFxuMTMyNTpcXHRcXG4xMzI2OlxcdC8qKlxcbjEzMjc6XFx0ICpcXHRrZnJlZV9za2IgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCAnTk9UX1NQRUNJRklFRCcgcmVhc29uXFxuMTMyODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBmcmVlXFxuMTMyOTpcXHQgKi9cXG4xMzMwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzMxOlxcdHtcXG4xMzMyOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTMzMzpcXHR9XFxuMTMzNDpcXHRcXG4xMzM1OlxcdHZvaWQgc2tiX3JlbGVhc2VfaGVhZF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4xMzM2OlxcdHZvaWQga2ZyZWVfc2tiX2xpc3RfcmVhc29uKHN0cnVjdCBza19idWZmICpzZWdzLFxcbjEzMzc6XFx0XFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzM4OlxcdHZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xcbjEzMzk6XFx0dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuMTM0MDpcXHRcXG4xMzQxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2VncylcXG4xMzQyOlxcdHtcXG4xMzQzOlxcdFxcdGtmcmVlX3NrYl9saXN0X3JlYXNvbihzZWdzLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTM0NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA2Ljg4MDYxMzc5MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgzMzU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBza19za2JfcmVhc29uX2Ryb3BgKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHNrX3NrYl9yZWFzb25fZHJvcGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFja2V0IGRyb3BzIGF0IHRoaXMgbGV2ZWwuIEkgd2FudCB0byBrbm93IHRoZSBwb3RlbnRpYWwgZmFjdG9ycyB0aGF0IGFyZSBjYXVzaW5nIHRoZXNlIGRyb3BzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgLSBrbm93aW5nIHRoZSBleGFjdCByZWFzb24gZm9yIHRoZSBkcm9wIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6Mjc6MDguNzYzOTc2MjI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ1MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19za2JfcmVhc29uX2Ryb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTIxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubmV0L2NvcmUvc2tidWZmLmM6MTIxNzpib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjE4LVxcdFxcdFxcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTIzNS0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjM2OiAqXFx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM3LSAqXFx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTI0NT12b2lkIF9fZml4X2FkZHJlc3NcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ2OnNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTI0Ny1cXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxubmV0L2NvcmUvc2tidWZmLmMtMTI0OC17XFxubmV0L2NvcmUvc2tidWZmLmM6MTI0OTpcXHRpZiAoX19za19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUwLVxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTI1MS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTI1MjpFWFBPUlRfU1lNQk9MKHNrX3NrYl9yZWFzb25fZHJvcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTI1My1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEyODI9a2ZyZWVfc2tiX2xpc3RfcmVhc29uKHN0cnVjdCBza19idWZmICpzZWdzLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyOTE6XFx0XFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNlZ3MsIHJlYXNvbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkyLVxcdFxcdFxcdHNrYl9wb2lzb25fbGlzdChzZWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTU5MC1kaXNjYXJkX2FuZF9yZWxzZTpcXG5uZXQvY29yZS9zb2NrLmM6NTkxOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9jb3JlL3NvY2suYy01OTItXFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjA4LjgzNDQzNTQ1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4NzY3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19za19za2JfcmVhc29uX2Ryb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSdtIHRoaW5raW5nIGFib3V0IGBfX3NrX3NrYl9yZWFzb25fZHJvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyByZWFzb25zIHBhY2tldHMgYXJlIGJlaW5nIGRyb3BwZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBwYWNrZXRzIGFyZSBoaXR0aW5nIHRoZSBmbG9vciBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4ganVzdCBnZW5lcmFsIG5ldHdvcmsgaGVhbHRoLiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBpc3N1ZT8gQSBmaXJld2FsbCBydWxlIGdvbmUgd3Jvbmc/IE1heWJlIGEgbWVtb3J5IGNvbnN0cmFpbnQgc29tZXdoZXJlPyBLbm93aW5nIHdoZXJlIGFuZCB3aHkgdGhlc2UgZHJvcHMgb2NjdXIgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGZpeGluZyB0aGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyBjYWxsZXJzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBkcm9wLCBhbmQgdXNlIG15IGV4cGVyaWVuY2UgdG8gaHlwb3RoZXNpemUgcG9zc2libGUgcm9vdCBjYXVzZXMuIFRpbWUgdG8gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjEwLjk0MzIwNjc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMDpcXHR7XFxuMTIxMTpcXHRcXHRza2JfcmVsZWFzZV9hbGwoc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XFxuMTIxMjpcXHRcXHRrZnJlZV9za2JtZW0oc2tiKTtcXG4xMjEzOlxcdH1cXG4xMjE0OlxcdEVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpO1xcbjEyMTU6XFx0XFxuMTIxNjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFxuMTIxNzpcXHRib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMjE4OlxcdFxcdFxcdFxcdCAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEyMTk6XFx0e1xcbjEyMjA6XFx0XFx0aWYgKHVubGlrZWx5KCFza2JfdW5yZWYoc2tiKSkpXFxuMTIyMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTIyMjpcXHRcXG4xMjIzOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocmVhc29uID09IFNLQl9OT1RfRFJPUFBFRF9ZRVQgfHxcXG4xMjI0OlxcdFxcdFxcdFxcdCAgICAgICB1MzJfZ2V0X2JpdHMocmVhc29uLFxcbjEyMjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXFx1MDAzZT1cXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKTtcXG4xMjI3OlxcdFxcbjEyMjg6XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfQ09OU1VNRUQpXFxuMTIyOTpcXHRcXHRcXHR0cmFjZV9jb25zdW1lX3NrYihza2IsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuMTIzMDpcXHRcXHRlbHNlXFxuMTIzMTpcXHRcXHRcXHR0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO1xcbjEyMzI6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTIzMzpcXHR9XFxuMTIzNDpcXHRcXG4xMjM1OlxcdC8qKlxcbjEyMzY6XFx0ICpcXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxcbjEyMzc6XFx0ICpcXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXFxuMTIzODpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBmcmVlXFxuMTIzOTpcXHQgKlxcdEByZWFzb246IHJlYXNvbiB3aHkgdGhpcyBza2IgaXMgZHJvcHBlZFxcbjEyNDA6XFx0ICpcXG4xMjQxOlxcdCAqXFx0RHJvcCBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGFuZCBmcmVlIGl0IGlmIHRoZSB1c2FnZSBjb3VudCBoYXMgaGl0XFxuMTI0MjpcXHQgKlxcdHplcm8uIE1lYW53aGlsZSwgcGFzcyB0aGUgcmVjZWl2aW5nIHNvY2tldCBhbmQgZHJvcCByZWFzb24gdG9cXG4xMjQzOlxcdCAqXFx0J2tmcmVlX3NrYicgdHJhY2Vwb2ludC5cXG4xMjQ0OlxcdCAqL1xcbjEyNDU6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzXFxuMTI0NjpcXHRza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEyNDc6XFx0XFx0XFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEyNDg6XFx0e1xcbjEyNDk6XFx0XFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjEwLjk0Mzc5MTQyOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE3NjU5OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19za19za2JfcmVhc29uX2Ryb3BgIGZvciBQb3RlbnRpYWwgQmFja3BvcnRpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIGByZWFzb25gIHBhcmFtZXRlciBpbiBgX19za19za2JfcmVhc29uX2Ryb3BgIHdhcyBzb21ldGhpbmcgdGhhdCBhZmZlY3RlZCBhbnl0aGluZyBzdWJzdGFudGlhbC4gSXQgbG9va2VkIGxpa2UgaXQganVzdCB3ZW50IHN0cmFpZ2h0IHRvIGB0cmFjZV9rZnJlZV9za2JgLiBObyBjaGFuZ2VzIHRvIGNvbnRyb2wgZmxvdywgYWxsb2NhdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLlxuXG5CdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gQmFja3BvcnRpbmcgaGFzIHRvIGJlIHByZWNpc2UuIFRpbWUgdG8gcmUtcmVhZCBTZWN0aW9uIDIuIEFoLCB0aGVyZSBpdCBpczogXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgVGhhdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGluZGljYXRvciB0aGlzIGlzIG9rLCBidXQgc3RpbGwsIEkgY2FuJ3QgYXNzdW1lLlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgZW51bSBza2JfZHJvcF9yZWFzb25gIGFjdHVhbGx5IGRvZXMuIEFoLCBpdCdzICpvbmx5KiB1c2VkIGZvciB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludCEgSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBmdW5jdGlvbnMgYGtmcmVlX3NrYihza2IpYCB0aGF0IHBhc3NlcyBgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRURgLCBidXQgYGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pYCBwYXNzZXMgdGhlIHNwZWNpZmljIGBTS0JfRFJPUF9SRUFTT05fLi4uYCBlbnVtIHRvIGB0cmFjZV9rZnJlZV9za2JgLiBTbyB0aGUgYHJlYXNvbmAgdmFsdWVzIGFyZSBnZXR0aW5nIHNldCB3aGVuIHBhY2tldHMgYXJlIGRyb3BwZWQuIEkgc2VlIHNvbWUgZXhhbXBsZXMgd2hlcmUgdGhlIHJlYXNvbiBpcyBiZWluZyBjaGFuZ2VkIHdoZW4gcGFja2V0cyBhcmUgZHJvcHBlZCwgc3VjaCBhcyBpbiBgaXBfZm9yd2FyZC5jYCwgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gXG5cbk9rYXksIGJ1dCBhcmUgdGhlc2UgYHJlYXNvbmAgY29kZXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgZm9yIGNvbnRyb2wgZmxvdz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIHRvIGNoZWNrIGlmIGBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEYCBvciBhbnkgb3RoZXIgZHJvcCByZWFzb25zIGFyZSB1c2VkIGVsc2V3aGVyZS4gVGhpcyB3aWxsIGNvbmZpcm0gaWYgdGhpcyBjaGFuZ2UgaXMgdHJ1bHkgXCJwdXJlbHkgZGVjb3JhdGl2ZVwiLiBMZXQncyBkbyB0aGF0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoxNC45NjE0NTY2MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjU0ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTS0JfRFJPUF9SRUFTT05fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQyIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yMDE9dm9pZCBicl9mbG9vZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yMDQte1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjIwNTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fVFhfVEFSR0VUO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTIwNi1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2ID0gTlVMTDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI0Ni1cXHRcXHRpZiAoSVNfRVJSKHByZXYpKSB7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ3OlxcdFxcdFxcdHJlYXNvbiA9IFBUUl9FUlIocHJldikgPT0gLUVOT01FTSA/IFNLQl9EUk9QX1JFQVNPTl9OT01FTSA6XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MjQ4OlxcdFxcdFxcdFxcdCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNDktXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz0yOTk9dm9pZCBicl9tdWx0aWNhc3RfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzAzLXtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzozMDQ6XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1RYX1RBUkdFVDtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMDUtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcHJldiA9IE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zNDYtXFx0XFx0aWYgKElTX0VSUihwcmV2KSkge1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0NzpcXHRcXHRcXHRyZWFzb24gPSBQVFJfRVJSKHByZXYpID09IC1FTk9NRU0gPyBTS0JfRFJPUF9SRUFTT05fTk9NRU0gOlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjM0ODpcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzQ5LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjc4OlxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDAtXFx0XFx0aWYgKHAtXFx1MDAzZXN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVEKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjEwMTpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMDItXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE2MS1cXHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTYyOlxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE2My1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM5PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ5LVxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXFx1MDAzZWhfc291cmNlKSkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTA6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JTlZBTElEX1NPVVJDRTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzUxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zOTMtXFx0XFx0Y2FzZSAweDAxOlxcdC8qIElFRUUgTUFDIChQYXVzZSkgKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mzk0OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSUVFRV9NQUNfQ09OVFJPTDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk1LVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDMtXFx0ZGVmYXVsdDpcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDQ0OlxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9CUklER0VfSU5HUkVTU19TVFBfU1RBVEU7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ0NS1kcm9wOlxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTMtXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0OTQ6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEwsIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDk1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTctXFx0aWYgKHAgPT0gTlVMTClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5ODpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ5OS1cXHRiciA9IHAtXFx1MDAzZWJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDgtXFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJNb2R1bGUgaXB2NiBpcyBkaXNhYmxlZCwgc28gY2FsbF9pcDZ0YWJsZXMgaXMgbm90IHN1cHBvcnRlZC5cXFwiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwOTpcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVELCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUxMC1cXHRcXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyNS1cXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTI2OlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjctXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjgtXFx0aWYgKCFuZl9icmlkZ2VfYWxsb2Moc2tiKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyOTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0sIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTMwLVxcdGlmICghc2V0dXBfcHJlX3JvdXRpbmcoc2tiLCBzdGF0ZS1cXHUwMDNlbmV0KSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzMTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NjczPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODYtXFx0aWYgKCFuZl9icmlkZ2VfdW5zaGFyZShza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Njg3OlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02ODgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY5MC1cXHRpZiAoIW5mX2JyaWRnZSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjY5MTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0sIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjkyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02OTQtXFx0aWYgKCFwYXJlbnQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2OTU6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02OTYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNS1cXHRcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzA2OlxcdFxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmcmFnX21heF9zaXplID0gbmZfYnJpZGdlLVxcdTAwM2VmcmFnX21heF9zaXplO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MTAtXFx0XFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjYoc3RhdGUtXFx1MDAzZW5ldCwgc2tiKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcxMTpcXHRcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzEyLVxcdFxcdElQNkNCKHNrYiktXFx1MDAzZWZyYWdfbWF4X3NpemUgPSBuZl9icmlkZ2UtXFx1MDAzZWZyYWdfbWF4X3NpemU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTcyOD1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0OC1cXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFycGhkcikpKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjc0OTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTCwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NTAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTkyNT1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3Bvc3Rfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NDEtXFx0aWYgKCFyZWFsb3V0ZGV2KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTQyOlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFksIDApO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTQzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTE2Mj11bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfaXB2Nih2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE2OC1cXHRpZiAoYnJfdmFsaWRhdGVfaXB2NihzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoxNjk6XFx0XFx0cmV0dXJuIE5GX0RST1BfUkVBU09OKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX0lOSERSLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTcwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE3Mi1cXHRpZiAoIW5mX2JyaWRnZSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTczOlxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSwgMCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE3NC1cXHRpZiAoIXNldHVwX3ByZV9yb3V0aW5nKHNrYiwgc3RhdGUtXFx1MDAzZW5ldCkpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE3NTpcXHRcXHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZLCAwKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTc2LVxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYz02ODc9c3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jLTY5NC1cXG5uZXQvY2FuL2FmX2Nhbi5jOjY5NTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0NBTl9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTY5Ni1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jPTcwMz1zdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy03MTAtXFxubmV0L2Nhbi9hZl9jYW4uYzo3MTE6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5GRF9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTcxMi1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY2FuL2FmX2Nhbi5jPTcxOT1zdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy03MjYtXFxubmV0L2Nhbi9hZl9jYW4uYzo3Mjc6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9DQU5YTF9SWF9JTlZBTElEX0ZSQU1FKTtcXG5uZXQvY2FuL2FmX2Nhbi5jLTcyOC1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MTU5PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBxZGlzY19wa3RfbGVuX3NlZ3NfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDE4OS1cXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSlcXG5uZXQvY29yZS9kZXYuYzo0MTkwOlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5MS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQxOTQtXFx0XFx0aWYgKHRsZW4gXFx1MDAzYyBzaXplb2YoKnRoKSlcXG5uZXQvY29yZS9kZXYuYzo0MTk1OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5Ni1cXHRcXHRoZHJfbGVuICs9IHRsZW47XFxubmV0L2NvcmUvZGV2LmMtNDE5Ny1cXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfbGVuKSlcXG5uZXQvY29yZS9kZXYuYzo0MTk4OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU0tCX0JBRF9HU087XFxubmV0L2NvcmUvZGV2LmMtNDE5OS1cXHR9IGVsc2UgaWYgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUF9MNCkge1xcbm5ldC9jb3JlL2Rldi5jLTQyMDAtXFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxubmV0L2NvcmUvZGV2LmM6NDIwMTpcXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xcbm5ldC9jb3JlL2Rldi5jLTQyMDItXFx0XFx0aGRyX2xlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy00MjExLVxcdFxcdGlmIChwYXlsb2FkIFxcdTAwM2M9IDApXFxubmV0L2NvcmUvZGV2LmM6NDIxMjpcXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NLQl9CQURfR1NPO1xcbm5ldC9jb3JlL2Rldi5jLTQyMTMtXFx0XFx0Z3NvX3NlZ3MgPSBESVZfUk9VTkRfVVAocGF5bG9hZCwgc2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MjMzPXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQyODYtXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRlZmVyX2NvdW50IFxcdTAwM2UgUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnFkaXNjX21heF9idXJzdCkpKSB7XFxubmV0L2NvcmUvZGV2LmM6NDI4NzpcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1FESVNDX0JVUlNUX0RST1ApO1xcbm5ldC9jb3JlL2Rldi5jLTQyODgtXFx0XFx0XFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00NTEzPXNjaF9oYW5kbGVfaW5ncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LCBpbnQgKnJldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ1MTYtXFx0c3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXRjeF9pbmdyZXNzKTtcXG5uZXQvY29yZS9kZXYuYzo0NTE3OlxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDX0lOR1JFU1M7XFxubmV0L2NvcmUvZGV2LmMtNDUxOC1cXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NTc5LVxcdHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRldi1cXHUwMDNldGN4X2VncmVzcyk7XFxubmV0L2NvcmUvZGV2LmM6NDU4MDpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ19FR1JFU1M7XFxubmV0L2NvcmUvZGV2LmMtNDU4MS1cXHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ4MTk9aW50IF9fZGV2X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2RldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQ5MDAtXFx0aWYgKHVubGlrZWx5KCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpKSB7XFxubmV0L2NvcmUvZGV2LmM6NDkwMTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fREVWX1JFQURZO1xcbm5ldC9jb3JlL2Rldi5jLTQ5MDItXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDk1Mi1cXG5uZXQvY29yZS9kZXYuYzo0OTUzOlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ7XFxubmV0L2NvcmUvZGV2LmMtNDk1NC1kcm9wOlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQzOC1cXG5uZXQvY29yZS9kZXYuYzo1NDM5OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFk7XFxubmV0L2NvcmUvZGV2LmMtNTQ0MC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NzQtY3B1X2JhY2tsb2dfZHJvcDpcXG5uZXQvY29yZS9kZXYuYzo1NDc1OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9DUFVfQkFDS0xPRztcXG5uZXQvY29yZS9kZXYuYy01NDc2LVxcdG51bWFfZHJvcF9hZGQoXFx1MDAyNnNkLVxcdTAwM2Vkcm9wX2NvdW50ZXJzLCAxKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3NDgtXFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XFx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XFxubmV0L2NvcmUvZGV2LmMtNTc1MC1cXHRyZXR1cm4gWERQX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAzNi17XFxubmV0L2NvcmUvZGV2LmM6NjAzNzpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VTkhBTkRMRURfUFJPVE87XFxubmV0L2NvcmUvZGV2LmMtNjAzOC1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYxMjktXFx0aWYgKHBmbWVtYWxsb2MgXFx1MDAyNlxcdTAwMjYgIXNrYl9wZm1lbWFsbG9jX3Byb3RvY29sKHNrYikpIHtcXG5uZXQvY29yZS9kZXYuYzo2MTMwOlxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BGTUVNQUxMT0M7XFxubmV0L2NvcmUvZGV2LmMtNjEzMS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NTU1PXN0YXRpYyB2b2lkIGZsdXNoX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjU4NS1cXG5uZXQvY29yZS9kZXYuYzo2NTg2OlxcdF9fc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcXHUwMDI2bGlzdCwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XFxubmV0L2NvcmUvZGV2LmMtNjU4Ny19XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz02MTE9c3RhdGljIGludCBuZXRfZG1fcGFja2V0X3JlcG9ydF9maWxsKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02MzQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjYzNTpcXHRzdWJzeXMgPSB1MzJfZ2V0X2JpdHMoY2ItXFx1MDAzZXJlYXNvbiwgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo2MzY6XFx0aWYgKHN1YnN5cyBcXHUwMDNjIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTYzNy1cXHRcXHRsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGRyb3BfcmVhc29uc19ieV9zdWJzeXNbc3Vic3lzXSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjM4OlxcdHN1YnN5c19yZWFzb24gPSBjYi1cXHUwMDNlcmVhc29uIFxcdTAwMjYgflNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSztcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02MzktXFx0aWYgKCFsaXN0IHx8XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NDItXFx0ICAgIHN0cmxlbihsaXN0LVxcdTAwM2VyZWFzb25zW3N1YnN5c19yZWFzb25dKSBcXHUwMDNlIE5FVF9ETV9NQVhfUkVBU09OX0xFTikge1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjY0MzpcXHRcXHRsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGRyb3BfcmVhc29uc19ieV9zdWJzeXNbU0tCX0RST1BfUkVBU09OX1NVQlNZU19DT1JFXSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NjQ0OlxcdFxcdHN1YnN5c19yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy02NDUtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTM3PXNrX2ZpbHRlcl90cmltX2NhcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBjYXApXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNDktXFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QRk1FTUFMTE9DRFJPUCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTUwOlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcXG5uZXQvY29yZS9maWx0ZXIuYy0xNTEtXFx0fVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTUzLVxcdGlmIChlcnIpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTU0OlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0ZJTFRFUjtcXG5uZXQvY29yZS9maWx0ZXIuYy0xNTUtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNTctXFx0aWYgKGVycilcXG5uZXQvY29yZS9maWx0ZXIuYzoxNTg6XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9TRUNVUklUWV9IT09LO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE1OS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE3MS1cXHRcXHRpZiAoZXJyKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjE3MjpcXHRcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfRklMVEVSO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE3My1cXHR9XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xMTk2PWludCBfX25laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjMzLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyMzQ6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9GQUlMRUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzUtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjU1LVxcdFxcdFxcdFxcdG5laWdoLVxcdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXFx1MDAzZXRydWVzaXplO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNTY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjU3LVxcdFxcdFxcdFxcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVxcdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNzctXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZWlnaC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI3ODpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0RFQUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNzktXFx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE2MDA9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyNy1cXHRyYyA9IC1FSU5WQUw7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyODpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0hIX0ZJTExGQUlMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI5LVxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzND1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NTAtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjUxOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NTItXFx0fVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTM2PXN0YXRpY19hc3NlcnQoc2l6ZW9mX2ZpZWxkKHN0cnVjdCBiaW9fdmVjLCBidl9vZmZzZXQpID09XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMzktI3VuZGVmIEZOXFxubmV0L2NvcmUvc2tidWZmLmM6MTQwOiNkZWZpbmUgRk4ocmVhc29uKSBbU0tCX0RST1BfUkVBU09OXyMjcmVhc29uXSA9ICNyZWFzb24sXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJvcF9yZWFzb25zW10gPSB7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNTE9Y29uc3Qgc3RydWN0IGRyb3BfcmVhc29uX2xpc3QgX19yY3UgKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjE1Mjpkcm9wX3JlYXNvbnNfYnlfc3Vic3lzW1NLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTlVNXSA9IHtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNTM6XFx0W1NLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRV0gPSBSQ1VfSU5JVElBTElaRVIoXFx1MDAyNmRyb3BfcmVhc29uc19jb3JlKSxcXG5uZXQvY29yZS9za2J1ZmYuYy0xNTQtfTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2Mz12b2lkIGRyb3BfcmVhc29uc19yZWdpc3Rlcl9zdWJzeXMoZW51bSBza2JfZHJvcF9yZWFzb25fc3Vic3lzIHN1YnN5cyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NS17XFxubmV0L2NvcmUvc2tidWZmLmM6MTY2OlxcdGlmIChXQVJOKHN1YnN5cyBcXHUwMDNjPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX0NPUkUgfHxcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjctXFx0XFx0IHN1YnN5cyBcXHUwMDNlPSBBUlJBWV9TSVpFKGRyb3BfcmVhc29uc19ieV9zdWJzeXMpLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgyPXZvaWQgZHJvcF9yZWFzb25zX3VucmVnaXN0ZXJfc3Vic3lzKGVudW0gc2tiX2Ryb3BfcmVhc29uX3N1YnN5cyBzdWJzeXMpXFxubmV0L2NvcmUvc2tidWZmLmMtMTgzLXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxODQ6XFx0aWYgKFdBUk4oc3Vic3lzIFxcdTAwM2M9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfQ09SRSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NS1cXHRcXHQgc3Vic3lzIFxcdTAwM2U9IEFSUkFZX1NJWkUoZHJvcF9yZWFzb25zX2J5X3N1YnN5cyksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjA5PXZvaWQgX19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEwLXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjExOlxcdHNrYl9yZWxlYXNlX2FsbChza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjEyLVxcdGtmcmVlX3NrYm1lbShza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTIxNz1ib29sIF9fc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjQtXFx0XFx0XFx0ICAgICAgIHUzMl9nZXRfYml0cyhyZWFzb24sXFxubmV0L2NvcmUvc2tidWZmLmM6MTIyNTpcXHRcXHRcXHRcXHRcXHQgICAgU0tCX0RST1BfUkVBU09OX1NVQlNZU19NQVNLKSBcXHUwMDNlPVxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMjY6XFx0XFx0XFx0XFx0U0tCX0RST1BfUkVBU09OX1NVQlNZU19OVU0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMjctXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9NTI0PXNvY2tfcXVldWVfcmN2X3NrYl9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTUzNS1cXHRjYXNlIC1FTk9NRU06XFxubmV0L2NvcmUvc29jay5jOjUzNjpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGO1xcbm5ldC9jb3JlL3NvY2suYy01MzctXFx0Y2FzZSAtRU5PQlVGUzpcXG5uZXQvY29yZS9zb2NrLmM6NTM4OlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fUFJPVE9fTUVNO1xcbm5ldC9jb3JlL3NvY2suYy01MzktXFx0fVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNTU4LVxcdFxcdHNrX2Ryb3BzX2luYyhzayk7XFxubmV0L2NvcmUvc29jay5jOjU1OTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkY7XFxubmV0L2NvcmUvc29jay5jLTU2MC1cXHRcXHRnb3RvIGRpc2NhcmRfYW5kX3JlbHNlO1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTU3Ny1cXHRcXHRpZiAoZXJyID09IC1FTk9NRU0pXFxubmV0L2NvcmUvc29jay5jOjU3ODpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEZNRU1BTExPQztcXG5uZXQvY29yZS9zb2NrLmMtNTc5LVxcdFxcdGlmIChlcnIgPT0gLUVOT0JVRlMpXFxubmV0L2NvcmUvc29jay5jOjU4MDpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0c7XFxubmV0L2NvcmUvc29jay5jLTU4MS1cXHRcXHRza19kcm9wc19pbmMoc2spO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9Mjk3PXN0YXRpYyB2b2lkIGFycF9lcnJvcl9yZXBvcnQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy0yOTktXFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xcbm5ldC9pcHY0L2FycC5jOjMwMDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0ZBSUxFRCk7XFxubmV0L2lwdjQvYXJwLmMtMzAxLX1cXG4tLVxcbm5ldC9pcHY0L2FycC5jPTk3MD1zdGF0aWMgaW50IGFycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2FycC5jLTk5Mi1cXHRpZiAoYXJwLVxcdTAwM2Vhcl9obG4gIT0gZGV2LVxcdTAwM2VhZGRyX2xlbiB8fCBhcnAtXFx1MDAzZWFyX3BsbiAhPSA0KSB7XFxubmV0L2lwdjQvYXJwLmM6OTkzOlxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxubmV0L2lwdjQvYXJwLmMtOTk0LVxcdFxcdGdvdG8gZnJlZXNrYjtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTM2NT1zdGF0aWMgaW50IF9fZmliX3ZhbGlkYXRlX3NvdXJjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDAzLVxcdFxcdGlmIChyZXMudHlwZSAhPSBSVE5fTE9DQUwpIHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0MDQ6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0lOVkFMSURfU09VUkNFO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTQwNS1cXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDA2LVxcdFxcdH0gZWxzZSBpZiAoIUlOX0RFVl9BQ0NFUFRfTE9DQUwoaWRldikpIHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo0MDc6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0xPQ0FMX1NPVVJDRTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00MDgtXFx0XFx0XFx0Z290byBlX2ludmFsO1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDQ0LWVfcnBmOlxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQ0NTpcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9SUEZJTFRFUjtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NDYtfVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NDQ5PWludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy00NzAtXFx0XFx0aWYgKGluZXRfbG9va3VwX2lmYWRkcl9yY3UobmV0LCBzcmMpKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjQ3MTpcXHRcXHRcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9JUF9MT0NBTF9TT1VSQ0U7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNDcyLVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTExMTI9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXBfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTExMzQtXFx0aWYgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSkgIHsgLyogTWFuZ2xlZCBoZWFkZXIsIGRyb3AuICovXFxubmV0L2lwdjQvaWNtcC5jOjExMzU6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lQX0lOSERSO1xcbm5ldC9pcHY0L2ljbXAuYy0xMTM2LVxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xMjE5LVxcdF9fSUNNUF9JTkNfU1RBVFMobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvaWNtcC5jOjEyMjA6XFx0cmV0dXJuIHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pY21wLmMtMTIyMS19XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MTIyOD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEyMzEtXFx0XFx0X19JQ01QX0lOQ19TVEFUUyhkZXZfbmV0X3JjdShza2ItXFx1MDAzZWRldiksIElDTVBfTUlCX0lORVJST1JTKTtcXG5uZXQvaXB2NC9pY21wLmM6MTIzMjpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEw7XFxubmV0L2lwdjQvaWNtcC5jLTEyMzMtXFx0fVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEyMzYtXFx0XFx0LyogdGhlcmUgYXVnaHQgdG8gYmUgYSBzdGF0ICovXFxubmV0L2lwdjQvaWNtcC5jOjEyMzc6XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG5uZXQvaXB2NC9pY21wLmMtMTIzOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9MTQwNT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDM0LVxcdF9fSUNNUF9JTkNfU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLCBJQ01QX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvaWNtcC5jOjE0MzU6XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbm5ldC9pcHY0L2ljbXAuYy0xNDM2LX1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0xNDQ3PWludCBpY21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2ljbXAuYy0xNDQ4LXtcXG5uZXQvaXB2NC9pY21wLmM6MTQ0OTpcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pY21wLmMtMTQ1MC1cXHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDU5LVxcdFxcdFxcdFxcdCBYRlJNX1NUQVRFX0lDTVApKSB7XFxubmV0L2lwdjQvaWNtcC5jOjE0NjA6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbm5ldC9pcHY0L2ljbXAuYy0xNDYxLVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNDcxLVxcdFxcdFxcdFxcdFxcdFxcdHNrYikpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTQ3MjpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxubmV0L2lwdjQvaWNtcC5jLTE0NzMtXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTE1MTMtXFx0XFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTUxNDpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSU5WQUxJRF9QUk9UTztcXG5uZXQvaXB2NC9pY21wLmMtMTUxNS1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTE1MjAtXFx0XFx0ICAgIGljbXBoLVxcdTAwM2V0eXBlICE9IElDTVBfQUREUkVTU1JFUExZKSB7XFxubmV0L2lwdjQvaWNtcC5jOjE1MjE6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0lOVkFMSURfUFJPVE87XFxubmV0L2lwdjQvaWNtcC5jLTE1MjItXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xNTM4LVxcdGlmIChpY21waC1cXHUwMDNldHlwZSBcXHUwMDNlIE5SX0lDTVBfVFlQRVMpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTUzOTpcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVU5IQU5ETEVEX1BST1RPO1xcbm5ldC9pcHY0L2ljbXAuYy0xNTQwLVxcdFxcdGdvdG8gZXJyb3I7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTU1My1jc3VtX2Vycm9yOlxcbm5ldC9pcHY0L2ljbXAuYzoxNTU0OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9JQ01QX0NTVU07XFxubmV0L2lwdjQvaWNtcC5jLTE1NTUtXFx0X19JQ01QX0lOQ19TVEFUUyhuZXQsIElDTVBfTUlCX0NTVU1FUlJPUlMpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jPTMyMT12b2lkIGluZXRfZnJhZ19xdWV1ZV9mbHVzaChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jLTMyNS1cXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmM6MzI2OlxcdHJlYXNvbiA9IHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fRlJBR19SRUFTTV9USU1FT1VUO1xcbm5ldC9pcHY0L2luZXRfZnJhZ21lbnQuYy0zMjctXFx0c3VtID0gaW5ldF9mcmFnX3JidHJlZV9wdXJnZShcXHUwMDI2cS1cXHUwMDNlcmJfZnJhZ21lbnRzLCByZWFzb24pO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jPTMzNT12b2lkIGluZXRfZnJhZ19kZXN0cm95KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQzLVxcdHJlYXNvbiA9IChxLVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVRfRlJBR19EUk9QKSA/XFxubmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jOjM0NDpcXHRcXHRcXHRTS0JfRFJPUF9SRUFTT05fRlJBR19SRUFTTV9USU1FT1VUIDpcXG5uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMtMzQ1LVxcdFxcdFxcdFNLQl9DT05TVU1FRDtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MTIzPXN0YXRpYyB2b2lkIGlwX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNC17XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYzoxMjU6XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVDtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTEyNi1cXHRzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpmcmFnID0gdGltZXJfY29udGFpbmVyX29mKGZyYWcsIHQsIHRpbWVyKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTc4LVxcdCAqL1xcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MTc5OlxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQ7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODAtXFx0aWYgKGZyYWdfZXhwaXJlX3NraXBfaWNtcChxcC1cXHUwMDNlcS5rZXkudjQudXNlcikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MjQzPXN0YXRpYyBpbnQgaXBfZnJhZ19yZWluaXQoc3RydWN0IGlwcSAqcXApXFxuLS1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0Ny1cXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjI0ODpcXHRpbmV0X2ZyYWdfcXVldWVfZmx1c2goXFx1MDAyNnFwLVxcdTAwM2VxLCBTS0JfRFJPUF9SRUFTT05fRlJBR19UT09fRkFSKTtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jLTI0OS1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MTg5PXZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMS1cXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYixcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwMjpcXHRcXHRcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIwMy1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMC1cXHRcXHRcXHR9XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMjE6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIyMi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjMyLVxcdFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzM6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yODItXFx0XFx0X19JUF9JTkNfU1RBVFMoZGV2X25ldChkZXYpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI4MzpcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX05PTUVNO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjg0LVxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjkxLVxcdFxcdF9fSVBfSU5DX1NUQVRTKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjkyOlxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFI7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yOTMtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtMzA1LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMzA4LVxcdFxcdGlmIChpcF9vcHRpb25zX3Jjdl9zcnIoc2tiLCBkZXYpKVxcbm5ldC9pcHY0L2lwX2lucHV0LmM6MzA5OlxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMxMC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTM2MT1zdGF0aWMgaW50IGlwX3Jjdl9maW5pc2hfY29yZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQ2MC1cXHRcXHQgICAgSU5fREVWX09SQ09ORihpbl9kZXYsIERST1BfVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1QpKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NjE6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVU5JQ0FTVF9JTl9MMl9NVUxUSUNBU1Q7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NjItXFx0XFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NzItZHJvcF9lcnJvcjpcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ3MzpcXHRpZiAoZHJvcF9yZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX0lQX1JQRklMVEVSKVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDc0LVxcdFxcdF9fTkVUX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9JUFJQRklMVEVSKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9NDk5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXBfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MDktXFx0XFx0ZGV2X2NvcmVfc3RhdHNfcnhfb3RoZXJob3N0X2Ryb3BwZWRfaW5jKHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjUxMDpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9PVEhFUkhPU1Q7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MTEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy01MjEtXFxubmV0L2lwdjQvaXBfaW5wdXQuYzo1MjI6XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTUyMy1cXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTU1OC1cXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBsZW4pIHtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjU1OTpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoxNS45MTQwMTQzMjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTgwMjQyNTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRHJvcCBSZWFzb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVmaW5pbmcgdGhlIGdyYW51bGFyaXR5IG9mIHBhY2tldCBkcm9wIHJlYXNvbnMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBlbnVtIGVudHJ5LCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGFuZCB0aGVuIHVwZGF0aW5nIHZhcmlvdXMgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGNvZGUgcGF0aHMgdG8gdXNlIHRoaXMgbmV3IHJlYXNvbiB3aGVuIGEgcGFja2V0J3MgVGltZS1Uby1MaXZlIChUVEwpIGV4cGlyZXMuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IHRoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfZm9yd2FyZCgpYCwgYGlwdjZfc3JoX3JjdigpYCwgYGlwdjZfcnBsX3NyaF9yY3YoKWAsIGBpcHY2X3J0aGRyX3JjdigpYCwgYW5kIGBpcDZfZm9yd2FyZCgpYC4gSW5zdGVhZCBvZiB1c2luZyBhIGdlbmVyaWMgXCJJUF9JTkhEUlwiIHJlYXNvbiBmb3IgZHJvcHBpbmcgcGFja2V0cyBpbiB0aGVzZSBmdW5jdGlvbnMsIHRoZXkgYXJlIG5vdyB1cGRhdGVkIHRvIHNwZWNpZnkgXCJJUF9UVExfRVhDRUVERURcIiB1c2luZyB0aGUgYGtmcmVlX3NrYl9yZWFzb24oKWAgZnVuY3Rpb24uIFRoZSBvbmx5IHRoaW5nIHRoYXQncyBkaWZmZXJlbnQgaGVyZSBpcyB0aGF0IGEgbmV3IGVudW0gdmFsdWUgaXMgcGFzc2VkLCBvciB0aGUgZXhpc3RpbmcgZW51bSB2YWx1ZSBpcyBjaGFuZ2VkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhbHRlciB0aGUga2VybmVsJ3MgZnVuY3Rpb25hbCBiZWhhdmlvciBpbiBhIHdheSB0aGF0IGNvdWxkIGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgZGV0ZWN0YWJsZSB0aHJvdWdoIGZ1enppbmcuIFRoZSBwYXRjaCBmaXRzIHRoZSBjcml0ZXJpYSBvZiBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXCIgSXQgZG9lcyBub3QgYWZmZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGNvZGUgcGF0aHMgc3RpbGwgZHJvcCB0aGUgcGFja2V0IGFuZCBmcmVlIHRoZSBza2IuIFRoZSBjaGFuZ2UganVzdCB1cGRhdGVzIHRoZSBcInJlYXNvblwiIGFyZ3VtZW50LiBUaGVyZSBhcmUgbm8gZGF0YSBzdHJ1Y3R1cmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgY2FuIGludHJvZHVjZSBhIGJ1Zy4gTm8gbmV3IGxvZ2ljIGlzIGFkZGVkLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCB0aGUgdHJhY2Vwb2ludC9kcm9wX21vbml0b3IuXG5cbkxldCdzIGRvIGEgY29tcGxldGUgZG91YmxlLWNoZWNrLiBJbnNwZWN0aW5nIHRoZSBjb2RlLCBJIHNlZTpcblxuKiAgIFRoZSBgaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhgIGZpbGUgbm93IGNvbnRhaW5zIHRoZSBuZXcgZW51bSBlbnRyeSBhbmQgYXNzb2NpYXRlZCBzdHJpbmcgbWFjcm8uXG4qICAgSW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIHRoZSBwYXRjaCBub3cgc2V0cyB0aGUgZHJvcCByZWFzb24gYXMgYElQX1RUTF9FWENFRURFRGAgaW5zdGVhZCBvZiBgSVBfSU5IRFJgLlxuKiAgIEluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBpbnN0YW5jZXMgb2YgYGtmcmVlX3NrYigpYCBhcmUgY2hhbmdlZCB0byBga2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpYC5cbiogICBJbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgdGhlIHJlYXNvbiBwYXNzZWQgdG8gYGtmcmVlX3NrYl9yZWFzb24oKWAgaXMgdXBkYXRlZCB0byBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAuXG5cblRoZXJlIGFyZSBubyBlZGdlIGNhc2VzLCBubyBhcnJheSBpbmRleGluZyBpc3N1ZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBsb2dpYywgY29udHJvbCBmbG93LCBsb2NraW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZnVuY3Rpb25hbCBiZWhhdmlvci4gVGhlIHBhY2tldCBpcyBkcm9wcGVkLiBUaGUgc2tiIGlzIGZyZWVkLiBJdCdzIGp1c3QgdGhhdCB0aGUgZHJvcCByZWFzb24gaXMgdXBkYXRlZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHN0cmljdGx5IGZhbGxzIHVuZGVyIHB1cmVseSB1cGRhdGluZyB0cmFjZXBvaW50cywgaXQncyBzYWZlIHRvIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIHdhcnJhbnQgZnVydGhlciBmdXp6aW5nLlxuXG5UaHVzLCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3b3VsZCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuKiAgIGBFbmFibGVDb25maWdzOiBbXSBvciBudWxsYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdIG9yIG51bGxgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGEgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIGRyb3AgcmVhc29uIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGZ1bmN0aW9ucyB0byBwYXNzIGl0IHRvIGBrZnJlZV9za2JfcmVhc29uKClgLiBJdCBpcyBwdXJlbHkgYSB0cmFjZXBvaW50IC8gZGlhZ25vc3RpYyBkcm9wIHJlYXNvbiB1cGRhdGUgdGhhdCBkb2VzIG5vdCBhbHRlciBrZXJuZWwgY29udHJvbCBmbG93LCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE5NCwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI3OjI1LjcxNjQ0MzI3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBTS0IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIElQdjQvSVB2NiBmb3J3YXJkaW5nIGFuZCByb3V0aW5nIGhlYWRlciBwYXJzaW5nIGZ1bmN0aW9ucyB0byByZXBvcnQgdGhpcyByZWFzb24gd2hlbiBmcmVlaW5nIGV4cGlyZWQgcGFja2V0cy4gVGhpcyBpcyBwdXJlbHkgYSB0cmFjZXBvaW50L21vbml0b3JpbmcgbWV0YWRhdGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBleGVjdXRpb24gbG9naWMsIG1ha2luZyBpdCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgU0tCIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBJUHY0L0lQdjYgZm9yd2FyZGluZyBhbmQgcm91dGluZyBoZWFkZXIgcGFyc2luZyBmdW5jdGlvbnMgdG8gcmVwb3J0IHRoaXMgcmVhc29uIHdoZW4gZnJlZWluZyBleHBpcmVkIHBhY2tldHMuIFRoaXMgaXMgcHVyZWx5IGEgdHJhY2Vwb2ludC9tb25pdG9yaW5nIG1ldGFkYXRhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgZXhlY3V0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNzoyNS43MTY0Njk0MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4p4zp[1] Phase: Running StartedAt: 2026-09-07 07:27:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p4zp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 07:27:36 +0000 UTC FinishedAt: 2026-09-07 07:27:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}