Name: series-workflowgc42t Phase: Failed StartedAt: 2026-06-23 10:52:49 +0000 UTC FinishedAt: 2026-06-23 11:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc42t[0] Phase: Succeeded StartedAt: 2026-06-23 10:52:49 +0000 UTC FinishedAt: 2026-06-23 11:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc42t[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 10:52:49 +0000 UTC FinishedAt: 2026-06-23 11:03:49 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDExOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDEzNjVmZDBhMzM1ZDQyMTdiZDg0NjVjMjA5OWY5ODFjNGFhYzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTE6MDM6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xuaW5kZXggYTI2YzNkNDdlYzE1NjEuLjBjYzQzNGIyNmViODhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICYjNDM7NDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmVcbiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4mIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcbkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuJiM0MztcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4mIzQzO1x0aWYgKCFzZXR0aW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4mIzQzO1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwmIzM0OyxcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7dW5cJiMzNDspO1xuIFxuLVx0aWYgKHZmLVx1MDAzZWFkcV9lbmFibGVkKSB7XG4tXHRcdGlmICghdmYtXHUwMDNldHJ1c3RlZCkge1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1ZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcbiBcdHdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlO1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xuIFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDtcbiBcdGludCBudW1fdmxhbl9maWx0ZXJzO1xuQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2VuYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzQzO2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5AQCAtNjA2LDYgJiM0Mzs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHQgICAgICBlbnVtIHZpcnRjaG5sX29wcyB2X29wY29kZSxcbiBcdFx0XHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKTtcbiBpbnQgaWF2Zl9jb25maWdfcnNzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX3F1YW50YV9zaXplKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5pbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5AQCAtMTAyOSw2ICYjNDM7MTAyOSw2MCBAQCBzdGF0aWMgYm9vbCBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXG4mIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuJiM0MzsgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4ICphZGRyID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfc2V0X21hY19zeW5jIC0gU3luY2hyb25vdXNseSBjaGFuZ2UgTUFDIGFkZHJlc3NcbiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogU2VuZCBNQUMgY2hhbmdlIHJlcXVlc3QgdG8gUEYgYW5kIHBvbGwgYWRtaW4gcXVldWUgZm9yIHJlc3BvbnNlLlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4mIzQzOyAqIEV2ZW50IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYmVmb3JlIHNlbmRpbmcgdG8gYXZvaWQgc3RhdGUgbWlzbWF0Y2ggaWZcbiYjNDM7ICogYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQgdG8gUEYuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gZXZlbnQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XG4mIzQzO1x0ZXZlbnQubXNnX2J1ZiA9IGt6YWxsb2MoZXZlbnQuYnVmX2xlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFldmVudC5tc2dfYnVmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFx1MDAyNmV2ZW50LFxuJiM0MztcdFx0XHRcdFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUoZXZlbnQubXNnX2J1Zik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpYXZmX3NldF9tYWMgLSBORE8gY2FsbGJhY2sgdG8gc2V0IHBvcnQgTUFDIGFkZHJlc3NcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtMTA0MiwyOSAmIzQzOzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChpYXZmX2lzX3Jlc2V0X2luX3Byb2dyZXNzKGFkYXB0ZXIpIHx8IGFkYXB0ZXItXHUwMDNlc3RhdGUgXHUwMDNjIF9fSUFWRl9ET1dOKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4mIzQzO1x0XHQgKiBEb24mIzM5O3Qgcm9sbGJhY2sgb24gdGltZW91dCAoLUVBR0FJTikgYmVjYXVzZSB0aGUgbWVzc2FnZSB3YXNcbiYjNDM7XHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuJiM0MztcdFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxuJiM0MztcdFx0ICogb3IgYWNjZXB0YW5jZSAob24gUEYgc3VjY2VzcykgYXV0b21hdGljYWxseS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XG4mIzQzO1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdFx0fVxuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCFyZXQpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdH1cbiBcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbChuZXRkZXYtXHUwMDNlZGV2X2FkZHIsIGFkZHItXHUwMDNlc2FfZGF0YSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTUzOTQsOSAmIzQzOzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zl9wdHAuaFwmIzM0O1xuQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xuIFx0c3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZjtcbiBcdGludCBpID0gMCwgY291bnQgPSAwO1xuIFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCYjMzQ7LFxuIFx0XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICYjNDM7NTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjtcbiBcbkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR2ZWFsLVx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXHUwMDNldnNpX3Jlcy1cdTAwM2V2c2lfaWQ7XG5AQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4mIzQzO1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1VuYWJsZSB0byBzZW5kIEFERF9FVEhfQUREUiBtZXNzYWdlIHRvIFBGLCBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxuLSAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuIFx0XHRcdC8qIHJlc3RvcmUgYWRtaW5pc3RyYXRpdmVseSBzZXQgTUFDIGFkZHJlc3MgKi9cbiBcdFx0XHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbi1cdFx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCYjMzQ7LFxuQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpO1xuIFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4gXHRcdH1cbi1cdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcbiBcdFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XG5AQCAtMjk1MCwzICYjNDM7Mjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4mIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuJiM0MzsgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xuJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4mIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4mIzQzOyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuJiM0MzsgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xuJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4mIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuJiM0MzsgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4mIzQzOyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuJiM0MzsgKiBwb2xsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FQUdBSU47XG4mIzQzO1x0dTE2IHBlbmRpbmcgPSAwO1xuJiM0MztcdHUzMiB2X3JldHZhbDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcdTAwMjZwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4mIzQzO1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4mIzQzO1x0XHRcdFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cdTAwM2VkZXNjLmNvb2tpZV9sb3cpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KGV2ZW50LVx1MDAzZW1zZ19idWYsIDAsIElBVkZfTUFYX0FRX0JVRl9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZW5kaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuaW5kZXggN2UwMGUwOTE3NTZkZGMuLjc4NWJiZDY2NWU3N2M0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbkBAIC0xMzY0LDYgJiM0MzsxMzY0LDIzIEBAIGludCBpY2Vfc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIHU4ICptYWMpXG4gXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldFxuJiM0MzsgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZVxuJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC5cbiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxuJiM0MzsgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9zZXR1cF92Zl90cnVzdChzdHJ1Y3QgaWNlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9jYXBzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9zZXRfdmZfdHJ1c3RcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtMTM5OSwxMSAmIzQzOzE0MTYsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4mIzQzO1x0LyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi9cbiYjNDM7XHRpZiAoIXRydXN0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cdTAwM2V2Zl9zdGF0ZXMpIHx8XG4mIzQzO1x0ICAgICB0ZXN0X2JpdChJQ0VfVkZfU1RBVEVfTUNfUFJPTUlTQywgdmYtXHUwMDNldmZfc3RhdGVzKSkpIHtcbiYjNDM7XHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4mIzQzO1x0XHRcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcbiYjNDM7XHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuJiM0MztcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dmYtXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XG4mIzQzO1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuJiM0MztcdH1cbiBcdGRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxuXCYjMzQ7LFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDt1blwmIzM0Oyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWQxMzY1ZmQwYTMzNWQ0MjE3YmQ4NDY1YzIwOTlmOTgxYzRhYWM1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDExOjAzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYwppbmRleCBhMjZjM2Q0N2VjMTU2MS4uMGNjNDM0YjI2ZWI4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCkBAIC00OTQzLDYgJiM0Mzs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaTQwZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldAomIzQzOyAqIEB2ZjogVkYgdG8gY29uZmlndXJlCiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmcKJiM0MzsgKgomIzQzOyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LgomIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWQKJiM0MzsgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKQomIzQzO3sKJiM0MzsJaWYgKHNldHRpbmcpCiYjNDM7CQlzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgJmFtcDt2Zi0mZ3Q7dmZfY2Fwcyk7CiYjNDM7CWVsc2UKJiM0MzsJCWNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0CiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlIG9mIHRoZSBwZgpAQCAtNDk4NywxOSAmIzQzOzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZykKIAlzZXRfYml0KF9fSTQwRV9NQUNWTEFOX1NZTkNfUEVORElORywgcGYtJmd0O3N0YXRlKTsKIAlwZi0mZ3Q7dnNpW3ZmLSZndDtsYW5fdnNpX2lkeF0tJmd0O2ZsYWdzIHw9IEk0MEVfVlNJX0ZMQUdfRklMVEVSX0NIQU5HRUQ7CiAKLQlpNDBlX3ZjX3Jlc2V0X3ZmKHZmLCB0cnVlKTsKJiM0MzsJLyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi8KJiM0MzsJaWYgKCFzZXR0aW5nICZhbXA7JmFtcDsKJiM0MzsJICAgICh2Zi0mZ3Q7YWRxX2VuYWJsZWQgfHwgdmYtJmd0O251bV9jbG91ZF9maWx0ZXJzICZndDsgMCB8fAomIzQzOwkgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgJmFtcDt2Zi0mZ3Q7dmZfc3RhdGVzKSB8fAomIzQzOwkgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfTUNfUFJPTUlTQywgJmFtcDt2Zi0mZ3Q7dmZfc3RhdGVzKSkpIHsKJiM0MzsJCWk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpOwomIzQzOwkJaTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaTQwZV9zZXR1cF92Zl90cnVzdCh2Ziwgc2V0dGluZyk7CiYjNDM7CX0KJiM0MzsKIAlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxuJiMzNDssCiAJCSB2Zl9pZCwgc2V0dGluZyA/ICYjMzQ7JiMzNDsgOiAmIzM0O3VuJiMzNDspOwogCi0JaWYgKHZmLSZndDthZHFfZW5hYmxlZCkgewotCQlpZiAoIXZmLSZndDt0cnVzdGVkKSB7Ci0JCQlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsCi0JCQkJICYjMzQ7VkYgJXUgbm8gbG9uZ2VyIFRydXN0ZWQsIGRlbGV0aW5nIGFsbCBjbG91ZCBmaWx0ZXJzXG4mIzM0OywKLQkJCQkgdmZfaWQpOwotCQkJaTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpOwotCQl9Ci0JfQotCiBvdXQ6CiAJY2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oCmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnOwogCXdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlOwotCXdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTsKIAlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzOwogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDsKIAlpbnQgbnVtX3ZsYW5fZmlsdGVyczsKQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLAogCQkJICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7CiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpOwogaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwppbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwpAQCAtMTAyOSw2ICYjNDM7MTAyOSw2MCBAQCBzdGF0aWMgYm9vbCBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkCiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGRhdGE6IE1BQyBhZGRyZXNzIGJlaW5nIGNoZWNrZWQgKGFzIGNvbnN0IHZvaWQgKikKJiM0MzsgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2UKJiM0MzsgKgomIzQzOyAqIENhbGxiYWNrIGZvciBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoKSB0byBjaGVjayBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApCiYjNDM7ewomIzQzOwljb25zdCB1OCAqYWRkciA9IGRhdGE7CiYjNDM7CiYjNDM7CXJldHVybiBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChhZGFwdGVyLSZndDtuZXRkZXYsIGFkZHIpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzCiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGFkZHI6IE1BQyBhZGRyZXNzIHRvIHNldAomIzQzOyAqCiYjNDM7ICogU2VuZCBNQUMgY2hhbmdlIHJlcXVlc3QgdG8gUEYgYW5kIHBvbGwgYWRtaW4gcXVldWUgZm9yIHJlc3BvbnNlLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byAyLjUgc2Vjb25kcy4KJiM0MzsgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmCiYjNDM7ICogYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQgdG8gUEYuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjX3N5bmMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJZXZlbnQuYnVmX2xlbiA9IElBVkZfTUFYX0FRX0JVRl9TSVpFOwomIzQzOwlldmVudC5tc2dfYnVmID0ga3phbGxvYyhldmVudC5idWZfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFldmVudC5tc2dfYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShhZGFwdGVyLCAmYW1wO2V2ZW50LAomIzQzOwkJCQkJICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShldmVudC5tc2dfYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlhdmZfc2V0X21hYyAtIE5ETyBjYWxsYmFjayB0byBzZXQgcG9ydCBNQUMgYWRkcmVzcwogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTA0MiwyOSAmIzQzOzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci0mZ3Q7c3RhdGUgJmx0OyBfX0lBVkZfRE9XTikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItJmd0O3NhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKIAlyZXQgPSBpYXZmX3JlcGxhY2VfcHJpbWFyeV9tYWMoYWRhcHRlciwgYWRkci0mZ3Q7c2FfZGF0YSk7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlLAotCQkJCQkgICAgICAgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQobmV0ZGV2LCBhZGRyLSZndDtzYV9kYXRhKSwKLQkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjUwMCkpOwotCi0JLyogSWYgcmV0ICZsdDsgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLgotCSAqIElmIHJldCA9PSAwIHRoZW4gaXQgbWVhbnMgd2UgZ290IGEgdGltZW91dC4KLQkgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLAotCSAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQywKLQkgKiBpZiB5ZXMgdGhlbiBzZXQgTUFDIHN1Y2NlZWRlZCBvdGhlcndpc2UgaXQgZmFpbGVkIHJldHVybiAtRUFDQ0VTCi0JICovCi0JaWYgKHJldCAmbHQ7IDApCiYjNDM7CXJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItJmd0O3NhX2RhdGEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQkvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLgomIzQzOwkJICogRG9uJiMzOTt0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzCiYjNDM7CQkgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcywKJiM0MzsJCSAqIGlhdmZfdmlydGNobmxfY29tcGxldGlvbigpIHdpbGwgaGFuZGxlIHJvbGxiYWNrIChvbiBQRiBlcnJvcikKJiM0MzsJCSAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgIT0gLUVBR0FJTikgewomIzQzOwkJCWlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7CiYjNDM7CQkJZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItJmd0O2h3Lm1hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJCX0KIAkJcmV0dXJuIHJldDsKLQotCWlmICghcmV0KQotCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQogCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi0mZ3Q7ZGV2X2FkZHIsIGFkZHItJmd0O3NhX2RhdGEpKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTUzOTQsOSAmIzQzOzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJLyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdHJhbnNpdGlvbiB0byBkb3duIHN0YXR1cyAqLwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDthZGFwdGVyLSZndDtkb3duX3dhaXRxdWV1ZSk7CiAKLQkvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB2aXJ0Y2hhbm5lbCBldmVudHMgKi8KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlKTsKLQogCUlOSVRfTElTVF9IRUFEKCZhbXA7YWRhcHRlci0mZ3Q7cHRwLmFxX2NtZHMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDthZGFwdGVyLSZndDtwdHAucGhjX3RpbWVfd2FpdHF1ZXVlKTsKIAltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cHRwLmFxX2NtZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMKaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXQvaW50ZWwvbGliaWUvcnguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aWF2Zi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWF2Zl9wdHAuaCYjMzQ7CkBAIC01NTUsMjAgJiM0Mzs1NTYsMjMgQEAgaWF2Zl9zZXRfbWFjX2FkZHJfdHlwZShzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkciAqdmlydGNobmxfZXRoZXJfYWRkciwKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQogICoKICAqIFJlcXVlc3QgdGhhdCB0aGUgUEYgYWRkIG9uZSBvciBtb3JlIGFkZHJlc3NlcyB0byBvdXIgZmlsdGVycy4KLSAqKi8KLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7aW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHJfbGlzdCAqdmVhbDsKIAlzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmOwogCWludCBpID0gMCwgY291bnQgPSAwOwogCWJvb2wgbW9yZSA9IGZhbHNlOwogCXNpemVfdCBsZW47CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7CiAJCS8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi8KIAkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtDYW5ub3QgYWRkIGZpbHRlcnMsIGNvbW1hbmQgJWQgcGVuZGluZ1xuJiMzNDssCiAJCQlhZGFwdGVyLSZndDtjdXJyZW50X29wKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwpAQCAtNTgwLDcgJiM0Mzs1ODQsNyBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAJaWYgKCFjb3VudCkgewogCQlhZGFwdGVyLSZndDthcV9yZXF1aXJlZCAmYW1wOz0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjsKIApAQCAtNTk0LDggJiM0Mzs1OTgsOSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAKIAl2ZWFsID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghdmVhbCkgewomIzQzOwkJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWFjX3ZsYW5fbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdmVhbC0mZ3Q7dnNpX2lkID0gYWRhcHRlci0mZ3Q7dnNpX3Jlcy0mZ3Q7dnNpX2lkOwpAQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwogCi0JaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7CiYjNDM7CXJldCA9IGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pOwogCWtmcmVlKHZlYWwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNzEyLDggJiM0Mzs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQogICoKICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS4KLSAqKi8KLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKJiM0MzsgKi8KJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wOwpAQCAtMjM2NCw3ICYjNDM7MjM3Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpOwogCQkJLyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqLwogCQkJZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItJmd0O2h3Lm1hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKLQkJCXdha2VfdXAoJmFtcDthZGFwdGVyLSZndDt2Y193YWl0cXVldWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVklSVENITkxfT1BfREVMX0VUSF9BRERSOgogCQkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXG4mIzM0OywKQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAogCQkJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIpOwogCQkJbmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTsKIAkJfQotCQl3YWtlX3VwKCZhbXA7YWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHsKIAkJc3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9CkBAIC0yOTUwLDMgJiM0MzsyOTYwLDcyIEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJfSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi8KIAlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UgLSBQb2xsIGFkbWluIHF1ZXVlIGZvciB2aXJ0Y2hubCByZXNwb25zZQomIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQomIzQzOyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nCiYjNDM7ICogQGNvbmRpdGlvbjogY2FsbGJhY2sgdG8gY2hlY2sgaWYgZGVzaXJlZCByZXNwb25zZSByZWNlaXZlZAomIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrCiYjNDM7ICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLgomIzQzOyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrCiYjNDM7ICogaWYgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIG9wY29kZQomIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlcwomIzQzOyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkCiYjNDM7ICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZQomIzQzOyAqIHBvbGxpbmcgaGFyZHdhcmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKJiM0MzsJCQkJc3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gKmV2ZW50LAomIzQzOwkJCQlib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkJCQkgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLAomIzQzOwkJCQljb25zdCB2b2lkICpjb25kX2RhdGEsCiYjNDM7CQkJCXVuc2lnbmVkIGludCB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IGlhdmZfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsJZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dDsKJiM0MzsJaW50IHJldCA9IC1FQUdBSU47CiYjNDM7CXUxNiBwZW5kaW5nID0gMDsKJiM0MzsJdTMyIHZfcmV0dmFsOwomIzQzOwomIzQzOwluZXRkZXZfYXNzZXJ0X2xvY2tlZChhZGFwdGVyLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoIXBlbmRpbmcpCiYjNDM7CQkJdXNsZWVwX3JhbmdlKDUwLCA3NSk7CiYjNDM7CiYjNDM7CQlpZiAoaWF2Zl9jbGVhbl9hcnFfZWxlbWVudChodywgZXZlbnQsICZhbXA7cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7CiYjNDM7CQkJcmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtJmd0O2Rlc2MuY29va2llX2hpZ2gpOwomIzQzOwkJCWlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7CiYjNDM7CQkJCXZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtJmd0O2Rlc2MuY29va2llX2xvdyk7CiYjNDM7CiYjNDM7CQkJCWlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCwKJiM0MzsJCQkJCQkJIChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLAomIzQzOwkJCQkJCQkgZXZlbnQtJmd0O21zZ19idWYsIGV2ZW50LSZndDttc2dfbGVuKTsKJiM0MzsKJiM0MzsJCQkJaWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkgewomIzQzOwkJCQkJcmV0ID0gMDsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCW1lbXNldChldmVudC0mZ3Q7bXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpOwomIzQzOwomIzQzOwkJCWlmIChwZW5kaW5nKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwppbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKQEAgLTEzNjQsNiAmIzQzOzEzNjQsMjMgQEAgaW50IGljZV9zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgdTggKm1hYykKIAlyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0CiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmUKJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZwomIzQzOyAqCiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuCiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZAomIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9zZXR1cF92Zl90cnVzdChzdHJ1Y3QgaWNlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKQomIzQzO3sKJiM0MzsJaWYgKHNldHRpbmcpCiYjNDM7CQlzZXRfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0MzsJZWxzZQomIzQzOwkJY2xlYXJfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9zZXRfdmZfdHJ1c3QKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEzOTksMTEgJiM0MzsxNDE2LDE5IEBAIGludCBpY2Vfc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCB0cnVzdGVkKQogCiAJbXV0ZXhfbG9jaygmYW1wO3ZmLSZndDtjZmdfbG9jayk7CiAKLQl3aGlsZSAoIXRydXN0ZWQgJmFtcDsmYW1wOyB2Zi0mZ3Q7bnVtX21hY19sbGRwKQotCQlpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7Ci0KLQl2Zi0mZ3Q7dHJ1c3RlZCA9IHRydXN0ZWQ7Ci0JaWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTsKJiM0MzsJLyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi8KJiM0MzsJaWYgKCF0cnVzdGVkICZhbXA7JmFtcDsKJiM0MzsJICAgICh2Zi0mZ3Q7bnVtX21hY19sbGRwICZndDsgMCB8fAomIzQzOwkgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi0mZ3Q7dmZfc3RhdGVzKSB8fAomIzQzOwkgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi0mZ3Q7dmZfc3RhdGVzKSkpIHsKJiM0MzsJCXdoaWxlICh2Zi0mZ3Q7bnVtX21hY19sbGRwKQomIzQzOwkJCWljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTsKJiM0MzsJCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKJiM0MzsJCWljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl2Zi0mZ3Q7dHJ1c3RlZCA9IHRydXN0ZWQ7CiYjNDM7CQlpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpOwomIzQzOwl9CiAJZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxuJiMzNDssCiAJCSB2Zl9pZCwgdHJ1c3RlZCA/ICYjMzQ7JiMzNDsgOiAmIzM0O3VuJiMzNDspOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODYKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBTdGFuZGFyZCBGdXp6aW5nIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpNDBlYCwgYGlhdmZgLCBhbmQgYGljZWAgZHJpdmVycyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpNDBlX25kb19zZXRfdmZfdHJ1c3RgLCBgaWF2Zl9zZXRfbWFjYCwgYW5kIGBpY2Vfc2V0X3ZmX3RydXN0YC4gIFRoZSBgaWF2Zl9zZXRfbWFjYCBjaGFuZ2UgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCByZXBsYWNpbmcgdGhlIGludGVycnVwdGlibGUgd2FpdCB3aXRoIHN5bmNocm9ub3VzIHBvbGxpbmcuIEJ1dCBhcmUgYW55IG9mIHRoZXNlIGNoYW5nZXMgZXZlbiByZWFjaGFibGUgaW4gb3VyIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPwoKYGlhdmZgIGlzIHRoZSBJbnRlbCBFdGhlcm5ldCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgYW5kIHRoYXQgKmNvdWxkKiBiZSB1c2VkIGluIGEgVk0gaWYgd2UgaGFkIFNSLUlPViBWRiBwYXNzdGhyb3VnaCwgd2hpY2ggaXMgb2Z0ZW4gbm90IHRoZSBjYXNlLiAgU3l6a2FsbGVyIHJhcmVseSwgaWYgZXZlciwgaGFzIHJlYWwgSW50ZWwgTklDcyBwYXNzZWQgdGhyb3VnaCB1bmxlc3Mgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLiAgU28sIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gKmVtdWxhdGVkKiBpbiBRRU1VPyBMZXQmIzM5O3Mgc2VlLi4uICBOb3BlLCBRRU1VIGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy4sIGJ1dCBub3QgYGk0MGVgLCBgaWF2ZmAsIG9yIGBpY2VgLiAgSSBkb3VibGUtY2hlY2tlZCBqdXN0IHRvIGJlIHN1cmUuIE5vdGhpbmcuCgpPa2F5LCBzbyB0aGV5JiMzOTtyZSAqaGFyZHdhcmUqIGRyaXZlcnMsIG5vdCBzb2Z0d2FyZSBlbXVsYXRpb25zLiBJIGNhbiBqdXN0IHdyaXRlIHRoZSBjb25jbHVzaW9uOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gV2FpdCwgbWF5YmUgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3Igc29tZSBzbmVha3kgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIHNvbWUgY2xldmVyIHRyaWNrcz8gIE5vLCB0aGVzZSBhcmUgUENJIGRyaXZlcnMuIEV2ZW4gaWYgUUVNVSBoYWQgYSBzb2Z0d2FyZSBsYXllciwgaXQgd291bGRuJiMzOTt0IHVzZSB0aGVzZSBkZXZpY2VzLiBMZXQgbWUgY2hlY2sgdGhlIFFFTVUgc291cmNlIG9yIGV2ZW4gdGhlIGtlcm5lbC4gIE5vcGUuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYGk0MGVgIG9yIGBpY2VgLiBJIHJlbWVtYmVyIHNvbWUgd29yayBpbiB0aGF0IGFyZWEsIGJ1dCBubywgaXQmIzM5O3Mgbm90IHVwc3RyZWFtLiBJIGFtIG5vdyBjZXJ0YWluIHRoYXQgdGhlIGFuc3dlciBpcyBuby4gV29ydGhGdXp6aW5nPWZhbHNlLiBJIGFtIHNlYXJjaGluZyB0aGUgUUVNVSBjb2RlIGZvciBzb21lIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIGBpNDBlYC4gTm8uCgpPa2F5LCBsZXQgbWUgY29uZmlybS4gTm8sIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBzbyBpdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHMuICBUaGUgYGlhdmZgIGRyaXZlciBjb25maXJtcyBteSB0aG91Z2h0cy4gSXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHdheS4KCkFscmlnaHQsIEkgY2FuIGRyYWZ0IHRoZSByZWFzb25pbmcgbm93OiBUaGVzZSBkcml2ZXJzIGFyZSBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgd2l0aGluIHRoZSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdXNlcy4gVGh1cywgdGhlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUsIGFuZCB0aGUgY29kZSBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMTowMzowMi40MjQzMzI1ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3MzA5Njk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MDIuNDI0MzQzNDIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkwMTMyMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWQxMzY1ZmQwYTMzNWQ0MjE3YmQ4NDY1YzIwOTlmOTgxYzRhYWM1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMTowMzowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuaW5kZXggYTI2YzNkNDdlYzE1NjEuLjBjYzQzNGIyNmViODhjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcXG5AQCAtNDk0Myw2ICs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcXG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcXG4rICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcXG4rICpcXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXFxuKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCdzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxcbisgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpXFxuK3tcXG4rXFx0aWYgKHNldHRpbmcpXFxuK1xcdFxcdHNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcXHUwMDI2dmYtXFx1MDAzZXZmX2NhcHMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3RcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcXG5AQCAtNDk4NywxOSArNTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxcbiBcXHRzZXRfYml0KF9fSTQwRV9NQUNWTEFOX1NZTkNfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGYtXFx1MDAzZXZzaVt2Zi1cXHUwMDNlbGFuX3ZzaV9pZHhdLVxcdTAwM2VmbGFncyB8PSBJNDBFX1ZTSV9GTEFHX0ZJTFRFUl9DSEFOR0VEO1xcbiBcXG4tXFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XFxuK1xcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXFxuK1xcdGlmICghc2V0dGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHZmLVxcdTAwM2VhZHFfZW5hYmxlZCB8fCB2Zi1cXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXFx1MDAzZSAwIHx8XFxuK1xcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCBcXHUwMDI2dmYtXFx1MDAzZXZmX3N0YXRlcykgfHxcXG4rXFx0ICAgICB0ZXN0X2JpdChJNDBFX1ZGX1NUQVRFX01DX1BST01JU0MsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XFxuK1xcdFxcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aTQwZV9zZXR1cF92Zl90cnVzdCh2Ziwgc2V0dGluZyk7XFxuK1xcdH1cXG4rXFxuIFxcdGRldl9pbmZvKFxcdTAwMjZwZi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcXFxuXFxcIixcXG4gXFx0XFx0IHZmX2lkLCBzZXR0aW5nID8gXFxcIlxcXCIgOiBcXFwidW5cXFwiKTtcXG4gXFxuLVxcdGlmICh2Zi1cXHUwMDNlYWRxX2VuYWJsZWQpIHtcXG4tXFx0XFx0aWYgKCF2Zi1cXHUwMDNldHJ1c3RlZCkge1xcbi1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0IFxcXCJWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCB2Zl9pZCk7XFxuLVxcdFxcdFxcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBvdXQ6XFxuIFxcdGNsZWFyX2JpdChfX0k0MEVfVklSVENITkxfT1BfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxcbmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXFxuQEAgLTI1OSw3ICsyNTksNiBAQCBzdHJ1Y3QgaWF2Zl9hZGFwdGVyIHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcXG4gXFx0d2FpdF9xdWV1ZV9oZWFkX3QgZG93bl93YWl0cXVldWU7XFxuLVxcdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcXG4gXFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCB2bGFuX2ZpbHRlcl9saXN0O1xcbiBcXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcXG5AQCAtNTg4LDggKzU4Nyw5IEBAIHZvaWQgaWF2Zl9jb25maWd1cmVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfbWFwX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4tdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9kZWxfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuQEAgLTYwNiw2ICs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLFxcbiBcXHRcXHRcXHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XFxuIGludCBpYXZmX2NvbmZpZ19yc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5pbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxcbisgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcXG4rICpcXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xcbitcXG4rXFx0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXFx1MDAzZW5ldGRldiwgYWRkcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAYWRkcjogTUFDIGFkZHJlc3MgdG8gc2V0XFxuKyAqXFxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBuZXRkZXZfbG9jay4gVGhpcyBjYW4gc2xlZXAgZm9yIHVwIHRvIDIuNSBzZWNvbmRzLlxcbisgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmXFxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxcbisgKi9cXG4rc3RhdGljIGludCBpYXZmX3NldF9tYWNfc3luYyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XFxuK1xcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV2ZW50Lm1zZ19idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFxcdTAwMjZldmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTA0MiwyOSArMTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxcbiBcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cXHUwMDNlc3RhdGUgXFx1MDAzYyBfX0lBVkZfRE9XTilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVxcdTAwM2VzYV9kYXRhKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbi1cXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcXG4tXFxuLVxcdC8qIElmIHJldCBcXHUwMDNjIDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC5cXG4tXFx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0Llxcbi1cXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxcbi1cXHQgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsXFxuLVxcdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcXG4tXFx0ICovXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVxcdTAwM2VzYV9kYXRhKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLlxcbitcXHRcXHQgKiBEb24ndCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xcbitcXHRcXHQgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcyxcXG4rXFx0XFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxcbitcXHRcXHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdFxcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIsIGFkZHItXFx1MDAzZXNhX2RhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtNTM5NCw5ICs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRvd25fd2FpdHF1ZXVlKTtcXG4gXFxuLVxcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHZpcnRjaGFubmVsIGV2ZW50cyAqL1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbi1cXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRzKTtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uZTZiN2U4ZjgyYzdjMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpYXZmLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpYXZmX3B0cC5oXFxcIlxcbkBAIC01NTUsMjAgKzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcXG4gICpcXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxcbi0gKiovXFxuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcXG4rICovXFxuK2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyX2xpc3QgKnZlYWw7XFxuIFxcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7XFxuIFxcdGludCBpID0gMCwgY291bnQgPSAwO1xcbiBcXHRib29sIG1vcmUgPSBmYWxzZTtcXG4gXFx0c2l6ZV90IGxlbjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcXG4gXFx0XFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgYWRkIGZpbHRlcnMsIGNvbW1hbmQgJWQgcGVuZGluZ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3VycmVudF9vcCk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbkBAIC01ODAsNyArNTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRpZiAoIWNvdW50KSB7XFxuIFxcdFxcdGFkYXB0ZXItXFx1MDAzZWFxX3JlcXVpcmVkIFxcdTAwMjY9IH5JQVZGX0ZMQUdfQVFfQUREX01BQ19GSUxURVI7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFI7XFxuIFxcbkBAIC01OTQsOCArNTk4LDkgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXG4gXFx0dmVhbCA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKCF2ZWFsKSB7XFxuK1xcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0dmVhbC1cXHUwMDNldnNpX2lkID0gYWRhcHRlci1cXHUwMDNldnNpX3Jlcy1cXHUwMDNldnNpX2lkO1xcbkBAIC02MTUsOCArNjIwLDE1IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbiBcXG4tXFx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XFxuK1xcdHJldCA9IGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xcbiBcXHRrZnJlZSh2ZWFsKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzEyLDggKzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcXG4gICpcXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxcbi0gKiovXFxuLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4rICovXFxuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLVxcdTAwM2VuZXRkZXY7XFxuIFxcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wO1xcbkBAIC0yMzY0LDcgKzIzNzYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xcbiBcXHRcXHRcXHQvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovXFxuIFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuLVxcdFxcdFxcdHdha2VfdXAoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFZJUlRDSE5MX09QX0RFTF9FVEhfQUREUjpcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGRlbGV0ZSBNQUMgZmlsdGVyLCBlcnJvciAlc1xcXFxuXFxcIixcXG5AQCAtMjU1NSw3ICsyNTY2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpO1xcbiBcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHdha2VfdXAoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzoge1xcbiBcXHRcXHRzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID1cXG5AQCAtMjk1MCwzICsyOTYwLDcyIEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdH0gLyogc3dpdGNoIHZfb3Bjb2RlICovXFxuIFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbiB9XFxuK1xcbisvKipcXG4rICogaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlIC0gUG9sbCBhZG1pbiBxdWV1ZSBmb3IgdmlydGNobmwgcmVzcG9uc2VcXG4rICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuKyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nXFxuKyAqIEBjb25kaXRpb246IGNhbGxiYWNrIHRvIGNoZWNrIGlmIGRlc2lyZWQgcmVzcG9uc2UgcmVjZWl2ZWRcXG4rICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2tcXG4rICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kc1xcbisgKlxcbisgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuXFxuKyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrXFxuKyAqIGlmIHRoZSBleHBlY3RlZCByZXNwb25zZSBoYXMgYmVlbiByZWNlaXZlZC4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSBvcGNvZGVcXG4rICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzXFxuKyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWRcXG4rICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlXFxuKyAqIHBvbGxpbmcgaGFyZHdhcmUuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlXFxuKyAqL1xcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcXG4rXFx0XFx0XFx0XFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjb25kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxcbit7XFxuK1xcdHN0cnVjdCBpYXZmX2h3ICpodyA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodztcXG4rXFx0ZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4rXFx0aW50IHJldCA9IC1FQUdBSU47XFxuK1xcdHUxNiBwZW5kaW5nID0gMDtcXG4rXFx0dTMyIHZfcmV0dmFsO1xcbitcXG4rXFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRpZiAoIXBlbmRpbmcpXFxuK1xcdFxcdFxcdHVzbGVlcF9yYW5nZSg1MCwgNzUpO1xcbitcXG4rXFx0XFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcXHUwMDI2cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7XFxuK1xcdFxcdFxcdHJlY2VpdmVkX29wID0gKGVudW0gdmlydGNobmxfb3BzKWxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2VkZXNjLmNvb2tpZV9oaWdoKTtcXG4rXFx0XFx0XFx0aWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcXG4rXFx0XFx0XFx0XFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlZGVzYy5jb29raWVfbG93KTtcXG4rXFxuK1xcdFxcdFxcdFxcdGlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZXZlbnQtXFx1MDAzZW1zZ19idWYsIGV2ZW50LVxcdTAwM2Vtc2dfbGVuKTtcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChjb25kaXRpb24oYWRhcHRlciwgY29uZF9kYXRhLCByZWNlaXZlZF9vcCkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0bWVtc2V0KGV2ZW50LVxcdTAwM2Vtc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7XFxuK1xcbitcXHRcXHRcXHRpZiAocGVuZGluZylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTEzNjQsNiArMTM2NCwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxcbiBcXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2Vfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGljZV92ZiAqdmYsIGJvb2wgc2V0dGluZylcXG4re1xcbitcXHRpZiAoc2V0dGluZylcXG4rXFx0XFx0c2V0X2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTM5OSwxMSArMTQxNiwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnZmLVxcdTAwM2VjZmdfbG9jayk7XFxuIFxcbi1cXHR3aGlsZSAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjYgdmYtXFx1MDAzZW51bV9tYWNfbGxkcClcXG4tXFx0XFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xcbi1cXG4tXFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbi1cXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlbnVtX21hY19sbGRwIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0d2hpbGUgKHZmLVxcdTAwM2VudW1fbWFjX2xsZHApXFxuK1xcdFxcdFxcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcXG4rXFx0XFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbitcXHRcXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR2Zi1cXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XFxuK1xcdFxcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XFxuK1xcdH1cXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgdmZfaWQsIHRydXN0ZWQgPyBcXFwiXFxcIiA6IFxcXCJ1blxcXCIpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MDQuNzE1MjQzMjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MjE3OTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDEzNjVmZDBhMzM1ZDQyMTdiZDg0NjVjMjA5OWY5ODFjNGFhYzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTE6MDM6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2MS4uMGNjNDM0YjI2ZWI4OGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbkBAIC00OTQzLDYgKzQ5NDMsMjMgQEAgaW50IGk0MGVfbmRvX3NldF92Zl9zcG9vZmNoayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgZW5hYmxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaTQwZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXG4rICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbisgKlxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxuKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCdzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxuKyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9jYXBzKTtcbitcdGVsc2VcbitcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4rfVxuK1xuIC8qKlxuICAqIGk0MGVfbmRvX3NldF92Zl90cnVzdFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmXG5AQCAtNDk4NywxOSArNTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuK1x0LyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi9cbitcdGlmICghc2V0dGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpIHx8XG4rXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfTUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSkpIHtcbitcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4rXHRcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcbitcdH0gZWxzZSB7XG4rXHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuK1x0fVxuK1xuIFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHNldHRpbmcgPyBcIlwiIDogXCJ1blwiKTtcbiBcbi1cdGlmICh2Zi1cdTAwM2VhZHFfZW5hYmxlZCkge1xuLVx0XHRpZiAoIXZmLVx1MDAzZXRydXN0ZWQpIHtcbi1cdFx0XHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcIlZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwiLFxuLVx0XHRcdFx0IHZmX2lkKTtcbi1cdFx0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4tXHRcdH1cbi1cdH1cbi1cbiBvdXQ6XG4gXHRjbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuaW5kZXggMDUwZjgyNDFlZjVlNmIuLjVmY2JmYTBjYTg1NTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXG5AQCAtMjU5LDcgKzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGZpbmlzaF9jb25maWc7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcbi1cdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcbiBcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XG4gXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcbkBAIC01ODgsOCArNTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2VuYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9kZWxfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4rdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuQEAgLTYwNiw2ICs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHQgICAgICBlbnVtIHZpcnRjaG5sX29wcyB2X29wY29kZSxcbiBcdFx0XHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXG4rXHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSxcbitcdFx0XHRcdFx0XHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxuK1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHRpbWVvdXRfbXMpO1xuIGludCBpYXZmX2NvbmZpZ19yc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfYncoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbmluZGV4IDI5Yjg0MDNhMDY2YmM4Li4zZmEyODhlMzc5OGFlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgKzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuKyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuKyAqXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXG4re1xuK1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuK1xuK1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbit9XG4rXG4rLyoqXG4rICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbisgKlxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4rICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbisgKi9cbitzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuK3tcbitcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvIGV2ZW50O1xuK1x0aW50IHJldDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbitcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFldmVudC5tc2dfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4rXHRcdFx0XHRcdCAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApO1xuK1xuK291dDpcbitcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEwNDIsMjkgKzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbitcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4rXHRcdCAqIERvbid0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzXG4rXHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuK1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4rXHRcdCAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4gXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwobmV0ZGV2LVx1MDAzZWRldl9hZGRyLCBhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC01Mzk0LDkgKzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICsyLDcgQEBcbiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWF2Zi5oXCJcbiAjaW5jbHVkZSBcImlhdmZfcHRwLmhcIlxuQEAgLTU1NSwyMCArNTU2LDIzIEBAIGlhdmZfc2V0X21hY19hZGRyX3R5cGUoc3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHIgKnZpcnRjaG5sX2V0aGVyX2FkZHIsXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4gICpcbiAgKiBSZXF1ZXN0IHRoYXQgdGhlIFBGIGFkZCBvbmUgb3IgbW9yZSBhZGRyZXNzZXMgdG8gb3VyIGZpbHRlcnMuXG4tICoqL1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4rICovXG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4ge1xuIFx0c3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHJfbGlzdCAqdmVhbDtcbiBcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7XG4gXHRpbnQgaSA9IDAsIGNvdW50ID0gMDtcbiBcdGJvb2wgbW9yZSA9IGZhbHNlO1xuIFx0c2l6ZV90IGxlbjtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiQ2Fubm90IGFkZCBmaWx0ZXJzLCBjb21tYW5kICVkIHBlbmRpbmdcXG5cIixcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3ApO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICs1ODQsNyBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRpZiAoIWNvdW50KSB7XG4gXHRcdGFkYXB0ZXItXHUwMDNlYXFfcmVxdWlyZWQgXHUwMDI2PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1hY192bGFuX2xpc3RfbG9jayk7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFI7XG4gXG5AQCAtNTk0LDggKzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbitcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0dmVhbC1cdTAwM2V2c2lfaWQgPSBhZGFwdGVyLVx1MDAzZXZzaV9yZXMtXHUwMDNldnNpX2lkO1xuQEAgLTYxNSw4ICs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4rXHRyZXQgPSBpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTtcbiBcdGtmcmVlKHZlYWwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcXG5cIiwgcmV0KTtcbitcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qKlxuQEAgLTcxMiw4ICs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcbiAgKlxuICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS5cbi0gKiovXG4tc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuKyAqL1xuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wO1xuQEAgLTIzNjQsNyArMjM3Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcbiBcdFx0XHQvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovXG4gXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRcdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgVklSVENITkxfT1BfREVMX0VUSF9BRERSOlxuIFx0XHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCIsXG5AQCAtMjU1NSw3ICsyNTY2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyKTtcbiBcdFx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xuIFx0XHR9XG4tXHRcdHdha2VfdXAoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVklSVENITkxfT1BfR0VUX1NUQVRTOiB7XG4gXHRcdHN0cnVjdCBpYXZmX2V0aF9zdGF0cyAqc3RhdHMgPVxuQEAgLTI5NTAsMyArMjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuK1xuKy8qKlxuKyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4rICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4rICogQGV2ZW50OiBwcmUtYWxsb2NhdGVkIGV2ZW50IGJ1ZmZlciB0byB1c2UgZm9yIHBvbGxpbmdcbisgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4rICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2tcbisgKiBAdGltZW91dF9tczogbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzXG4rICpcbisgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuXG4rICogQWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHZhbGlkIG1lc3NhZ2UsIGNhbGxzIHRoZSBjb25kaXRpb24gY2FsbGJhY2sgdG8gY2hlY2tcbisgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4rICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzXG4rICogcG9sbGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlIG9yIHRpbWVvdXQgZXhwaXJlcy5cbisgKlxuKyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWRcbisgKiBzdGF0ZSBtaXNtYXRjaCBpZiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudC5cbisgKlxuKyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlXG4rICogcG9sbGluZyBoYXJkd2FyZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlXG4rICovXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0c3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gKmV2ZW50LFxuK1x0XHRcdFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0XHRcdFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmNvbmRfZGF0YSxcbitcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuK3tcbitcdHN0cnVjdCBpYXZmX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4rXHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbitcdGludCByZXQgPSAtRUFHQUlOO1xuK1x0dTE2IHBlbmRpbmcgPSAwO1xuK1x0dTMyIHZfcmV0dmFsO1xuK1xuK1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuK1x0ZG8ge1xuK1x0XHRpZiAoIXBlbmRpbmcpXG4rXHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4rXG4rXHRcdGlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgXHUwMDI2cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7XG4rXHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4rXHRcdFx0aWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbitcdFx0XHRcdHZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfbG93KTtcbitcbitcdFx0XHRcdGlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCxcbitcdFx0XHRcdFx0XHRcdCAoZW51bSBpYXZmX3N0YXR1cyl2X3JldHZhbCxcbitcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbitcbitcdFx0XHRcdGlmIChjb25kaXRpb24oYWRhcHRlciwgY29uZF9kYXRhLCByZWNlaXZlZF9vcCkpIHtcbitcdFx0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1xuK1x0XHRcdG1lbXNldChldmVudC1cdTAwM2Vtc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7XG4rXG4rXHRcdFx0aWYgKHBlbmRpbmcpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjQsNiArMTM2NCwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxuIFx0cmV0dXJuIF9faWNlX3NldF92Zl9tYWMoaWNlX25ldGRldl90b19wZihuZXRkZXYpLCB2Zl9pZCwgbWFjKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcbisgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuKyAqXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4rICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0J3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK1x0ZWxzZVxuK1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEzOTksMTEgKzE0MTYsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4rXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuK1x0aWYgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4rXHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuK1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbitcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuK1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuK1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcIlwiIDogXCJ1blwiKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDExOjAzOjA0LjcxNTI0NDkxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjgyMTUwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gU3RhbmRhcmQgRnV6emluZyBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpNDBlYCwgYGlhdmZgLCBhbmQgYGljZWAgZHJpdmVycyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpNDBlX25kb19zZXRfdmZfdHJ1c3RgLCBgaWF2Zl9zZXRfbWFjYCwgYW5kIGBpY2Vfc2V0X3ZmX3RydXN0YC4gIFRoZSBgaWF2Zl9zZXRfbWFjYCBjaGFuZ2UgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCByZXBsYWNpbmcgdGhlIGludGVycnVwdGlibGUgd2FpdCB3aXRoIHN5bmNocm9ub3VzIHBvbGxpbmcuIEJ1dCBhcmUgYW55IG9mIHRoZXNlIGNoYW5nZXMgZXZlbiByZWFjaGFibGUgaW4gb3VyIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1xuXG5gaWF2ZmAgaXMgdGhlIEludGVsIEV0aGVybmV0IEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLCBhbmQgdGhhdCAqY291bGQqIGJlIHVzZWQgaW4gYSBWTSBpZiB3ZSBoYWQgU1ItSU9WIFZGIHBhc3N0aHJvdWdoLCB3aGljaCBpcyBvZnRlbiBub3QgdGhlIGNhc2UuICBTeXprYWxsZXIgcmFyZWx5LCBpZiBldmVyLCBoYXMgcmVhbCBJbnRlbCBOSUNzIHBhc3NlZCB0aHJvdWdoIHVubGVzcyB3ZSdyZSB0YWxraW5nIGFib3V0IGVtdWxhdGlvbi4gIFNvLCBhcmUgdGhlc2UgZHJpdmVycyBldmVuICplbXVsYXRlZCogaW4gUUVNVT8gTGV0J3Mgc2VlLi4uICBOb3BlLCBRRU1VIGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy4sIGJ1dCBub3QgYGk0MGVgLCBgaWF2ZmAsIG9yIGBpY2VgLiAgSSBkb3VibGUtY2hlY2tlZCBqdXN0IHRvIGJlIHN1cmUuIE5vdGhpbmcuXG5cbk9rYXksIHNvIHRoZXkncmUgKmhhcmR3YXJlKiBkcml2ZXJzLCBub3Qgc29mdHdhcmUgZW11bGF0aW9ucy4gSSBjYW4ganVzdCB3cml0ZSB0aGUgY29uY2x1c2lvbjogYFdvcnRoRnV6emluZz1mYWxzZWAuIFdhaXQsIG1heWJlIHRoZXJlJ3MgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3Igc29tZSBzbmVha3kgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIHNvbWUgY2xldmVyIHRyaWNrcz8gIE5vLCB0aGVzZSBhcmUgUENJIGRyaXZlcnMuIEV2ZW4gaWYgUUVNVSBoYWQgYSBzb2Z0d2FyZSBsYXllciwgaXQgd291bGRuJ3QgdXNlIHRoZXNlIGRldmljZXMuIExldCBtZSBjaGVjayB0aGUgUUVNVSBzb3VyY2Ugb3IgZXZlbiB0aGUga2VybmVsLiAgTm9wZS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBRRU1VIGRvZXNuJ3QgaGF2ZSBgaTQwZWAgb3IgYGljZWAuIEkgcmVtZW1iZXIgc29tZSB3b3JrIGluIHRoYXQgYXJlYSwgYnV0IG5vLCBpdCdzIG5vdCB1cHN0cmVhbS4gSSBhbSBub3cgY2VydGFpbiB0aGF0IHRoZSBhbnN3ZXIgaXMgbm8uIFdvcnRoRnV6emluZz1mYWxzZS4gSSBhbSBzZWFyY2hpbmcgdGhlIFFFTVUgY29kZSBmb3Igc29tZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBgaTQwZWAuIE5vLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybS4gTm8sIGl0J3MgYSBoYXJkd2FyZSBkcml2ZXIsIHNvIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiAgVGhlIGBpYXZmYCBkcml2ZXIgY29uZmlybXMgbXkgdGhvdWdodHMuIEl0IGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciB3YXkuXG5cbkFscmlnaHQsIEkgY2FuIGRyYWZ0IHRoZSByZWFzb25pbmcgbm93OiBUaGVzZSBkcml2ZXJzIGFyZSBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgd2l0aGluIHRoZSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdXNlcy4gVGh1cywgdGhlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUsIGFuZCB0aGUgY29kZSBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg2LCJPdXRwdXRUb2tlbnMiOjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MTguMzk3Mzk4MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBJbnRlbCBFdGhlcm5ldCBhZGFwdGVycyAoaTQwZSwgaWF2ZiwgaWNlKS4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBJbnRlbCBFdGhlcm5ldCBhZGFwdGVycyAoaTQwZSwgaWF2ZiwgaWNlKS4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgc42t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 10:52:49 +0000 UTC FinishedAt: 2026-06-23 11:03:19 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDExOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDEzNjVmZDBhMzM1ZDQyMTdiZDg0NjVjMjA5OWY5ODFjNGFhYzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTE6MDM6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xuaW5kZXggYTI2YzNkNDdlYzE1NjEuLjBjYzQzNGIyNmViODhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICYjNDM7NDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmVcbiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4mIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcbkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuJiM0MztcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4mIzQzO1x0aWYgKCFzZXR0aW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4mIzQzO1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwmIzM0OyxcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7dW5cJiMzNDspO1xuIFxuLVx0aWYgKHZmLVx1MDAzZWFkcV9lbmFibGVkKSB7XG4tXHRcdGlmICghdmYtXHUwMDNldHJ1c3RlZCkge1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1ZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcbiBcdHdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlO1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xuIFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDtcbiBcdGludCBudW1fdmxhbl9maWx0ZXJzO1xuQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2VuYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzQzO2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5AQCAtNjA2LDYgJiM0Mzs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHQgICAgICBlbnVtIHZpcnRjaG5sX29wcyB2X29wY29kZSxcbiBcdFx0XHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKTtcbiBpbnQgaWF2Zl9jb25maWdfcnNzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX3F1YW50YV9zaXplKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5pbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5AQCAtMTAyOSw2ICYjNDM7MTAyOSw2MCBAQCBzdGF0aWMgYm9vbCBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXG4mIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuJiM0MzsgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4ICphZGRyID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfc2V0X21hY19zeW5jIC0gU3luY2hyb25vdXNseSBjaGFuZ2UgTUFDIGFkZHJlc3NcbiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogU2VuZCBNQUMgY2hhbmdlIHJlcXVlc3QgdG8gUEYgYW5kIHBvbGwgYWRtaW4gcXVldWUgZm9yIHJlc3BvbnNlLlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4mIzQzOyAqIEV2ZW50IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYmVmb3JlIHNlbmRpbmcgdG8gYXZvaWQgc3RhdGUgbWlzbWF0Y2ggaWZcbiYjNDM7ICogYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQgdG8gUEYuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gZXZlbnQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XG4mIzQzO1x0ZXZlbnQubXNnX2J1ZiA9IGt6YWxsb2MoZXZlbnQuYnVmX2xlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFldmVudC5tc2dfYnVmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFx1MDAyNmV2ZW50LFxuJiM0MztcdFx0XHRcdFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUoZXZlbnQubXNnX2J1Zik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpYXZmX3NldF9tYWMgLSBORE8gY2FsbGJhY2sgdG8gc2V0IHBvcnQgTUFDIGFkZHJlc3NcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtMTA0MiwyOSAmIzQzOzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChpYXZmX2lzX3Jlc2V0X2luX3Byb2dyZXNzKGFkYXB0ZXIpIHx8IGFkYXB0ZXItXHUwMDNlc3RhdGUgXHUwMDNjIF9fSUFWRl9ET1dOKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4mIzQzO1x0XHQgKiBEb24mIzM5O3Qgcm9sbGJhY2sgb24gdGltZW91dCAoLUVBR0FJTikgYmVjYXVzZSB0aGUgbWVzc2FnZSB3YXNcbiYjNDM7XHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuJiM0MztcdFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxuJiM0MztcdFx0ICogb3IgYWNjZXB0YW5jZSAob24gUEYgc3VjY2VzcykgYXV0b21hdGljYWxseS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XG4mIzQzO1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdFx0fVxuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCFyZXQpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdH1cbiBcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbChuZXRkZXYtXHUwMDNlZGV2X2FkZHIsIGFkZHItXHUwMDNlc2FfZGF0YSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTUzOTQsOSAmIzQzOzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zl9wdHAuaFwmIzM0O1xuQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xuIFx0c3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZjtcbiBcdGludCBpID0gMCwgY291bnQgPSAwO1xuIFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCYjMzQ7LFxuIFx0XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICYjNDM7NTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjtcbiBcbkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR2ZWFsLVx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXHUwMDNldnNpX3Jlcy1cdTAwM2V2c2lfaWQ7XG5AQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4mIzQzO1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1VuYWJsZSB0byBzZW5kIEFERF9FVEhfQUREUiBtZXNzYWdlIHRvIFBGLCBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxuLSAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuIFx0XHRcdC8qIHJlc3RvcmUgYWRtaW5pc3RyYXRpdmVseSBzZXQgTUFDIGFkZHJlc3MgKi9cbiBcdFx0XHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbi1cdFx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCYjMzQ7LFxuQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpO1xuIFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4gXHRcdH1cbi1cdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcbiBcdFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XG5AQCAtMjk1MCwzICYjNDM7Mjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4mIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuJiM0MzsgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xuJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4mIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4mIzQzOyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuJiM0MzsgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xuJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4mIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuJiM0MzsgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4mIzQzOyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuJiM0MzsgKiBwb2xsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FQUdBSU47XG4mIzQzO1x0dTE2IHBlbmRpbmcgPSAwO1xuJiM0MztcdHUzMiB2X3JldHZhbDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcdTAwMjZwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4mIzQzO1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4mIzQzO1x0XHRcdFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cdTAwM2VkZXNjLmNvb2tpZV9sb3cpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KGV2ZW50LVx1MDAzZW1zZ19idWYsIDAsIElBVkZfTUFYX0FRX0JVRl9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZW5kaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuaW5kZXggN2UwMGUwOTE3NTZkZGMuLjc4NWJiZDY2NWU3N2M0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbkBAIC0xMzY0LDYgJiM0MzsxMzY0LDIzIEBAIGludCBpY2Vfc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIHU4ICptYWMpXG4gXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldFxuJiM0MzsgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZVxuJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC5cbiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxuJiM0MzsgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9zZXR1cF92Zl90cnVzdChzdHJ1Y3QgaWNlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9jYXBzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9zZXRfdmZfdHJ1c3RcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtMTM5OSwxMSAmIzQzOzE0MTYsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4mIzQzO1x0LyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi9cbiYjNDM7XHRpZiAoIXRydXN0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cdTAwM2V2Zl9zdGF0ZXMpIHx8XG4mIzQzO1x0ICAgICB0ZXN0X2JpdChJQ0VfVkZfU1RBVEVfTUNfUFJPTUlTQywgdmYtXHUwMDNldmZfc3RhdGVzKSkpIHtcbiYjNDM7XHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4mIzQzO1x0XHRcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcbiYjNDM7XHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuJiM0MztcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dmYtXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XG4mIzQzO1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuJiM0MztcdH1cbiBcdGRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxuXCYjMzQ7LFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDt1blwmIzM0Oyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWQxMzY1ZmQwYTMzNWQ0MjE3YmQ4NDY1YzIwOTlmOTgxYzRhYWM1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDExOjAzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYwppbmRleCBhMjZjM2Q0N2VjMTU2MS4uMGNjNDM0YjI2ZWI4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCkBAIC00OTQzLDYgJiM0Mzs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaTQwZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldAomIzQzOyAqIEB2ZjogVkYgdG8gY29uZmlndXJlCiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmcKJiM0MzsgKgomIzQzOyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LgomIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWQKJiM0MzsgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKQomIzQzO3sKJiM0MzsJaWYgKHNldHRpbmcpCiYjNDM7CQlzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgJmFtcDt2Zi0mZ3Q7dmZfY2Fwcyk7CiYjNDM7CWVsc2UKJiM0MzsJCWNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0CiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlIG9mIHRoZSBwZgpAQCAtNDk4NywxOSAmIzQzOzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZykKIAlzZXRfYml0KF9fSTQwRV9NQUNWTEFOX1NZTkNfUEVORElORywgcGYtJmd0O3N0YXRlKTsKIAlwZi0mZ3Q7dnNpW3ZmLSZndDtsYW5fdnNpX2lkeF0tJmd0O2ZsYWdzIHw9IEk0MEVfVlNJX0ZMQUdfRklMVEVSX0NIQU5HRUQ7CiAKLQlpNDBlX3ZjX3Jlc2V0X3ZmKHZmLCB0cnVlKTsKJiM0MzsJLyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi8KJiM0MzsJaWYgKCFzZXR0aW5nICZhbXA7JmFtcDsKJiM0MzsJICAgICh2Zi0mZ3Q7YWRxX2VuYWJsZWQgfHwgdmYtJmd0O251bV9jbG91ZF9maWx0ZXJzICZndDsgMCB8fAomIzQzOwkgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgJmFtcDt2Zi0mZ3Q7dmZfc3RhdGVzKSB8fAomIzQzOwkgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfTUNfUFJPTUlTQywgJmFtcDt2Zi0mZ3Q7dmZfc3RhdGVzKSkpIHsKJiM0MzsJCWk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpOwomIzQzOwkJaTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaTQwZV9zZXR1cF92Zl90cnVzdCh2Ziwgc2V0dGluZyk7CiYjNDM7CX0KJiM0MzsKIAlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxuJiMzNDssCiAJCSB2Zl9pZCwgc2V0dGluZyA/ICYjMzQ7JiMzNDsgOiAmIzM0O3VuJiMzNDspOwogCi0JaWYgKHZmLSZndDthZHFfZW5hYmxlZCkgewotCQlpZiAoIXZmLSZndDt0cnVzdGVkKSB7Ci0JCQlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsCi0JCQkJICYjMzQ7VkYgJXUgbm8gbG9uZ2VyIFRydXN0ZWQsIGRlbGV0aW5nIGFsbCBjbG91ZCBmaWx0ZXJzXG4mIzM0OywKLQkJCQkgdmZfaWQpOwotCQkJaTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpOwotCQl9Ci0JfQotCiBvdXQ6CiAJY2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oCmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnOwogCXdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlOwotCXdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTsKIAlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzOwogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDsKIAlpbnQgbnVtX3ZsYW5fZmlsdGVyczsKQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLAogCQkJICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7CiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpOwogaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwppbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwpAQCAtMTAyOSw2ICYjNDM7MTAyOSw2MCBAQCBzdGF0aWMgYm9vbCBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkCiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGRhdGE6IE1BQyBhZGRyZXNzIGJlaW5nIGNoZWNrZWQgKGFzIGNvbnN0IHZvaWQgKikKJiM0MzsgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2UKJiM0MzsgKgomIzQzOyAqIENhbGxiYWNrIGZvciBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoKSB0byBjaGVjayBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApCiYjNDM7ewomIzQzOwljb25zdCB1OCAqYWRkciA9IGRhdGE7CiYjNDM7CiYjNDM7CXJldHVybiBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChhZGFwdGVyLSZndDtuZXRkZXYsIGFkZHIpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzCiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGFkZHI6IE1BQyBhZGRyZXNzIHRvIHNldAomIzQzOyAqCiYjNDM7ICogU2VuZCBNQUMgY2hhbmdlIHJlcXVlc3QgdG8gUEYgYW5kIHBvbGwgYWRtaW4gcXVldWUgZm9yIHJlc3BvbnNlLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byAyLjUgc2Vjb25kcy4KJiM0MzsgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmCiYjNDM7ICogYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQgdG8gUEYuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjX3N5bmMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJZXZlbnQuYnVmX2xlbiA9IElBVkZfTUFYX0FRX0JVRl9TSVpFOwomIzQzOwlldmVudC5tc2dfYnVmID0ga3phbGxvYyhldmVudC5idWZfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFldmVudC5tc2dfYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShhZGFwdGVyLCAmYW1wO2V2ZW50LAomIzQzOwkJCQkJICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShldmVudC5tc2dfYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlhdmZfc2V0X21hYyAtIE5ETyBjYWxsYmFjayB0byBzZXQgcG9ydCBNQUMgYWRkcmVzcwogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTA0MiwyOSAmIzQzOzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci0mZ3Q7c3RhdGUgJmx0OyBfX0lBVkZfRE9XTikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItJmd0O3NhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKIAlyZXQgPSBpYXZmX3JlcGxhY2VfcHJpbWFyeV9tYWMoYWRhcHRlciwgYWRkci0mZ3Q7c2FfZGF0YSk7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlLAotCQkJCQkgICAgICAgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQobmV0ZGV2LCBhZGRyLSZndDtzYV9kYXRhKSwKLQkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjUwMCkpOwotCi0JLyogSWYgcmV0ICZsdDsgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLgotCSAqIElmIHJldCA9PSAwIHRoZW4gaXQgbWVhbnMgd2UgZ290IGEgdGltZW91dC4KLQkgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLAotCSAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQywKLQkgKiBpZiB5ZXMgdGhlbiBzZXQgTUFDIHN1Y2NlZWRlZCBvdGhlcndpc2UgaXQgZmFpbGVkIHJldHVybiAtRUFDQ0VTCi0JICovCi0JaWYgKHJldCAmbHQ7IDApCiYjNDM7CXJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItJmd0O3NhX2RhdGEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQkvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLgomIzQzOwkJICogRG9uJiMzOTt0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzCiYjNDM7CQkgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcywKJiM0MzsJCSAqIGlhdmZfdmlydGNobmxfY29tcGxldGlvbigpIHdpbGwgaGFuZGxlIHJvbGxiYWNrIChvbiBQRiBlcnJvcikKJiM0MzsJCSAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgIT0gLUVBR0FJTikgewomIzQzOwkJCWlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7CiYjNDM7CQkJZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItJmd0O2h3Lm1hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJCX0KIAkJcmV0dXJuIHJldDsKLQotCWlmICghcmV0KQotCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQogCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi0mZ3Q7ZGV2X2FkZHIsIGFkZHItJmd0O3NhX2RhdGEpKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTUzOTQsOSAmIzQzOzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJLyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdHJhbnNpdGlvbiB0byBkb3duIHN0YXR1cyAqLwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDthZGFwdGVyLSZndDtkb3duX3dhaXRxdWV1ZSk7CiAKLQkvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB2aXJ0Y2hhbm5lbCBldmVudHMgKi8KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlKTsKLQogCUlOSVRfTElTVF9IRUFEKCZhbXA7YWRhcHRlci0mZ3Q7cHRwLmFxX2NtZHMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDthZGFwdGVyLSZndDtwdHAucGhjX3RpbWVfd2FpdHF1ZXVlKTsKIAltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cHRwLmFxX2NtZF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMKaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9uZXQvaW50ZWwvbGliaWUvcnguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aWF2Zi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWF2Zl9wdHAuaCYjMzQ7CkBAIC01NTUsMjAgJiM0Mzs1NTYsMjMgQEAgaWF2Zl9zZXRfbWFjX2FkZHJfdHlwZShzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkciAqdmlydGNobmxfZXRoZXJfYWRkciwKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQogICoKICAqIFJlcXVlc3QgdGhhdCB0aGUgUEYgYWRkIG9uZSBvciBtb3JlIGFkZHJlc3NlcyB0byBvdXIgZmlsdGVycy4KLSAqKi8KLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7aW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHJfbGlzdCAqdmVhbDsKIAlzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmOwogCWludCBpID0gMCwgY291bnQgPSAwOwogCWJvb2wgbW9yZSA9IGZhbHNlOwogCXNpemVfdCBsZW47CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7CiAJCS8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi8KIAkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtDYW5ub3QgYWRkIGZpbHRlcnMsIGNvbW1hbmQgJWQgcGVuZGluZ1xuJiMzNDssCiAJCQlhZGFwdGVyLSZndDtjdXJyZW50X29wKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwpAQCAtNTgwLDcgJiM0Mzs1ODQsNyBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAJaWYgKCFjb3VudCkgewogCQlhZGFwdGVyLSZndDthcV9yZXF1aXJlZCAmYW1wOz0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjsKIApAQCAtNTk0LDggJiM0Mzs1OTgsOSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAKIAl2ZWFsID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghdmVhbCkgewomIzQzOwkJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWFjX3ZsYW5fbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdmVhbC0mZ3Q7dnNpX2lkID0gYWRhcHRlci0mZ3Q7dnNpX3Jlcy0mZ3Q7dnNpX2lkOwpAQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwogCi0JaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7CiYjNDM7CXJldCA9IGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pOwogCWtmcmVlKHZlYWwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNzEyLDggJiM0Mzs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQogICoKICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS4KLSAqKi8KLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKJiM0MzsgKi8KJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wOwpAQCAtMjM2NCw3ICYjNDM7MjM3Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpOwogCQkJLyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqLwogCQkJZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItJmd0O2h3Lm1hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKLQkJCXdha2VfdXAoJmFtcDthZGFwdGVyLSZndDt2Y193YWl0cXVldWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVklSVENITkxfT1BfREVMX0VUSF9BRERSOgogCQkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXG4mIzM0OywKQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAogCQkJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIpOwogCQkJbmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTsKIAkJfQotCQl3YWtlX3VwKCZhbXA7YWRhcHRlci0mZ3Q7dmNfd2FpdHF1ZXVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHsKIAkJc3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9CkBAIC0yOTUwLDMgJiM0MzsyOTYwLDcyIEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJfSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi8KIAlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UgLSBQb2xsIGFkbWluIHF1ZXVlIGZvciB2aXJ0Y2hubCByZXNwb25zZQomIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZQomIzQzOyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nCiYjNDM7ICogQGNvbmRpdGlvbjogY2FsbGJhY2sgdG8gY2hlY2sgaWYgZGVzaXJlZCByZXNwb25zZSByZWNlaXZlZAomIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrCiYjNDM7ICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcwomIzQzOyAqCiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLgomIzQzOyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrCiYjNDM7ICogaWYgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIG9wY29kZQomIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlcwomIzQzOyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkCiYjNDM7ICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZQomIzQzOyAqIHBvbGxpbmcgaGFyZHdhcmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKJiM0MzsJCQkJc3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gKmV2ZW50LAomIzQzOwkJCQlib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwKJiM0MzsJCQkJCQkgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLAomIzQzOwkJCQljb25zdCB2b2lkICpjb25kX2RhdGEsCiYjNDM7CQkJCXVuc2lnbmVkIGludCB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IGlhdmZfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsJZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dDsKJiM0MzsJaW50IHJldCA9IC1FQUdBSU47CiYjNDM7CXUxNiBwZW5kaW5nID0gMDsKJiM0MzsJdTMyIHZfcmV0dmFsOwomIzQzOwomIzQzOwluZXRkZXZfYXNzZXJ0X2xvY2tlZChhZGFwdGVyLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoIXBlbmRpbmcpCiYjNDM7CQkJdXNsZWVwX3JhbmdlKDUwLCA3NSk7CiYjNDM7CiYjNDM7CQlpZiAoaWF2Zl9jbGVhbl9hcnFfZWxlbWVudChodywgZXZlbnQsICZhbXA7cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7CiYjNDM7CQkJcmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtJmd0O2Rlc2MuY29va2llX2hpZ2gpOwomIzQzOwkJCWlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7CiYjNDM7CQkJCXZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtJmd0O2Rlc2MuY29va2llX2xvdyk7CiYjNDM7CiYjNDM7CQkJCWlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCwKJiM0MzsJCQkJCQkJIChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLAomIzQzOwkJCQkJCQkgZXZlbnQtJmd0O21zZ19idWYsIGV2ZW50LSZndDttc2dfbGVuKTsKJiM0MzsKJiM0MzsJCQkJaWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkgewomIzQzOwkJCQkJcmV0ID0gMDsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCW1lbXNldChldmVudC0mZ3Q7bXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpOwomIzQzOwomIzQzOwkJCWlmIChwZW5kaW5nKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwppbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKQEAgLTEzNjQsNiAmIzQzOzEzNjQsMjMgQEAgaW50IGljZV9zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgdTggKm1hYykKIAlyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0CiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmUKJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZwomIzQzOyAqCiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuCiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZAomIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9zZXR1cF92Zl90cnVzdChzdHJ1Y3QgaWNlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKQomIzQzO3sKJiM0MzsJaWYgKHNldHRpbmcpCiYjNDM7CQlzZXRfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0MzsJZWxzZQomIzQzOwkJY2xlYXJfYml0KElDRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9zZXRfdmZfdHJ1c3QKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEzOTksMTEgJiM0MzsxNDE2LDE5IEBAIGludCBpY2Vfc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCB0cnVzdGVkKQogCiAJbXV0ZXhfbG9jaygmYW1wO3ZmLSZndDtjZmdfbG9jayk7CiAKLQl3aGlsZSAoIXRydXN0ZWQgJmFtcDsmYW1wOyB2Zi0mZ3Q7bnVtX21hY19sbGRwKQotCQlpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7Ci0KLQl2Zi0mZ3Q7dHJ1c3RlZCA9IHRydXN0ZWQ7Ci0JaWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTsKJiM0MzsJLyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi8KJiM0MzsJaWYgKCF0cnVzdGVkICZhbXA7JmFtcDsKJiM0MzsJICAgICh2Zi0mZ3Q7bnVtX21hY19sbGRwICZndDsgMCB8fAomIzQzOwkgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi0mZ3Q7dmZfc3RhdGVzKSB8fAomIzQzOwkgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi0mZ3Q7dmZfc3RhdGVzKSkpIHsKJiM0MzsJCXdoaWxlICh2Zi0mZ3Q7bnVtX21hY19sbGRwKQomIzQzOwkJCWljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTsKJiM0MzsJCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKJiM0MzsJCWljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl2Zi0mZ3Q7dHJ1c3RlZCA9IHRydXN0ZWQ7CiYjNDM7CQlpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpOwomIzQzOwl9CiAJZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxuJiMzNDssCiAJCSB2Zl9pZCwgdHJ1c3RlZCA/ICYjMzQ7JiMzNDsgOiAmIzM0O3VuJiMzNDspOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODYKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBTdGFuZGFyZCBGdXp6aW5nIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpNDBlYCwgYGlhdmZgLCBhbmQgYGljZWAgZHJpdmVycyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpNDBlX25kb19zZXRfdmZfdHJ1c3RgLCBgaWF2Zl9zZXRfbWFjYCwgYW5kIGBpY2Vfc2V0X3ZmX3RydXN0YC4gIFRoZSBgaWF2Zl9zZXRfbWFjYCBjaGFuZ2UgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCByZXBsYWNpbmcgdGhlIGludGVycnVwdGlibGUgd2FpdCB3aXRoIHN5bmNocm9ub3VzIHBvbGxpbmcuIEJ1dCBhcmUgYW55IG9mIHRoZXNlIGNoYW5nZXMgZXZlbiByZWFjaGFibGUgaW4gb3VyIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPwoKYGlhdmZgIGlzIHRoZSBJbnRlbCBFdGhlcm5ldCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgYW5kIHRoYXQgKmNvdWxkKiBiZSB1c2VkIGluIGEgVk0gaWYgd2UgaGFkIFNSLUlPViBWRiBwYXNzdGhyb3VnaCwgd2hpY2ggaXMgb2Z0ZW4gbm90IHRoZSBjYXNlLiAgU3l6a2FsbGVyIHJhcmVseSwgaWYgZXZlciwgaGFzIHJlYWwgSW50ZWwgTklDcyBwYXNzZWQgdGhyb3VnaCB1bmxlc3Mgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLiAgU28sIGFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gKmVtdWxhdGVkKiBpbiBRRU1VPyBMZXQmIzM5O3Mgc2VlLi4uICBOb3BlLCBRRU1VIGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy4sIGJ1dCBub3QgYGk0MGVgLCBgaWF2ZmAsIG9yIGBpY2VgLiAgSSBkb3VibGUtY2hlY2tlZCBqdXN0IHRvIGJlIHN1cmUuIE5vdGhpbmcuCgpPa2F5LCBzbyB0aGV5JiMzOTtyZSAqaGFyZHdhcmUqIGRyaXZlcnMsIG5vdCBzb2Z0d2FyZSBlbXVsYXRpb25zLiBJIGNhbiBqdXN0IHdyaXRlIHRoZSBjb25jbHVzaW9uOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gV2FpdCwgbWF5YmUgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3Igc29tZSBzbmVha3kgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIHNvbWUgY2xldmVyIHRyaWNrcz8gIE5vLCB0aGVzZSBhcmUgUENJIGRyaXZlcnMuIEV2ZW4gaWYgUUVNVSBoYWQgYSBzb2Z0d2FyZSBsYXllciwgaXQgd291bGRuJiMzOTt0IHVzZSB0aGVzZSBkZXZpY2VzLiBMZXQgbWUgY2hlY2sgdGhlIFFFTVUgc291cmNlIG9yIGV2ZW4gdGhlIGtlcm5lbC4gIE5vcGUuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYGk0MGVgIG9yIGBpY2VgLiBJIHJlbWVtYmVyIHNvbWUgd29yayBpbiB0aGF0IGFyZWEsIGJ1dCBubywgaXQmIzM5O3Mgbm90IHVwc3RyZWFtLiBJIGFtIG5vdyBjZXJ0YWluIHRoYXQgdGhlIGFuc3dlciBpcyBuby4gV29ydGhGdXp6aW5nPWZhbHNlLiBJIGFtIHNlYXJjaGluZyB0aGUgUUVNVSBjb2RlIGZvciBzb21lIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIGBpNDBlYC4gTm8uCgpPa2F5LCBsZXQgbWUgY29uZmlybS4gTm8sIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBzbyBpdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHMuICBUaGUgYGlhdmZgIGRyaXZlciBjb25maXJtcyBteSB0aG91Z2h0cy4gSXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIHdheS4KCkFscmlnaHQsIEkgY2FuIGRyYWZ0IHRoZSByZWFzb25pbmcgbm93OiBUaGVzZSBkcml2ZXJzIGFyZSBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgd2l0aGluIHRoZSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdXNlcy4gVGh1cywgdGhlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUsIGFuZCB0aGUgY29kZSBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgZm9yIEludGVsIEV0aGVybmV0IGFkYXB0ZXJzIChpNDBlLCBpYXZmLCBpY2UpLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMTowMzowMi40MjQzMzI1ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3MzA5Njk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MDIuNDI0MzQzNDIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkwMTMyMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWQxMzY1ZmQwYTMzNWQ0MjE3YmQ4NDY1YzIwOTlmOTgxYzRhYWM1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMTowMzowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuaW5kZXggYTI2YzNkNDdlYzE1NjEuLjBjYzQzNGIyNmViODhjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcXG5AQCAtNDk0Myw2ICs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcXG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcXG4rICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcXG4rICpcXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXFxuKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCdzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxcbisgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpXFxuK3tcXG4rXFx0aWYgKHNldHRpbmcpXFxuK1xcdFxcdHNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcXHUwMDI2dmYtXFx1MDAzZXZmX2NhcHMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3RcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcXG5AQCAtNDk4NywxOSArNTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxcbiBcXHRzZXRfYml0KF9fSTQwRV9NQUNWTEFOX1NZTkNfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGYtXFx1MDAzZXZzaVt2Zi1cXHUwMDNlbGFuX3ZzaV9pZHhdLVxcdTAwM2VmbGFncyB8PSBJNDBFX1ZTSV9GTEFHX0ZJTFRFUl9DSEFOR0VEO1xcbiBcXG4tXFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XFxuK1xcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXFxuK1xcdGlmICghc2V0dGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHZmLVxcdTAwM2VhZHFfZW5hYmxlZCB8fCB2Zi1cXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXFx1MDAzZSAwIHx8XFxuK1xcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCBcXHUwMDI2dmYtXFx1MDAzZXZmX3N0YXRlcykgfHxcXG4rXFx0ICAgICB0ZXN0X2JpdChJNDBFX1ZGX1NUQVRFX01DX1BST01JU0MsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XFxuK1xcdFxcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aTQwZV9zZXR1cF92Zl90cnVzdCh2Ziwgc2V0dGluZyk7XFxuK1xcdH1cXG4rXFxuIFxcdGRldl9pbmZvKFxcdTAwMjZwZi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcXFxuXFxcIixcXG4gXFx0XFx0IHZmX2lkLCBzZXR0aW5nID8gXFxcIlxcXCIgOiBcXFwidW5cXFwiKTtcXG4gXFxuLVxcdGlmICh2Zi1cXHUwMDNlYWRxX2VuYWJsZWQpIHtcXG4tXFx0XFx0aWYgKCF2Zi1cXHUwMDNldHJ1c3RlZCkge1xcbi1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0IFxcXCJWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCB2Zl9pZCk7XFxuLVxcdFxcdFxcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBvdXQ6XFxuIFxcdGNsZWFyX2JpdChfX0k0MEVfVklSVENITkxfT1BfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxcbmluZGV4IDA1MGY4MjQxZWY1ZTZiLi41ZmNiZmEwY2E4NTUzYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXFxuQEAgLTI1OSw3ICsyNTksNiBAQCBzdHJ1Y3QgaWF2Zl9hZGFwdGVyIHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcXG4gXFx0d2FpdF9xdWV1ZV9oZWFkX3QgZG93bl93YWl0cXVldWU7XFxuLVxcdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcXG4gXFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCB2bGFuX2ZpbHRlcl9saXN0O1xcbiBcXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcXG5AQCAtNTg4LDggKzU4Nyw5IEBAIHZvaWQgaWF2Zl9jb25maWd1cmVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfbWFwX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4tdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9kZWxfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuQEAgLTYwNiw2ICs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLFxcbiBcXHRcXHRcXHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XFxuIGludCBpYXZmX2NvbmZpZ19yc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5pbmRleCAyOWI4NDAzYTA2NmJjOC4uM2ZhMjg4ZTM3OThhZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxcbisgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcXG4rICpcXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xcbitcXG4rXFx0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXFx1MDAzZW5ldGRldiwgYWRkcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAYWRkcjogTUFDIGFkZHJlc3MgdG8gc2V0XFxuKyAqXFxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBuZXRkZXZfbG9jay4gVGhpcyBjYW4gc2xlZXAgZm9yIHVwIHRvIDIuNSBzZWNvbmRzLlxcbisgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmXFxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxcbisgKi9cXG4rc3RhdGljIGludCBpYXZmX3NldF9tYWNfc3luYyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XFxuK1xcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV2ZW50Lm1zZ19idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFxcdTAwMjZldmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTA0MiwyOSArMTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxcbiBcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cXHUwMDNlc3RhdGUgXFx1MDAzYyBfX0lBVkZfRE9XTilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVxcdTAwM2VzYV9kYXRhKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbi1cXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcXG4tXFxuLVxcdC8qIElmIHJldCBcXHUwMDNjIDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC5cXG4tXFx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0Llxcbi1cXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxcbi1cXHQgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsXFxuLVxcdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcXG4tXFx0ICovXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVxcdTAwM2VzYV9kYXRhKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLlxcbitcXHRcXHQgKiBEb24ndCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xcbitcXHRcXHQgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcyxcXG4rXFx0XFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxcbitcXHRcXHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdFxcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIsIGFkZHItXFx1MDAzZXNhX2RhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtNTM5NCw5ICs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRvd25fd2FpdHF1ZXVlKTtcXG4gXFxuLVxcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHZpcnRjaGFubmVsIGV2ZW50cyAqL1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbi1cXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRzKTtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiMC4uZTZiN2U4ZjgyYzdjMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpYXZmLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpYXZmX3B0cC5oXFxcIlxcbkBAIC01NTUsMjAgKzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcXG4gICpcXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxcbi0gKiovXFxuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcXG4rICovXFxuK2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyX2xpc3QgKnZlYWw7XFxuIFxcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7XFxuIFxcdGludCBpID0gMCwgY291bnQgPSAwO1xcbiBcXHRib29sIG1vcmUgPSBmYWxzZTtcXG4gXFx0c2l6ZV90IGxlbjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcXG4gXFx0XFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgYWRkIGZpbHRlcnMsIGNvbW1hbmQgJWQgcGVuZGluZ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3VycmVudF9vcCk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbkBAIC01ODAsNyArNTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRpZiAoIWNvdW50KSB7XFxuIFxcdFxcdGFkYXB0ZXItXFx1MDAzZWFxX3JlcXVpcmVkIFxcdTAwMjY9IH5JQVZGX0ZMQUdfQVFfQUREX01BQ19GSUxURVI7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFI7XFxuIFxcbkBAIC01OTQsOCArNTk4LDkgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXG4gXFx0dmVhbCA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKCF2ZWFsKSB7XFxuK1xcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0dmVhbC1cXHUwMDNldnNpX2lkID0gYWRhcHRlci1cXHUwMDNldnNpX3Jlcy1cXHUwMDNldnNpX2lkO1xcbkBAIC02MTUsOCArNjIwLDE1IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xcbiBcXG4tXFx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XFxuK1xcdHJldCA9IGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xcbiBcXHRrZnJlZSh2ZWFsKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzEyLDggKzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcXG4gICpcXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxcbi0gKiovXFxuLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4rICovXFxuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLVxcdTAwM2VuZXRkZXY7XFxuIFxcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wO1xcbkBAIC0yMzY0LDcgKzIzNzYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xcbiBcXHRcXHRcXHQvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovXFxuIFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuLVxcdFxcdFxcdHdha2VfdXAoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFZJUlRDSE5MX09QX0RFTF9FVEhfQUREUjpcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGRlbGV0ZSBNQUMgZmlsdGVyLCBlcnJvciAlc1xcXFxuXFxcIixcXG5AQCAtMjU1NSw3ICsyNTY2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpO1xcbiBcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHdha2VfdXAoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzoge1xcbiBcXHRcXHRzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID1cXG5AQCAtMjk1MCwzICsyOTYwLDcyIEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdH0gLyogc3dpdGNoIHZfb3Bjb2RlICovXFxuIFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xcbiB9XFxuK1xcbisvKipcXG4rICogaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlIC0gUG9sbCBhZG1pbiBxdWV1ZSBmb3IgdmlydGNobmwgcmVzcG9uc2VcXG4rICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuKyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nXFxuKyAqIEBjb25kaXRpb246IGNhbGxiYWNrIHRvIGNoZWNrIGlmIGRlc2lyZWQgcmVzcG9uc2UgcmVjZWl2ZWRcXG4rICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2tcXG4rICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kc1xcbisgKlxcbisgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuXFxuKyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrXFxuKyAqIGlmIHRoZSBleHBlY3RlZCByZXNwb25zZSBoYXMgYmVlbiByZWNlaXZlZC4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSBvcGNvZGVcXG4rICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzXFxuKyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWRcXG4rICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlXFxuKyAqIHBvbGxpbmcgaGFyZHdhcmUuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlXFxuKyAqL1xcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcXG4rXFx0XFx0XFx0XFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjb25kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxcbit7XFxuK1xcdHN0cnVjdCBpYXZmX2h3ICpodyA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodztcXG4rXFx0ZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4rXFx0aW50IHJldCA9IC1FQUdBSU47XFxuK1xcdHUxNiBwZW5kaW5nID0gMDtcXG4rXFx0dTMyIHZfcmV0dmFsO1xcbitcXG4rXFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRpZiAoIXBlbmRpbmcpXFxuK1xcdFxcdFxcdHVzbGVlcF9yYW5nZSg1MCwgNzUpO1xcbitcXG4rXFx0XFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcXHUwMDI2cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7XFxuK1xcdFxcdFxcdHJlY2VpdmVkX29wID0gKGVudW0gdmlydGNobmxfb3BzKWxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2VkZXNjLmNvb2tpZV9oaWdoKTtcXG4rXFx0XFx0XFx0aWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcXG4rXFx0XFx0XFx0XFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlZGVzYy5jb29raWVfbG93KTtcXG4rXFxuK1xcdFxcdFxcdFxcdGlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZXZlbnQtXFx1MDAzZW1zZ19idWYsIGV2ZW50LVxcdTAwM2Vtc2dfbGVuKTtcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChjb25kaXRpb24oYWRhcHRlciwgY29uZF9kYXRhLCByZWNlaXZlZF9vcCkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0bWVtc2V0KGV2ZW50LVxcdTAwM2Vtc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7XFxuK1xcbitcXHRcXHRcXHRpZiAocGVuZGluZylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTEzNjQsNiArMTM2NCwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxcbiBcXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2Vfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGljZV92ZiAqdmYsIGJvb2wgc2V0dGluZylcXG4re1xcbitcXHRpZiAoc2V0dGluZylcXG4rXFx0XFx0c2V0X2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTM5OSwxMSArMTQxNiwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnZmLVxcdTAwM2VjZmdfbG9jayk7XFxuIFxcbi1cXHR3aGlsZSAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjYgdmYtXFx1MDAzZW51bV9tYWNfbGxkcClcXG4tXFx0XFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xcbi1cXG4tXFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbi1cXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlbnVtX21hY19sbGRwIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0d2hpbGUgKHZmLVxcdTAwM2VudW1fbWFjX2xsZHApXFxuK1xcdFxcdFxcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcXG4rXFx0XFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbitcXHRcXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR2Zi1cXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XFxuK1xcdFxcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XFxuK1xcdH1cXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgdmZfaWQsIHRydXN0ZWQgPyBcXFwiXFxcIiA6IFxcXCJ1blxcXCIpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MDQuNzE1MjQzMjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MjE3OTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgSW50ZWwgRXRoZXJuZXQgYWRhcHRlcnMgKGk0MGUsIGlhdmYsIGljZSkuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDEzNjVmZDBhMzM1ZDQyMTdiZDg0NjVjMjA5OWY5ODFjNGFhYzUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTE6MDM6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2MS4uMGNjNDM0YjI2ZWI4OGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbkBAIC00OTQzLDYgKzQ5NDMsMjMgQEAgaW50IGk0MGVfbmRvX3NldF92Zl9zcG9vZmNoayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgZW5hYmxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaTQwZV9zZXR1cF92Zl90cnVzdCAtIEVuYWJsZS9kaXNhYmxlIFZGIHRydXN0IG1vZGUgd2l0aG91dCByZXNldFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXG4rICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbisgKlxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxuKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCdzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZFxuKyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9jYXBzKTtcbitcdGVsc2VcbitcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4rfVxuK1xuIC8qKlxuICAqIGk0MGVfbmRvX3NldF92Zl90cnVzdFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmXG5AQCAtNDk4NywxOSArNTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuK1x0LyogUmVzZXQgb25seSBpZiByZXZva2luZyB0cnVzdCBhbmQgVkYgaGFzIGFkdmFuY2VkIGZlYXR1cmVzIGNvbmZpZ3VyZWQgKi9cbitcdGlmICghc2V0dGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpIHx8XG4rXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfTUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSkpIHtcbitcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4rXHRcdGk0MGVfZGVsX2FsbF9jbG91ZF9maWx0ZXJzKHZmKTtcbitcdH0gZWxzZSB7XG4rXHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuK1x0fVxuK1xuIFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHNldHRpbmcgPyBcIlwiIDogXCJ1blwiKTtcbiBcbi1cdGlmICh2Zi1cdTAwM2VhZHFfZW5hYmxlZCkge1xuLVx0XHRpZiAoIXZmLVx1MDAzZXRydXN0ZWQpIHtcbi1cdFx0XHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcIlZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwiLFxuLVx0XHRcdFx0IHZmX2lkKTtcbi1cdFx0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4tXHRcdH1cbi1cdH1cbi1cbiBvdXQ6XG4gXHRjbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuaW5kZXggMDUwZjgyNDFlZjVlNmIuLjVmY2JmYTBjYTg1NTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXG5AQCAtMjU5LDcgKzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGZpbmlzaF9jb25maWc7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcbi1cdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcbiBcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XG4gXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcbkBAIC01ODgsOCArNTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2VuYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2Rpc2FibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9kZWxfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4rdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuQEAgLTYwNiw2ICs2MDYsMTMgQEAgdm9pZCBpYXZmX2Rpc2FibGVfdmxhbl9zdHJpcHBpbmcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHQgICAgICBlbnVtIHZpcnRjaG5sX29wcyB2X29wY29kZSxcbiBcdFx0XHQgICAgICBlbnVtIGlhdmZfc3RhdHVzIHZfcmV0dmFsLCB1OCAqbXNnLCB1MTYgbXNnbGVuKTtcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXG4rXHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSxcbitcdFx0XHRcdFx0XHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxuK1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHRpbWVvdXRfbXMpO1xuIGludCBpYXZmX2NvbmZpZ19yc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfYncoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbmluZGV4IDI5Yjg0MDNhMDY2YmM4Li4zZmEyODhlMzc5OGFlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgKzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuKyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuKyAqXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXG4re1xuK1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuK1xuK1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbit9XG4rXG4rLyoqXG4rICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbisgKlxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4rICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbisgKi9cbitzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuK3tcbitcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvIGV2ZW50O1xuK1x0aW50IHJldDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbitcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFldmVudC5tc2dfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4rXHRcdFx0XHRcdCAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApO1xuK1xuK291dDpcbitcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEwNDIsMjkgKzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbitcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4rXHRcdCAqIERvbid0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzXG4rXHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuK1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4rXHRcdCAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4gXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwobmV0ZGV2LVx1MDAzZWRldl9hZGRyLCBhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC01Mzk0LDkgKzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYjAuLmU2YjdlOGY4MmM3YzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICsyLDcgQEBcbiAvKiBDb3B5cmlnaHQoYykgMjAxMyAtIDIwMTggSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWF2Zi5oXCJcbiAjaW5jbHVkZSBcImlhdmZfcHRwLmhcIlxuQEAgLTU1NSwyMCArNTU2LDIzIEBAIGlhdmZfc2V0X21hY19hZGRyX3R5cGUoc3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHIgKnZpcnRjaG5sX2V0aGVyX2FkZHIsXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4gICpcbiAgKiBSZXF1ZXN0IHRoYXQgdGhlIFBGIGFkZCBvbmUgb3IgbW9yZSBhZGRyZXNzZXMgdG8gb3VyIGZpbHRlcnMuXG4tICoqL1xuLXZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4rICovXG4raW50IGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4ge1xuIFx0c3RydWN0IHZpcnRjaG5sX2V0aGVyX2FkZHJfbGlzdCAqdmVhbDtcbiBcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7XG4gXHRpbnQgaSA9IDAsIGNvdW50ID0gMDtcbiBcdGJvb2wgbW9yZSA9IGZhbHNlO1xuIFx0c2l6ZV90IGxlbjtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiQ2Fubm90IGFkZCBmaWx0ZXJzLCBjb21tYW5kICVkIHBlbmRpbmdcXG5cIixcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3ApO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICs1ODQsNyBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRpZiAoIWNvdW50KSB7XG4gXHRcdGFkYXB0ZXItXHUwMDNlYXFfcmVxdWlyZWQgXHUwMDI2PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1hY192bGFuX2xpc3RfbG9jayk7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFI7XG4gXG5AQCAtNTk0LDggKzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbitcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0dmVhbC1cdTAwM2V2c2lfaWQgPSBhZGFwdGVyLVx1MDAzZXZzaV9yZXMtXHUwMDNldnNpX2lkO1xuQEAgLTYxNSw4ICs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4rXHRyZXQgPSBpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTtcbiBcdGtmcmVlKHZlYWwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcXG5cIiwgcmV0KTtcbitcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qKlxuQEAgLTcxMiw4ICs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiAgKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmVcbiAgKlxuICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS5cbi0gKiovXG4tc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuKyAqL1xuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmYsICpmdG1wO1xuQEAgLTIzNjQsNyArMjM3Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcbiBcdFx0XHQvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovXG4gXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRcdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgVklSVENITkxfT1BfREVMX0VUSF9BRERSOlxuIFx0XHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCIsXG5AQCAtMjU1NSw3ICsyNTY2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyKTtcbiBcdFx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpO1xuIFx0XHR9XG4tXHRcdHdha2VfdXAoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVklSVENITkxfT1BfR0VUX1NUQVRTOiB7XG4gXHRcdHN0cnVjdCBpYXZmX2V0aF9zdGF0cyAqc3RhdHMgPVxuQEAgLTI5NTAsMyArMjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuK1xuKy8qKlxuKyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4rICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4rICogQGV2ZW50OiBwcmUtYWxsb2NhdGVkIGV2ZW50IGJ1ZmZlciB0byB1c2UgZm9yIHBvbGxpbmdcbisgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4rICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2tcbisgKiBAdGltZW91dF9tczogbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzXG4rICpcbisgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuXG4rICogQWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHZhbGlkIG1lc3NhZ2UsIGNhbGxzIHRoZSBjb25kaXRpb24gY2FsbGJhY2sgdG8gY2hlY2tcbisgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4rICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzXG4rICogcG9sbGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlIG9yIHRpbWVvdXQgZXhwaXJlcy5cbisgKlxuKyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWRcbisgKiBzdGF0ZSBtaXNtYXRjaCBpZiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudC5cbisgKlxuKyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlXG4rICogcG9sbGluZyBoYXJkd2FyZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlXG4rICovXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0c3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gKmV2ZW50LFxuK1x0XHRcdFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0XHRcdFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmNvbmRfZGF0YSxcbitcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuK3tcbitcdHN0cnVjdCBpYXZmX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4rXHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbitcdGludCByZXQgPSAtRUFHQUlOO1xuK1x0dTE2IHBlbmRpbmcgPSAwO1xuK1x0dTMyIHZfcmV0dmFsO1xuK1xuK1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuK1x0ZG8ge1xuK1x0XHRpZiAoIXBlbmRpbmcpXG4rXHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4rXG4rXHRcdGlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgXHUwMDI2cGVuZGluZykgPT0gSUFWRl9TVUNDRVNTKSB7XG4rXHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4rXHRcdFx0aWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbitcdFx0XHRcdHZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfbG93KTtcbitcbitcdFx0XHRcdGlhdmZfdmlydGNobmxfY29tcGxldGlvbihhZGFwdGVyLCByZWNlaXZlZF9vcCxcbitcdFx0XHRcdFx0XHRcdCAoZW51bSBpYXZmX3N0YXR1cyl2X3JldHZhbCxcbitcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbitcbitcdFx0XHRcdGlmIChjb25kaXRpb24oYWRhcHRlciwgY29uZF9kYXRhLCByZWNlaXZlZF9vcCkpIHtcbitcdFx0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1xuK1x0XHRcdG1lbXNldChldmVudC1cdTAwM2Vtc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7XG4rXG4rXHRcdFx0aWYgKHBlbmRpbmcpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXG5pbmRleCA3ZTAwZTA5MTc1NmRkYy4uNzg1YmJkNjY1ZTc3YzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjQsNiArMTM2NCwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxuIFx0cmV0dXJuIF9faWNlX3NldF92Zl9tYWMoaWNlX25ldGRldl90b19wZihuZXRkZXYpLCB2Zl9pZCwgbWFjKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcbisgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuKyAqXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4rICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0J3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK1x0ZWxzZVxuK1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEzOTksMTEgKzE0MTYsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4rXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuK1x0aWYgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4rXHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuK1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbitcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuK1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuK1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcIlwiIDogXCJ1blwiKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDExOjAzOjA0LjcxNTI0NDkxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjgyMTUwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gU3RhbmRhcmQgRnV6emluZyBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpNDBlYCwgYGlhdmZgLCBhbmQgYGljZWAgZHJpdmVycyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpNDBlX25kb19zZXRfdmZfdHJ1c3RgLCBgaWF2Zl9zZXRfbWFjYCwgYW5kIGBpY2Vfc2V0X3ZmX3RydXN0YC4gIFRoZSBgaWF2Zl9zZXRfbWFjYCBjaGFuZ2UgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCByZXBsYWNpbmcgdGhlIGludGVycnVwdGlibGUgd2FpdCB3aXRoIHN5bmNocm9ub3VzIHBvbGxpbmcuIEJ1dCBhcmUgYW55IG9mIHRoZXNlIGNoYW5nZXMgZXZlbiByZWFjaGFibGUgaW4gb3VyIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1xuXG5gaWF2ZmAgaXMgdGhlIEludGVsIEV0aGVybmV0IEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLCBhbmQgdGhhdCAqY291bGQqIGJlIHVzZWQgaW4gYSBWTSBpZiB3ZSBoYWQgU1ItSU9WIFZGIHBhc3N0aHJvdWdoLCB3aGljaCBpcyBvZnRlbiBub3QgdGhlIGNhc2UuICBTeXprYWxsZXIgcmFyZWx5LCBpZiBldmVyLCBoYXMgcmVhbCBJbnRlbCBOSUNzIHBhc3NlZCB0aHJvdWdoIHVubGVzcyB3ZSdyZSB0YWxraW5nIGFib3V0IGVtdWxhdGlvbi4gIFNvLCBhcmUgdGhlc2UgZHJpdmVycyBldmVuICplbXVsYXRlZCogaW4gUUVNVT8gTGV0J3Mgc2VlLi4uICBOb3BlLCBRRU1VIGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy4sIGJ1dCBub3QgYGk0MGVgLCBgaWF2ZmAsIG9yIGBpY2VgLiAgSSBkb3VibGUtY2hlY2tlZCBqdXN0IHRvIGJlIHN1cmUuIE5vdGhpbmcuXG5cbk9rYXksIHNvIHRoZXkncmUgKmhhcmR3YXJlKiBkcml2ZXJzLCBub3Qgc29mdHdhcmUgZW11bGF0aW9ucy4gSSBjYW4ganVzdCB3cml0ZSB0aGUgY29uY2x1c2lvbjogYFdvcnRoRnV6emluZz1mYWxzZWAuIFdhaXQsIG1heWJlIHRoZXJlJ3MgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3Igc29tZSBzbmVha3kgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIHNvbWUgY2xldmVyIHRyaWNrcz8gIE5vLCB0aGVzZSBhcmUgUENJIGRyaXZlcnMuIEV2ZW4gaWYgUUVNVSBoYWQgYSBzb2Z0d2FyZSBsYXllciwgaXQgd291bGRuJ3QgdXNlIHRoZXNlIGRldmljZXMuIExldCBtZSBjaGVjayB0aGUgUUVNVSBzb3VyY2Ugb3IgZXZlbiB0aGUga2VybmVsLiAgTm9wZS5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBRRU1VIGRvZXNuJ3QgaGF2ZSBgaTQwZWAgb3IgYGljZWAuIEkgcmVtZW1iZXIgc29tZSB3b3JrIGluIHRoYXQgYXJlYSwgYnV0IG5vLCBpdCdzIG5vdCB1cHN0cmVhbS4gSSBhbSBub3cgY2VydGFpbiB0aGF0IHRoZSBhbnN3ZXIgaXMgbm8uIFdvcnRoRnV6emluZz1mYWxzZS4gSSBhbSBzZWFyY2hpbmcgdGhlIFFFTVUgY29kZSBmb3Igc29tZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBgaTQwZWAuIE5vLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybS4gTm8sIGl0J3MgYSBoYXJkd2FyZSBkcml2ZXIsIHNvIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiAgVGhlIGBpYXZmYCBkcml2ZXIgY29uZmlybXMgbXkgdGhvdWdodHMuIEl0IGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciB3YXkuXG5cbkFscmlnaHQsIEkgY2FuIGRyYWZ0IHRoZSByZWFzb25pbmcgbm93OiBUaGVzZSBkcml2ZXJzIGFyZSBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgd2l0aGluIHRoZSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdXNlcy4gVGh1cywgdGhlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUsIGFuZCB0aGUgY29kZSBpc24ndCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg2LCJPdXRwdXRUb2tlbnMiOjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTE6MDM6MTguMzk3Mzk4MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBJbnRlbCBFdGhlcm5ldCBhZGFwdGVycyAoaTQwZSwgaWF2ZiwgaWNlKS4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBJbnRlbCBFdGhlcm5ldCBhZGFwdGVycyAoaTQwZSwgaWF2ZiwgaWNlKS4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowgc42t[1] Phase: Running StartedAt: 2026-06-23 11:03:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc42t[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 11:03:49 +0000 UTC FinishedAt: 2026-06-23 11:04:08 +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,}