Name: series-workflowsthxv Phase: Failed StartedAt: 2026-08-04 17:15:46 +0000 UTC FinishedAt: 2026-08-04 17:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthxv[0] Phase: Succeeded StartedAt: 2026-08-04 17:15:46 +0000 UTC FinishedAt: 2026-08-04 17:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthxv[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 17:15:46 +0000 UTC FinishedAt: 2026-08-04 17:33:32 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNjJiYmY0NDg2ZmUyOGVlODcwY2ZjODIwZmNmNmZmODgyNjQ0NmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNzozMzowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZVxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiLi5jZjMyMmI0OTljZmJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5AQCAtOSw2ICYjNDM7OSwzNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RyaXZlci5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHRpbWVyX2VsYXBzZWRfbnMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodWludDY0X3QpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTlNFQ19QRVJfU0VDICYjNDM7XG4mIzQzO1x0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1x0XHRcdFx0ICAgXFxcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWMgX19zdGFydDtcdFx0XHRcdCAgIFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICBcXFxuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNl9fc3RhcnQpO1x0XHRcdFx0XHQgICBcXFxuJiM0MztcdF9leHByZXNzaW9uO1x0XHRcdFx0XHRcdCAgIFxcXG4mIzQzO1x0cHJpbnRmKF9uYW1lIFwmIzM0OyA9ICUuMmxmbXNcXG5cJiMzNDssXHRcdFx0XHQgICBcXFxuJiM0MztcdCAgICAgICAoZG91YmxlKXRpbWVyX2VsYXBzZWRfbnMoX19zdGFydCkgLyBOU0VDX1BFUl9NU0VDKTsgXFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4gLypcbiAgKiBSZXR1cm4gdGhlIEJERiBzdHJpbmcgb2YgdGhlIGRldmljZSB0aGF0IHRoZSB0ZXN0IHNob3VsZCB1c2UuXG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzLi41MTU5NzZmYjE5YmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5AQCAtMzUsNiAmIzQzOzM1LDEzIEBAIHN0cnVjdCBpb21tdSB7XG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xuIHZvaWQgaW9tbXVfY2xlYW51cChzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEoX19pb21tdWZkX21hcF9maWxlKGlvbW11LCByZWdpb24sIGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbkBAIC00Niw3ICYjNDM7NTMsMTAgQEAgaW50IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgdTY0ICp1bm1hcHBlZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4tXHRWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIE5VTEwpLCAwKTtcbiYjNDM7XHR1NjQgdW5tYXBwZWQ7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpLCAwKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVx1MDAzZXNpemUpO1xuIH1cbiBcbiBpbnQgX19pb21tdV91bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSwgdTY0ICp1bm1hcHBlZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwmIzM0O0lPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xuJiM0MztcdFx0LnNpemUgPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXG4mIzQzO1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4mIzQzO1x0XHQuZmQgPSBmZCxcbiYjNDM7XHRcdC5zdGFydCA9IDAsXG4mIzQzO1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuJiM0MztcdFx0Lmxlbmd0aCA9IHJlZ2lvbi1cdTAwM2VzaXplLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCBcdTAwMjZhcmdzKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaW5rLCBcdTAwMjZpb21tdS1cdTAwM2VkbWFfcmVnaW9ucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWYyMjczYTBjNmY1MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwzMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3dvcmRleHAuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XG4mIzQzO30gdGVzdF9wYXJhbXMgPSB7XG4mIzQzO1x0LnNpemUgPSBTWl8xRyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbiYjNDM7XHRzdHJ1Y3QgaW9tbXUgKmlvbW11O1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcbiYjNDM7XHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW9tbXVfbW9kZTtcbiYjNDM7XHRpbnQgbW1hcF9mbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXHRcdCAgXFxcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkge1x0ICBcXFxuJiM0MztcdC5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLFx0XHRcdFx0XHRcdCAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzO1xuJiM0MztcdHN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjtcbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O21tYXAgc2l6ZSA9ICVsbHVHXFxuXCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDttbWFwXCYjMzQ7LFxuJiM0MztcdCAgICAgcmVnaW9uLnZhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgLTEsIDApKTtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJiMzOTt0IGVub3VnaCBIdWdlVExCIHBhZ2VzIGF2YWlsYWJsZS4gKi9cbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbiYjNDM7XHRyZWdpb24uc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdFRJTUUoXCYjMzQ7SU9NTVUgbWFwXCYjMzQ7LCBpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDtJT01NVSB1bm1hcFwmIzM0OywgaW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1x0VElNRShcJiMzNDttdW5tYXBcJiMzNDssIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4mIzQzO1x0c3RydWN0IGlvbW11ICppb21tdTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuJiM0MztcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3M7XG4mIzQzO1x0aW50IG1lbWZkX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXFxcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgaW9tbXVmZCAjIyBfICMjIF9uYW1lKSB7XFxcbiYjNDM7XHQuaW9tbXVfbW9kZSA9IE1PREVfSU9NTVVGRCxcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCBNQVBfUE9QVUxBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgXFxcbiYjNDM7XHQubWVtZmRfZmxhZ3MgPSAoX21lbWZkX2ZsYWdzKSxcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLFxuJiM0MztcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcbiYjNDM7XHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUobWVtZmRfaHVnZXRsYl8xZ2IsXG4mIzQzO1x0XHRcdFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLFxuJiM0MztcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4mIzQzO1xuJiM0MzsjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFXG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0MztcdHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcbiYjNDM7XHR2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLVx1MDAzZWRldmljZSk7XG4mIzQzO1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7XG4mIzQzO1xuJiM0MztcdFRJTUUoXCYjMzQ7bWVtZmRfY3JlYXRlXCYjMzQ7LFxuJiM0MztcdCAgICAgKmZkID0gbWVtZmRfY3JlYXRlKFwmIzM0O3ZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0XCYjMzQ7LCBtZmRfZmxhZ3MpKTtcbiYjNDM7XHRpZiAoKmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIE1BUF9GQUlMRUQ7XG4mIzQzO1xuJiM0MztcdGlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRUSU1FKFwmIzM0O21tYXBcJiMzNDssXG4mIzQzO1x0ICAgICBidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCkpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChidWYgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGNsb3NlKCpmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlYXJkb3duX21lbWZkKGludCBmZCwgdTY0IHNpemUsIHZvaWQgKnZhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRUSU1FKFwmIzM0O211bm1hcFwmIzM0OywgVkZJT19BU1NFUlRfRVEoMCwgbXVubWFwKHZhZGRyLCBzaXplKSkpO1xuJiM0MztcbiYjNDM7XHRpZiAoZmQgIT0gLTEpXG4mIzQzO1x0XHRUSU1FKFwmIzM0O2Nsb3NlXCYjMzQ7LCBWRklPX0FTU0VSVF9FUSgwLCBjbG9zZShmZCkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcbiYjNDM7XHRjb25zdCBpbnQgbW1hcF9mbGFncyA9IHZhcmlhbnQtXHUwMDNlbW1hcF9mbGFncztcbiYjNDM7XHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7bW1hcCBzaXplID0gJWxsdUdcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpKHNpemUgLyBTWl8xRykpO1xuJiM0MztcbiYjNDM7XHRyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZChcdTAwMjZmZCwgc2l6ZSwgbW1hcF9mbGFncywgdmFyaWFudC1cdTAwM2VtZW1mZF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbiYjMzk7dCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovXG4mIzQzO1x0aWYgKG1tYXBfZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXR1cF9tZW1mZCgpIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7XG4mIzQzO1x0cmVnaW9uLnNpemUgPSBzaXplO1xuJiM0MztcbiYjNDM7XHRUSU1FKFwmIzM0O0lPTU1VIG1hcFwmIzM0OywgaW9tbXVmZF9tYXBfZmlsZShzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIGZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDtJT01NVSB1bm1hcFwmIzM0OywgaW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1xuJiM0MztcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQYXJzZXMgXCYjMzQ7WzAtOV0mIzQzO1trbWd0XT9cJiMzNDsuXG4mIzQzOyAqL1xuJiM0Mzt1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNoaWZ0ID0gMDtcbiYjNDM7XHRjaGFyICpzY2FsZTtcbiYjNDM7XHR1NjQgYmFzZTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfVFJVRShzaXplIFx1MDAyNlx1MDAyNiBpc2RpZ2l0KHNpemVbMF0pLFxuJiM0MztcdFx0XHQgXCYjMzQ7TmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJiMzOTslcyYjMzk7LlwmIzM0Oywgc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGJhc2UgPSBzdHJ0b3VsbChzaXplLCBcdTAwMjZzY2FsZSwgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX1RSVUUoYmFzZSAhPSBVTExPTkdfTUFYLCBcJiMzNDtPdmVyZmxvdyBwYXJzaW5nIHNpemUhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0b2xvd2VyKCpzY2FsZSkpIHtcbiYjNDM7XHRjYXNlICYjMzk7dCYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSA0MDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtnJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDMwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O20mIzM5OzpcbiYjNDM7XHRcdHNoaWZ0ID0gMjA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAxMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtiJiMzOTs6XG4mIzQzO1x0Y2FzZSAmIzM5O1xcMCYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFZGSU9fRkFJTChcJiMzNDtVbmtub3duIHNpemUgbGV0dGVyICYjMzk7JWMmIzM5Oy5cJiMzNDssICpzY2FsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKChiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdCkgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IGJhc2UsXG4mIzQzO1x0XHRcdCBcJiMzNDtPdmVyZmxvdyBzY2FsaW5nIHNpemUhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJhc2UgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRwdXRzKFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O3VzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFxcXCYjMzQ7dGVzdCBoYXJuZXNzIGFyZ3NcXFwmIzM0O11cXG5cJiMzNDssIG5hbWUpO1xuJiM0MztcdHB1dHMoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7IC1oOiBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgZS5nLiAtYSBcXFwmIzM0Oy10IGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlXFxcJiMzNDtcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzIHtcbiYjNDM7XHRpbnQgYXJnYztcbiYjNDM7XHRjaGFyICoqYXJndjtcbiYjNDM7XHR3b3JkZXhwX3QgZXhwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcbiYjNDM7e1xuJiM0MztcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XG4mIzQzO1xuJiM0MztcdGlmICghYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHRoZSBwcm9ncmFtIG5hbWUgKGFyZ3ZbMF0pLlxuJiM0MztcdFx0ICogV1JERV9OT0NNRCBkaXNhYmxlcyBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3Igc2FmZXR5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBmbGFncykgIT0gMClcbiYjNDM7XHRcdFx0VkZJT19GQUlMKFwmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZsYWdzIHw9IFdSREVfQVBQRU5EO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3b3JkZXhwKCkgdG8gcmVsaWFibHkgcGFyc2UgdGhlIHVzZXItc3VwcGxpZWQgY29tbWFuZCBsaW5lIHN0cmluZ1xuJiM0MztcdCAqIGludG8gaW5kaXZpZHVhbCBhcmd1bWVudHMsIHJlc3BlY3Rpbmcgc2hlbGwgcXVvdGluZyBhbmQgZXNjYXBpbmcgcnVsZXMuXG4mIzQzO1x0ICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh3b3JkZXhwKGNtZGxuZSwgXHUwMDI2YXJncy1cdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxuJiM0MztcdFx0VkZJT19GQUlMKFwmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgY21kbG5lIGFyZ3MhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YXJncy1cdTAwM2VhcmdjID0gYXJncy1cdTAwM2VleHAud2Vfd29yZGM7XG4mIzQzO1x0YXJncy1cdTAwM2Vhcmd2ID0gYXJncy1cdTAwM2VleHAud2Vfd29yZHY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50ICphcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpoX2FyZ3ZbXSA9IHsgYXJndlswXSwgXCYjMzQ7LWhcJiMzNDsgfTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcbiYjNDM7XHR0ZXN0X3BhcmFtcy5kZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihhcmdjLCBhcmd2KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoKmFyZ2MsIGFyZ3YsIFwmIzM0O2E6YjpoXCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAob3B0KSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7YSYjMzk7OlxuJiM0MztcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YiYjMzk7OlxuJiM0MztcdFx0XHR0ZXN0X3BhcmFtcy5zaXplID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC5cbiYjNDM7XHRvcHRpbmQgPSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ2MgPSAwO1xuJiM0MztcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbiYjNDM7XHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkZWZhdWx0X2hhcmdzW10gPSB7IGFyZ3ZbMF0sIE5VTEwgfTtcbiYjNDM7XHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSB7fTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfdGVzdChcdTAwMjZhcmdzLCBcdTAwMjZhcmdjLCBhcmd2KTtcbiYjNDM7XG4mIzQzO1x0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjID86IDEsIGFyZ3MuYXJndiA/OiBkZWZhdWx0X2hhcmdzKTtcbiYjNDM7XG4mIzQzO1x0dGVhcmRvd25fdGVzdChcdTAwMjZhcmdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbkBAIC0xMzgsNyAmIzQzOzEzOCw2IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4gXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4gXHRzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nO1xuIFx0dTY0IG1hcHBpbmdfc2l6ZSA9IHNpemU7XG4tXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4gXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG5AQCAtMTkwLDkgJiM0MzsxODksNyBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKVxuIFx0fVxuIFxuIHVubWFwOlxuLVx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpO1xuLVx0QVNTRVJUX0VRKHJjLCAwKTtcbi1cdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpO1xuJiM0MztcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4gXHRwcmludGYoXCYjMzQ7VW5tYXBwZWQgSU9WQSAweCVseFxcblwmIzM0OywgcmVnaW9uLmlvdmEpO1xuIFx0QVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyLCBOVUxMKSk7XG4gXHRBU1NFUlRfTkUoMCwgaW9tbXVfbWFwcGluZ19nZXQoZGV2aWNlX2JkZiwgcmVnaW9uLmlvdmEsIFx1MDAyNm1hcHBpbmcpKTtcbkBAIC0yNjAsMTUgJiM0MzsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX3JhbmdlKVxuIHtcbiBcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24gPSBcdTAwMjZzZWxmLVx1MDAzZXJlZ2lvbjtcbi1cdHU2NCB1bm1hcHBlZDtcbi1cdGludCByYztcbiBcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbiYjNDM7XHRpb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIH1cbiBcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX2FsbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2MmJiZjQ0ODZmZTI4ZWU4NzBjZmM4MjBmY2Y2ZmY4ODI2NDQ2ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjMzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZQogQ0ZMQUdTID0gJChLSERSX0lOQ0xVREVTKQogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19pb21tdWZkX3NldHVwX3Rlc3QKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fcGNpX2RldmljZV9pbml0X3BlcmZfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAppbmRleCAwNzg2MmI0NzA3NzdiLi5jZjMyMmI0OTljZmJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaApAQCAtOSw2ICYjNDM7OSwzNCBAQAogI2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kcml2ZXIuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkKJiM0Mzt7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgZW5kOwomIzQzOwomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtlbmQpOwomIzQzOwomIzQzOwlyZXR1cm4gKHVpbnQ2NF90KShlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjKSAqIE5TRUNfUEVSX1NFQyAmIzQzOwomIzQzOwkgICAgICAgKHVpbnQ2NF90KShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFRJTUUoX25hbWUsIF9leHByZXNzaW9uKSBkbyB7CQkJCSAgIFwKJiM0MzsJc3RydWN0IHRpbWVzcGVjIF9fc3RhcnQ7CQkJCSAgIFwKJiM0MzsJCQkJCQkJCSAgIFwKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtfX3N0YXJ0KTsJCQkJCSAgIFwKJiM0MzsJX2V4cHJlc3Npb247CQkJCQkJICAgXAomIzQzOwlwcmludGYoX25hbWUgJiMzNDsgPSAlLjJsZm1zXG4mIzM0OywJCQkJICAgXAomIzQzOwkgICAgICAgKGRvdWJsZSl0aW1lcl9lbGFwc2VkX25zKF9fc3RhcnQpIC8gTlNFQ19QRVJfTVNFQyk7IFwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwogLyoKICAqIFJldHVybiB0aGUgQkRGIHN0cmluZyBvZiB0aGUgZGV2aWNlIHRoYXQgdGhlIHRlc3Qgc2hvdWxkIHVzZS4KICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCmluZGV4IGU5YTMzODZhNDcxOTMuLjUxNTk3NmZiMTliZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCkBAIC0zNSw2ICYjNDM7MzUsMTMgQEAgc3RydWN0IGlvbW11IHsKIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTsKIHZvaWQgaW9tbXVfY2xlYW51cChzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKIAomIzQzO2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKQEAgLTQ2LDcgJiM0Mzs1MywxMCBAQCBpbnQgX19pb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCB1NjQgKnVubWFwcGVkKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKIHsKLQlWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIE5VTEwpLCAwKTsKJiM0MzsJdTY0IHVubWFwcGVkOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sICZhbXA7dW5tYXBwZWQpLCAwKTsKJiM0MzsJVkZJT19BU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi0mZ3Q7c2l6ZSk7CiB9CiAKIGludCBfX2lvbW11X3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgKnVubWFwcGVkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jCmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwpAQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcikKIAlyZXR1cm4gaW92YTsKIH0KIAomIzQzO2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKQomIzQzO3sKJiM0MzsJVkZJT19BU1NFUlRfVFJVRShpb21tdS0mZ3Q7aW9tbXVmZCwgJiMzNDtJT01NVV9JT0FTX01BUF9GSUxFIGlzIGFuIElPTU1VRkQgSU9DVEwuJiMzNDspOwomIzQzOwomIzQzOwlzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0gewomIzQzOwkJLnNpemUgPSBzaXplb2YoYXJncyksCiYjNDM7CQkuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8CiYjNDM7CQkJSU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHwKJiM0MzsJCQlJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLAomIzQzOwkJLmlvYXNfaWQgPSBpb21tdS0mZ3Q7aW9hc19pZCwKJiM0MzsJCS5mZCA9IGZkLAomIzQzOwkJLnN0YXJ0ID0gMCwKJiM0MzsJCS5pb3ZhID0gcmVnaW9uLSZndDtpb3ZhLAomIzQzOwkJLmxlbmd0aCA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCAmYW1wO2FyZ3MpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbGlzdF9hZGQoJmFtcDtyZWdpb24tJmd0O2xpbmssICZhbXA7aW9tbXUtJmd0O2RtYV9yZWdpb25zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQogewogCXN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV9tYXAgYXJncyA9IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZjIyNzNhMGM2ZjUyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDMzMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3dvcmRleHAuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CWNvbnN0IGNoYXIgKmRldmljZV9iZGY7CiYjNDM7fSB0ZXN0X3BhcmFtcyA9IHsKJiM0MzsJLnNpemUgPSBTWl8xRywKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHsKJiM0MzsJc3RydWN0IGlvbW11ICppb21tdTsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlOwomIzQzOwlzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7CiYjNDM7CWNvbnN0IGNoYXIgKmlvbW11X21vZGU7CiYjNDM7CWludCBtbWFwX2ZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncykJCSAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsJICBcCiYjNDM7CS5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLAkJCQkJCSAgXAomIzQzOwkubW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksIFwKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzLCAwKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8ybWIsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTsKJiM0MzsKJiM0MzsjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFCiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2lvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LSZndDtpb21tdV9tb2RlKTsKJiM0MzsJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwomIzQzOwlzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi0mZ3Q7aW9tbXUpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KQomIzQzO3sKJiM0MzsJaW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLSZndDtpb3ZhX2FsbG9jYXRvcik7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtJmd0O2RldmljZSk7CiYjNDM7CWlvbW11X2NsZWFudXAoc2VsZi0mZ3Q7aW9tbXUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApCiYjNDM7ewomIzQzOwljb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7CiYjNDM7CWNvbnN0IGludCBmbGFncyA9IHZhcmlhbnQtJmd0O21tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7bW1hcCBzaXplID0gJWxsdUdcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O21tYXAmIzM0OywKJiM0MzsJICAgICByZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCkpOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTUFQX0hVR0VUTEIgJmFtcDsmYW1wOyByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJZWxzZQomIzQzOwkJQVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CXJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IsIHNpemUpOwomIzQzOwlyZWdpb24uc2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDtJT01NVSBtYXAmIzM0OywgaW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbikpOwomIzQzOwlBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi0mZ3Q7ZGV2aWNlLCByZWdpb24udmFkZHIpKTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O0lPTU1VIHVubWFwJiMzNDssIGlvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbikpOwomIzQzOwlUSU1FKCYjMzQ7bXVubWFwJiMzNDssIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7CiYjNDM7CXN0cnVjdCBpb21tdSAqaW9tbXU7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTsKJiM0MzsJc3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkgewomIzQzOwljb25zdCBjaGFyICppb21tdV9tb2RlOwomIzQzOwlpbnQgbW1hcF9mbGFnczsKJiM0MzsJaW50IG1lbWZkX2ZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGlvbW11ZmQgIyMgXyAjIyBfbmFtZSkge1wKJiM0MzsJLmlvbW11X21vZGUgPSBNT0RFX0lPTU1VRkQsCQkJCQkgICAgICBcCiYjNDM7CS5tbWFwX2ZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksCSAgICAgIFwKJiM0MzsJLm1lbWZkX2ZsYWdzID0gKF9tZW1mZF9mbGFncyksCQkJCQkgICAgICBcCiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZCwgMCwgMCk7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLAomIzQzOwkJCQkgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsCiYjNDM7CQkJCSAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQik7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMWdiLAomIzQzOwkJCQkgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IsCiYjNDM7CQkJCSAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7CiYjNDM7CiYjNDM7I3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERQomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpCiYjNDM7ewomIzQzOwlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSk7CiYjNDM7CXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKJiM0MzsJc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtJmd0O2lvbW11KTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkKJiM0Mzt7CiYjNDM7CWlvdmFfYWxsb2NhdG9yX2NsZWFudXAoc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IpOwomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLSZndDtkZXZpY2UpOwomIzQzOwlpb21tdV9jbGVhbnVwKHNlbGYtJmd0O2lvbW11KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncykKJiM0Mzt7CiYjNDM7CXZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDttZW1mZF9jcmVhdGUmIzM0OywKJiM0MzsJICAgICAqZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCYjMzQ7LCBtZmRfZmxhZ3MpKTsKJiM0MzsJaWYgKCpmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gTUFQX0ZBSUxFRDsKJiM0MzsKJiM0MzsJaWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDttbWFwJiMzNDssCiYjNDM7CSAgICAgYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChidWYgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWNsb3NlKCpmZCk7CiYjNDM7CiYjNDM7CXJldHVybiBidWY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlYXJkb3duX21lbWZkKGludCBmZCwgdTY0IHNpemUsIHZvaWQgKnZhZGRyKQomIzQzO3sKJiM0MzsJaWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpCiYjNDM7CQlUSU1FKCYjMzQ7bXVubWFwJiMzNDssIFZGSU9fQVNTRVJUX0VRKDAsIG11bm1hcCh2YWRkciwgc2l6ZSkpKTsKJiM0MzsKJiM0MzsJaWYgKGZkICE9IC0xKQomIzQzOwkJVElNRSgmIzM0O2Nsb3NlJiMzNDssIFZGSU9fQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKQomIzQzO3sKJiM0MzsJY29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplOwomIzQzOwljb25zdCBpbnQgbW1hcF9mbGFncyA9IHZhcmlhbnQtJmd0O21tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlwcmludGYoJiMzNDttbWFwIHNpemUgPSAlbGx1R1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpKHNpemUgLyBTWl8xRykpOwomIzQzOwomIzQzOwlyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZCgmYW1wO2ZkLCBzaXplLCBtbWFwX2ZsYWdzLCB2YXJpYW50LSZndDttZW1mZF9mbGFncyk7CiYjNDM7CiYjNDM7CS8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbiYjMzk7dCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovCiYjNDM7CWlmIChtbWFwX2ZsYWdzICZhbXA7IE1BUF9IVUdFVExCICZhbXA7JmFtcDsgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtzZXR1cF9tZW1mZCgpIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwllbHNlCiYjNDM7CQlBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJcmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7CiYjNDM7CXJlZ2lvbi5zaXplID0gc2l6ZTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O0lPTU1VIG1hcCYjMzQ7LCBpb21tdWZkX21hcF9maWxlKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgZmQpKTsKJiM0MzsJQVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtJmd0O2RldmljZSwgcmVnaW9uLnZhZGRyKSk7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDtJT01NVSB1bm1hcCYjMzQ7LCBpb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgJmFtcDtyZWdpb24pKTsKJiM0MzsKJiM0MzsJdGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUGFyc2VzICYjMzQ7WzAtOV0mIzQzO1trbWd0XT8mIzM0Oy4KJiM0MzsgKi8KJiM0Mzt1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKQomIzQzO3sKJiM0MzsJaW50IHNoaWZ0ID0gMDsKJiM0MzsJY2hhciAqc2NhbGU7CiYjNDM7CXU2NCBiYXNlOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9UUlVFKHNpemUgJmFtcDsmYW1wOyBpc2RpZ2l0KHNpemVbMF0pLAomIzQzOwkJCSAmIzM0O05lZWQgYXQgbGVhc3Qgb25lIGRpZ2l0IGluICYjMzk7JXMmIzM5Oy4mIzM0Oywgc2l6ZSk7CiYjNDM7CiYjNDM7CWJhc2UgPSBzdHJ0b3VsbChzaXplLCAmYW1wO3NjYWxlLCAwKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsICYjMzQ7T3ZlcmZsb3cgcGFyc2luZyBzaXplISYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0b2xvd2VyKCpzY2FsZSkpIHsKJiM0MzsJY2FzZSAmIzM5O3QmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gNDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2cmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMzA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O20mIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMjA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2smIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMTA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2ImIzM5OzoKJiM0MzsJY2FzZSAmIzM5O1wwJiMzOTs6CiYjNDM7CQlzaGlmdCA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVZGSU9fRkFJTCgmIzM0O1Vua25vd24gc2l6ZSBsZXR0ZXIgJiMzOTslYyYjMzk7LiYjMzQ7LCAqc2NhbGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoKGJhc2UgJmx0OyZsdDsgc2hpZnQpICZndDsmZ3Q7IHNoaWZ0ID09IGJhc2UsCiYjNDM7CQkJICYjMzQ7T3ZlcmZsb3cgc2NhbGluZyBzaXplISYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgJmx0OyZsdDsgc2hpZnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXB1dHMoJiMzNDsmIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0O3VzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFwmIzM0O3Rlc3QgaGFybmVzcyBhcmdzXCYjMzQ7XVxuJiMzNDssIG5hbWUpOwomIzQzOwlwdXRzKCYjMzQ7JiMzNDspOwomIzQzOwlwcmludGYoJiMzNDsgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIGFuZCB1bm1hcHBlZC4gZS5nLiAxNk0gb3IgOEcsIChkZWZhdWx0OiAxRylcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZS5nLiAtYSBcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVwmIzM0O1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzIHsKJiM0MzsJaW50IGFyZ2M7CiYjNDM7CWNoYXIgKiphcmd2OwomIzQzOwl3b3JkZXhwX3QgZXhwOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCwKJiM0MzsJCQkJICBjb25zdCBjaGFyICpjbWRsbmUpCiYjNDM7ewomIzQzOwlpbnQgZmxhZ3MgPSBXUkRFX05PQ01EOwomIzQzOwomIzQzOwlpZiAoIWFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBsaXN0IHdpdGggdGhlIHByb2dyYW0gbmFtZSAoYXJndlswXSkuCiYjNDM7CQkgKiBXUkRFX05PQ01EIGRpc2FibGVzIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBzYWZldHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh3b3JkZXhwKGFyZ3ZfMCwgJmFtcDthcmdzLSZndDtleHAsIGZsYWdzKSAhPSAwKQomIzQzOwkJCVZGSU9fRkFJTCgmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZsYWdzIHw9IFdSREVfQVBQRU5EOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd29yZGV4cCgpIHRvIHJlbGlhYmx5IHBhcnNlIHRoZSB1c2VyLXN1cHBsaWVkIGNvbW1hbmQgbGluZSBzdHJpbmcKJiM0MzsJICogaW50byBpbmRpdmlkdWFsIGFyZ3VtZW50cywgcmVzcGVjdGluZyBzaGVsbCBxdW90aW5nIGFuZCBlc2NhcGluZyBydWxlcy4KJiM0MzsJICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLgomIzQzOwkgKi8KJiM0MzsJaWYgKHdvcmRleHAoY21kbG5lLCAmYW1wO2FyZ3MtJmd0O2V4cCwgZmxhZ3MpICE9IDApCiYjNDM7CQlWRklPX0ZBSUwoJiMzNDtGYWlsZWQgdG8gZXZhbHVhdGUgdGVzdCBoYXJuZXNzIGNtZGxuZSBhcmdzISYjMzQ7KTsKJiM0MzsKJiM0MzsJYXJncy0mZ3Q7YXJnYyA9IGFyZ3MtJmd0O2V4cC53ZV93b3JkYzsKJiM0MzsJYXJncy0mZ3Q7YXJndiA9IGFyZ3MtJmd0O2V4cC53ZV93b3JkdjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmhfYXJndltdID0geyBhcmd2WzBdLCAmIzM0Oy1oJiMzNDsgfTsKJiM0MzsJaW50IG9wdDsKJiM0MzsKJiM0MzsJdGVzdF9wYXJhbXMuZGV2aWNlX2JkZiA9IHZmaW9fc2VsZnRlc3RzX2dldF9iZGYoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0KCphcmdjLCBhcmd2LCAmIzM0O2E6YjpoJiMzNDspKSAhPSAtMSkgewomIzQzOwkJc3dpdGNoIChvcHQpIHsKJiM0MzsJCWNhc2UgJiMzOTthJiMzOTs6CiYjNDM7CQkJcG9wdWxhdGVfaGFybmVzc19hcmdzKGFyZ3MsIGFyZ3ZbMF0sIG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7YiYjMzk7OgomIzQzOwkJCXRlc3RfcGFyYW1zLnNpemUgPSBwYXJzZV9zaXplKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7aCYjMzk7OgomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQloZWxwKGFyZ3ZbMF0pOwomIzQzOwkJCWV4aXQodGVzdF9oYXJuZXNzX3J1bigyLCBoX2FyZ3YpKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC4KJiM0MzsJb3B0aW5kID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJaWYgKGFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSAwOwomIzQzOwkJYXJncy0mZ3Q7YXJndiA9IE5VTEw7CiYjNDM7CQl3b3JkZnJlZSgmYW1wO2FyZ3MtJmd0O2V4cCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmRlZmF1bHRfaGFyZ3NbXSA9IHsgYXJndlswXSwgTlVMTCB9OwomIzQzOwlzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSB7fTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CXNldHVwX3Rlc3QoJmFtcDthcmdzLCAmYW1wO2FyZ2MsIGFyZ3YpOwomIzQzOwomIzQzOwlyID0gdGVzdF9oYXJuZXNzX3J1bihhcmdzLmFyZ2MgPzogMSwgYXJncy5hcmd2ID86IGRlZmF1bHRfaGFyZ3MpOwomIzQzOwomIzQzOwl0ZWFyZG93bl90ZXN0KCZhbXA7YXJncyk7CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCmluZGV4IDdkMGRlOGM3OWRlMTMuLjFiOTA0NDE2NDRhMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuYwpAQCAtMTM4LDcgJiM0MzsxMzgsNiBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKQogCXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKIAlzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nOwogCXU2NCBtYXBwaW5nX3NpemUgPSBzaXplOwotCXU2NCB1bm1hcHBlZDsKIAlpbnQgcmM7CiAKIAlyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7CkBAIC0xOTAsOSAmIzQzOzE4OSw3IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QsIGRtYV9tYXBfdW5tYXApCiAJfQogCiB1bm1hcDoKLQlyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi0mZ3Q7aW9tbXUsICZhbXA7cmVnaW9uLCAmYW1wO3VubWFwcGVkKTsKLQlBU1NFUlRfRVEocmMsIDApOwotCUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwlpb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgJmFtcDtyZWdpb24pOwogCXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHhcbiYjMzQ7LCByZWdpb24uaW92YSk7CiAJQVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpOwogCUFTU0VSVF9ORSgwLCBpb21tdV9tYXBwaW5nX2dldChkZXZpY2VfYmRmLCByZWdpb24uaW92YSwgJmFtcDttYXBwaW5nKSk7CkBAIC0yNjAsMTUgJiM0MzsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCkKIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfcmFuZ2UpCiB7CiAJc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiA9ICZhbXA7c2VsZi0mZ3Q7cmVnaW9uOwotCXU2NCB1bm1hcHBlZDsKLQlpbnQgcmM7CiAKIAlpb21tdV9tYXAoc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbik7CiAJQVNTRVJUX0VRKHJlZ2lvbi0mZ3Q7aW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi0mZ3Q7dmFkZHIpKTsKIAotCXJjID0gX19pb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgcmVnaW9uLCAmYW1wO3VubWFwcGVkKTsKLQlBU1NFUlRfRVEocmMsIDApOwotCUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLSZndDtzaXplKTsKJiM0MzsJaW9tbXVfdW5tYXAoc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbik7CiB9CiAKIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI2CgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gRE1BIE1hcHBpbmcgUGVyZm9ybWFuY2UgVGVzdCBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5jZSB0ZXN0IGZvciBWRklPIERNQSBtYXBwaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyB0aGUgYE1ha2VmaWxlYCwgc29tZSBpbmNsdWRlIGZpbGVzIChgbGlidmZpby5oYCwgYGlvbW11LmhgKSwgYW4gSU9NTVUgaW1wbGVtZW50YXRpb24gZmlsZSAoYGlvbW11LmNgKSwgYW5kIHR3byB0ZXN0IGZpbGVzIChgdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY2AgYW5kIGB2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY2ApLgoKTm93LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjZXJ0YWluIHR5cGVzIG9mIG1vZGlmaWNhdGlvbnMuIEl0IGxpc3RzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgY29uc3RhbnQgdHdlYWtzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQgYSBzZWNvbmQsIHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBzZWxmdGVzdHNgIGRpcmVjdG9yeS4mIzM0OwoKU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIFRoZXkgZG9uJiMzOTt0IGRpcmVjdGx5IG1vZGlmeSB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byAqdGVzdCoga2VybmVsIGZ1bmN0aW9uYWxpdHksIG5vdCAqYmUqIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBUaGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFzayBteXNlbGYgaXM6IGRvZXMgbW9kaWZ5aW5nIHRoZXNlIHNlbGZ0ZXN0cyBjb25zdGl0dXRlIGEgJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZCYjMzQ7PyBBYnNvbHV0ZWx5IG5vdC4gU3l6a2FsbGVyLCB0aGUgZnV6emVyLCB0YXJnZXRzIHRoZSBrZXJuZWwmIzM5O3MgY29yZS4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGZ1enogdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgZXZlbiBpZiB0aG9zZSBhcHBsaWNhdGlvbnMgYXJlIHVzZWQgdG8gdGVzdCBrZXJuZWwgZmVhdHVyZXMuCgpJIG5lZWQgdG8gY29uZmlybSwgYnV0IGEgcXVpY2sgc2NhbiBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIGFyZSB0b3VjaGVkLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLgoKVGhlIHByb21wdCBpcyBjbGVhcjogJiMzNDtZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDsgU2luY2UgdGhpcyBwYXRjaCBzZXJpZXMgaXMgZXhjbHVzaXZlbHkgZm9jdXNlZCBvbiBhZGRpbmcgYSBzZWxmdGVzdCB3aXRoaW4gdXNlcnNwYWNlLCBpdCBjbGVhcmx5IGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhLiBUaGUgcHVycG9zZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZSwgYW5kIGFyZSBkZXNpZ25lZCB0byBub3QgbWFrZSBjaGFuZ2VzLgoKU28sIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpNeSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MTAuMjY3ODgwNTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDY5NjI3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjMzOjEwLjI2Nzg4NTkxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMTM3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDYyYmJmNDQ4NmZlMjhlZTg3MGNmYzgyMGZjZjZmZjg4MjY0NDZlMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjMzOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbkBAIC04LDYgKzgsNyBAQCBlbHNlXFxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcXG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XFxuK1RFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9faW9tbXVmZF9zZXR1cF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV9pbml0X3BlcmZfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuaW5kZXggMDc4NjJiNDcwNzc3Yi4uY2YzMjJiNDk5Y2ZiYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuQEAgLTksNiArOSwzNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZHJpdmVyLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0KVxcbit7XFxuK1xcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcXG4rXFxuK1xcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2ZW5kKTtcXG4rXFxuK1xcdHJldHVybiAodWludDY0X3QpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTlNFQ19QRVJfU0VDICtcXG4rXFx0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcXG4rfVxcbitcXG4rI2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1xcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0c3RydWN0IHRpbWVzcGVjIF9fc3RhcnQ7XFx0XFx0XFx0XFx0ICAgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFxcXFxuK1xcdHRpbWVyX3N0YXJ0KFxcdTAwMjZfX3N0YXJ0KTtcXHRcXHRcXHRcXHRcXHQgICBcXFxcXFxuK1xcdF9leHByZXNzaW9uO1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0cHJpbnRmKF9uYW1lIFxcXCIgPSAlLjJsZm1zXFxcXG5cXFwiLFxcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0ICAgICAgIChkb3VibGUpdGltZXJfZWxhcHNlZF9ucyhfX3N0YXJ0KSAvIE5TRUNfUEVSX01TRUMpOyBcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIEJERiBzdHJpbmcgb2YgdGhlIGRldmljZSB0aGF0IHRoZSB0ZXN0IHNob3VsZCB1c2UuXFxuICAqXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5pbmRleCBlOWEzMzg2YTQ3MTkzLi41MTU5NzZmYjE5YmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5AQCAtMzUsNiArMzUsMTMgQEAgc3RydWN0IGlvbW11IHtcXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XFxuIFxcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXFxuK3tcXG4rXFx0VkZJT19BU1NFUlRfRVEoX19pb21tdWZkX21hcF9maWxlKGlvbW11LCByZWdpb24sIGZkKSwgMCk7XFxuK31cXG4rXFxuIGludCBfX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcXG5AQCAtNDYsNyArNTMsMTAgQEAgaW50IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgdTY0ICp1bm1hcHBlZClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiB7XFxuLVxcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgTlVMTCksIDApO1xcbitcXHR1NjQgdW5tYXBwZWQ7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCksIDApO1xcbitcXHRWRklPX0FTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVxcdTAwM2VzaXplKTtcXG4gfVxcbiBcXG4gaW50IF9faW9tbXVfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCAqdW5tYXBwZWQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xcbmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG5AQCAtOTcsNiArOTcsMzAgQEAgaW92YV90IGlvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyKVxcbiBcXHRyZXR1cm4gaW92YTtcXG4gfVxcbiBcXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXFxuK3tcXG4rXFx0VkZJT19BU1NFUlRfVFJVRShpb21tdS1cXHUwMDNlaW9tbXVmZCwgXFxcIklPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cXFwiKTtcXG4rXFxuK1xcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XFxuK1xcdFxcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxcbitcXHRcXHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XFxuK1xcdFxcdFxcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XFxuK1xcdFxcdFxcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXFxuK1xcdFxcdC5pb2FzX2lkID0gaW9tbXUtXFx1MDAzZWlvYXNfaWQsXFxuK1xcdFxcdC5mZCA9IGZkLFxcbitcXHRcXHQuc3RhcnQgPSAwLFxcbitcXHRcXHQuaW92YSA9IHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4rXFx0XFx0Lmxlbmd0aCA9IHJlZ2lvbi1cXHUwMDNlc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlaW9tbXVmZCwgSU9NTVVfSU9BU19NQVBfRklMRSwgXFx1MDAyNmFyZ3MpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGluaywgXFx1MDAyNmlvbW11LVxcdTAwM2VkbWFfcmVnaW9ucyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV9tYXAgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZjIyNzNhMGM2ZjUyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3dvcmRleHAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0dTY0IHNpemU7XFxuK1xcdGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XFxuK30gdGVzdF9wYXJhbXMgPSB7XFxuK1xcdC5zaXplID0gU1pfMUcsXFxuK307XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXFx0XFx0ICBcXFxcXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHtcXHQgIFxcXFxcXG4rXFx0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuK1xcdC5tbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSwgXFxcXFxcbit9XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApO1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8ybWIsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQik7XFxuK1xcbisjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFXFxuK1xcbitGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVxcdTAwM2Vpb21tdV9tb2RlKTtcXG4rXFx0c2VsZi1cXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cXHUwMDNlaW9tbXUpO1xcbitcXHRzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxcbit7XFxuK1xcdGlvdmFfYWxsb2NhdG9yX2NsZWFudXAoc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpb21tdV9jbGVhbnVwKHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rfVxcbitcXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBkbWFfbWFwX3VubWFwKVxcbit7XFxuK1xcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcXG4rXFx0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJtbWFwIHNpemUgPSAlbGx1R1xcXFxuXFxcIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2l6ZSAvIFNaXzFHKSk7XFxuK1xcbitcXHRUSU1FKFxcXCJtbWFwXFxcIixcXG4rXFx0ICAgICByZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCkpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfSFVHRVRMQiBcXHUwMDI2XFx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSBtYXBcXFwiLCBpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pKTtcXG4rXFx0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSB1bm1hcFxcXCIsIGlvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uKSk7XFxuK1xcdFRJTUUoXFxcIm11bm1hcFxcXCIsIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpO1xcbit9XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rXFx0aW50IG1lbWZkX2ZsYWdzO1xcbit9O1xcbitcXG4rI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXFxcXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBpb21tdWZkICMjIF8gIyMgX25hbWUpIHtcXFxcXFxuK1xcdC5pb21tdV9tb2RlID0gTU9ERV9JT01NVUZELFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSxcXHQgICAgICBcXFxcXFxuK1xcdC5tZW1mZF9mbGFncyA9IChfbWVtZmRfZmxhZ3MpLFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rfVxcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLFxcbitcXHRcXHRcXHRcXHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsXFxuK1xcdFxcdFxcdFxcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQik7XFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZF9odWdldGxiXzFnYixcXG4rXFx0XFx0XFx0XFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLFxcbitcXHRcXHRcXHRcXHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8xR0IpO1xcbitcXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERVxcbitcXG4rRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcXG4re1xcbitcXHRzZWxmLVxcdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cXHUwMDNlaW9tbXVfbW9kZSk7XFxuK1xcdHNlbGYtXFx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rXFx0c2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcXG4re1xcbitcXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcXG4rXFx0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cXHUwMDNlZGV2aWNlKTtcXG4rXFx0aW9tbXVfY2xlYW51cChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpzZXR1cF9tZW1mZChpbnQgKmZkLCB1NjQgc2l6ZSwgaW50IG1tYXBfZmxhZ3MsIGludCBtZmRfZmxhZ3MpXFxuK3tcXG4rXFx0dm9pZCAqYnVmID0gTUFQX0ZBSUxFRDtcXG4rXFxuK1xcdFRJTUUoXFxcIm1lbWZkX2NyZWF0ZVxcXCIsXFxuK1xcdCAgICAgKmZkID0gbWVtZmRfY3JlYXRlKFxcXCJ2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdFxcXCIsIG1mZF9mbGFncykpO1xcbitcXHRpZiAoKmZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE1BUF9GQUlMRUQ7XFxuK1xcbitcXHRpZiAoZnRydW5jYXRlKCpmZCwgc2l6ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0VElNRShcXFwibW1hcFxcXCIsXFxuK1xcdCAgICAgYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRjbG9zZSgqZmQpO1xcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXFxuK3tcXG4rXFx0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXFxuK1xcdFxcdFRJTUUoXFxcIm11bm1hcFxcXCIsIFZGSU9fQVNTRVJUX0VRKDAsIG11bm1hcCh2YWRkciwgc2l6ZSkpKTtcXG4rXFxuK1xcdGlmIChmZCAhPSAtMSlcXG4rXFx0XFx0VElNRShcXFwiY2xvc2VcXFwiLCBWRklPX0FTU0VSVF9FUSgwLCBjbG9zZShmZCkpKTtcXG4rfVxcbitcXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZSlcXG4re1xcbitcXHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XFxuK1xcdGNvbnN0IGludCBtbWFwX2ZsYWdzID0gdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRwcmludGYoXFxcIm1tYXAgc2l6ZSA9ICVsbHVHXFxcXG5cXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcXG4rXFxuK1xcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFxcdTAwMjZmZCwgc2l6ZSwgbW1hcF9mbGFncywgdmFyaWFudC1cXHUwMDNlbWVtZmRfZmxhZ3MpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAobW1hcF9mbGFncyBcXHUwMDI2IE1BUF9IVUdFVExCIFxcdTAwMjZcXHUwMDI2IHJlZ2lvbi52YWRkciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldHVwX21lbWZkKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSBtYXBcXFwiLCBpb21tdWZkX21hcF9maWxlKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBmZCkpO1xcbitcXHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcXG4rXFxuK1xcdFRJTUUoXFxcIklPTU1VIHVubWFwXFxcIiwgaW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pKTtcXG4rXFxuK1xcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQYXJzZXMgXFxcIlswLTldK1trbWd0XT9cXFwiLlxcbisgKi9cXG4rdTY0IHBhcnNlX3NpemUoY29uc3QgY2hhciAqc2l6ZSlcXG4re1xcbitcXHRpbnQgc2hpZnQgPSAwO1xcbitcXHRjaGFyICpzY2FsZTtcXG4rXFx0dTY0IGJhc2U7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXFx1MDAyNlxcdTAwMjYgaXNkaWdpdChzaXplWzBdKSxcXG4rXFx0XFx0XFx0IFxcXCJOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAnJXMnLlxcXCIsIHNpemUpO1xcbitcXG4rXFx0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFxcdTAwMjZzY2FsZSwgMCk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgXFxcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XFxuK1xcdGNhc2UgJ3QnOlxcbitcXHRcXHRzaGlmdCA9IDQwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnZyc6XFxuK1xcdFxcdHNoaWZ0ID0gMzA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlICdtJzpcXG4rXFx0XFx0c2hpZnQgPSAyMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ2snOlxcbitcXHRcXHRzaGlmdCA9IDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnYic6XFxuK1xcdGNhc2UgJ1xcXFwwJzpcXG4rXFx0XFx0c2hpZnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VkZJT19GQUlMKFxcXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXFxcIiwgKnNjYWxlKTtcXG4rXFx0fVxcbitcXG4rXFx0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcXG4rXFx0XFx0XFx0IFxcXCJPdmVyZmxvdyBzY2FsaW5nIHNpemUhXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxcbit7XFxuK1xcdHB1dHMoXFxcIlxcXCIpO1xcbitcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFxcXFxcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFxcXFxcIl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHRwdXRzKFxcXCJcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiIC1iOiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBETUEgcmVnaW9uIHRvIGJlIG1hcHBlZFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIGUuZy4gLWEgXFxcXFxcXCItdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXFxcXFwiXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RydWN0IGhhcm5lc3NfYXJncyB7XFxuK1xcdGludCBhcmdjO1xcbitcXHRjaGFyICoqYXJndjtcXG4rXFx0d29yZGV4cF90IGV4cDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqY21kbG5lKVxcbit7XFxuK1xcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XFxuK1xcbitcXHRpZiAoIWFyZ3MtXFx1MDAzZWFyZ3YpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHRoZSBwcm9ncmFtIG5hbWUgKGFyZ3ZbMF0pLlxcbitcXHRcXHQgKiBXUkRFX05PQ01EIGRpc2FibGVzIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBzYWZldHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAod29yZGV4cChhcmd2XzAsIFxcdTAwMjZhcmdzLVxcdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxcbitcXHRcXHRcXHRWRklPX0ZBSUwoXFxcIkZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGZsYWdzIHw9IFdSREVfQVBQRU5EO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdvcmRleHAoKSB0byByZWxpYWJseSBwYXJzZSB0aGUgdXNlci1zdXBwbGllZCBjb21tYW5kIGxpbmUgc3RyaW5nXFxuK1xcdCAqIGludG8gaW5kaXZpZHVhbCBhcmd1bWVudHMsIHJlc3BlY3Rpbmcgc2hlbGwgcXVvdGluZyBhbmQgZXNjYXBpbmcgcnVsZXMuXFxuK1xcdCAqIFdSREVfQVBQRU5EIG1lcmdlcyB0aGVzZSBuZXcgYXJndW1lbnRzIHdpdGggdGhlIGVhcmxpZXIgYXJndlswXS5cXG4rXFx0ICovXFxuK1xcdGlmICh3b3JkZXhwKGNtZGxuZSwgXFx1MDAyNmFyZ3MtXFx1MDAzZWV4cCwgZmxhZ3MpICE9IDApXFxuK1xcdFxcdFZGSU9fRkFJTChcXFwiRmFpbGVkIHRvIGV2YWx1YXRlIHRlc3QgaGFybmVzcyBjbWRsbmUgYXJncyFcXFwiKTtcXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZWFyZ2MgPSBhcmdzLVxcdTAwM2VleHAud2Vfd29yZGM7XFxuK1xcdGFyZ3MtXFx1MDAzZWFyZ3YgPSBhcmdzLVxcdTAwM2VleHAud2Vfd29yZHY7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50ICphcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y2hhciAqaF9hcmd2W10gPSB7IGFyZ3ZbMF0sIFxcXCItaFxcXCIgfTtcXG4rXFx0aW50IG9wdDtcXG4rXFxuK1xcdHRlc3RfcGFyYW1zLmRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKGFyZ2MsIGFyZ3YpO1xcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoKmFyZ2MsIGFyZ3YsIFxcXCJhOmI6aFxcXCIpKSAhPSAtMSkge1xcbitcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbitcXHRcXHRjYXNlICdhJzpcXG4rXFx0XFx0XFx0cG9wdWxhdGVfaGFybmVzc19hcmdzKGFyZ3MsIGFyZ3ZbMF0sIG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdiJzpcXG4rXFx0XFx0XFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRoZWxwKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Ly8gUmVzZXQgZ2V0b3B0KCkgc3RhdGUgdG8gYWxsb3cgdGhlIHRlc3QgaGFybmVzcyB0byB1c2UgaXQuXFxuK1xcdG9wdGluZCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcXG4re1xcbitcXHRpZiAoYXJncy1cXHUwMDNlYXJndikge1xcbitcXHRcXHRhcmdzLVxcdTAwM2VhcmdjID0gMDtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IE5VTEw7XFxuK1xcdFxcdHdvcmRmcmVlKFxcdTAwMjZhcmdzLVxcdTAwM2VleHApO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y2hhciAqZGVmYXVsdF9oYXJnc1tdID0geyBhcmd2WzBdLCBOVUxMIH07XFxuK1xcdHN0cnVjdCBoYXJuZXNzX2FyZ3MgYXJncyA9IHt9O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHNldHVwX3Rlc3QoXFx1MDAyNmFyZ3MsIFxcdTAwMjZhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYyA/OiAxLCBhcmdzLmFyZ3YgPzogZGVmYXVsdF9oYXJncyk7XFxuK1xcbitcXHR0ZWFyZG93bl90ZXN0KFxcdTAwMjZhcmdzKTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xcbkBAIC0xMzgsNyArMTM4LDYgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcXG4gXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbiBcXHRzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nO1xcbiBcXHR1NjQgbWFwcGluZ19zaXplID0gc2l6ZTtcXG4tXFx0dTY0IHVubWFwcGVkO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XFxuQEAgLTE5MCw5ICsxODksNyBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKVxcbiBcXHR9XFxuIFxcbiB1bm1hcDpcXG4tXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2dW5tYXBwZWQpO1xcbi1cXHRBU1NFUlRfRVEocmMsIDApO1xcbi1cXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcXG4rXFx0aW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbiBcXHRwcmludGYoXFxcIlVubWFwcGVkIElPVkEgMHglbHhcXFxcblxcXCIsIHJlZ2lvbi5pb3ZhKTtcXG4gXFx0QVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLVxcdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpO1xcbiBcXHRBU1NFUlRfTkUoMCwgaW9tbXVfbWFwcGluZ19nZXQoZGV2aWNlX2JkZiwgcmVnaW9uLmlvdmEsIFxcdTAwMjZtYXBwaW5nKSk7XFxuQEAgLTI2MCwxNSArMjU3LDExIEBAIEZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpXFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfcmFuZ2UpXFxuIHtcXG4gXFx0c3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiA9IFxcdTAwMjZzZWxmLVxcdTAwM2VyZWdpb247XFxuLVxcdHU2NCB1bm1hcHBlZDtcXG4tXFx0aW50IHJjO1xcbiBcXG4gXFx0aW9tbXVfbWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24pO1xcbiBcXHRBU1NFUlRfRVEocmVnaW9uLVxcdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLVxcdTAwM2V2YWRkcikpO1xcbiBcXG4tXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCk7XFxuLVxcdEFTU0VSVF9FUShyYywgMCk7XFxuLVxcdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVxcdTAwM2VzaXplKTtcXG4rXFx0aW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuIH1cXG4gXFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzozMzoxMC43OTE5Njc1MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk4Mjg2NzcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDYyYmJmNDQ4NmZlMjhlZTg3MGNmYzgyMGZjZjZmZjg4MjY0NDZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTc6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgKzgsNyBAQCBlbHNlXG4gQ0ZMQUdTID0gJChLSERSX0lOQ0xVREVTKVxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4rVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19wY2lfZGV2aWNlX2luaXRfcGVyZl90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuaW5kZXggMDc4NjJiNDcwNzc3Yi4uY2YzMjJiNDk5Y2ZiYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuQEAgLTksNiArOSwzNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RyaXZlci5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0KVxuK3tcbitcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbitcbitcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuK1xuK1x0cmV0dXJuICh1aW50NjRfdCkoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYykgKiBOU0VDX1BFUl9TRUMgK1xuK1x0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcbit9XG4rXG4rI2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1x0XHRcdFx0ICAgXFxcbitcdHN0cnVjdCB0aW1lc3BlYyBfX3N0YXJ0O1x0XHRcdFx0ICAgXFxcbitcdFx0XHRcdFx0XHRcdFx0ICAgXFxcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNl9fc3RhcnQpO1x0XHRcdFx0XHQgICBcXFxuK1x0X2V4cHJlc3Npb247XHRcdFx0XHRcdFx0ICAgXFxcbitcdHByaW50ZihfbmFtZSBcIiA9ICUuMmxmbXNcXG5cIixcdFx0XHRcdCAgIFxcXG4rXHQgICAgICAgKGRvdWJsZSl0aW1lcl9lbGFwc2VkX25zKF9fc3RhcnQpIC8gTlNFQ19QRVJfTVNFQyk7IFxcXG4rfSB3aGlsZSAoMClcbitcbiAvKlxuICAqIFJldHVybiB0aGUgQkRGIHN0cmluZyBvZiB0aGUgZGV2aWNlIHRoYXQgdGhlIHRlc3Qgc2hvdWxkIHVzZS5cbiAgKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbmluZGV4IGU5YTMzODZhNDcxOTMuLjUxNTk3NmZiMTliZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUge1xuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XG4gXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbit9XG4rXG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbkBAIC00Niw3ICs1MywxMCBAQCBpbnQgX19pb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCB1NjQgKnVubWFwcGVkKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuIHtcbi1cdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgTlVMTCksIDApO1xuK1x0dTY0IHVubWFwcGVkO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEoX19pb21tdV91bm1hcChpb21tdSwgcmVnaW9uLCBcdTAwMjZ1bm1hcHBlZCksIDApO1xuK1x0VkZJT19BU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbiB9XG4gXG4gaW50IF9faW9tbXVfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCAqdW5tYXBwZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCBiNmYzYzVjODRlMDFhLi5iNzZhZTBhOTFjNjg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwiSU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLlwiKTtcbitcbitcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XG4rXHRcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4rXHRcdFx0SU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHxcbitcdFx0XHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxuK1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4rXHRcdC5mZCA9IGZkLFxuK1x0XHQuc3RhcnQgPSAwLFxuK1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHQubGVuZ3RoID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWxpbmssIFx1MDAyNmlvbW11LVx1MDAzZWRtYV9yZWdpb25zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4ge1xuIFx0c3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmMjI3M2EwYzZmNTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xuQEAgLTAsMCArMSwzMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjd29yZGV4cC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGlidmZpby5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdHU2NCBzaXplO1xuK1x0Y29uc3QgY2hhciAqZGV2aWNlX2JkZjtcbit9IHRlc3RfcGFyYW1zID0ge1xuK1x0LnNpemUgPSBTWl8xRyxcbit9O1xuK1xuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbitcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4rXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuK1x0aW50IG1tYXBfZmxhZ3M7XG4rfTtcbitcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzKVx0XHQgIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkge1x0ICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfUE9QVUxBVEUgfCAoX21tYXBfZmxhZ3MpLCBcXFxuK31cbitcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzFnYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IpO1xuK1xuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbitcbitGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxuK3tcbitcdHNlbGYtXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXHUwMDNlaW9tbXVfbW9kZSk7XG4rXHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuK1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4re1xuK1x0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcbitcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbitcdGlvbW11X2NsZWFudXAoc2VsZi1cdTAwM2Vpb21tdSk7XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgZG1hX21hcF91bm1hcClcbit7XG4rXHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4rXHRjb25zdCBpbnQgZmxhZ3MgPSB2YXJpYW50LVx1MDAzZW1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXG4rXHRwcmludGYoXCJtbWFwIHNpemUgPSAlbGx1R1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbitcbitcdFRJTUUoXCJtbWFwXCIsXG4rXHQgICAgIHJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKSk7XG4rXG4rXHQvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCgpIGZhaWxlZDogJXMgKCVkKVxcblwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbitcdGVsc2VcbitcdFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4rXG4rXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuK1x0cmVnaW9uLnNpemUgPSBzaXplO1xuK1xuK1x0VElNRShcIklPTU1VIG1hcFwiLCBpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4rXHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xuK1xuK1x0VElNRShcIklPTU1VIHVubWFwXCIsIGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbikpO1xuK1x0VElNRShcIm11bm1hcFwiLCBBU1NFUlRfRVEoMCwgbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpKTtcbit9XG4rXG4rRklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuK1x0c3RydWN0IGlvbW11ICppb21tdTtcbitcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcbitcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcbitcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4rXHRpbnQgbW1hcF9mbGFncztcbitcdGludCBtZW1mZF9mbGFncztcbit9O1xuK1xuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKF9uYW1lLCBfbW1hcF9mbGFncywgX21lbWZkX2ZsYWdzKSAgICAgIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgaW9tbXVmZCAjIyBfICMjIF9uYW1lKSB7XFxcbitcdC5pb21tdV9tb2RlID0gTU9ERV9JT01NVUZELFx0XHRcdFx0XHQgICAgICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSxcdCAgICAgIFxcXG4rXHQubWVtZmRfZmxhZ3MgPSAoX21lbWZkX2ZsYWdzKSxcdFx0XHRcdFx0ICAgICAgXFxcbit9XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcbitGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUobWVtZmRfaHVnZXRsYl8ybWIsXG4rXHRcdFx0XHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsXG4rXHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZF9odWdldGxiXzFnYixcbitcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcbitcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbit7XG4rXHR2b2lkICpidWYgPSBNQVBfRkFJTEVEO1xuK1xuK1x0VElNRShcIm1lbWZkX2NyZWF0ZVwiLFxuK1x0ICAgICAqZmQgPSBtZW1mZF9jcmVhdGUoXCJ2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdFwiLCBtZmRfZmxhZ3MpKTtcbitcdGlmICgqZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBNQVBfRkFJTEVEO1xuK1xuK1x0aWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFRJTUUoXCJtbWFwXCIsXG4rXHQgICAgIGJ1ZiA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgbW1hcF9mbGFncywgKmZkLCAwKSk7XG4rXG4rb3V0OlxuK1x0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxuK1x0XHRjbG9zZSgqZmQpO1xuK1xuK1x0cmV0dXJuIGJ1Zjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXG4re1xuK1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXG4rXHRcdFRJTUUoXCJtdW5tYXBcIiwgVkZJT19BU1NFUlRfRVEoMCwgbXVubWFwKHZhZGRyLCBzaXplKSkpO1xuK1xuK1x0aWYgKGZkICE9IC0xKVxuK1x0XHRUSU1FKFwiY2xvc2VcIiwgVkZJT19BU1NFUlRfRVEoMCwgY2xvc2UoZmQpKSk7XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4re1xuK1x0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xuK1x0Y29uc3QgaW50IG1tYXBfZmxhZ3MgPSB2YXJpYW50LVx1MDAzZW1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXHRpbnQgZmQ7XG4rXG4rXHRwcmludGYoXCJtbWFwIHNpemUgPSAlbGx1R1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbitcbitcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFx1MDAyNmZkLCBzaXplLCBtbWFwX2ZsYWdzLCB2YXJpYW50LVx1MDAzZW1lbWZkX2ZsYWdzKTtcbitcbitcdC8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbid0IGVub3VnaCBIdWdlVExCIHBhZ2VzIGF2YWlsYWJsZS4gKi9cbitcdGlmIChtbWFwX2ZsYWdzIFx1MDAyNiBNQVBfSFVHRVRMQiBcdTAwMjZcdTAwMjYgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcInNldHVwX21lbWZkKCkgZmFpbGVkOiAlcyAoJWQpXFxuXCIsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0ZWxzZVxuK1x0XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbitcbitcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7XG4rXHRyZWdpb24uc2l6ZSA9IHNpemU7XG4rXG4rXHRUSU1FKFwiSU9NTVUgbWFwXCIsIGlvbW11ZmRfbWFwX2ZpbGUoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uLCBmZCkpO1xuK1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbitcbitcdFRJTUUoXCJJT01NVSB1bm1hcFwiLCBpb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pKTtcbitcbitcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xuK31cbitcbisvKlxuKyAqIFBhcnNlcyBcIlswLTldK1trbWd0XT9cIi5cbisgKi9cbit1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKVxuK3tcbitcdGludCBzaGlmdCA9IDA7XG4rXHRjaGFyICpzY2FsZTtcbitcdHU2NCBiYXNlO1xuK1xuK1x0VkZJT19BU1NFUlRfVFJVRShzaXplIFx1MDAyNlx1MDAyNiBpc2RpZ2l0KHNpemVbMF0pLFxuK1x0XHRcdCBcIk5lZWQgYXQgbGVhc3Qgb25lIGRpZ2l0IGluICclcycuXCIsIHNpemUpO1xuK1xuK1x0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFx1MDAyNnNjYWxlLCAwKTtcbitcbitcdFZGSU9fQVNTRVJUX1RSVUUoYmFzZSAhPSBVTExPTkdfTUFYLCBcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcIik7XG4rXG4rXHRzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkge1xuK1x0Y2FzZSAndCc6XG4rXHRcdHNoaWZ0ID0gNDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnZyc6XG4rXHRcdHNoaWZ0ID0gMzA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnbSc6XG4rXHRcdHNoaWZ0ID0gMjA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnayc6XG4rXHRcdHNoaWZ0ID0gMTA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnYic6XG4rXHRjYXNlICdcXDAnOlxuK1x0XHRzaGlmdCA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0VkZJT19GQUlMKFwiVW5rbm93biBzaXplIGxldHRlciAnJWMnLlwiLCAqc2NhbGUpO1xuK1x0fVxuK1xuK1x0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQpIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBiYXNlLFxuK1x0XHRcdCBcIk92ZXJmbG93IHNjYWxpbmcgc2l6ZSFcIik7XG4rXG4rXHRyZXR1cm4gYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSlcbit7XG4rXHRwdXRzKFwiXCIpO1xuK1x0cHJpbnRmKFwidXNhZ2U6ICVzIFstaF0gWy1iIGJ5dGVzXSBbLWEgXFxcInRlc3QgaGFybmVzcyBhcmdzXFxcIl1cXG5cIiwgbmFtZSk7XG4rXHRwdXRzKFwiXCIpO1xuK1x0cHJpbnRmKFwiIC1oOiBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxcblwiXG4rXHQgICAgICAgXCIgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXFxuXCJcbitcdCAgICAgICBcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcblwiXG4rXHQgICAgICAgXCIgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxuXCJcbitcdCAgICAgICBcIiAgICAgZS5nLiAtYSBcXFwiLXQgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGVcXFwiXFxuXCIpO1xuK31cbitcbitzdHJ1Y3QgaGFybmVzc19hcmdzIHtcbitcdGludCBhcmdjO1xuK1x0Y2hhciAqKmFyZ3Y7XG4rXHR3b3JkZXhwX3QgZXhwO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCxcbitcdFx0XHRcdCAgY29uc3QgY2hhciAqY21kbG5lKVxuK3tcbitcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XG4rXG4rXHRpZiAoIWFyZ3MtXHUwMDNlYXJndikge1xuK1x0XHQvKlxuK1x0XHQgKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBsaXN0IHdpdGggdGhlIHByb2dyYW0gbmFtZSAoYXJndlswXSkuXG4rXHRcdCAqIFdSREVfTk9DTUQgZGlzYWJsZXMgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIHNhZmV0eS5cbitcdFx0ICovXG4rXHRcdGlmICh3b3JkZXhwKGFyZ3ZfMCwgXHUwMDI2YXJncy1cdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxuK1x0XHRcdFZGSU9fRkFJTChcIkZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXCIpO1xuK1x0fVxuK1xuK1x0ZmxhZ3MgfD0gV1JERV9BUFBFTkQ7XG4rXG4rXHQvKlxuK1x0ICogVXNlIHdvcmRleHAoKSB0byByZWxpYWJseSBwYXJzZSB0aGUgdXNlci1zdXBwbGllZCBjb21tYW5kIGxpbmUgc3RyaW5nXG4rXHQgKiBpbnRvIGluZGl2aWR1YWwgYXJndW1lbnRzLCByZXNwZWN0aW5nIHNoZWxsIHF1b3RpbmcgYW5kIGVzY2FwaW5nIHJ1bGVzLlxuK1x0ICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLlxuK1x0ICovXG4rXHRpZiAod29yZGV4cChjbWRsbmUsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBmbGFncykgIT0gMClcbitcdFx0VkZJT19GQUlMKFwiRmFpbGVkIHRvIGV2YWx1YXRlIHRlc3QgaGFybmVzcyBjbWRsbmUgYXJncyFcIik7XG4rXG4rXHRhcmdzLVx1MDAzZWFyZ2MgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkYztcbitcdGFyZ3MtXHUwMDNlYXJndiA9IGFyZ3MtXHUwMDNlZXhwLndlX3dvcmR2O1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXR1cF90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGludCAqYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNoYXIgKmhfYXJndltdID0geyBhcmd2WzBdLCBcIi1oXCIgfTtcbitcdGludCBvcHQ7XG4rXG4rXHR0ZXN0X3BhcmFtcy5kZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihhcmdjLCBhcmd2KTtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KCphcmdjLCBhcmd2LCBcImE6YjpoXCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKG9wdCkge1xuK1x0XHRjYXNlICdhJzpcbitcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYic6XG4rXHRcdFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGVscChhcmd2WzBdKTtcbitcdFx0XHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuK1x0b3B0aW5kID0gMTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKVxuK3tcbitcdGlmIChhcmdzLVx1MDAzZWFyZ3YpIHtcbitcdFx0YXJncy1cdTAwM2VhcmdjID0gMDtcbitcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbitcdFx0d29yZGZyZWUoXHUwMDI2YXJncy1cdTAwM2VleHApO1xuK1x0fVxuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNoYXIgKmRlZmF1bHRfaGFyZ3NbXSA9IHsgYXJndlswXSwgTlVMTCB9O1xuK1x0c3RydWN0IGhhcm5lc3NfYXJncyBhcmdzID0ge307XG4rXHRpbnQgcjtcbitcbitcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgXHUwMDI2YXJnYywgYXJndik7XG4rXG4rXHRyID0gdGVzdF9oYXJuZXNzX3J1bihhcmdzLmFyZ2MgPzogMSwgYXJncy5hcmd2ID86IGRlZmF1bHRfaGFyZ3MpO1xuK1xuK1x0dGVhcmRvd25fdGVzdChcdTAwMjZhcmdzKTtcbitcbitcdHJldHVybiByO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbkBAIC0xMzgsNyArMTM4LDYgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcbiBcdHN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjtcbiBcdHN0cnVjdCBpb21tdV9tYXBwaW5nIG1hcHBpbmc7XG4gXHR1NjQgbWFwcGluZ19zaXplID0gc2l6ZTtcbi1cdHU2NCB1bm1hcHBlZDtcbiBcdGludCByYztcbiBcbiBcdHJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKTtcbkBAIC0xOTAsOSArMTg5LDcgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcbiBcdH1cbiBcbiB1bm1hcDpcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbitcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4gXHRwcmludGYoXCJVbm1hcHBlZCBJT1ZBIDB4JWx4XFxuXCIsIHJlZ2lvbi5pb3ZhKTtcbiBcdEFTU0VSVF9ORSgwLCBfX3RvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpO1xuIFx0QVNTRVJUX05FKDAsIGlvbW11X21hcHBpbmdfZ2V0KGRldmljZV9iZGYsIHJlZ2lvbi5pb3ZhLCBcdTAwMjZtYXBwaW5nKSk7XG5AQCAtMjYwLDE1ICsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX3JhbmdlKVxuIHtcbiBcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24gPSBcdTAwMjZzZWxmLVx1MDAzZXJlZ2lvbjtcbi1cdHU2NCB1bm1hcHBlZDtcbi1cdGludCByYztcbiBcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbitcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIHJlZ2lvbik7XG4gfVxuIFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MTAuNzkxOTY5NzkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5ODI4Mjk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBETUEgTWFwcGluZyBQZXJmb3JtYW5jZSBUZXN0IFBhdGNoIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5jZSB0ZXN0IGZvciBWRklPIERNQSBtYXBwaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyB0aGUgYE1ha2VmaWxlYCwgc29tZSBpbmNsdWRlIGZpbGVzIChgbGlidmZpby5oYCwgYGlvbW11LmhgKSwgYW4gSU9NTVUgaW1wbGVtZW50YXRpb24gZmlsZSAoYGlvbW11LmNgKSwgYW5kIHR3byB0ZXN0IGZpbGVzIChgdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY2AgYW5kIGB2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY2ApLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNlcnRhaW4gdHlwZXMgb2YgbW9kaWZpY2F0aW9ucy4gSXQgbGlzdHMgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBjb25zdGFudCB0d2Vha3MgdGhhdCBkb24ndCBjaGFuZ2UgZmxvdywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0IGEgc2Vjb25kLCB0aGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgc2VsZnRlc3RzYCBkaXJlY3RvcnkuXCJcblxuU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIFRoZXkgZG9uJ3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuIFRoZXkncmUgZGVzaWduZWQgdG8gKnRlc3QqIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBub3QgKmJlKiBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhlIHF1ZXN0aW9uIEkgaGF2ZSB0byBhc2sgbXlzZWxmIGlzOiBkb2VzIG1vZGlmeWluZyB0aGVzZSBzZWxmdGVzdHMgY29uc3RpdHV0ZSBhIFwiZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWRcIj8gQWJzb2x1dGVseSBub3QuIFN5emthbGxlciwgdGhlIGZ1enplciwgdGFyZ2V0cyB0aGUga2VybmVsJ3MgY29yZS4gSXQncyBub3QgZGVzaWduZWQgdG8gZnV6eiB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLCBldmVuIGlmIHRob3NlIGFwcGxpY2F0aW9ucyBhcmUgdXNlZCB0byB0ZXN0IGtlcm5lbCBmZWF0dXJlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gTm8ga2VybmVsIHNvdXJjZSBmaWxlcyBhcmUgdG91Y2hlZC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC5cblxuVGhlIHByb21wdCBpcyBjbGVhcjogXCJZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIgU2luY2UgdGhpcyBwYXRjaCBzZXJpZXMgaXMgZXhjbHVzaXZlbHkgZm9jdXNlZCBvbiBhZGRpbmcgYSBzZWxmdGVzdCB3aXRoaW4gdXNlcnNwYWNlLCBpdCBjbGVhcmx5IGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhLiBUaGUgcHVycG9zZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZSwgYW5kIGFyZSBkZXNpZ25lZCB0byBub3QgbWFrZSBjaGFuZ2VzLlxuXG5TbywgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTXkgcmVhc29uaW5nOiBUaGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI2LCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MjEuNzc0ODAzODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsthxv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 17:15:46 +0000 UTC FinishedAt: 2026-08-04 17:33:23 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNjJiYmY0NDg2ZmUyOGVlODcwY2ZjODIwZmNmNmZmODgyNjQ0NmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNzozMzowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZVxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiLi5jZjMyMmI0OTljZmJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5AQCAtOSw2ICYjNDM7OSwzNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RyaXZlci5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHRpbWVyX2VsYXBzZWRfbnMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodWludDY0X3QpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTlNFQ19QRVJfU0VDICYjNDM7XG4mIzQzO1x0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1x0XHRcdFx0ICAgXFxcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWMgX19zdGFydDtcdFx0XHRcdCAgIFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICBcXFxuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNl9fc3RhcnQpO1x0XHRcdFx0XHQgICBcXFxuJiM0MztcdF9leHByZXNzaW9uO1x0XHRcdFx0XHRcdCAgIFxcXG4mIzQzO1x0cHJpbnRmKF9uYW1lIFwmIzM0OyA9ICUuMmxmbXNcXG5cJiMzNDssXHRcdFx0XHQgICBcXFxuJiM0MztcdCAgICAgICAoZG91YmxlKXRpbWVyX2VsYXBzZWRfbnMoX19zdGFydCkgLyBOU0VDX1BFUl9NU0VDKTsgXFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4gLypcbiAgKiBSZXR1cm4gdGhlIEJERiBzdHJpbmcgb2YgdGhlIGRldmljZSB0aGF0IHRoZSB0ZXN0IHNob3VsZCB1c2UuXG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzLi41MTU5NzZmYjE5YmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5AQCAtMzUsNiAmIzQzOzM1LDEzIEBAIHN0cnVjdCBpb21tdSB7XG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xuIHZvaWQgaW9tbXVfY2xlYW51cChzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEoX19pb21tdWZkX21hcF9maWxlKGlvbW11LCByZWdpb24sIGZkKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbkBAIC00Niw3ICYjNDM7NTMsMTAgQEAgaW50IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgdTY0ICp1bm1hcHBlZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4tXHRWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIE5VTEwpLCAwKTtcbiYjNDM7XHR1NjQgdW5tYXBwZWQ7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpLCAwKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVx1MDAzZXNpemUpO1xuIH1cbiBcbiBpbnQgX19pb21tdV91bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSwgdTY0ICp1bm1hcHBlZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwmIzM0O0lPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xuJiM0MztcdFx0LnNpemUgPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXG4mIzQzO1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4mIzQzO1x0XHQuZmQgPSBmZCxcbiYjNDM7XHRcdC5zdGFydCA9IDAsXG4mIzQzO1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuJiM0MztcdFx0Lmxlbmd0aCA9IHJlZ2lvbi1cdTAwM2VzaXplLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCBcdTAwMjZhcmdzKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaW5rLCBcdTAwMjZpb21tdS1cdTAwM2VkbWFfcmVnaW9ucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWYyMjczYTBjNmY1MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwzMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3dvcmRleHAuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XG4mIzQzO30gdGVzdF9wYXJhbXMgPSB7XG4mIzQzO1x0LnNpemUgPSBTWl8xRyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbiYjNDM7XHRzdHJ1Y3QgaW9tbXUgKmlvbW11O1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcbiYjNDM7XHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW9tbXVfbW9kZTtcbiYjNDM7XHRpbnQgbW1hcF9mbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXHRcdCAgXFxcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkge1x0ICBcXFxuJiM0MztcdC5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLFx0XHRcdFx0XHRcdCAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzO1xuJiM0MztcdHN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjtcbiYjNDM7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O21tYXAgc2l6ZSA9ICVsbHVHXFxuXCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDttbWFwXCYjMzQ7LFxuJiM0MztcdCAgICAgcmVnaW9uLnZhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgLTEsIDApKTtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJiMzOTt0IGVub3VnaCBIdWdlVExCIHBhZ2VzIGF2YWlsYWJsZS4gKi9cbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDttbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbiYjNDM7XHRyZWdpb24uc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdFRJTUUoXCYjMzQ7SU9NTVUgbWFwXCYjMzQ7LCBpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDtJT01NVSB1bm1hcFwmIzM0OywgaW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1x0VElNRShcJiMzNDttdW5tYXBcJiMzNDssIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4mIzQzO1x0c3RydWN0IGlvbW11ICppb21tdTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuJiM0MztcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3M7XG4mIzQzO1x0aW50IG1lbWZkX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXFxcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgaW9tbXVmZCAjIyBfICMjIF9uYW1lKSB7XFxcbiYjNDM7XHQuaW9tbXVfbW9kZSA9IE1PREVfSU9NTVVGRCxcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCBNQVBfUE9QVUxBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgXFxcbiYjNDM7XHQubWVtZmRfZmxhZ3MgPSAoX21lbWZkX2ZsYWdzKSxcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLFxuJiM0MztcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcbiYjNDM7XHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUobWVtZmRfaHVnZXRsYl8xZ2IsXG4mIzQzO1x0XHRcdFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLFxuJiM0MztcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4mIzQzO1xuJiM0MzsjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFXG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0MztcdHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcbiYjNDM7XHR2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLVx1MDAzZWRldmljZSk7XG4mIzQzO1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7XG4mIzQzO1xuJiM0MztcdFRJTUUoXCYjMzQ7bWVtZmRfY3JlYXRlXCYjMzQ7LFxuJiM0MztcdCAgICAgKmZkID0gbWVtZmRfY3JlYXRlKFwmIzM0O3ZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0XCYjMzQ7LCBtZmRfZmxhZ3MpKTtcbiYjNDM7XHRpZiAoKmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIE1BUF9GQUlMRUQ7XG4mIzQzO1xuJiM0MztcdGlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRUSU1FKFwmIzM0O21tYXBcJiMzNDssXG4mIzQzO1x0ICAgICBidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCkpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChidWYgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGNsb3NlKCpmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlYXJkb3duX21lbWZkKGludCBmZCwgdTY0IHNpemUsIHZvaWQgKnZhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRUSU1FKFwmIzM0O211bm1hcFwmIzM0OywgVkZJT19BU1NFUlRfRVEoMCwgbXVubWFwKHZhZGRyLCBzaXplKSkpO1xuJiM0MztcbiYjNDM7XHRpZiAoZmQgIT0gLTEpXG4mIzQzO1x0XHRUSU1FKFwmIzM0O2Nsb3NlXCYjMzQ7LCBWRklPX0FTU0VSVF9FUSgwLCBjbG9zZShmZCkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcbiYjNDM7XHRjb25zdCBpbnQgbW1hcF9mbGFncyA9IHZhcmlhbnQtXHUwMDNlbW1hcF9mbGFncztcbiYjNDM7XHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7bW1hcCBzaXplID0gJWxsdUdcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpKHNpemUgLyBTWl8xRykpO1xuJiM0MztcbiYjNDM7XHRyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZChcdTAwMjZmZCwgc2l6ZSwgbW1hcF9mbGFncywgdmFyaWFudC1cdTAwM2VtZW1mZF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbiYjMzk7dCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovXG4mIzQzO1x0aWYgKG1tYXBfZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtzZXR1cF9tZW1mZCgpIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7XG4mIzQzO1x0cmVnaW9uLnNpemUgPSBzaXplO1xuJiM0MztcbiYjNDM7XHRUSU1FKFwmIzM0O0lPTU1VIG1hcFwmIzM0OywgaW9tbXVmZF9tYXBfZmlsZShzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIGZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0VElNRShcJiMzNDtJT01NVSB1bm1hcFwmIzM0OywgaW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4mIzQzO1xuJiM0MztcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQYXJzZXMgXCYjMzQ7WzAtOV0mIzQzO1trbWd0XT9cJiMzNDsuXG4mIzQzOyAqL1xuJiM0Mzt1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNoaWZ0ID0gMDtcbiYjNDM7XHRjaGFyICpzY2FsZTtcbiYjNDM7XHR1NjQgYmFzZTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfVFJVRShzaXplIFx1MDAyNlx1MDAyNiBpc2RpZ2l0KHNpemVbMF0pLFxuJiM0MztcdFx0XHQgXCYjMzQ7TmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJiMzOTslcyYjMzk7LlwmIzM0Oywgc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGJhc2UgPSBzdHJ0b3VsbChzaXplLCBcdTAwMjZzY2FsZSwgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX1RSVUUoYmFzZSAhPSBVTExPTkdfTUFYLCBcJiMzNDtPdmVyZmxvdyBwYXJzaW5nIHNpemUhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0b2xvd2VyKCpzY2FsZSkpIHtcbiYjNDM7XHRjYXNlICYjMzk7dCYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSA0MDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtnJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDMwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O20mIzM5OzpcbiYjNDM7XHRcdHNoaWZ0ID0gMjA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAxMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtiJiMzOTs6XG4mIzQzO1x0Y2FzZSAmIzM5O1xcMCYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFZGSU9fRkFJTChcJiMzNDtVbmtub3duIHNpemUgbGV0dGVyICYjMzk7JWMmIzM5Oy5cJiMzNDssICpzY2FsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKChiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdCkgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IGJhc2UsXG4mIzQzO1x0XHRcdCBcJiMzNDtPdmVyZmxvdyBzY2FsaW5nIHNpemUhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJhc2UgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRwdXRzKFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O3VzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFxcXCYjMzQ7dGVzdCBoYXJuZXNzIGFyZ3NcXFwmIzM0O11cXG5cJiMzNDssIG5hbWUpO1xuJiM0MztcdHB1dHMoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7IC1oOiBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgZS5nLiAtYSBcXFwmIzM0Oy10IGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlXFxcJiMzNDtcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzIHtcbiYjNDM7XHRpbnQgYXJnYztcbiYjNDM7XHRjaGFyICoqYXJndjtcbiYjNDM7XHR3b3JkZXhwX3QgZXhwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcbiYjNDM7e1xuJiM0MztcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XG4mIzQzO1xuJiM0MztcdGlmICghYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHRoZSBwcm9ncmFtIG5hbWUgKGFyZ3ZbMF0pLlxuJiM0MztcdFx0ICogV1JERV9OT0NNRCBkaXNhYmxlcyBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3Igc2FmZXR5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBmbGFncykgIT0gMClcbiYjNDM7XHRcdFx0VkZJT19GQUlMKFwmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZsYWdzIHw9IFdSREVfQVBQRU5EO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3b3JkZXhwKCkgdG8gcmVsaWFibHkgcGFyc2UgdGhlIHVzZXItc3VwcGxpZWQgY29tbWFuZCBsaW5lIHN0cmluZ1xuJiM0MztcdCAqIGludG8gaW5kaXZpZHVhbCBhcmd1bWVudHMsIHJlc3BlY3Rpbmcgc2hlbGwgcXVvdGluZyBhbmQgZXNjYXBpbmcgcnVsZXMuXG4mIzQzO1x0ICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh3b3JkZXhwKGNtZGxuZSwgXHUwMDI2YXJncy1cdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxuJiM0MztcdFx0VkZJT19GQUlMKFwmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgY21kbG5lIGFyZ3MhXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YXJncy1cdTAwM2VhcmdjID0gYXJncy1cdTAwM2VleHAud2Vfd29yZGM7XG4mIzQzO1x0YXJncy1cdTAwM2Vhcmd2ID0gYXJncy1cdTAwM2VleHAud2Vfd29yZHY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50ICphcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpoX2FyZ3ZbXSA9IHsgYXJndlswXSwgXCYjMzQ7LWhcJiMzNDsgfTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcbiYjNDM7XHR0ZXN0X3BhcmFtcy5kZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihhcmdjLCBhcmd2KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoKmFyZ2MsIGFyZ3YsIFwmIzM0O2E6YjpoXCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAob3B0KSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7YSYjMzk7OlxuJiM0MztcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YiYjMzk7OlxuJiM0MztcdFx0XHR0ZXN0X3BhcmFtcy5zaXplID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC5cbiYjNDM7XHRvcHRpbmQgPSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ2MgPSAwO1xuJiM0MztcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbiYjNDM7XHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkZWZhdWx0X2hhcmdzW10gPSB7IGFyZ3ZbMF0sIE5VTEwgfTtcbiYjNDM7XHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSB7fTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfdGVzdChcdTAwMjZhcmdzLCBcdTAwMjZhcmdjLCBhcmd2KTtcbiYjNDM7XG4mIzQzO1x0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjID86IDEsIGFyZ3MuYXJndiA/OiBkZWZhdWx0X2hhcmdzKTtcbiYjNDM7XG4mIzQzO1x0dGVhcmRvd25fdGVzdChcdTAwMjZhcmdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbkBAIC0xMzgsNyAmIzQzOzEzOCw2IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4gXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4gXHRzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nO1xuIFx0dTY0IG1hcHBpbmdfc2l6ZSA9IHNpemU7XG4tXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4gXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG5AQCAtMTkwLDkgJiM0MzsxODksNyBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKVxuIFx0fVxuIFxuIHVubWFwOlxuLVx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpO1xuLVx0QVNTRVJUX0VRKHJjLCAwKTtcbi1cdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpO1xuJiM0MztcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4gXHRwcmludGYoXCYjMzQ7VW5tYXBwZWQgSU9WQSAweCVseFxcblwmIzM0OywgcmVnaW9uLmlvdmEpO1xuIFx0QVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyLCBOVUxMKSk7XG4gXHRBU1NFUlRfTkUoMCwgaW9tbXVfbWFwcGluZ19nZXQoZGV2aWNlX2JkZiwgcmVnaW9uLmlvdmEsIFx1MDAyNm1hcHBpbmcpKTtcbkBAIC0yNjAsMTUgJiM0MzsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX3JhbmdlKVxuIHtcbiBcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24gPSBcdTAwMjZzZWxmLVx1MDAzZXJlZ2lvbjtcbi1cdHU2NCB1bm1hcHBlZDtcbi1cdGludCByYztcbiBcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbiYjNDM7XHRpb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIH1cbiBcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX2FsbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2MmJiZjQ0ODZmZTI4ZWU4NzBjZmM4MjBmY2Y2ZmY4ODI2NDQ2ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjMzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZQogQ0ZMQUdTID0gJChLSERSX0lOQ0xVREVTKQogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19pb21tdWZkX3NldHVwX3Rlc3QKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fcGNpX2RldmljZV9pbml0X3BlcmZfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAppbmRleCAwNzg2MmI0NzA3NzdiLi5jZjMyMmI0OTljZmJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaApAQCAtOSw2ICYjNDM7OSwzNCBAQAogI2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kcml2ZXIuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkKJiM0Mzt7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgZW5kOwomIzQzOwomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtlbmQpOwomIzQzOwomIzQzOwlyZXR1cm4gKHVpbnQ2NF90KShlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjKSAqIE5TRUNfUEVSX1NFQyAmIzQzOwomIzQzOwkgICAgICAgKHVpbnQ2NF90KShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFRJTUUoX25hbWUsIF9leHByZXNzaW9uKSBkbyB7CQkJCSAgIFwKJiM0MzsJc3RydWN0IHRpbWVzcGVjIF9fc3RhcnQ7CQkJCSAgIFwKJiM0MzsJCQkJCQkJCSAgIFwKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtfX3N0YXJ0KTsJCQkJCSAgIFwKJiM0MzsJX2V4cHJlc3Npb247CQkJCQkJICAgXAomIzQzOwlwcmludGYoX25hbWUgJiMzNDsgPSAlLjJsZm1zXG4mIzM0OywJCQkJICAgXAomIzQzOwkgICAgICAgKGRvdWJsZSl0aW1lcl9lbGFwc2VkX25zKF9fc3RhcnQpIC8gTlNFQ19QRVJfTVNFQyk7IFwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwogLyoKICAqIFJldHVybiB0aGUgQkRGIHN0cmluZyBvZiB0aGUgZGV2aWNlIHRoYXQgdGhlIHRlc3Qgc2hvdWxkIHVzZS4KICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCmluZGV4IGU5YTMzODZhNDcxOTMuLjUxNTk3NmZiMTliZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCkBAIC0zNSw2ICYjNDM7MzUsMTMgQEAgc3RydWN0IGlvbW11IHsKIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTsKIHZvaWQgaW9tbXVfY2xlYW51cChzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKIAomIzQzO2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpCiYjNDM7ewomIzQzOwlWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKQEAgLTQ2LDcgJiM0Mzs1MywxMCBAQCBpbnQgX19pb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCB1NjQgKnVubWFwcGVkKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKIHsKLQlWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIE5VTEwpLCAwKTsKJiM0MzsJdTY0IHVubWFwcGVkOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sICZhbXA7dW5tYXBwZWQpLCAwKTsKJiM0MzsJVkZJT19BU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi0mZ3Q7c2l6ZSk7CiB9CiAKIGludCBfX2lvbW11X3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgKnVubWFwcGVkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jCmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwpAQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcikKIAlyZXR1cm4gaW92YTsKIH0KIAomIzQzO2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKQomIzQzO3sKJiM0MzsJVkZJT19BU1NFUlRfVFJVRShpb21tdS0mZ3Q7aW9tbXVmZCwgJiMzNDtJT01NVV9JT0FTX01BUF9GSUxFIGlzIGFuIElPTU1VRkQgSU9DVEwuJiMzNDspOwomIzQzOwomIzQzOwlzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0gewomIzQzOwkJLnNpemUgPSBzaXplb2YoYXJncyksCiYjNDM7CQkuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8CiYjNDM7CQkJSU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHwKJiM0MzsJCQlJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLAomIzQzOwkJLmlvYXNfaWQgPSBpb21tdS0mZ3Q7aW9hc19pZCwKJiM0MzsJCS5mZCA9IGZkLAomIzQzOwkJLnN0YXJ0ID0gMCwKJiM0MzsJCS5pb3ZhID0gcmVnaW9uLSZndDtpb3ZhLAomIzQzOwkJLmxlbmd0aCA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCAmYW1wO2FyZ3MpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbGlzdF9hZGQoJmFtcDtyZWdpb24tJmd0O2xpbmssICZhbXA7aW9tbXUtJmd0O2RtYV9yZWdpb25zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQogewogCXN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV9tYXAgYXJncyA9IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZjIyNzNhMGM2ZjUyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDMzMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3dvcmRleHAuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJdTY0IHNpemU7CiYjNDM7CWNvbnN0IGNoYXIgKmRldmljZV9iZGY7CiYjNDM7fSB0ZXN0X3BhcmFtcyA9IHsKJiM0MzsJLnNpemUgPSBTWl8xRywKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHsKJiM0MzsJc3RydWN0IGlvbW11ICppb21tdTsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlOwomIzQzOwlzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7CiYjNDM7CWNvbnN0IGNoYXIgKmlvbW11X21vZGU7CiYjNDM7CWludCBtbWFwX2ZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncykJCSAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsJICBcCiYjNDM7CS5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLAkJCQkJCSAgXAomIzQzOwkubW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfUFJJVkFURSB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksIFwKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzLCAwKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8ybWIsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTsKJiM0MzsKJiM0MzsjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFCiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkKJiM0Mzt7CiYjNDM7CXNlbGYtJmd0O2lvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LSZndDtpb21tdV9tb2RlKTsKJiM0MzsJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwomIzQzOwlzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi0mZ3Q7aW9tbXUpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KQomIzQzO3sKJiM0MzsJaW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLSZndDtpb3ZhX2FsbG9jYXRvcik7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtJmd0O2RldmljZSk7CiYjNDM7CWlvbW11X2NsZWFudXAoc2VsZi0mZ3Q7aW9tbXUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApCiYjNDM7ewomIzQzOwljb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7CiYjNDM7CWNvbnN0IGludCBmbGFncyA9IHZhcmlhbnQtJmd0O21tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7bW1hcCBzaXplID0gJWxsdUdcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O21tYXAmIzM0OywKJiM0MzsJICAgICByZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCkpOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTUFQX0hVR0VUTEIgJmFtcDsmYW1wOyByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJZWxzZQomIzQzOwkJQVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CXJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IsIHNpemUpOwomIzQzOwlyZWdpb24uc2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDtJT01NVSBtYXAmIzM0OywgaW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbikpOwomIzQzOwlBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi0mZ3Q7ZGV2aWNlLCByZWdpb24udmFkZHIpKTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O0lPTU1VIHVubWFwJiMzNDssIGlvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbikpOwomIzQzOwlUSU1FKCYjMzQ7bXVubWFwJiMzNDssIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7CiYjNDM7CXN0cnVjdCBpb21tdSAqaW9tbXU7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTsKJiM0MzsJc3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkgewomIzQzOwljb25zdCBjaGFyICppb21tdV9tb2RlOwomIzQzOwlpbnQgbW1hcF9mbGFnczsKJiM0MzsJaW50IG1lbWZkX2ZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGlvbW11ZmQgIyMgXyAjIyBfbmFtZSkge1wKJiM0MzsJLmlvbW11X21vZGUgPSBNT0RFX0lPTU1VRkQsCQkJCQkgICAgICBcCiYjNDM7CS5tbWFwX2ZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9QT1BVTEFURSB8IChfbW1hcF9mbGFncyksCSAgICAgIFwKJiM0MzsJLm1lbWZkX2ZsYWdzID0gKF9tZW1mZF9mbGFncyksCQkJCQkgICAgICBcCiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZCwgMCwgMCk7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLAomIzQzOwkJCQkgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsCiYjNDM7CQkJCSAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQik7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMWdiLAomIzQzOwkJCQkgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IsCiYjNDM7CQkJCSAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7CiYjNDM7CiYjNDM7I3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERQomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpCiYjNDM7ewomIzQzOwlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSk7CiYjNDM7CXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKJiM0MzsJc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtJmd0O2lvbW11KTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkKJiM0Mzt7CiYjNDM7CWlvdmFfYWxsb2NhdG9yX2NsZWFudXAoc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IpOwomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLSZndDtkZXZpY2UpOwomIzQzOwlpb21tdV9jbGVhbnVwKHNlbGYtJmd0O2lvbW11KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncykKJiM0Mzt7CiYjNDM7CXZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDttZW1mZF9jcmVhdGUmIzM0OywKJiM0MzsJICAgICAqZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCYjMzQ7LCBtZmRfZmxhZ3MpKTsKJiM0MzsJaWYgKCpmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gTUFQX0ZBSUxFRDsKJiM0MzsKJiM0MzsJaWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDttbWFwJiMzNDssCiYjNDM7CSAgICAgYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChidWYgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWNsb3NlKCpmZCk7CiYjNDM7CiYjNDM7CXJldHVybiBidWY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlYXJkb3duX21lbWZkKGludCBmZCwgdTY0IHNpemUsIHZvaWQgKnZhZGRyKQomIzQzO3sKJiM0MzsJaWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpCiYjNDM7CQlUSU1FKCYjMzQ7bXVubWFwJiMzNDssIFZGSU9fQVNTRVJUX0VRKDAsIG11bm1hcCh2YWRkciwgc2l6ZSkpKTsKJiM0MzsKJiM0MzsJaWYgKGZkICE9IC0xKQomIzQzOwkJVElNRSgmIzM0O2Nsb3NlJiMzNDssIFZGSU9fQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKQomIzQzO3sKJiM0MzsJY29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplOwomIzQzOwljb25zdCBpbnQgbW1hcF9mbGFncyA9IHZhcmlhbnQtJmd0O21tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlwcmludGYoJiMzNDttbWFwIHNpemUgPSAlbGx1R1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpKHNpemUgLyBTWl8xRykpOwomIzQzOwomIzQzOwlyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZCgmYW1wO2ZkLCBzaXplLCBtbWFwX2ZsYWdzLCB2YXJpYW50LSZndDttZW1mZF9mbGFncyk7CiYjNDM7CiYjNDM7CS8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbiYjMzk7dCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovCiYjNDM7CWlmIChtbWFwX2ZsYWdzICZhbXA7IE1BUF9IVUdFVExCICZhbXA7JmFtcDsgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtzZXR1cF9tZW1mZCgpIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwllbHNlCiYjNDM7CQlBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJcmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7CiYjNDM7CXJlZ2lvbi5zaXplID0gc2l6ZTsKJiM0MzsKJiM0MzsJVElNRSgmIzM0O0lPTU1VIG1hcCYjMzQ7LCBpb21tdWZkX21hcF9maWxlKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgZmQpKTsKJiM0MzsJQVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtJmd0O2RldmljZSwgcmVnaW9uLnZhZGRyKSk7CiYjNDM7CiYjNDM7CVRJTUUoJiMzNDtJT01NVSB1bm1hcCYjMzQ7LCBpb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgJmFtcDtyZWdpb24pKTsKJiM0MzsKJiM0MzsJdGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUGFyc2VzICYjMzQ7WzAtOV0mIzQzO1trbWd0XT8mIzM0Oy4KJiM0MzsgKi8KJiM0Mzt1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKQomIzQzO3sKJiM0MzsJaW50IHNoaWZ0ID0gMDsKJiM0MzsJY2hhciAqc2NhbGU7CiYjNDM7CXU2NCBiYXNlOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9UUlVFKHNpemUgJmFtcDsmYW1wOyBpc2RpZ2l0KHNpemVbMF0pLAomIzQzOwkJCSAmIzM0O05lZWQgYXQgbGVhc3Qgb25lIGRpZ2l0IGluICYjMzk7JXMmIzM5Oy4mIzM0Oywgc2l6ZSk7CiYjNDM7CiYjNDM7CWJhc2UgPSBzdHJ0b3VsbChzaXplLCAmYW1wO3NjYWxlLCAwKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsICYjMzQ7T3ZlcmZsb3cgcGFyc2luZyBzaXplISYjMzQ7KTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0b2xvd2VyKCpzY2FsZSkpIHsKJiM0MzsJY2FzZSAmIzM5O3QmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gNDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2cmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMzA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O20mIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMjA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2smIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMTA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O2ImIzM5OzoKJiM0MzsJY2FzZSAmIzM5O1wwJiMzOTs6CiYjNDM7CQlzaGlmdCA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVZGSU9fRkFJTCgmIzM0O1Vua25vd24gc2l6ZSBsZXR0ZXIgJiMzOTslYyYjMzk7LiYjMzQ7LCAqc2NhbGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoKGJhc2UgJmx0OyZsdDsgc2hpZnQpICZndDsmZ3Q7IHNoaWZ0ID09IGJhc2UsCiYjNDM7CQkJICYjMzQ7T3ZlcmZsb3cgc2NhbGluZyBzaXplISYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgJmx0OyZsdDsgc2hpZnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXB1dHMoJiMzNDsmIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0O3VzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFwmIzM0O3Rlc3QgaGFybmVzcyBhcmdzXCYjMzQ7XVxuJiMzNDssIG5hbWUpOwomIzQzOwlwdXRzKCYjMzQ7JiMzNDspOwomIzQzOwlwcmludGYoJiMzNDsgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIGFuZCB1bm1hcHBlZC4gZS5nLiAxNk0gb3IgOEcsIChkZWZhdWx0OiAxRylcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZS5nLiAtYSBcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVwmIzM0O1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzIHsKJiM0MzsJaW50IGFyZ2M7CiYjNDM7CWNoYXIgKiphcmd2OwomIzQzOwl3b3JkZXhwX3QgZXhwOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCwKJiM0MzsJCQkJICBjb25zdCBjaGFyICpjbWRsbmUpCiYjNDM7ewomIzQzOwlpbnQgZmxhZ3MgPSBXUkRFX05PQ01EOwomIzQzOwomIzQzOwlpZiAoIWFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBsaXN0IHdpdGggdGhlIHByb2dyYW0gbmFtZSAoYXJndlswXSkuCiYjNDM7CQkgKiBXUkRFX05PQ01EIGRpc2FibGVzIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBzYWZldHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh3b3JkZXhwKGFyZ3ZfMCwgJmFtcDthcmdzLSZndDtleHAsIGZsYWdzKSAhPSAwKQomIzQzOwkJCVZGSU9fRkFJTCgmIzM0O0ZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZsYWdzIHw9IFdSREVfQVBQRU5EOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd29yZGV4cCgpIHRvIHJlbGlhYmx5IHBhcnNlIHRoZSB1c2VyLXN1cHBsaWVkIGNvbW1hbmQgbGluZSBzdHJpbmcKJiM0MzsJICogaW50byBpbmRpdmlkdWFsIGFyZ3VtZW50cywgcmVzcGVjdGluZyBzaGVsbCBxdW90aW5nIGFuZCBlc2NhcGluZyBydWxlcy4KJiM0MzsJICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLgomIzQzOwkgKi8KJiM0MzsJaWYgKHdvcmRleHAoY21kbG5lLCAmYW1wO2FyZ3MtJmd0O2V4cCwgZmxhZ3MpICE9IDApCiYjNDM7CQlWRklPX0ZBSUwoJiMzNDtGYWlsZWQgdG8gZXZhbHVhdGUgdGVzdCBoYXJuZXNzIGNtZGxuZSBhcmdzISYjMzQ7KTsKJiM0MzsKJiM0MzsJYXJncy0mZ3Q7YXJnYyA9IGFyZ3MtJmd0O2V4cC53ZV93b3JkYzsKJiM0MzsJYXJncy0mZ3Q7YXJndiA9IGFyZ3MtJmd0O2V4cC53ZV93b3JkdjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmhfYXJndltdID0geyBhcmd2WzBdLCAmIzM0Oy1oJiMzNDsgfTsKJiM0MzsJaW50IG9wdDsKJiM0MzsKJiM0MzsJdGVzdF9wYXJhbXMuZGV2aWNlX2JkZiA9IHZmaW9fc2VsZnRlc3RzX2dldF9iZGYoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0KCphcmdjLCBhcmd2LCAmIzM0O2E6YjpoJiMzNDspKSAhPSAtMSkgewomIzQzOwkJc3dpdGNoIChvcHQpIHsKJiM0MzsJCWNhc2UgJiMzOTthJiMzOTs6CiYjNDM7CQkJcG9wdWxhdGVfaGFybmVzc19hcmdzKGFyZ3MsIGFyZ3ZbMF0sIG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7YiYjMzk7OgomIzQzOwkJCXRlc3RfcGFyYW1zLnNpemUgPSBwYXJzZV9zaXplKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7aCYjMzk7OgomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQloZWxwKGFyZ3ZbMF0pOwomIzQzOwkJCWV4aXQodGVzdF9oYXJuZXNzX3J1bigyLCBoX2FyZ3YpKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC4KJiM0MzsJb3B0aW5kID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJaWYgKGFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSAwOwomIzQzOwkJYXJncy0mZ3Q7YXJndiA9IE5VTEw7CiYjNDM7CQl3b3JkZnJlZSgmYW1wO2FyZ3MtJmd0O2V4cCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmRlZmF1bHRfaGFyZ3NbXSA9IHsgYXJndlswXSwgTlVMTCB9OwomIzQzOwlzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSB7fTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CXNldHVwX3Rlc3QoJmFtcDthcmdzLCAmYW1wO2FyZ2MsIGFyZ3YpOwomIzQzOwomIzQzOwlyID0gdGVzdF9oYXJuZXNzX3J1bihhcmdzLmFyZ2MgPzogMSwgYXJncy5hcmd2ID86IGRlZmF1bHRfaGFyZ3MpOwomIzQzOwomIzQzOwl0ZWFyZG93bl90ZXN0KCZhbXA7YXJncyk7CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCmluZGV4IDdkMGRlOGM3OWRlMTMuLjFiOTA0NDE2NDRhMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuYwpAQCAtMTM4LDcgJiM0MzsxMzgsNiBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKQogCXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKIAlzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nOwogCXU2NCBtYXBwaW5nX3NpemUgPSBzaXplOwotCXU2NCB1bm1hcHBlZDsKIAlpbnQgcmM7CiAKIAlyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7CkBAIC0xOTAsOSAmIzQzOzE4OSw3IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QsIGRtYV9tYXBfdW5tYXApCiAJfQogCiB1bm1hcDoKLQlyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi0mZ3Q7aW9tbXUsICZhbXA7cmVnaW9uLCAmYW1wO3VubWFwcGVkKTsKLQlBU1NFUlRfRVEocmMsIDApOwotCUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwlpb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgJmFtcDtyZWdpb24pOwogCXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHhcbiYjMzQ7LCByZWdpb24uaW92YSk7CiAJQVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpOwogCUFTU0VSVF9ORSgwLCBpb21tdV9tYXBwaW5nX2dldChkZXZpY2VfYmRmLCByZWdpb24uaW92YSwgJmFtcDttYXBwaW5nKSk7CkBAIC0yNjAsMTUgJiM0MzsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCkKIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfcmFuZ2UpCiB7CiAJc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiA9ICZhbXA7c2VsZi0mZ3Q7cmVnaW9uOwotCXU2NCB1bm1hcHBlZDsKLQlpbnQgcmM7CiAKIAlpb21tdV9tYXAoc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbik7CiAJQVNTRVJUX0VRKHJlZ2lvbi0mZ3Q7aW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi0mZ3Q7dmFkZHIpKTsKIAotCXJjID0gX19pb21tdV91bm1hcChzZWxmLSZndDtpb21tdSwgcmVnaW9uLCAmYW1wO3VubWFwcGVkKTsKLQlBU1NFUlRfRVEocmMsIDApOwotCUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLSZndDtzaXplKTsKJiM0MzsJaW9tbXVfdW5tYXAoc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbik7CiB9CiAKIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI2CgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gRE1BIE1hcHBpbmcgUGVyZm9ybWFuY2UgVGVzdCBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5jZSB0ZXN0IGZvciBWRklPIERNQSBtYXBwaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyB0aGUgYE1ha2VmaWxlYCwgc29tZSBpbmNsdWRlIGZpbGVzIChgbGlidmZpby5oYCwgYGlvbW11LmhgKSwgYW4gSU9NTVUgaW1wbGVtZW50YXRpb24gZmlsZSAoYGlvbW11LmNgKSwgYW5kIHR3byB0ZXN0IGZpbGVzIChgdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY2AgYW5kIGB2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY2ApLgoKTm93LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjZXJ0YWluIHR5cGVzIG9mIG1vZGlmaWNhdGlvbnMuIEl0IGxpc3RzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgY29uc3RhbnQgdHdlYWtzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQgYSBzZWNvbmQsIHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBzZWxmdGVzdHNgIGRpcmVjdG9yeS4mIzM0OwoKU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIFRoZXkgZG9uJiMzOTt0IGRpcmVjdGx5IG1vZGlmeSB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byAqdGVzdCoga2VybmVsIGZ1bmN0aW9uYWxpdHksIG5vdCAqYmUqIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBUaGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFzayBteXNlbGYgaXM6IGRvZXMgbW9kaWZ5aW5nIHRoZXNlIHNlbGZ0ZXN0cyBjb25zdGl0dXRlIGEgJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZCYjMzQ7PyBBYnNvbHV0ZWx5IG5vdC4gU3l6a2FsbGVyLCB0aGUgZnV6emVyLCB0YXJnZXRzIHRoZSBrZXJuZWwmIzM5O3MgY29yZS4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGZ1enogdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgZXZlbiBpZiB0aG9zZSBhcHBsaWNhdGlvbnMgYXJlIHVzZWQgdG8gdGVzdCBrZXJuZWwgZmVhdHVyZXMuCgpJIG5lZWQgdG8gY29uZmlybSwgYnV0IGEgcXVpY2sgc2NhbiBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIGFyZSB0b3VjaGVkLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLgoKVGhlIHByb21wdCBpcyBjbGVhcjogJiMzNDtZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDsgU2luY2UgdGhpcyBwYXRjaCBzZXJpZXMgaXMgZXhjbHVzaXZlbHkgZm9jdXNlZCBvbiBhZGRpbmcgYSBzZWxmdGVzdCB3aXRoaW4gdXNlcnNwYWNlLCBpdCBjbGVhcmx5IGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhLiBUaGUgcHVycG9zZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZSwgYW5kIGFyZSBkZXNpZ25lZCB0byBub3QgbWFrZSBjaGFuZ2VzLgoKU28sIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpNeSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MTAuMjY3ODgwNTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDY5NjI3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjMzOjEwLjI2Nzg4NTkxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMTM3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDYyYmJmNDQ4NmZlMjhlZTg3MGNmYzgyMGZjZjZmZjg4MjY0NDZlMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjMzOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbkBAIC04LDYgKzgsNyBAQCBlbHNlXFxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcXG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XFxuK1RFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9faW9tbXVmZF9zZXR1cF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV9pbml0X3BlcmZfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuaW5kZXggMDc4NjJiNDcwNzc3Yi4uY2YzMjJiNDk5Y2ZiYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuQEAgLTksNiArOSwzNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZHJpdmVyLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0KVxcbit7XFxuK1xcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcXG4rXFxuK1xcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2ZW5kKTtcXG4rXFxuK1xcdHJldHVybiAodWludDY0X3QpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTlNFQ19QRVJfU0VDICtcXG4rXFx0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcXG4rfVxcbitcXG4rI2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1xcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0c3RydWN0IHRpbWVzcGVjIF9fc3RhcnQ7XFx0XFx0XFx0XFx0ICAgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFxcXFxuK1xcdHRpbWVyX3N0YXJ0KFxcdTAwMjZfX3N0YXJ0KTtcXHRcXHRcXHRcXHRcXHQgICBcXFxcXFxuK1xcdF9leHByZXNzaW9uO1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0cHJpbnRmKF9uYW1lIFxcXCIgPSAlLjJsZm1zXFxcXG5cXFwiLFxcdFxcdFxcdFxcdCAgIFxcXFxcXG4rXFx0ICAgICAgIChkb3VibGUpdGltZXJfZWxhcHNlZF9ucyhfX3N0YXJ0KSAvIE5TRUNfUEVSX01TRUMpOyBcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIEJERiBzdHJpbmcgb2YgdGhlIGRldmljZSB0aGF0IHRoZSB0ZXN0IHNob3VsZCB1c2UuXFxuICAqXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5pbmRleCBlOWEzMzg2YTQ3MTkzLi41MTU5NzZmYjE5YmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5AQCAtMzUsNiArMzUsMTMgQEAgc3RydWN0IGlvbW11IHtcXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XFxuIFxcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXFxuK3tcXG4rXFx0VkZJT19BU1NFUlRfRVEoX19pb21tdWZkX21hcF9maWxlKGlvbW11LCByZWdpb24sIGZkKSwgMCk7XFxuK31cXG4rXFxuIGludCBfX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcXG5AQCAtNDYsNyArNTMsMTAgQEAgaW50IF9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgdTY0ICp1bm1hcHBlZClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiB7XFxuLVxcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgTlVMTCksIDApO1xcbitcXHR1NjQgdW5tYXBwZWQ7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9FUShfX2lvbW11X3VubWFwKGlvbW11LCByZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCksIDApO1xcbitcXHRWRklPX0FTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVxcdTAwM2VzaXplKTtcXG4gfVxcbiBcXG4gaW50IF9faW9tbXVfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCAqdW5tYXBwZWQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xcbmluZGV4IGI2ZjNjNWM4NGUwMWEuLmI3NmFlMGE5MWM2ODYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG5AQCAtOTcsNiArOTcsMzAgQEAgaW92YV90IGlvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyKVxcbiBcXHRyZXR1cm4gaW92YTtcXG4gfVxcbiBcXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXFxuK3tcXG4rXFx0VkZJT19BU1NFUlRfVFJVRShpb21tdS1cXHUwMDNlaW9tbXVmZCwgXFxcIklPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cXFwiKTtcXG4rXFxuK1xcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XFxuK1xcdFxcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxcbitcXHRcXHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XFxuK1xcdFxcdFxcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XFxuK1xcdFxcdFxcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXFxuK1xcdFxcdC5pb2FzX2lkID0gaW9tbXUtXFx1MDAzZWlvYXNfaWQsXFxuK1xcdFxcdC5mZCA9IGZkLFxcbitcXHRcXHQuc3RhcnQgPSAwLFxcbitcXHRcXHQuaW92YSA9IHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4rXFx0XFx0Lmxlbmd0aCA9IHJlZ2lvbi1cXHUwMDNlc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlaW9tbXVmZCwgSU9NTVVfSU9BU19NQVBfRklMRSwgXFx1MDAyNmFyZ3MpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGluaywgXFx1MDAyNmlvbW11LVxcdTAwM2VkbWFfcmVnaW9ucyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV9tYXAgYXJncyA9IHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZjIyNzNhMGM2ZjUyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3dvcmRleHAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0dTY0IHNpemU7XFxuK1xcdGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XFxuK30gdGVzdF9wYXJhbXMgPSB7XFxuK1xcdC5zaXplID0gU1pfMUcsXFxuK307XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXFx0XFx0ICBcXFxcXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHtcXHQgIFxcXFxcXG4rXFx0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuK1xcdC5tbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSwgXFxcXFxcbit9XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApO1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8ybWIsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQik7XFxuK1xcbisjdW5kZWYgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFXFxuK1xcbitGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxcbit7XFxuK1xcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVxcdTAwM2Vpb21tdV9tb2RlKTtcXG4rXFx0c2VsZi1cXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cXHUwMDNlaW9tbXUpO1xcbitcXHRzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxcbit7XFxuK1xcdGlvdmFfYWxsb2NhdG9yX2NsZWFudXAoc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzZWxmLVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpb21tdV9jbGVhbnVwKHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rfVxcbitcXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBkbWFfbWFwX3VubWFwKVxcbit7XFxuK1xcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcXG4rXFx0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJtbWFwIHNpemUgPSAlbGx1R1xcXFxuXFxcIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2l6ZSAvIFNaXzFHKSk7XFxuK1xcbitcXHRUSU1FKFxcXCJtbWFwXFxcIixcXG4rXFx0ICAgICByZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCkpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfSFVHRVRMQiBcXHUwMDI2XFx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSBtYXBcXFwiLCBpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pKTtcXG4rXFx0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSB1bm1hcFxcXCIsIGlvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uKSk7XFxuK1xcdFRJTUUoXFxcIm11bm1hcFxcXCIsIEFTU0VSVF9FUSgwLCBtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSkpO1xcbit9XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rXFx0aW50IG1lbWZkX2ZsYWdzO1xcbit9O1xcbitcXG4rI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUoX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpICAgICAgXFxcXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBpb21tdWZkICMjIF8gIyMgX25hbWUpIHtcXFxcXFxuK1xcdC5pb21tdV9tb2RlID0gTU9ERV9JT01NVUZELFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSxcXHQgICAgICBcXFxcXFxuK1xcdC5tZW1mZF9mbGFncyA9IChfbWVtZmRfZmxhZ3MpLFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rfVxcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkX2h1Z2V0bGJfMm1iLFxcbitcXHRcXHRcXHRcXHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsXFxuK1xcdFxcdFxcdFxcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQik7XFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZF9odWdldGxiXzFnYixcXG4rXFx0XFx0XFx0XFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLFxcbitcXHRcXHRcXHRcXHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8xR0IpO1xcbitcXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERVxcbitcXG4rRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcXG4re1xcbitcXHRzZWxmLVxcdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cXHUwMDNlaW9tbXVfbW9kZSk7XFxuK1xcdHNlbGYtXFx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rXFx0c2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KHNlbGYtXFx1MDAzZWlvbW11KTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcXG4re1xcbitcXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcXG4rXFx0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cXHUwMDNlZGV2aWNlKTtcXG4rXFx0aW9tbXVfY2xlYW51cChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpzZXR1cF9tZW1mZChpbnQgKmZkLCB1NjQgc2l6ZSwgaW50IG1tYXBfZmxhZ3MsIGludCBtZmRfZmxhZ3MpXFxuK3tcXG4rXFx0dm9pZCAqYnVmID0gTUFQX0ZBSUxFRDtcXG4rXFxuK1xcdFRJTUUoXFxcIm1lbWZkX2NyZWF0ZVxcXCIsXFxuK1xcdCAgICAgKmZkID0gbWVtZmRfY3JlYXRlKFxcXCJ2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdFxcXCIsIG1mZF9mbGFncykpO1xcbitcXHRpZiAoKmZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIE1BUF9GQUlMRUQ7XFxuK1xcbitcXHRpZiAoZnRydW5jYXRlKCpmZCwgc2l6ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0VElNRShcXFwibW1hcFxcXCIsXFxuK1xcdCAgICAgYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRjbG9zZSgqZmQpO1xcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXFxuK3tcXG4rXFx0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXFxuK1xcdFxcdFRJTUUoXFxcIm11bm1hcFxcXCIsIFZGSU9fQVNTRVJUX0VRKDAsIG11bm1hcCh2YWRkciwgc2l6ZSkpKTtcXG4rXFxuK1xcdGlmIChmZCAhPSAtMSlcXG4rXFx0XFx0VElNRShcXFwiY2xvc2VcXFwiLCBWRklPX0FTU0VSVF9FUSgwLCBjbG9zZShmZCkpKTtcXG4rfVxcbitcXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZSlcXG4re1xcbitcXHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XFxuK1xcdGNvbnN0IGludCBtbWFwX2ZsYWdzID0gdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRwcmludGYoXFxcIm1tYXAgc2l6ZSA9ICVsbHVHXFxcXG5cXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcXG4rXFxuK1xcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFxcdTAwMjZmZCwgc2l6ZSwgbW1hcF9mbGFncywgdmFyaWFudC1cXHUwMDNlbWVtZmRfZmxhZ3MpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAobW1hcF9mbGFncyBcXHUwMDI2IE1BUF9IVUdFVExCIFxcdTAwMjZcXHUwMDI2IHJlZ2lvbi52YWRkciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInNldHVwX21lbWZkKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRUSU1FKFxcXCJJT01NVSBtYXBcXFwiLCBpb21tdWZkX21hcF9maWxlKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBmZCkpO1xcbitcXHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcXG4rXFxuK1xcdFRJTUUoXFxcIklPTU1VIHVubWFwXFxcIiwgaW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pKTtcXG4rXFxuK1xcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQYXJzZXMgXFxcIlswLTldK1trbWd0XT9cXFwiLlxcbisgKi9cXG4rdTY0IHBhcnNlX3NpemUoY29uc3QgY2hhciAqc2l6ZSlcXG4re1xcbitcXHRpbnQgc2hpZnQgPSAwO1xcbitcXHRjaGFyICpzY2FsZTtcXG4rXFx0dTY0IGJhc2U7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXFx1MDAyNlxcdTAwMjYgaXNkaWdpdChzaXplWzBdKSxcXG4rXFx0XFx0XFx0IFxcXCJOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAnJXMnLlxcXCIsIHNpemUpO1xcbitcXG4rXFx0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFxcdTAwMjZzY2FsZSwgMCk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgXFxcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XFxuK1xcdGNhc2UgJ3QnOlxcbitcXHRcXHRzaGlmdCA9IDQwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnZyc6XFxuK1xcdFxcdHNoaWZ0ID0gMzA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlICdtJzpcXG4rXFx0XFx0c2hpZnQgPSAyMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ2snOlxcbitcXHRcXHRzaGlmdCA9IDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnYic6XFxuK1xcdGNhc2UgJ1xcXFwwJzpcXG4rXFx0XFx0c2hpZnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VkZJT19GQUlMKFxcXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXFxcIiwgKnNjYWxlKTtcXG4rXFx0fVxcbitcXG4rXFx0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcXG4rXFx0XFx0XFx0IFxcXCJPdmVyZmxvdyBzY2FsaW5nIHNpemUhXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxcbit7XFxuK1xcdHB1dHMoXFxcIlxcXCIpO1xcbitcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWhdIFstYiBieXRlc10gWy1hIFxcXFxcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFxcXFxcIl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHRwdXRzKFxcXCJcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiIC1iOiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBETUEgcmVnaW9uIHRvIGJlIG1hcHBlZFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIGUuZy4gLWEgXFxcXFxcXCItdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXFxcXFwiXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RydWN0IGhhcm5lc3NfYXJncyB7XFxuK1xcdGludCBhcmdjO1xcbitcXHRjaGFyICoqYXJndjtcXG4rXFx0d29yZGV4cF90IGV4cDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqY21kbG5lKVxcbit7XFxuK1xcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XFxuK1xcbitcXHRpZiAoIWFyZ3MtXFx1MDAzZWFyZ3YpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHRoZSBwcm9ncmFtIG5hbWUgKGFyZ3ZbMF0pLlxcbitcXHRcXHQgKiBXUkRFX05PQ01EIGRpc2FibGVzIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBzYWZldHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAod29yZGV4cChhcmd2XzAsIFxcdTAwMjZhcmdzLVxcdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxcbitcXHRcXHRcXHRWRklPX0ZBSUwoXFxcIkZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGZsYWdzIHw9IFdSREVfQVBQRU5EO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdvcmRleHAoKSB0byByZWxpYWJseSBwYXJzZSB0aGUgdXNlci1zdXBwbGllZCBjb21tYW5kIGxpbmUgc3RyaW5nXFxuK1xcdCAqIGludG8gaW5kaXZpZHVhbCBhcmd1bWVudHMsIHJlc3BlY3Rpbmcgc2hlbGwgcXVvdGluZyBhbmQgZXNjYXBpbmcgcnVsZXMuXFxuK1xcdCAqIFdSREVfQVBQRU5EIG1lcmdlcyB0aGVzZSBuZXcgYXJndW1lbnRzIHdpdGggdGhlIGVhcmxpZXIgYXJndlswXS5cXG4rXFx0ICovXFxuK1xcdGlmICh3b3JkZXhwKGNtZGxuZSwgXFx1MDAyNmFyZ3MtXFx1MDAzZWV4cCwgZmxhZ3MpICE9IDApXFxuK1xcdFxcdFZGSU9fRkFJTChcXFwiRmFpbGVkIHRvIGV2YWx1YXRlIHRlc3QgaGFybmVzcyBjbWRsbmUgYXJncyFcXFwiKTtcXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZWFyZ2MgPSBhcmdzLVxcdTAwM2VleHAud2Vfd29yZGM7XFxuK1xcdGFyZ3MtXFx1MDAzZWFyZ3YgPSBhcmdzLVxcdTAwM2VleHAud2Vfd29yZHY7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50ICphcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y2hhciAqaF9hcmd2W10gPSB7IGFyZ3ZbMF0sIFxcXCItaFxcXCIgfTtcXG4rXFx0aW50IG9wdDtcXG4rXFxuK1xcdHRlc3RfcGFyYW1zLmRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKGFyZ2MsIGFyZ3YpO1xcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoKmFyZ2MsIGFyZ3YsIFxcXCJhOmI6aFxcXCIpKSAhPSAtMSkge1xcbitcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbitcXHRcXHRjYXNlICdhJzpcXG4rXFx0XFx0XFx0cG9wdWxhdGVfaGFybmVzc19hcmdzKGFyZ3MsIGFyZ3ZbMF0sIG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdiJzpcXG4rXFx0XFx0XFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRoZWxwKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Ly8gUmVzZXQgZ2V0b3B0KCkgc3RhdGUgdG8gYWxsb3cgdGhlIHRlc3QgaGFybmVzcyB0byB1c2UgaXQuXFxuK1xcdG9wdGluZCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcXG4re1xcbitcXHRpZiAoYXJncy1cXHUwMDNlYXJndikge1xcbitcXHRcXHRhcmdzLVxcdTAwM2VhcmdjID0gMDtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IE5VTEw7XFxuK1xcdFxcdHdvcmRmcmVlKFxcdTAwMjZhcmdzLVxcdTAwM2VleHApO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Y2hhciAqZGVmYXVsdF9oYXJnc1tdID0geyBhcmd2WzBdLCBOVUxMIH07XFxuK1xcdHN0cnVjdCBoYXJuZXNzX2FyZ3MgYXJncyA9IHt9O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHNldHVwX3Rlc3QoXFx1MDAyNmFyZ3MsIFxcdTAwMjZhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYyA/OiAxLCBhcmdzLmFyZ3YgPzogZGVmYXVsdF9oYXJncyk7XFxuK1xcbitcXHR0ZWFyZG93bl90ZXN0KFxcdTAwMjZhcmdzKTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xcbkBAIC0xMzgsNyArMTM4LDYgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcXG4gXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbiBcXHRzdHJ1Y3QgaW9tbXVfbWFwcGluZyBtYXBwaW5nO1xcbiBcXHR1NjQgbWFwcGluZ19zaXplID0gc2l6ZTtcXG4tXFx0dTY0IHVubWFwcGVkO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XFxuQEAgLTE5MCw5ICsxODksNyBAQCBURVNUX0YodmZpb19kbWFfbWFwcGluZ190ZXN0LCBkbWFfbWFwX3VubWFwKVxcbiBcXHR9XFxuIFxcbiB1bm1hcDpcXG4tXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2dW5tYXBwZWQpO1xcbi1cXHRBU1NFUlRfRVEocmMsIDApO1xcbi1cXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcXG4rXFx0aW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbiBcXHRwcmludGYoXFxcIlVubWFwcGVkIElPVkEgMHglbHhcXFxcblxcXCIsIHJlZ2lvbi5pb3ZhKTtcXG4gXFx0QVNTRVJUX05FKDAsIF9fdG9faW92YShzZWxmLVxcdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpO1xcbiBcXHRBU1NFUlRfTkUoMCwgaW9tbXVfbWFwcGluZ19nZXQoZGV2aWNlX2JkZiwgcmVnaW9uLmlvdmEsIFxcdTAwMjZtYXBwaW5nKSk7XFxuQEAgLTI2MCwxNSArMjU3LDExIEBAIEZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpXFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfcmFuZ2UpXFxuIHtcXG4gXFx0c3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiA9IFxcdTAwMjZzZWxmLVxcdTAwM2VyZWdpb247XFxuLVxcdHU2NCB1bm1hcHBlZDtcXG4tXFx0aW50IHJjO1xcbiBcXG4gXFx0aW9tbXVfbWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24pO1xcbiBcXHRBU1NFUlRfRVEocmVnaW9uLVxcdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLVxcdTAwM2V2YWRkcikpO1xcbiBcXG4tXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCk7XFxuLVxcdEFTU0VSVF9FUShyYywgMCk7XFxuLVxcdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLVxcdTAwM2VzaXplKTtcXG4rXFx0aW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuIH1cXG4gXFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNzozMzoxMC43OTE5Njc1MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk4Mjg2NzcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDYyYmJmNDQ4NmZlMjhlZTg3MGNmYzgyMGZjZjZmZjg4MjY0NDZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTc6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5OC4uZWQ1ODU2YWY1ZjlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgKzgsNyBAQCBlbHNlXG4gQ0ZMQUdTID0gJChLSERSX0lOQ0xVREVTKVxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4rVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fcGNpX2RldmljZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19wY2lfZGV2aWNlX2luaXRfcGVyZl90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuaW5kZXggMDc4NjJiNDcwNzc3Yi4uY2YzMjJiNDk5Y2ZiYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuQEAgLTksNiArOSwzNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RyaXZlci5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0KVxuK3tcbitcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBzdGFydCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgdGltZXJfZWxhcHNlZF9ucyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpXG4re1xuK1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbitcbitcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuK1xuK1x0cmV0dXJuICh1aW50NjRfdCkoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYykgKiBOU0VDX1BFUl9TRUMgK1xuK1x0ICAgICAgICh1aW50NjRfdCkoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKTtcbit9XG4rXG4rI2RlZmluZSBUSU1FKF9uYW1lLCBfZXhwcmVzc2lvbikgZG8ge1x0XHRcdFx0ICAgXFxcbitcdHN0cnVjdCB0aW1lc3BlYyBfX3N0YXJ0O1x0XHRcdFx0ICAgXFxcbitcdFx0XHRcdFx0XHRcdFx0ICAgXFxcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNl9fc3RhcnQpO1x0XHRcdFx0XHQgICBcXFxuK1x0X2V4cHJlc3Npb247XHRcdFx0XHRcdFx0ICAgXFxcbitcdHByaW50ZihfbmFtZSBcIiA9ICUuMmxmbXNcXG5cIixcdFx0XHRcdCAgIFxcXG4rXHQgICAgICAgKGRvdWJsZSl0aW1lcl9lbGFwc2VkX25zKF9fc3RhcnQpIC8gTlNFQ19QRVJfTVNFQyk7IFxcXG4rfSB3aGlsZSAoMClcbitcbiAvKlxuICAqIFJldHVybiB0aGUgQkRGIHN0cmluZyBvZiB0aGUgZGV2aWNlIHRoYXQgdGhlIHRlc3Qgc2hvdWxkIHVzZS5cbiAgKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbmluZGV4IGU5YTMzODZhNDcxOTMuLjUxNTk3NmZiMTliZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUge1xuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XG4gXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbit9XG4rXG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbkBAIC00Niw3ICs1MywxMCBAQCBpbnQgX19pb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCB1NjQgKnVubWFwcGVkKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV91bm1hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuIHtcbi1cdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVfdW5tYXAoaW9tbXUsIHJlZ2lvbiwgTlVMTCksIDApO1xuK1x0dTY0IHVubWFwcGVkO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEoX19pb21tdV91bm1hcChpb21tdSwgcmVnaW9uLCBcdTAwMjZ1bm1hcHBlZCksIDApO1xuK1x0VkZJT19BU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbiB9XG4gXG4gaW50IF9faW9tbXVfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCAqdW5tYXBwZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCBiNmYzYzVjODRlMDFhLi5iNzZhZTBhOTFjNjg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwiSU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLlwiKTtcbitcbitcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XG4rXHRcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4rXHRcdFx0SU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHxcbitcdFx0XHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxuK1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4rXHRcdC5mZCA9IGZkLFxuK1x0XHQuc3RhcnQgPSAwLFxuK1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHQubGVuZ3RoID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWxpbmssIFx1MDAyNmlvbW11LVx1MDAzZWRtYV9yZWdpb25zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4ge1xuIFx0c3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmMjI3M2EwYzZmNTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xuQEAgLTAsMCArMSwzMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjd29yZGV4cC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGlidmZpby5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdHU2NCBzaXplO1xuK1x0Y29uc3QgY2hhciAqZGV2aWNlX2JkZjtcbit9IHRlc3RfcGFyYW1zID0ge1xuK1x0LnNpemUgPSBTWl8xRyxcbit9O1xuK1xuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbitcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4rXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuK1x0aW50IG1tYXBfZmxhZ3M7XG4rfTtcbitcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzKVx0XHQgIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkge1x0ICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCBNQVBfUE9QVUxBVEUgfCAoX21tYXBfZmxhZ3MpLCBcXFxuK31cbitcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzFnYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IpO1xuK1xuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbitcbitGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KVxuK3tcbitcdHNlbGYtXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXHUwMDNlaW9tbXVfbW9kZSk7XG4rXHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KHRlc3RfcGFyYW1zLmRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuK1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4re1xuK1x0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yKTtcbitcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbitcdGlvbW11X2NsZWFudXAoc2VsZi1cdTAwM2Vpb21tdSk7XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgZG1hX21hcF91bm1hcClcbit7XG4rXHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4rXHRjb25zdCBpbnQgZmxhZ3MgPSB2YXJpYW50LVx1MDAzZW1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXG4rXHRwcmludGYoXCJtbWFwIHNpemUgPSAlbGx1R1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbitcbitcdFRJTUUoXCJtbWFwXCIsXG4rXHQgICAgIHJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKSk7XG4rXG4rXHQvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggSHVnZVRMQiBwYWdlcyBhdmFpbGFibGUuICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9IVUdFVExCIFx1MDAyNlx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcbitcdFx0U0tJUChyZXR1cm4sIFwibW1hcCgpIGZhaWxlZDogJXMgKCVkKVxcblwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbitcdGVsc2VcbitcdFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4rXG4rXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuK1x0cmVnaW9uLnNpemUgPSBzaXplO1xuK1xuK1x0VElNRShcIklPTU1VIG1hcFwiLCBpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKSk7XG4rXHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xuK1xuK1x0VElNRShcIklPTU1VIHVubWFwXCIsIGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbikpO1xuK1x0VElNRShcIm11bm1hcFwiLCBBU1NFUlRfRVEoMCwgbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpKTtcbit9XG4rXG4rRklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuK1x0c3RydWN0IGlvbW11ICppb21tdTtcbitcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcbitcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcbitcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4rXHRpbnQgbW1hcF9mbGFncztcbitcdGludCBtZW1mZF9mbGFncztcbit9O1xuK1xuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKF9uYW1lLCBfbW1hcF9mbGFncywgX21lbWZkX2ZsYWdzKSAgICAgIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgaW9tbXVmZCAjIyBfICMjIF9uYW1lKSB7XFxcbitcdC5pb21tdV9tb2RlID0gTU9ERV9JT01NVUZELFx0XHRcdFx0XHQgICAgICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX1BPUFVMQVRFIHwgKF9tbWFwX2ZsYWdzKSxcdCAgICAgIFxcXG4rXHQubWVtZmRfZmxhZ3MgPSAoX21lbWZkX2ZsYWdzKSxcdFx0XHRcdFx0ICAgICAgXFxcbit9XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERF9NRU1GRF9NT0RFKG1lbWZkLCAwLCAwKTtcbitGSVhUVVJFX1ZBUklBTlRfQUREX01FTUZEX01PREUobWVtZmRfaHVnZXRsYl8ybWIsXG4rXHRcdFx0XHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIsXG4rXHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERShtZW1mZF9odWdldGxiXzFnYixcbitcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcbitcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfTUVNRkRfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQodGVzdF9wYXJhbXMuZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbit7XG4rXHR2b2lkICpidWYgPSBNQVBfRkFJTEVEO1xuK1xuK1x0VElNRShcIm1lbWZkX2NyZWF0ZVwiLFxuK1x0ICAgICAqZmQgPSBtZW1mZF9jcmVhdGUoXCJ2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdFwiLCBtZmRfZmxhZ3MpKTtcbitcdGlmICgqZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBNQVBfRkFJTEVEO1xuK1xuK1x0aWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFRJTUUoXCJtbWFwXCIsXG4rXHQgICAgIGJ1ZiA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgbW1hcF9mbGFncywgKmZkLCAwKSk7XG4rXG4rb3V0OlxuK1x0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxuK1x0XHRjbG9zZSgqZmQpO1xuK1xuK1x0cmV0dXJuIGJ1Zjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXG4re1xuK1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpXG4rXHRcdFRJTUUoXCJtdW5tYXBcIiwgVkZJT19BU1NFUlRfRVEoMCwgbXVubWFwKHZhZGRyLCBzaXplKSkpO1xuK1xuK1x0aWYgKGZkICE9IC0xKVxuK1x0XHRUSU1FKFwiY2xvc2VcIiwgVkZJT19BU1NFUlRfRVEoMCwgY2xvc2UoZmQpKSk7XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4re1xuK1x0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xuK1x0Y29uc3QgaW50IG1tYXBfZmxhZ3MgPSB2YXJpYW50LVx1MDAzZW1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXHRpbnQgZmQ7XG4rXG4rXHRwcmludGYoXCJtbWFwIHNpemUgPSAlbGx1R1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKShzaXplIC8gU1pfMUcpKTtcbitcbitcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFx1MDAyNmZkLCBzaXplLCBtbWFwX2ZsYWdzLCB2YXJpYW50LVx1MDAzZW1lbWZkX2ZsYWdzKTtcbitcbitcdC8qIFNraXAgdGhlIHRlc3QgaWYgdGhlcmUgYXJlbid0IGVub3VnaCBIdWdlVExCIHBhZ2VzIGF2YWlsYWJsZS4gKi9cbitcdGlmIChtbWFwX2ZsYWdzIFx1MDAyNiBNQVBfSFVHRVRMQiBcdTAwMjZcdTAwMjYgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcInNldHVwX21lbWZkKCkgZmFpbGVkOiAlcyAoJWQpXFxuXCIsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0ZWxzZVxuK1x0XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbitcbitcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7XG4rXHRyZWdpb24uc2l6ZSA9IHNpemU7XG4rXG4rXHRUSU1FKFwiSU9NTVUgbWFwXCIsIGlvbW11ZmRfbWFwX2ZpbGUoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uLCBmZCkpO1xuK1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbitcbitcdFRJTUUoXCJJT01NVSB1bm1hcFwiLCBpb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pKTtcbitcbitcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xuK31cbitcbisvKlxuKyAqIFBhcnNlcyBcIlswLTldK1trbWd0XT9cIi5cbisgKi9cbit1NjQgcGFyc2Vfc2l6ZShjb25zdCBjaGFyICpzaXplKVxuK3tcbitcdGludCBzaGlmdCA9IDA7XG4rXHRjaGFyICpzY2FsZTtcbitcdHU2NCBiYXNlO1xuK1xuK1x0VkZJT19BU1NFUlRfVFJVRShzaXplIFx1MDAyNlx1MDAyNiBpc2RpZ2l0KHNpemVbMF0pLFxuK1x0XHRcdCBcIk5lZWQgYXQgbGVhc3Qgb25lIGRpZ2l0IGluICclcycuXCIsIHNpemUpO1xuK1xuK1x0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFx1MDAyNnNjYWxlLCAwKTtcbitcbitcdFZGSU9fQVNTRVJUX1RSVUUoYmFzZSAhPSBVTExPTkdfTUFYLCBcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcIik7XG4rXG4rXHRzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkge1xuK1x0Y2FzZSAndCc6XG4rXHRcdHNoaWZ0ID0gNDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnZyc6XG4rXHRcdHNoaWZ0ID0gMzA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnbSc6XG4rXHRcdHNoaWZ0ID0gMjA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnayc6XG4rXHRcdHNoaWZ0ID0gMTA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAnYic6XG4rXHRjYXNlICdcXDAnOlxuK1x0XHRzaGlmdCA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0VkZJT19GQUlMKFwiVW5rbm93biBzaXplIGxldHRlciAnJWMnLlwiLCAqc2NhbGUpO1xuK1x0fVxuK1xuK1x0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQpIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBiYXNlLFxuK1x0XHRcdCBcIk92ZXJmbG93IHNjYWxpbmcgc2l6ZSFcIik7XG4rXG4rXHRyZXR1cm4gYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSlcbit7XG4rXHRwdXRzKFwiXCIpO1xuK1x0cHJpbnRmKFwidXNhZ2U6ICVzIFstaF0gWy1iIGJ5dGVzXSBbLWEgXFxcInRlc3QgaGFybmVzcyBhcmdzXFxcIl1cXG5cIiwgbmFtZSk7XG4rXHRwdXRzKFwiXCIpO1xuK1x0cHJpbnRmKFwiIC1oOiBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxcblwiXG4rXHQgICAgICAgXCIgLWI6IFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIERNQSByZWdpb24gdG8gYmUgbWFwcGVkXFxuXCJcbitcdCAgICAgICBcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcblwiXG4rXHQgICAgICAgXCIgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxuXCJcbitcdCAgICAgICBcIiAgICAgZS5nLiAtYSBcXFwiLXQgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGVcXFwiXFxuXCIpO1xuK31cbitcbitzdHJ1Y3QgaGFybmVzc19hcmdzIHtcbitcdGludCBhcmdjO1xuK1x0Y2hhciAqKmFyZ3Y7XG4rXHR3b3JkZXhwX3QgZXhwO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcG9wdWxhdGVfaGFybmVzc19hcmdzKHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKmFyZ3ZfMCxcbitcdFx0XHRcdCAgY29uc3QgY2hhciAqY21kbG5lKVxuK3tcbitcdGludCBmbGFncyA9IFdSREVfTk9DTUQ7XG4rXG4rXHRpZiAoIWFyZ3MtXHUwMDNlYXJndikge1xuK1x0XHQvKlxuK1x0XHQgKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBsaXN0IHdpdGggdGhlIHByb2dyYW0gbmFtZSAoYXJndlswXSkuXG4rXHRcdCAqIFdSREVfTk9DTUQgZGlzYWJsZXMgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIHNhZmV0eS5cbitcdFx0ICovXG4rXHRcdGlmICh3b3JkZXhwKGFyZ3ZfMCwgXHUwMDI2YXJncy1cdTAwM2VleHAsIGZsYWdzKSAhPSAwKVxuK1x0XHRcdFZGSU9fRkFJTChcIkZhaWxlZCB0byBldmFsdWF0ZSB0ZXN0IGhhcm5lc3MgYXJndl8wIGFyZ3MhXCIpO1xuK1x0fVxuK1xuK1x0ZmxhZ3MgfD0gV1JERV9BUFBFTkQ7XG4rXG4rXHQvKlxuK1x0ICogVXNlIHdvcmRleHAoKSB0byByZWxpYWJseSBwYXJzZSB0aGUgdXNlci1zdXBwbGllZCBjb21tYW5kIGxpbmUgc3RyaW5nXG4rXHQgKiBpbnRvIGluZGl2aWR1YWwgYXJndW1lbnRzLCByZXNwZWN0aW5nIHNoZWxsIHF1b3RpbmcgYW5kIGVzY2FwaW5nIHJ1bGVzLlxuK1x0ICogV1JERV9BUFBFTkQgbWVyZ2VzIHRoZXNlIG5ldyBhcmd1bWVudHMgd2l0aCB0aGUgZWFybGllciBhcmd2WzBdLlxuK1x0ICovXG4rXHRpZiAod29yZGV4cChjbWRsbmUsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBmbGFncykgIT0gMClcbitcdFx0VkZJT19GQUlMKFwiRmFpbGVkIHRvIGV2YWx1YXRlIHRlc3QgaGFybmVzcyBjbWRsbmUgYXJncyFcIik7XG4rXG4rXHRhcmdzLVx1MDAzZWFyZ2MgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkYztcbitcdGFyZ3MtXHUwMDNlYXJndiA9IGFyZ3MtXHUwMDNlZXhwLndlX3dvcmR2O1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXR1cF90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGludCAqYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNoYXIgKmhfYXJndltdID0geyBhcmd2WzBdLCBcIi1oXCIgfTtcbitcdGludCBvcHQ7XG4rXG4rXHR0ZXN0X3BhcmFtcy5kZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihhcmdjLCBhcmd2KTtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KCphcmdjLCBhcmd2LCBcImE6YjpoXCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKG9wdCkge1xuK1x0XHRjYXNlICdhJzpcbitcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYic6XG4rXHRcdFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGVscChhcmd2WzBdKTtcbitcdFx0XHRleGl0KHRlc3RfaGFybmVzc19ydW4oMiwgaF9hcmd2KSk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuK1x0b3B0aW5kID0gMTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKVxuK3tcbitcdGlmIChhcmdzLVx1MDAzZWFyZ3YpIHtcbitcdFx0YXJncy1cdTAwM2VhcmdjID0gMDtcbitcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbitcdFx0d29yZGZyZWUoXHUwMDI2YXJncy1cdTAwM2VleHApO1xuK1x0fVxuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNoYXIgKmRlZmF1bHRfaGFyZ3NbXSA9IHsgYXJndlswXSwgTlVMTCB9O1xuK1x0c3RydWN0IGhhcm5lc3NfYXJncyBhcmdzID0ge307XG4rXHRpbnQgcjtcbitcbitcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgXHUwMDI2YXJnYywgYXJndik7XG4rXG4rXHRyID0gdGVzdF9oYXJuZXNzX3J1bihhcmdzLmFyZ2MgPzogMSwgYXJncy5hcmd2ID86IGRlZmF1bHRfaGFyZ3MpO1xuK1xuK1x0dGVhcmRvd25fdGVzdChcdTAwMjZhcmdzKTtcbitcbitcdHJldHVybiByO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxMy4uMWI5MDQ0MTY0NGEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcbkBAIC0xMzgsNyArMTM4LDYgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcbiBcdHN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjtcbiBcdHN0cnVjdCBpb21tdV9tYXBwaW5nIG1hcHBpbmc7XG4gXHR1NjQgbWFwcGluZ19zaXplID0gc2l6ZTtcbi1cdHU2NCB1bm1hcHBlZDtcbiBcdGludCByYztcbiBcbiBcdHJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKTtcbkBAIC0xOTAsOSArMTg5LDcgQEAgVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfdGVzdCwgZG1hX21hcF91bm1hcClcbiBcdH1cbiBcbiB1bm1hcDpcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbitcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4gXHRwcmludGYoXCJVbm1hcHBlZCBJT1ZBIDB4JWx4XFxuXCIsIHJlZ2lvbi5pb3ZhKTtcbiBcdEFTU0VSVF9ORSgwLCBfX3RvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkciwgTlVMTCkpO1xuIFx0QVNTRVJUX05FKDAsIGlvbW11X21hcHBpbmdfZ2V0KGRldmljZV9iZGYsIHJlZ2lvbi5pb3ZhLCBcdTAwMjZtYXBwaW5nKSk7XG5AQCAtMjYwLDE1ICsyNTcsMTEgQEAgRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcbiBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIHVubWFwX3JhbmdlKVxuIHtcbiBcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24gPSBcdTAwMjZzZWxmLVx1MDAzZXJlZ2lvbjtcbi1cdHU2NCB1bm1hcHBlZDtcbi1cdGludCByYztcbiBcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbi1cdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbi1cdEFTU0VSVF9FUShyYywgMCk7XG4tXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi1cdTAwM2VzaXplKTtcbitcdGlvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIHJlZ2lvbik7XG4gfVxuIFxuIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MTAuNzkxOTY5NzkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5ODI4Mjk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBETUEgTWFwcGluZyBQZXJmb3JtYW5jZSBUZXN0IFBhdGNoIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5jZSB0ZXN0IGZvciBWRklPIERNQSBtYXBwaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyB0aGUgYE1ha2VmaWxlYCwgc29tZSBpbmNsdWRlIGZpbGVzIChgbGlidmZpby5oYCwgYGlvbW11LmhgKSwgYW4gSU9NTVUgaW1wbGVtZW50YXRpb24gZmlsZSAoYGlvbW11LmNgKSwgYW5kIHR3byB0ZXN0IGZpbGVzIChgdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY2AgYW5kIGB2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY2ApLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNlcnRhaW4gdHlwZXMgb2YgbW9kaWZpY2F0aW9ucy4gSXQgbGlzdHMgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBjb25zdGFudCB0d2Vha3MgdGhhdCBkb24ndCBjaGFuZ2UgZmxvdywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0IGEgc2Vjb25kLCB0aGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgc2VsZnRlc3RzYCBkaXJlY3RvcnkuXCJcblxuU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIFRoZXkgZG9uJ3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuIFRoZXkncmUgZGVzaWduZWQgdG8gKnRlc3QqIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBub3QgKmJlKiBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhlIHF1ZXN0aW9uIEkgaGF2ZSB0byBhc2sgbXlzZWxmIGlzOiBkb2VzIG1vZGlmeWluZyB0aGVzZSBzZWxmdGVzdHMgY29uc3RpdHV0ZSBhIFwiZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWRcIj8gQWJzb2x1dGVseSBub3QuIFN5emthbGxlciwgdGhlIGZ1enplciwgdGFyZ2V0cyB0aGUga2VybmVsJ3MgY29yZS4gSXQncyBub3QgZGVzaWduZWQgdG8gZnV6eiB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLCBldmVuIGlmIHRob3NlIGFwcGxpY2F0aW9ucyBhcmUgdXNlZCB0byB0ZXN0IGtlcm5lbCBmZWF0dXJlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gTm8ga2VybmVsIHNvdXJjZSBmaWxlcyBhcmUgdG91Y2hlZC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC5cblxuVGhlIHByb21wdCBpcyBjbGVhcjogXCJZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIgU2luY2UgdGhpcyBwYXRjaCBzZXJpZXMgaXMgZXhjbHVzaXZlbHkgZm9jdXNlZCBvbiBhZGRpbmcgYSBzZWxmdGVzdCB3aXRoaW4gdXNlcnNwYWNlLCBpdCBjbGVhcmx5IGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhLiBUaGUgcHVycG9zZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZSwgYW5kIGFyZSBkZXNpZ25lZCB0byBub3QgbWFrZSBjaGFuZ2VzLlxuXG5TbywgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTXkgcmVhc29uaW5nOiBUaGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI2LCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6MzM6MjEuNzc0ODAzODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpbyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsthxv[1] Phase: Running StartedAt: 2026-08-04 17:33:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthxv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 17:33:33 +0000 UTC FinishedAt: 2026-08-04 17:33:37 +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,}