Name: series-workflowklftd Phase: Failed StartedAt: 2026-08-19 02:56:05 +0000 UTC FinishedAt: 2026-08-19 03:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowklftd[0] Phase: Succeeded StartedAt: 2026-08-19 02:56:05 +0000 UTC FinishedAt: 2026-08-19 03:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowklftd[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 02:56:05 +0000 UTC FinishedAt: 2026-08-19 03:14:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2VyLXNwYWNlIHRlc3QgY29kZSkgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTI3ZTIxZTgyMDVhYTcyZGYzNjllODc3NzA0ZjkzNDk5YjAxNjZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjEzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi41ZDRlYjQ3Y2JmZWU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuIFx0aWYgKGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtIFx1MDAyNlx1MDAyNiBpZm9iai1cdTAwM2VyeF9vbikge1xuIFx0XHR1bWVtLVx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcbiBcdFx0dW1lbS1cdTAwM2VuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyAmIzQzOzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFxuIFx0dHhyID0gaWZvYmplY3QtXHUwMDNldHhfb24gPyBcdTAwMjZ4c2stXHUwMDNldHggOiBOVUxMO1xuIFx0cnhyID0gaWZvYmplY3QtXHUwMDNlcnhfb24gPyBcdTAwMjZ4c2stXHUwMDNlcnggOiBOVUxMO1xuLVx0cmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24mIzM5O3QgcnVuIHlldCwgc28gY2xlYXIgdW1lbSB0byBtYXJrIHRoaXMgc2xvdFxuJiM0MztcdFx0ICogYXMgaGF2aW5nIG5vIHJlZmVyZW5jZS4gRm9yIHRoZSBvd25lciAobm9uLXNoYXJlZCkgdGhlIHJlZmVyZW5jZSB3YXMgdGFrZW4gYnlcbiYjNDM7XHRcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlciYjMzk7cyByb2xsYmFjayBwYXRoIGNhbiByZWxlYXNlIGl0XG4mIzQzO1x0XHQgKiB2aWEgdW1lbV9yZWYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQpIHtcbiYjNDM7XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKTtcbiYjNDM7XHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiAmIzQzOzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4gc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcbiB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4mIzQzO1x0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxuJiM0MztcdCAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cdTAwM2VpZmluZGV4ID09IGlmb2JqX3J4LVx1MDAzZWlmaW5kZXg7XG4gXHR1MzIgaSwgajtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykge1xuQEAgLTIxNCw2ICYjNDM7MjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRpZm9iai1cdTAwM2V1c2VfZmlsbF9yaW5nID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XG4mIzQzO1x0XHRpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xuIFx0XHRpZm9iai1cdTAwM2V1c2VfbWV0YWRhdGEgPSBmYWxzZTtcbiBcbiBcdFx0aWYgKGkgPT0gMCkge1xuQEAgLTU3MiwyOCAmIzQzOzYwMCw5NSBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzOy8qXG4mIzQzOyAqIFJlZ2VuZXJhdGUgZXZlcnkgcGVyLXNvY2tldCBzdHJlYW0sIHB1Ymxpc2hpbmcgaW50byB4c2tfYXJyW11cbiYjNDM7ICogb25seSBvbmNlIGFsbCBhbGxvY2F0aW9ucyBoYXZlIHN1Y2NlZWRlZC4gQGRpbXMgc3VwcGxpZXMgdGhlXG4mIzQzOyAqIHBlci1zb2NrZXQgcGFja2V0IGNvdW50IGFuZCBsZW5ndGgsIGRlcml2ZWQgZnJvbSB0aGUgc3RyZWFtXG4mIzQzOyAqIGN1cnJlbnRseSBpbnN0YWxsZWQgaW4gdGhlIHNsb3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXBsYWNlZCBzdHJlYW1zIGFyZSB0aGUgZGVmYXVsdHMgb3duZWQgYnkgdGVzdF9zcGVjLCB3aGljaFxuJiM0MzsgKiBldmVyeSBzbG90IGFsaWFzZXMsIHNvIHRoZXkgbXVzdCBub3QgYmUgZnJlZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZXBsYWNlX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBwa3Rfc3RyZWFtX2RpbXNfZm4gZGltcyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmN0eClcbiB7XG4tXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbi1cdHUzMiBpO1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHUzMiBpLCBuYl9wa3RzLCBwa3RfbGVuO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4mIzQzO1x0XHRkaW1zKHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsIFx1MDAyNm5iX3BrdHMsIFx1MDAyNnBrdF9sZW4pO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZGltcyh0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcdTAwMjZuYl9wa3RzLCBcdTAwMjZwa3RfbGVuKTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiBcbi1cdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHQgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuJiM0MztcdCpwa3RfbGVuID0gb3JpZy1cdTAwM2Vwa3RzWzBdLmxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVuX2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbiYjNDM7XG4mIzQzO1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuJiM0MztcdCpwa3RfbGVuID0gc29ja19pZCA/IGNmZy1cdTAwM2Vsb25nX2xlbiA6IGNmZy1cdTAwM2VzaG9ydF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHVuZXZlbl9kaXN0X2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHRcdCAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1x0dTMyIHBrdHNfc29jazAgPSBjZmctXHUwMDNldG90YWxfcGt0cyAvIDQ7XG4mIzQzO1xuJiM0MztcdCpuYl9wa3RzID0gc29ja19pZCA/IGNmZy1cdTAwM2V0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCA6IHBrdHNfc29jazA7XG4mIzQzO1x0KnBrdF9sZW4gPSBjZmctXHUwMDNlcGt0X2xlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCBldmVuX29kZF9kaW1zLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2xlbl9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2MgMiB8fCBjZmctXHUwMDNldG90YWxfcGt0cyBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTUwOCw4ICYjNDM7MTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY1xuIFx0fVxuIFxuIFx0dW1lbV9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclswXS51bWVtO1xuJiM0MztcdC8qIE5vbi1vd25pbmcgdmlldyB1c2VkIG9ubHkgZm9yIFRYIGJ1ZmZlciBhcml0aG1ldGljOyB0aGUgc29ja2V0cyBiZWxvdyBiaW5kIHRvXG4mIzQzO1x0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cbiYjNDM7XHQgKi9cbiBcdHVtZW1fdHggPSBpZm9iamVjdC1cdTAwM2V4c2tfYXJyWzBdLnVtZW1fcmVhbDtcbi1cdG1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTtcbiYjNDM7XHR1bWVtX3R4LVx1MDAzZW51bV9mcmFtZXMgPSB1bWVtX3J4LVx1MDAzZW51bV9mcmFtZXM7XG4mIzQzO1x0dW1lbV90eC1cdTAwM2VmcmFtZV9oZWFkcm9vbSA9IHVtZW1fcngtXHUwMDNlZnJhbWVfaGVhZHJvb207XG4mIzQzO1x0dW1lbV90eC1cdTAwM2VidWZmZXIgPSB1bWVtX3J4LVx1MDAzZWJ1ZmZlcjtcbiYjNDM7XHR1bWVtX3R4LVx1MDAzZWZyYW1lX3NpemUgPSB1bWVtX3J4LVx1MDAzZWZyYW1lX3NpemU7XG4mIzQzO1x0dW1lbV90eC1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHVtZW1fcngtXHUwMDNldW5hbGlnbmVkX21vZGU7XG4gXHR1bWVtX3R4LVx1MDAzZWJhc2VfYWRkciA9IDA7XG4gXHR1bWVtX3R4LVx1MDAzZW5leHRfYnVmZmVyID0gMDtcbiBcbkBAIC0xNTk5LDYgJiM0MzsxNzAxLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbiYjNDM7XHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICYjNDM7MTc3MywxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVycikpO1xuIFx0fVxuIFxuJiM0MztcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuJiM0MztcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiAmIzQzOzE4MDgsNjUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXG4ge1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cdTAwM2V4c2stXHUwMDNldW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoIXVtZW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbiYjNDM7XHQvKiBTa2lwIHNsb3RzIHRoYXQgbmV2ZXIgYWNxdWlyZWQgYSBVTUVNIHJlZmVyZW5jZSAocHJlLWluaXRpYWxpemVkIGJ1dCB1bmNvbmZpZ3VyZWQpLiAqL1xuJiM0MztcdGlmICgheHNrLVx1MDAzZXVtZW1fcmVmKSB7XG4mIzQzO1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZXVtZW0pIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4mIzQzO1x0XHRcdFx0ICogZGVsZXRlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiYjNDM7XHRcdFx0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW1lbS1cdTAwM2VidWZmZXIgXHUwMDI2XHUwMDI2IHVtZW0tXHUwMDNlbW1hcF9zaXplKSB7XG4mIzQzO1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuJiM0MztcdFx0XHR1bWVtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuJiM0MztcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmopXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgVU1FTSB0aGF0IGNvdWxkIG5vdCBiZSBkZWxldGVkIHN0YXlzIG1hcHBlZCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0cyxcbiYjNDM7XHQgKiBzbyByZWNvcmQgaXQgcmF0aGVyIHRoYW4gbGV0dGluZyB0ZWFyZG93biBkcm9wIHRoZSBlcnJvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkgXHUwMDNlIDA7IGktLSlcbiYjNDM7XHRcdGlmICh4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iai1cdTAwM2V4c2tfYXJyW2kgLSAxXSkpXG4mIzQzO1x0XHRcdHRlc3QtXHUwMDNlZmFpbCA9IHRydWU7XG4gfVxuIFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNzY4LDI3ICYjNDM7MTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KVxuLVx0XHR4c2tfc29ja2V0X19kZWxldGUoaWZvYmotXHUwMDNleHNrX2FycltpXS54c2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbi17XG4tXHRpZiAoIWlmb2JqMSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xuLVx0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIWlmb2JqMi1cdTAwM2VzaGFyZWRfdW1lbSlcbi1cdFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4ge1xuQEAgLTE4NDAsMTMgJiM0MzsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXG4gXHRcdGlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveShcdTAwMjZiYXJyKSkge1xuIFx0XHRcdHRlc3QtXHUwMDNldXNlX2JhcnJpZXIgPSBmYWxzZTtcbiBcdFx0XHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xuLVx0XHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbi1cdFx0XHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgTlVMTCk7XG4mIzQzO1x0XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaWZvYmoyKSB7XG4mIzQzO1x0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIXRlc3QtXHUwMDNlZmFpbCkge1xuIFx0XHQvKlNwYXduIFRYIHRocmVhZCAqL1xuIFx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVx1MDAzZWZ1bmNfcHRyLCB0ZXN0KTtcbiBcdFx0cHRocmVhZF9qb2luKHQxLCBOVUxMKTtcbkBAIC0xODU1LDkgJiM0MzsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY2LDkgJiM0MzsyMTAzLDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNiw2ICYjNDM7MjM2MiwxMDEgQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbiYjNDM7XHRcdFx0XHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobmJfc29ja2V0cyBcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0VSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4mIzQzO1x0dGVzdC1cdTAwM2VuYl9zb2NrZXRzID0gbmJfc29ja2V0cztcbiYjNDM7XG4mIzQzO1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbiYjNDM7XHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0XHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZsZW5fY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbiYjNDM7XHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbiYjNDM7XHRcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XG4mIzQzO1x0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGVzdGFwcF9wb2xsX3R4cV90bW91dChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbiBcdGJvb2wgc2hhcmVkX3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXNoYXJlZF91bWVtO1xuQEAgLTI1MDYsOSAmIzQzOzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0aWYgKHBrdF9zdHJlYW1fcmVwbGFjZSh0ZXN0LCBtYXhfZGVzY3MsIE1JTl9QS1RfU0laRSkpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5pbmRleCAwMzc1M2RkYzVkY2RhLi45NGM3NzU3NGY0YThiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3hkcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9rc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hzay5oXCYjMzQ7XG5AQCAtNzYsOSAmIzQzOzc3LDEzIEBAIGVudW0gdGVzdF9tb2RlIHtcbiBcbiBzdHJ1Y3QgaWZvYmplY3Q7XG4gc3RydWN0IHRlc3Rfc3BlYztcbiYjNDM7c3RydWN0IHBrdF9zdHJlYW07XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuJiM0Mzt0eXBlZGVmIHZvaWQgKCpwa3Rfc3RyZWFtX2RpbXNfZm4pKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTkzLDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0dTggZHN0X21hY1tFVEhfQUxFTl07XG4gXHR1OCBzcmNfbWFjW0VUSF9BTEVOXTtcbiBcdGJvb2wgY2hlY2tfY29uc3VtZXI7XG4mIzQzO1x0Ym9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovXG4gfTtcbiBcbiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spO1xuQEAgLTEwNCw2ICYjNDM7MTEwLDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbiYjNDM7XHRyZWZjb3VudF90IHVzZXJzO1xuIFx0dTMyIG51bV9mcmFtZXM7XG4gXHR1MzIgZnJhbWVfaGVhZHJvb207XG4gXHR2b2lkICpidWZmZXI7XG5AQCAtMTU5LDcgJiM0MzsxNjYsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuLVxuJiM0MztpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgJiM0MzsxODYsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzEyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4mIzQzO1x0aWYgKHBrdF9sZW4gXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4mIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNFxuJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLjVkOGEyOWU3MjI0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50XG4gXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxuIFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4mIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTtcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMSwyNiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbi1cdHVtZW0tXHUwMDNlZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuJiM0MztcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbiYjNDM7XHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuJiM0MztcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXHUwMDI2dW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbiYjNDM7XHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZm9iai1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbiYjNDM7XHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4mIzQzO1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcdTAwMjZ4c2ssIFx1MDAyNnVtZW0sIGlmb2JqLCBmYWxzZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0emNfYXZhaWwgPSB0cnVlO1xuIFxuLVx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuLVx0ZnJlZSh4c2spO1xuLW91dDpcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRmcmVlKHVtZW0pO1xuJiM0MztcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4mIzQzO1x0cmV0ID0geHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuJiM0MztcbiBcdHJldHVybiB6Y19hdmFpbDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyN2UyMWU4MjA1YWE3MmRmMzY5ZTg3NzcwNGY5MzQ5OWIwMTY2ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzoxMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCmluZGV4IDQ1NDkzNThjYzhjMjEuLjVkNGViNDdjYmZlZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwpAQCAtMTAxLDYgJiM0MzsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkCiAJCXJldHVybiByZXQ7CiAKIAl1bWVtLSZndDtidWZmZXIgPSBidWZmZXI7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3VtZW0tJmd0O3VzZXJzLCAxKTsKIAlpZiAoaWZvYmotJmd0O3NoYXJlZF91bWVtICZhbXA7JmFtcDsgaWZvYmotJmd0O3J4X29uKSB7CiAJCXVtZW0tJmd0O2Jhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTsKIAkJdW1lbS0mZ3Q7bmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7CkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAJc3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9OwogCXN0cnVjdCB4c2tfcmluZ19jb25zICpyeHI7CiAJc3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjsKJiM0MzsJaW50IHJldDsKIAogCXhzay0mZ3Q7dW1lbSA9IHVtZW07CiAJY2ZnLnJ4X3NpemUgPSB4c2stJmd0O3J4cXNpemU7CkBAIC0xNzAsNyAmIzQzOzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbQogCiAJdHhyID0gaWZvYmplY3QtJmd0O3R4X29uID8gJmFtcDt4c2stJmd0O3R4IDogTlVMTDsKIAlyeHIgPSBpZm9iamVjdC0mZ3Q7cnhfb24gPyAmYW1wO3hzay0mZ3Q7cnggOiBOVUxMOwotCXJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoJmFtcDt4c2stJmd0O3hzaywgaWZvYmplY3QtJmd0O2lmaW5kZXgsIDAsIHVtZW0tJmd0O3VtZW0sIHJ4ciwgdHhyLCAmYW1wO2NmZyk7CiYjNDM7CXJldCA9IHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBzaGFyZWQgc29ja2V0cyByZWZjb3VudF9pbmMgaGFzbiYjMzk7dCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90CiYjNDM7CQkgKiBhcyBoYXZpbmcgbm8gcmVmZXJlbmNlLiBGb3IgdGhlIG93bmVyIChub24tc2hhcmVkKSB0aGUgcmVmZXJlbmNlIHdhcyB0YWtlbiBieQomIzQzOwkJICogeHNrX2NvbmZpZ3VyZV91bWVtOyBsZWF2ZSB1bWVtIHNldCBzbyB0aGUgY2FsbGVyJiMzOTtzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXQKJiM0MzsJCSAqIHZpYSB1bWVtX3JlZi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNoYXJlZCkKJiM0MzsJCQl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwkJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hhcmVkKSB7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDt1bWVtLSZndDt1c2Vycyk7CiYjNDM7CQl4c2stJmd0O3VtZW1fcmVmID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKQEAgLTIwMyw2ICYjNDM7MjI0LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJCSAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeCkKIHsKJiM0MzsJLyoKJiM0MzsJICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LAomIzQzOwkgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsCiYjNDM7CSAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LSZndDtpZmluZGV4ID09IGlmb2JqX3J4LSZndDtpZmluZGV4OwogCXUzMiBpLCBqOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykgewpAQCAtMjE0LDYgJiM0MzsyNDEsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsCiAJCWlmb2JqLSZndDt1c2VfZmlsbF9yaW5nID0gdHJ1ZTsKIAkJaWZvYmotJmd0O3JlbGVhc2VfcnggPSB0cnVlOwogCQlpZm9iai0mZ3Q7dmFsaWRhdGlvbl9mdW5jID0gTlVMTDsKJiM0MzsJCWlmb2JqLSZndDtzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0OwogCQlpZm9iai0mZ3Q7dXNlX21ldGFkYXRhID0gZmFsc2U7CiAKIAkJaWYgKGkgPT0gMCkgewpAQCAtNTcyLDI4ICYjNDM7NjAwLDk1IEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7LyoKJiM0MzsgKiBSZWdlbmVyYXRlIGV2ZXJ5IHBlci1zb2NrZXQgc3RyZWFtLCBwdWJsaXNoaW5nIGludG8geHNrX2FycltdCiYjNDM7ICogb25seSBvbmNlIGFsbCBhbGxvY2F0aW9ucyBoYXZlIHN1Y2NlZWRlZC4gQGRpbXMgc3VwcGxpZXMgdGhlCiYjNDM7ICogcGVyLXNvY2tldCBwYWNrZXQgY291bnQgYW5kIGxlbmd0aCwgZGVyaXZlZCBmcm9tIHRoZSBzdHJlYW0KJiM0MzsgKiBjdXJyZW50bHkgaW5zdGFsbGVkIGluIHRoZSBzbG90LgomIzQzOyAqCiYjNDM7ICogVGhlIHJlcGxhY2VkIHN0cmVhbXMgYXJlIHRoZSBkZWZhdWx0cyBvd25lZCBieSB0ZXN0X3NwZWMsIHdoaWNoCiYjNDM7ICogZXZlcnkgc2xvdCBhbGlhc2VzLCBzbyB0aGV5IG11c3Qgbm90IGJlIGZyZWVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHBrdF9zdHJlYW1fZGltc19mbiBkaW1zLAomIzQzOwkJCQkgIGNvbnN0IHZvaWQgKmN0eCkKIHsKLQlzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTsKLQl1MzIgaTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgbmJfcGt0cywgcGt0X2xlbjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewotCQlwa3Rfc3RyZWFtID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbTsKLQkJcGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwKLQkJCQkJCSAgIHBrdF9zdHJlYW0tJmd0O3BrdHNbMF0ubGVuLCBpLCAyKTsKLQkJaWYgKCFwa3Rfc3RyZWFtKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtOwomIzQzOwkJZGltcyh0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsICZhbXA7bmJfcGt0cywgJmFtcDtwa3RfbGVuKTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlkaW1zKHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0sIGksIGN0eCwgJmFtcDtuYl9wa3RzLCAmYW1wO3BrdF9sZW4pOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQogCi0JCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07CiYjNDM7CQl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7CiYjNDM7CQlpZiAocnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXZlbl9vZGRfZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCwKJiM0MzsJCQkgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKQomIzQzO3sKJiM0MzsJKm5iX3BrdHMgPSBvcmlnLSZndDtuYl9wa3RzIC8gMjsKJiM0MzsJKnBrdF9sZW4gPSBvcmlnLSZndDtwa3RzWzBdLmxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbGVuX2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsCiYjNDM7CQkgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJKm5iX3BrdHMgPSBvcmlnLSZndDtuYl9wa3RzIC8gMjsKJiM0MzsJKnBrdF9sZW4gPSBzb2NrX2lkID8gY2ZnLSZndDtsb25nX2xlbiA6IGNmZy0mZ3Q7c2hvcnRfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1bmV2ZW5fZGlzdF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCSAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7CiYjNDM7CXUzMiBwa3RzX3NvY2swID0gY2ZnLSZndDt0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJKm5iX3BrdHMgPSBzb2NrX2lkID8gY2ZnLSZndDt0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCA6IHBrdHNfc29jazA7CiYjNDM7CSpwa3RfbGVuID0gY2ZnLSZndDtwa3RfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEodGVzdCwgbGVuX2RpbXMsIGNmZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnKQomIzQzO3sKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IGNmZy0mZ3Q7dG90YWxfcGt0cyAmbHQ7IDQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEodGVzdCwgdW5ldmVuX2Rpc3RfZGltcywgY2ZnKTsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQpAQCAtMTUwOCw4ICYjNDM7MTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplYwogCX0KIAogCXVtZW1fcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclswXS51bWVtOwomIzQzOwkvKiBOb24tb3duaW5nIHZpZXcgdXNlZCBvbmx5IGZvciBUWCBidWZmZXIgYXJpdGhtZXRpYzsgdGhlIHNvY2tldHMgYmVsb3cgYmluZCB0bwomIzQzOwkgKiB0aGUgUlgtb3duZWQgVU1FTSwgc28gdGhlIGhhbmRsZSwgY3EgYW5kIHJlZmNvdW50IHN0YXkgaW4gb25lIHBsYWNlLgomIzQzOwkgKi8KIAl1bWVtX3R4ID0gaWZvYmplY3QtJmd0O3hza19hcnJbMF0udW1lbV9yZWFsOwotCW1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTsKJiM0MzsJdW1lbV90eC0mZ3Q7bnVtX2ZyYW1lcyA9IHVtZW1fcngtJmd0O251bV9mcmFtZXM7CiYjNDM7CXVtZW1fdHgtJmd0O2ZyYW1lX2hlYWRyb29tID0gdW1lbV9yeC0mZ3Q7ZnJhbWVfaGVhZHJvb207CiYjNDM7CXVtZW1fdHgtJmd0O2J1ZmZlciA9IHVtZW1fcngtJmd0O2J1ZmZlcjsKJiM0MzsJdW1lbV90eC0mZ3Q7ZnJhbWVfc2l6ZSA9IHVtZW1fcngtJmd0O2ZyYW1lX3NpemU7CiYjNDM7CXVtZW1fdHgtJmd0O3VuYWxpZ25lZF9tb2RlID0gdW1lbV9yeC0mZ3Q7dW5hbGlnbmVkX21vZGU7CiAJdW1lbV90eC0mZ3Q7YmFzZV9hZGRyID0gMDsKIAl1bWVtX3R4LSZndDtuZXh0X2J1ZmZlciA9IDA7CiAKQEAgLTE1OTksNiAmIzQzOzE3MDEsOCBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwkvKiBNYXJrIGJlZm9yZSB4c2tfY29uZmlndXJlIHNvIHJvbGxiYWNrIGNhbiByZWxlYXNlIHRoZSBVTUVNIGlmIGl0IGZhaWxzLiAqLwomIzQzOwlpZm9iamVjdC0mZ3Q7eHNrLSZndDt1bWVtX3JlZiA9IHRydWU7CiAKIAlyZXQgPSB4c2tfY29uZmlndXJlKHRlc3QsIGlmb2JqZWN0LCB1bWVtLCBmYWxzZSk7CiAJaWYgKHJldCkKQEAgLTE2NjksMTIgJiM0MzsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAkJCQkgICAgICAgc3RyZXJyb3IoLWVycikpOwogCX0KIAomIzQzOwkvKiBQdWJsaXNoIHNldHVwIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFpbiB0aHJlYWQgZnJvbSB0aGUgYmFycmllci4gKi8KJiM0MzsJaWYgKGVycikKJiM0MzsJCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwomIzQzOwogCWlmICh0ZXN0LSZndDt1c2VfYmFycmllcikKIAkJcHRocmVhZF9iYXJyaWVyX3dhaXQoJmFtcDtiYXJyKTsKIAogCS8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqLwogCWlmIChlcnIpIHsKLQkJdGVzdC0mZ3Q7ZmFpbCA9IHRydWU7CiAJCXB0aHJlYWRfZXhpdChOVUxMKTsKIAl9CiAKQEAgLTE3MDEsMTIgJiM0MzsxODA4LDY1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAlwdGhyZWFkX2V4aXQoTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0MztpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKQogewotCXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotJmd0O3hzay0mZ3Q7dW1lbTsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoeHNrLSZndDt4c2spCiYjNDM7CQl4c2tfc29ja2V0X19kZWxldGUoeHNrLSZndDt4c2spOwomIzQzOwl4c2stJmd0O3hzayA9IE5VTEw7CiAKLQl4c2tfdW1lbV9fZGVsZXRlKHVtZW0tJmd0O3VtZW0pOwotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CS8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovCiYjNDM7CWlmICgheHNrLSZndDt1bWVtX3JlZikgewomIzQzOwkJeHNrLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDt1bWVtLSZndDt1c2VycykpIHsKJiM0MzsJCWlmICh1bWVtLSZndDt1bWVtKSB7CiYjNDM7CQkJaW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7CiYjNDM7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIGVycik7CiYjNDM7CQkJCS8qIEtlZXAgb3duZXJzaGlwIGV4cGxpY2l0IHNvIGEgbGF0ZXIgY2xlYW51cCBwYXNzIGNhbiByZXRyeQomIzQzOwkJCQkgKiBkZWxldGUuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZWZjb3VudF9zZXQoJmFtcDt1bWVtLSZndDt1c2VycywgMSk7CiYjNDM7CQkJCXhzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwomIzQzOwkJCQl4c2stJmd0O3VtZW0gPSB1bWVtOwomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCX0KJiM0MzsJCQl1bWVtLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJCWlmICh1bWVtLSZndDtidWZmZXIgJmFtcDsmYW1wOyB1bWVtLSZndDttbWFwX3NpemUpIHsKJiM0MzsJCQltdW5tYXAodW1lbS0mZ3Q7YnVmZmVyLCB1bWVtLSZndDttbWFwX3NpemUpOwomIzQzOwkJCXVtZW0tJmd0O2J1ZmZlciA9IE5VTEw7CiYjNDM7CQkJdW1lbS0mZ3Q7bW1hcF9zaXplID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwl4c2stJmd0O3VtZW1fcmVmID0gZmFsc2U7CiYjNDM7CXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7ewomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWYgKCFpZm9iaikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQSBVTUVNIHRoYXQgY291bGQgbm90IGJlIGRlbGV0ZWQgc3RheXMgbWFwcGVkIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzLAomIzQzOwkgKiBzbyByZWNvcmQgaXQgcmF0aGVyIHRoYW4gbGV0dGluZyB0ZWFyZG93biBkcm9wIHRoZSBlcnJvci4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IHRlc3QtJmd0O25iX3NvY2tldHM7IGkgJmd0OyAwOyBpLS0pCiYjNDM7CQlpZiAoeHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDtpZm9iai0mZ3Q7eHNrX2FycltpIC0gMV0pKQomIzQzOwkJCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCkBAIC0xNzY4LDI3ICYjNDM7MTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQotewotCXUzMiBpOwotCi0JaWYgKCFpZm9iaiB8fCAhdGVzdCkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KQotCQl4c2tfc29ja2V0X19kZWxldGUoaWZvYmotJmd0O3hza19hcnJbaV0ueHNrKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpCi17Ci0JaWYgKCFpZm9iajEpCi0JCXJldHVybjsKLQotCXRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTsKLQlpZiAoaWZvYmoyICZhbXA7JmFtcDsgIWlmb2JqMi0mZ3Q7c2hhcmVkX3VtZW0pCi0JCXRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTsKLX0KLQogc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwKIAkJCQkgICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMikKIHsKQEAgLTE4NDAsMTMgJiM0MzsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppCiAJCWlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveSgmYW1wO2JhcnIpKSB7CiAJCQl0ZXN0LSZndDt1c2VfYmFycmllciA9IGZhbHNlOwogCQkJcHRocmVhZF9qb2luKHQwLCBOVUxMKTsKLQkJCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJCWNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTsKJiM0MzsJCQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7CiAJCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwogCQl9CiAJfQogCi0JaWYgKGlmb2JqMikgewomIzQzOwlpZiAoaWZvYmoyICZhbXA7JmFtcDsgIXRlc3QtJmd0O2ZhaWwpIHsKIAkJLypTcGF3biBUWCB0aHJlYWQgKi8KIAkJcHRocmVhZF9jcmVhdGUoJmFtcDt0MSwgTlVMTCwgaWZvYmoyLSZndDtmdW5jX3B0ciwgdGVzdCk7CiAJCXB0aHJlYWRfam9pbih0MSwgTlVMTCk7CkBAIC0xODU1LDkgJiM0MzsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwogCiAJaWYgKHRlc3QtJmd0O3RvdGFsX3N0ZXBzID09IHRlc3QtJmd0O2N1cnJlbnRfc3RlcCB8fCB0ZXN0LSZndDtmYWlsKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpOwotCQljbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAl9CiAKIAlpZiAodGVzdC0mZ3Q7ZmFpbCkKQEAgLTE5NjYsOSAmIzQzOzIxMDMsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKIAlpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKQEAgLTIyMjYsNiAmIzQzOzIzNjIsMTAxIEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfbGVuKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY3R4KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCwKJiM0MzsJCQkJc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCwKJiM0MzsJCQkJc3RydWN0IGJwZl9tYXAgKnhza21hcF90eCwgdTMyIG5iX3NvY2tldHMsCiYjNDM7CQkJCXNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChuYl9zb2NrZXRzICZndDsgTUFYX1NPQ0tFVFMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7CiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRlc3QtJmd0O3RvdGFsX3N0ZXBzID0gMTsKJiM0MzsJdGVzdC0mZ3Q7bmJfc29ja2V0cyA9IG5iX3NvY2tldHM7CiYjNDM7CiYjNDM7CXRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7CiYjNDM7CiYjNDM7CXJldCA9IHNlcV9mbih0ZXN0LCBjdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHRlc3QpOwomIzQzOwomIzQzOwlyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7CiYjNDM7CQkuc2hvcnRfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwkJLmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsCiYjNDM7CQkJCSAgICBza2VsX3J4LSZndDttYXBzLnhzaywgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sCiYjNDM7CQkJCSAgICAmYW1wO2xlbl9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0gewomIzQzOwkJLnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LAomIzQzOwkJLnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDttYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LAomIzQzOwkJCQkgICAgJmFtcDt1bmV2ZW5fZGlzdF9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwpOwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI1MDYsOSAmIzQzOzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLjk0Yzc3NTc0ZjRhOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03Niw5ICYjNDM7NzcsMTMgQEAgZW51bSB0ZXN0X21vZGUgewogCiBzdHJ1Y3QgaWZvYmplY3Q7CiBzdHJ1Y3QgdGVzdF9zcGVjOwomIzQzO3N0cnVjdCBwa3Rfc3RyZWFtOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgdm9pZCAoKnBrdF9zdHJlYW1fZGltc19mbikoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsCiYjNDM7CQkJCSAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTsKIAogc3RydWN0IHhza19zb2NrZXRfaW5mbyB7CiAJc3RydWN0IHhza19yaW5nX2NvbnMgcng7CkBAIC05Myw2ICYjNDM7OTgsNyBAQCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHsKIAl1OCBkc3RfbWFjW0VUSF9BTEVOXTsKIAl1OCBzcmNfbWFjW0VUSF9BTEVOXTsKIAlib29sIGNoZWNrX2NvbnN1bWVyOwomIzQzOwlib29sIHVtZW1fcmVmOyAvKiB0cnVlIGlmIHRoaXMgc2xvdCBob2xkcyBhIGNvdW50ZWQgVU1FTSByZWZlcmVuY2UgKi8KIH07CiAKIGludCBraWNrX3J4KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7CkBAIC0xMDQsNiAmIzQzOzExMCw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHsKIAlzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07CiAJdTY0IG5leHRfYnVmZmVyOwogCXU2NCBtbWFwX3NpemU7CiYjNDM7CXJlZmNvdW50X3QgdXNlcnM7CiAJdTMyIG51bV9mcmFtZXM7CiAJdTMyIGZyYW1lX2hlYWRyb29tOwogCXZvaWQgKmJ1ZmZlcjsKQEAgLTE1OSw3ICYjNDM7MTY2LDcgQEAgaW50IGluaXRfaWZhY2Uoc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgdGhyZWFkX2Z1bmNfdCBmdW5jX3B0cik7CiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTsKIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLAogCQkJIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIGJvb2wgc2hhcmVkKTsKLQomIzQzO2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwogCiBzdHJ1Y3QgcGt0IHsKIAlpbnQgb2Zmc2V0OwpAQCAtMTc5LDYgJiM0MzsxODYsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0gewogCWJvb2wgdmVyYmF0aW07CiB9OwogCiYjNDM7c3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggewomIzQzOwl1MzIgc2hvcnRfbGVuOwomIzQzOwl1MzIgbG9uZ19sZW47CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHsKJiM0MzsJdTMyIHRvdGFsX3BrdHM7CiYjNDM7CXUzMiBwa3RfbGVuOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucykKIHsKIAlyZXR1cm4gb3B0aW9ucyAmYW1wOyBYRFBfUEtUX0NPTlREOwpAQCAtMjY4LDYgJiM0MzsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIAogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTsKIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7CkBAIC0yOTEsNiAmIzQzOzMxMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0gewogCXsubmFtZSA9ICYjMzQ7WERQX1BST0dfQ0xFQU5VUCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9EUk9QX0hBTEYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LAogCXsubmFtZSA9ICYjMzQ7WERQX1NIQVJFRF9VTUVNJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fNF9TT0NLRVRTJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5FVkVOX0RJU1QmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LAomIzQzOwl7Lm5hbWUgPSAmIzM0O1NIQVJFRF9VTUVNX1VOQUxJR05FRCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFkmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSwKIAl7Lm5hbWUgPSAmIzM0O0FMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7CiAJX191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTsKIH0geHNrIFNFQygmIzM0Oy5tYXBzJiMzNDspOwpAQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQygmIzM0O3hkcCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApCiAJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIGlkeCwgWERQX0RST1ApOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGFfZW5kOwomIzQzOwlfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhOwomIzQzOwomIzQzOwkvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovCiYjNDM7CWlmIChwa3RfbGVuICZsdDs9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCkKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3RfbWFwKCZhbXA7eHNrLCAwLCBYRFBfRFJPUCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3RfbWFwKCZhbXA7eHNrLCAxLCBYRFBfRFJPUCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIHsKIAlfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKQEAgLTMsNyAmIzQzOzMsOCBAQAogI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IXwogI2RlZmluZSBYU0tfWERQX0NPTU1PTl9IXwogCi0jZGVmaW5lIE1BWF9TT0NLRVRTIDIKJiM0MzsjZGVmaW5lIE1BWF9TT0NLRVRTIDQKJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NAogI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MzsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovCiAKIHN0cnVjdCB4ZHBfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwppbmRleCA3ZGFkODU1NmE3MjJlLi41ZDhhMjllNzIyNGUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKQEAgLTExNywxMiAmIzQzOzExNywxMiBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludAogCiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pCiAKLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiYjNDM7c3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHsKIAlzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKIAlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7Ci0Jc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrOwotCXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtOwomIzQzOwlzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9OwomIzQzOwlzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtID0ge307CiAJYm9vbCB6Y19hdmFpbCA9IGZhbHNlOwogCXZvaWQgKmJ1ZnM7CiAJaW50IHJldDsKQEAgLTEzMSwzMiAmIzQzOzEzMSwyNiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCWlmIChidWZzID09IE1BUF9GQUlMRUQpCiAJCWV4aXRfd2l0aF9lcnJvcihlcnJubyk7CiAKLQl1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpOwotCWlmICghdW1lbSkgewotCQltdW5tYXAoYnVmcywgdW1lbV9zeik7Ci0JCWV4aXRfd2l0aF9lcnJvcihFTk9NRU0pOwotCX0KLQl1bWVtLSZndDtmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwomIzQzOwl1bWVtLm1tYXBfc2l6ZSA9IHVtZW1fc3o7CiYjNDM7CXVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7CiYjNDM7CXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgJmFtcDt1bWVtLCBidWZzLCB1bWVtX3N6KTsKIAlpZiAocmV0KQogCQlleGl0X3dpdGhfZXJyb3IoLXJldCk7CiAKLQl4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTsKLQlpZiAoIXhzaykKLQkJZ290byBvdXQ7Ci0JaWZvYmplY3QtJmd0O2JpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZOwotCWlmb2JqZWN0LSZndDtyeF9vbiA9IHRydWU7Ci0JeHNrLSZndDtyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7Ci0JcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpOwomIzQzOwl4c2sudW1lbV9yZWYgPSB0cnVlOwomIzQzOwomIzQzOwlpZm9iai0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7CiYjNDM7CWlmb2JqLSZndDtyeF9vbiA9IHRydWU7CiYjNDM7CXhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7CiYjNDM7CXJldCA9IHhza19jb25maWd1cmVfc29ja2V0KCZhbXA7eHNrLCAmYW1wO3VtZW0sIGlmb2JqLCBmYWxzZSk7CiAJaWYgKCFyZXQpCiAJCXpjX2F2YWlsID0gdHJ1ZTsKIAotCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7Ci0JZnJlZSh4c2spOwotb3V0OgotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW1fc3opOwotCXhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7Ci0JZnJlZSh1bWVtKTsKJiM0MzsJLyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi8KJiM0MzsJcmV0ID0geHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDt4c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZXhpdF93aXRoX2Vycm9yKC1yZXQpOwomIzQzOwogCXJldHVybiB6Y19hdmFpbDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIGFsbCBjb25maW5lZCB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMgZGlyZWN0b3J5LiYjMzQ7IEl0JiMzOTtzIHRvdWNoaW5nIGB0ZXN0X3hzay5jYCwgYHRlc3RfeHNrLmhgLCBgeHNrX3hkcF9wcm9ncy5jYCwgYHhza194ZHBfY29tbW9uLmhgLCBhbmQgYHhza3hjZWl2ZXIuY2AuIEFsbCBjb250YWluZWQgbmVhdGx5IHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyAqanVzdCogYWRkaW5nIG5ldyB0ZXN0cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzaGFyZWQgVU1FTSBmb3IgQUZfWERQLiBHcmVhdCwgbW9yZSB0ZXN0cyBhcmUgYWx3YXlzIGdvb2QsIGJ1dCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPwoKTXkgZmlyc3QgaW5zdGluY3QgaXMgbm8uIEl0JiMzOTtzIHVzZXItc3BhY2UgdGVzdGluZyBjb2RlLiBJdCYjMzk7cyBub3QgbW9kaWZ5aW5nIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZS4gSXQmIzM5O3Mgbm90IGluIGBuZXQveGRwL2AsIGBuZXQvY29yZS9gLCBvciBga2VybmVsL2JwZi9gLCB3aGljaCB3b3VsZCBiZSB0aGUgcmVkIGZsYWdzIEkmIzM5O20gbG9va2luZyBmb3IuIFNvLCBpbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkJ1dCwgYXMgYWx3YXlzLCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkb3VibGUtY2hlY2suIEkmIzM5O2xsIHNjYW4gdGhlIGRpZmYgYWdhaW4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBzbmVha3kga2VybmVsIHNvdXJjZSBmaWxlLiBOb3BlLiBTYW1lIGZpbGVzIGFzIGJlZm9yZSwgYWxsIHdpdGhpbiB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnkuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLgoKT2theSwgbGV0JiMzOTtzIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gVGhlIHJ1bGUgaXMgcHJldHR5IGNsZWFyOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cywmIzM0OyBhbmQgdGhpbmdzIHRoYXQgYXJlIGJhc2ljYWxseSBoYXJtbGVzcy4gSXQgZG9lc24mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3QgJiMzNDtzZWxmdGVzdHMmIzM0OyBidXQgaXQgZ29lcyBvbiB0byBzYXksICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKU2luY2UgdGhpcyAqZG9lc24mIzM5O3QqIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIuIFNlbGZ0ZXN0cyBhcmUgdGhlcmUgdG8gdGVzdCB0aGUga2VybmVsLCBidXQgdGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoZW1zZWx2ZXMuIFRoZXkmIzM5O3JlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgcnVudGltZSBvciBleGVjdXRpb24gcGF0aC4gU28sIHRoaXMgZmFsbHMgdW5kZXIgJiMzNDttb2RpZmljYXRpb25zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7IERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTM6NTguNzY3NDcwMzQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjkxNzk1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjEzOjU4Ljc2NzQ3OTA3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNTY4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTI3ZTIxZTgyMDVhYTcyZGYzNjllODc3NzA0ZjkzNDk5YjAxNjZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzoxMzo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbmluZGV4IDQ1NDkzNThjYzhjMjEuLjVkNGViNDdjYmZlZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5AQCAtMTAxLDYgKzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWRcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHVtZW0tXFx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2VycywgMSk7XFxuIFxcdGlmIChpZm9iai1cXHUwMDNlc2hhcmVkX3VtZW0gXFx1MDAyNlxcdTAwMjYgaWZvYmotXFx1MDAzZXJ4X29uKSB7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcXG4gXFx0XFx0dW1lbS1cXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XFxuQEAgLTE1NCw2ICsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxcbiBcXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zICpyeHI7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR4c2stXFx1MDAzZXVtZW0gPSB1bWVtO1xcbiBcXHRjZmcucnhfc2l6ZSA9IHhzay1cXHUwMDNlcnhxc2l6ZTtcXG5AQCAtMTcwLDcgKzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxcbiBcXG4gXFx0dHhyID0gaWZvYmplY3QtXFx1MDAzZXR4X29uID8gXFx1MDAyNnhzay1cXHUwMDNldHggOiBOVUxMO1xcbiBcXHRyeHIgPSBpZm9iamVjdC1cXHUwMDNlcnhfb24gPyBcXHUwMDI2eHNrLVxcdTAwM2VyeCA6IE5VTEw7XFxuLVxcdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXFx1MDAyNnhzay1cXHUwMDNleHNrLCBpZm9iamVjdC1cXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cXHUwMDNldW1lbSwgcnhyLCB0eHIsIFxcdTAwMjZjZmcpO1xcbitcXHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXFx1MDAyNnhzay1cXHUwMDNleHNrLCBpZm9iamVjdC1cXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cXHUwMDNldW1lbSwgcnhyLCB0eHIsIFxcdTAwMjZjZmcpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvciBzaGFyZWQgc29ja2V0cyByZWZjb3VudF9pbmMgaGFzbid0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3RcXG4rXFx0XFx0ICogYXMgaGF2aW5nIG5vIHJlZmVyZW5jZS4gRm9yIHRoZSBvd25lciAobm9uLXNoYXJlZCkgdGhlIHJlZmVyZW5jZSB3YXMgdGFrZW4gYnlcXG4rXFx0XFx0ICogeHNrX2NvbmZpZ3VyZV91bWVtOyBsZWF2ZSB1bWVtIHNldCBzbyB0aGUgY2FsbGVyJ3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdFxcbitcXHRcXHQgKiB2aWEgdW1lbV9yZWYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2hhcmVkKVxcbitcXHRcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHR4c2stXFx1MDAzZXhzayA9IE5VTEw7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzaGFyZWQpIHtcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2Vycyk7XFxuK1xcdFxcdHhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG5AQCAtMjAzLDYgKzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcXG4rXFx0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxcbitcXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cXHUwMDNlaWZpbmRleDtcXG4gXFx0dTMyIGksIGo7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xcbkBAIC0yMTQsNiArMjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XFxuK1xcdFxcdGlmb2JqLVxcdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRpZiAoaSA9PSAwKSB7XFxuQEAgLTU3MiwyOCArNjAwLDk1IEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbisvKlxcbisgKiBSZWdlbmVyYXRlIGV2ZXJ5IHBlci1zb2NrZXQgc3RyZWFtLCBwdWJsaXNoaW5nIGludG8geHNrX2FycltdXFxuKyAqIG9ubHkgb25jZSBhbGwgYWxsb2NhdGlvbnMgaGF2ZSBzdWNjZWVkZWQuIEBkaW1zIHN1cHBsaWVzIHRoZVxcbisgKiBwZXItc29ja2V0IHBhY2tldCBjb3VudCBhbmQgbGVuZ3RoLCBkZXJpdmVkIGZyb20gdGhlIHN0cmVhbVxcbisgKiBjdXJyZW50bHkgaW5zdGFsbGVkIGluIHRoZSBzbG90LlxcbisgKlxcbisgKiBUaGUgcmVwbGFjZWQgc3RyZWFtcyBhcmUgdGhlIGRlZmF1bHRzIG93bmVkIGJ5IHRlc3Rfc3BlYywgd2hpY2hcXG4rICogZXZlcnkgc2xvdCBhbGlhc2VzLCBzbyB0aGV5IG11c3Qgbm90IGJlIGZyZWVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgcGt0X3N0cmVhbV9kaW1zX2ZuIGRpbXMsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuLVxcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbi1cXHR1MzIgaTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHR1MzIgaSwgbmJfcGt0cywgcGt0X2xlbjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4tXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdGRpbXModGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcXHUwMDI2bmJfcGt0cywgXFx1MDAyNnBrdF9sZW4pO1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0ZGltcyh0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsIFxcdTAwMjZuYl9wa3RzLCBcXHUwMDI2cGt0X2xlbik7XFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbi1cXHRcXHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuLVxcdFxcdGlmICghcGt0X3N0cmVhbSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHRcXHQgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxcbit7XFxuK1xcdCpuYl9wa3RzID0gb3JpZy1cXHUwMDNlbmJfcGt0cyAvIDI7XFxuK1xcdCpwa3RfbGVuID0gb3JpZy1cXHUwMDNlcGt0c1swXS5sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGxlbl9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XFxuK1xcbitcXHQqbmJfcGt0cyA9IG9yaWctXFx1MDAzZW5iX3BrdHMgLyAyO1xcbitcXHQqcGt0X2xlbiA9IHNvY2tfaWQgPyBjZmctXFx1MDAzZWxvbmdfbGVuIDogY2ZnLVxcdTAwM2VzaG9ydF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHVuZXZlbl9kaXN0X2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXFxuK1xcdFxcdFxcdCAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xcbitcXHR1MzIgcGt0c19zb2NrMCA9IGNmZy1cXHUwMDNldG90YWxfcGt0cyAvIDQ7XFxuK1xcbitcXHQqbmJfcGt0cyA9IHNvY2tfaWQgPyBjZmctXFx1MDAzZXRvdGFsX3BrdHMgLSBwa3RzX3NvY2swIDogcGt0c19zb2NrMDtcXG4rXFx0KnBrdF9sZW4gPSBjZmctXFx1MDAzZXBrdF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZylcXG4re1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNjIDIgfHwgY2ZnLVxcdTAwM2V0b3RhbF9wa3RzIFxcdTAwM2MgNClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuQEAgLTE1MDgsOCArMTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY1xcbiBcXHR9XFxuIFxcbiBcXHR1bWVtX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbMF0udW1lbTtcXG4rXFx0LyogTm9uLW93bmluZyB2aWV3IHVzZWQgb25seSBmb3IgVFggYnVmZmVyIGFyaXRobWV0aWM7IHRoZSBzb2NrZXRzIGJlbG93IGJpbmQgdG9cXG4rXFx0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cXG4rXFx0ICovXFxuIFxcdHVtZW1fdHggPSBpZm9iamVjdC1cXHUwMDNleHNrX2FyclswXS51bWVtX3JlYWw7XFxuLVxcdG1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTtcXG4rXFx0dW1lbV90eC1cXHUwMDNlbnVtX2ZyYW1lcyA9IHVtZW1fcngtXFx1MDAzZW51bV9mcmFtZXM7XFxuK1xcdHVtZW1fdHgtXFx1MDAzZWZyYW1lX2hlYWRyb29tID0gdW1lbV9yeC1cXHUwMDNlZnJhbWVfaGVhZHJvb207XFxuK1xcdHVtZW1fdHgtXFx1MDAzZWJ1ZmZlciA9IHVtZW1fcngtXFx1MDAzZWJ1ZmZlcjtcXG4rXFx0dW1lbV90eC1cXHUwMDNlZnJhbWVfc2l6ZSA9IHVtZW1fcngtXFx1MDAzZWZyYW1lX3NpemU7XFxuK1xcdHVtZW1fdHgtXFx1MDAzZXVuYWxpZ25lZF9tb2RlID0gdW1lbV9yeC1cXHUwMDNldW5hbGlnbmVkX21vZGU7XFxuIFxcdHVtZW1fdHgtXFx1MDAzZWJhc2VfYWRkciA9IDA7XFxuIFxcdHVtZW1fdHgtXFx1MDAzZW5leHRfYnVmZmVyID0gMDtcXG4gXFxuQEAgLTE1OTksNiArMTcwMSw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cXG4rXFx0aWZvYmplY3QtXFx1MDAzZXhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbiBcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xNjY5LDEyICsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRlc3QtXFx1MDAzZWZhaWwgPSB0cnVlO1xcbitcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyKVxcbiBcXHRcXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcXHUwMDI2YmFycik7XFxuIFxcbiBcXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gXFx0XFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzAxLDEyICsxODA4LDY1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXFxuIHtcXG4tXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cXHUwMDNleHNrLVxcdTAwM2V1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFxuK1xcdGlmICghdW1lbSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoeHNrLVxcdTAwM2V4c2spXFxuK1xcdFxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuK1xcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4gXFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSk7XFxuK1xcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXFxuK1xcdGlmICgheHNrLVxcdTAwM2V1bWVtX3JlZikge1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpKSB7XFxuK1xcdFxcdGlmICh1bWVtLVxcdTAwM2V1bWVtKSB7XFxuK1xcdFxcdFxcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXFx1MDAzZXVtZW0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwieHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdFxcdFxcdC8qIEtlZXAgb3duZXJzaGlwIGV4cGxpY2l0IHNvIGEgbGF0ZXIgY2xlYW51cCBwYXNzIGNhbiByZXRyeVxcbitcXHRcXHRcXHRcXHQgKiBkZWxldGUuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzLCAxKTtcXG4rXFx0XFx0XFx0XFx0eHNrLVxcdTAwM2V1bWVtX3JlZiA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHhzay1cXHUwMDNldW1lbSA9IHVtZW07XFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVtZW0tXFx1MDAzZWJ1ZmZlciBcXHUwMDI2XFx1MDAyNiB1bWVtLVxcdTAwM2VtbWFwX3NpemUpIHtcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAoIWlmb2JqKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBIFVNRU0gdGhhdCBjb3VsZCBub3QgYmUgZGVsZXRlZCBzdGF5cyBtYXBwZWQgdW50aWwgdGhlIHByb2Nlc3MgZXhpdHMsXFxuK1xcdCAqIHNvIHJlY29yZCBpdCByYXRoZXIgdGhhbiBsZXR0aW5nIHRlYXJkb3duIGRyb3AgdGhlIGVycm9yLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSBcXHUwMDNlIDA7IGktLSlcXG4rXFx0XFx0aWYgKHhza19kZWxldGVfc29ja2V0KFxcdTAwMjZpZm9iai1cXHUwMDNleHNrX2FycltpIC0gMV0pKVxcbitcXHRcXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNzY4LDI3ICsxOTI4LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbi17XFxuLVxcdHUzMiBpO1xcbi1cXG4tXFx0aWYgKCFpZm9iaiB8fCAhdGVzdClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKylcXG4tXFx0XFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVxcdTAwM2V4c2tfYXJyW2ldLnhzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbi17XFxuLVxcdGlmICghaWZvYmoxKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XFxuLVxcdGlmIChpZm9iajIgXFx1MDAyNlxcdTAwMjYgIWlmb2JqMi1cXHUwMDNlc2hhcmVkX3VtZW0pXFxuLVxcdFxcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXFxuIHtcXG5AQCAtMTg0MCwxMyArMTk3OSwxMiBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxcbiBcXHRcXHRpZiAocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koXFx1MDAyNmJhcnIpKSB7XFxuIFxcdFxcdFxcdHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyID0gZmFsc2U7XFxuIFxcdFxcdFxcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XFxuLVxcdFxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4tXFx0XFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpO1xcbitcXHRcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuIFxcdFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGlmb2JqMikge1xcbitcXHRpZiAoaWZvYmoyIFxcdTAwMjZcXHUwMDI2ICF0ZXN0LVxcdTAwM2VmYWlsKSB7XFxuIFxcdFxcdC8qU3Bhd24gVFggdGhyZWFkICovXFxuIFxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVxcdTAwM2VmdW5jX3B0ciwgdGVzdCk7XFxuIFxcdFxcdHB0aHJlYWRfam9pbih0MSwgTlVMTCk7XFxuQEAgLTE4NTUsOSArMTk5Myw4IEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXFxuIFxcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XFxuIFxcbiBcXHRpZiAodGVzdC1cXHUwMDNldG90YWxfc3RlcHMgPT0gdGVzdC1cXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXFx1MDAzZWZhaWwpIHtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZWZhaWwpXFxuQEAgLTE5NjYsOSArMjEwMyw4IEBAIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFxuIFxcdGlmIChzd2FwX3hza19yZXNvdXJjZXModGVzdCkpIHtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFx0fVxcbiBcXG5AQCAtMjIyNiw2ICsyMzYyLDEwMSBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY3R4KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxcbitcXHRcXHRcXHRcXHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChuYl9zb2NrZXRzIFxcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxcXG5cXFwiLCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7XFxuK1xcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcdH1cXG4rXFxuK1xcdHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcXG4rXFx0dGVzdC1cXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xcbitcXG4rXFx0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuK1xcbitcXHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0ge1xcbitcXHRcXHQuc2hvcnRfbGVuID0gTUlOX1BLVF9TSVpFLFxcbitcXHRcXHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3J4LVxcdTAwM2VtYXBzLnhzaywgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2bGVuX2N0eCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0ge1xcbitcXHRcXHQudG90YWxfcGt0cyA9IERFRkFVTFRfUEtUX0NOVCAqIDQsXFxuK1xcdFxcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcXG4rfVxcbitcXG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbiBcXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXNoYXJlZF91bWVtO1xcbkBAIC0yNTA2LDkgKzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uOTRjNzc1NzRmNGE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3hkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbkBAIC03Niw5ICs3NywxMyBAQCBlbnVtIHRlc3RfbW9kZSB7XFxuIFxcbiBzdHJ1Y3QgaWZvYmplY3Q7XFxuIHN0cnVjdCB0ZXN0X3NwZWM7XFxuK3N0cnVjdCBwa3Rfc3RyZWFtO1xcbiB0eXBlZGVmIGludCAoKnZhbGlkYXRpb25fZnVuY190KShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKTtcXG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XFxuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcXG4rdHlwZWRlZiB2b2lkICgqcGt0X3N0cmVhbV9kaW1zX2ZuKShzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pO1xcbiBcXG4gc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xcbkBAIC05Myw2ICs5OCw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xcbiBcXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcXG4gXFx0dTggc3JjX21hY1tFVEhfQUxFTl07XFxuIFxcdGJvb2wgY2hlY2tfY29uc3VtZXI7XFxuK1xcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xcbiB9O1xcbiBcXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG5AQCAtMTA0LDYgKzExMCw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHtcXG4gXFx0c3RydWN0IHhza191bWVtICp1bWVtO1xcbiBcXHR1NjQgbmV4dF9idWZmZXI7XFxuIFxcdHU2NCBtbWFwX3NpemU7XFxuK1xcdHJlZmNvdW50X3QgdXNlcnM7XFxuIFxcdHUzMiBudW1fZnJhbWVzO1xcbiBcXHR1MzIgZnJhbWVfaGVhZHJvb207XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG5AQCAtMTU5LDcgKzE2Niw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcXG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XFxuLVxcbitpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG4gXFxuIHN0cnVjdCBwa3Qge1xcbiBcXHRpbnQgb2Zmc2V0O1xcbkBAIC0xNzksNiArMTg2LDE2IEBAIHN0cnVjdCBwa3Rfc3RyZWFtIHtcXG4gXFx0Ym9vbCB2ZXJiYXRpbTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IHtcXG4rXFx0dTMyIHNob3J0X2xlbjtcXG4rXFx0dTMyIGxvbmdfbGVuO1xcbit9O1xcbitcXG4rc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB7XFxuK1xcdHUzMiB0b3RhbF9wa3RzO1xcbitcXHR1MzIgcGt0X2xlbjtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxcbiB7XFxuIFxcdHJldHVybiBvcHRpb25zIFxcdTAwMjYgWERQX1BLVF9DT05URDtcXG5AQCAtMjY4LDYgKzI4NSwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gXFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZyk7XFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XFxuQEAgLTI5MSw2ICszMTIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0X3NwZWMgdGVzdHNbXSA9IHtcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9QUk9HX0NMRUFOVVBcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9EUk9QX0hBTEZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfZHJvcH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfU0hBUkVEX1VNRU1cXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW19LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fNF9TT0NLRVRTXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX0xFTkdUSF9CQVNFRFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9VTkVWRU5fRElTVFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0fSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX1VOQUxJR05FRFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfTUVUQURBVEFfQ09QWVxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSxcXG4gXFx0ey5uYW1lID0gXFxcIkFMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX2FsaWduZWRfaW52X2Rlc2NfbWJ9LFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG5AQCAtMTAsNyArMTAsNyBAQFxcbiBcXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbi1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTtcXG4gXFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XFxuIFxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XFxuIH0geHNrIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFxcXCJ4ZHBcXFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ4c2ssIGlkeCwgWERQX0RST1ApO1xcbiB9XFxuIFxcbitTRUMoXFxcInhkcFxcXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpeGRwLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0X191MzIgcGt0X2xlbiA9IGRhdGFfZW5kIC0gZGF0YTtcXG4rXFxuK1xcdC8qIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aC4gKi9cXG4rXFx0aWYgKHBrdF9sZW4gXFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxcbitcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcC5mcmFnc1xcXCIpIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4ge1xcbiBcXHRfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbkBAIC0zLDcgKzMsOCBAQFxcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXFxuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cXG4gXFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcXG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcXG4gI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cXG4gXFxuIHN0cnVjdCB4ZHBfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuaW5kZXggN2RhZDg1NTZhNzIyZS4uNWQ4YTI5ZTcyMjRlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbkBAIC0xMTcsMTIgKzExNywxMiBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxcbiBcXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4rc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4ge1xcbiBcXHRzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4gXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xcbi1cXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtID0ge307XFxuIFxcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcXG4gXFx0dm9pZCAqYnVmcztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTMxLDMyICsxMzEsMjYgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcXG4gXFxuLVxcdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XFxuLVxcdGlmICghdW1lbSkge1xcbi1cXHRcXHRtdW5tYXAoYnVmcywgdW1lbV9zeik7XFxuLVxcdFxcdGV4aXRfd2l0aF9lcnJvcihFTk9NRU0pO1xcbi1cXHR9XFxuLVxcdHVtZW0tXFx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xcbi1cXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xcbitcXHR1bWVtLm1tYXBfc2l6ZSA9IHVtZW1fc3o7XFxuK1xcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XFxuIFxcbi1cXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcXG4tXFx0aWYgKCF4c2spXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuLVxcdGlmb2JqZWN0LVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuLVxcdHhzay1cXHUwMDNlcnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xcbi1cXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XFxuK1xcdHhzay51bWVtX3JlZiA9IHRydWU7XFxuK1xcbitcXHRpZm9iai1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuK1xcdGlmb2JqLVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuK1xcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFxcdTAwMjZ4c2ssIFxcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0emNfYXZhaWwgPSB0cnVlO1xcbiBcXG4tXFx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cXHUwMDNleHNrKTtcXG4tXFx0ZnJlZSh4c2spO1xcbi1vdXQ6XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW1fc3opO1xcbi1cXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXFx1MDAzZXVtZW0pO1xcbi1cXHRmcmVlKHVtZW0pO1xcbitcXHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xcbitcXHRyZXQgPSB4c2tfZGVsZXRlX3NvY2tldChcXHUwMDI2eHNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbitcXG4gXFx0cmV0dXJuIHpjX2F2YWlsO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzoxMzo1OS4yMzA4MzM3MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTk2NTgwNDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2VyLXNwYWNlIHRlc3QgY29kZSkgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMjdlMjFlODIwNWFhNzJkZjM2OWU4Nzc3MDRmOTM0OTliMDE2NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6MTM6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDU0OTM1OGNjOGMyMS4uNWQ0ZWI0N2NiZmVlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC0xMDEsNiArMTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2dW1lbS1cdTAwM2V1c2VycywgMSk7XG4gXHRpZiAoaWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gXHUwMDI2XHUwMDI2IGlmb2JqLVx1MDAzZXJ4X29uKSB7XG4gXHRcdHVtZW0tXHUwMDNlYmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pO1xuIFx0XHR1bWVtLVx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xuQEAgLTE1NCw2ICsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjtcbiBcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyArMTcyLDI2IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXG4gXHR0eHIgPSBpZm9iamVjdC1cdTAwM2V0eF9vbiA/IFx1MDAyNnhzay1cdTAwM2V0eCA6IE5VTEw7XG4gXHRyeHIgPSBpZm9iamVjdC1cdTAwM2VyeF9vbiA/IFx1MDAyNnhzay1cdTAwM2VyeCA6IE5VTEw7XG4tXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFx1MDAyNnhzay1cdTAwM2V4c2ssIGlmb2JqZWN0LVx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXHUwMDNldW1lbSwgcnhyLCB0eHIsIFx1MDAyNmNmZyk7XG4rXHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdGlmIChyZXQpIHtcbitcdFx0LypcbitcdFx0ICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJ3QgcnVuIHlldCwgc28gY2xlYXIgdW1lbSB0byBtYXJrIHRoaXMgc2xvdFxuK1x0XHQgKiBhcyBoYXZpbmcgbm8gcmVmZXJlbmNlLiBGb3IgdGhlIG93bmVyIChub24tc2hhcmVkKSB0aGUgcmVmZXJlbmNlIHdhcyB0YWtlbiBieVxuK1x0XHQgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXIncyByb2xsYmFjayBwYXRoIGNhbiByZWxlYXNlIGl0XG4rXHRcdCAqIHZpYSB1bWVtX3JlZi5cbitcdFx0ICovXG4rXHRcdGlmIChzaGFyZWQpXG4rXHRcdFx0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0XHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmIChzaGFyZWQpIHtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNnVtZW0tXHUwMDNldXNlcnMpO1xuK1x0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG5AQCAtMjAzLDYgKzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4gc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcbiB7XG4rXHQvKlxuK1x0ICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LFxuK1x0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxuK1x0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXG4rXHQgKi9cbitcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cdTAwM2VpZmluZGV4ID09IGlmb2JqX3J4LVx1MDAzZWlmaW5kZXg7XG4gXHR1MzIgaSwgajtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpKyspIHtcbkBAIC0yMTQsNiArMjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRpZm9iai1cdTAwM2V1c2VfZmlsbF9yaW5nID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XG4rXHRcdGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7XG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoaSA9PSAwKSB7XG5AQCAtNTcyLDI4ICs2MDAsOTUgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuKy8qXG4rICogUmVnZW5lcmF0ZSBldmVyeSBwZXItc29ja2V0IHN0cmVhbSwgcHVibGlzaGluZyBpbnRvIHhza19hcnJbXVxuKyAqIG9ubHkgb25jZSBhbGwgYWxsb2NhdGlvbnMgaGF2ZSBzdWNjZWVkZWQuIEBkaW1zIHN1cHBsaWVzIHRoZVxuKyAqIHBlci1zb2NrZXQgcGFja2V0IGNvdW50IGFuZCBsZW5ndGgsIGRlcml2ZWQgZnJvbSB0aGUgc3RyZWFtXG4rICogY3VycmVudGx5IGluc3RhbGxlZCBpbiB0aGUgc2xvdC5cbisgKlxuKyAqIFRoZSByZXBsYWNlZCBzdHJlYW1zIGFyZSB0aGUgZGVmYXVsdHMgb3duZWQgYnkgdGVzdF9zcGVjLCB3aGljaFxuKyAqIGV2ZXJ5IHNsb3QgYWxpYXNlcywgc28gdGhleSBtdXN0IG5vdCBiZSBmcmVlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZXBsYWNlX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBwa3Rfc3RyZWFtX2RpbXNfZm4gZGltcyxcbitcdFx0XHRcdCAgY29uc3Qgdm9pZCAqY3R4KVxuIHtcbi1cdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xuLVx0dTMyIGk7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0dTMyIGksIG5iX3BrdHMsIHBrdF9sZW47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRcdGRpbXModGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0sIGksIGN0eCwgXHUwMDI2bmJfcGt0cywgXHUwMDI2cGt0X2xlbik7XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0ZGltcyh0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcdTAwMjZuYl9wa3RzLCBcdTAwMjZwa3RfbGVuKTtcbitcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbitcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuIFxuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuK1x0XHRcdCAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXG4re1xuK1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuK1x0KnBrdF9sZW4gPSBvcmlnLVx1MDAzZXBrdHNbMF0ubGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBsZW5fZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0ICAgICB1MzIgKm5iX3BrdHMsIHUzMiAqcGt0X2xlbilcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnID0gY3R4O1xuK1xuK1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuK1x0KnBrdF9sZW4gPSBzb2NrX2lkID8gY2ZnLVx1MDAzZWxvbmdfbGVuIDogY2ZnLVx1MDAzZXNob3J0X2xlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdW5ldmVuX2Rpc3RfZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcbitcdHUzMiBwa3RzX3NvY2swID0gY2ZnLVx1MDAzZXRvdGFsX3BrdHMgLyA0O1xuK1xuK1x0Km5iX3BrdHMgPSBzb2NrX2lkID8gY2ZnLVx1MDAzZXRvdGFsX3BrdHMgLSBwa3RzX3NvY2swIDogcGt0c19zb2NrMDtcbitcdCpwa3RfbGVuID0gY2ZnLVx1MDAzZXBrdF9sZW47XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKVxuK3tcbitcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcpXG4re1xuK1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2MgMiB8fCBjZmctXHUwMDNldG90YWxfcGt0cyBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTUwOCw4ICsxNjAzLDE1IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHNfdHgoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjXG4gXHR9XG4gXG4gXHR1bWVtX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzBdLnVtZW07XG4rXHQvKiBOb24tb3duaW5nIHZpZXcgdXNlZCBvbmx5IGZvciBUWCBidWZmZXIgYXJpdGhtZXRpYzsgdGhlIHNvY2tldHMgYmVsb3cgYmluZCB0b1xuK1x0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cbitcdCAqL1xuIFx0dW1lbV90eCA9IGlmb2JqZWN0LVx1MDAzZXhza19hcnJbMF0udW1lbV9yZWFsO1xuLVx0bWVtY3B5KHVtZW1fdHgsIHVtZW1fcngsIHNpemVvZigqdW1lbV90eCkpO1xuK1x0dW1lbV90eC1cdTAwM2VudW1fZnJhbWVzID0gdW1lbV9yeC1cdTAwM2VudW1fZnJhbWVzO1xuK1x0dW1lbV90eC1cdTAwM2VmcmFtZV9oZWFkcm9vbSA9IHVtZW1fcngtXHUwMDNlZnJhbWVfaGVhZHJvb207XG4rXHR1bWVtX3R4LVx1MDAzZWJ1ZmZlciA9IHVtZW1fcngtXHUwMDNlYnVmZmVyO1xuK1x0dW1lbV90eC1cdTAwM2VmcmFtZV9zaXplID0gdW1lbV9yeC1cdTAwM2VmcmFtZV9zaXplO1xuK1x0dW1lbV90eC1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHVtZW1fcngtXHUwMDNldW5hbGlnbmVkX21vZGU7XG4gXHR1bWVtX3R4LVx1MDAzZWJhc2VfYWRkciA9IDA7XG4gXHR1bWVtX3R4LVx1MDAzZW5leHRfYnVmZmVyID0gMDtcbiBcbkBAIC0xNTk5LDYgKzE3MDEsOCBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdC8qIE1hcmsgYmVmb3JlIHhza19jb25maWd1cmUgc28gcm9sbGJhY2sgY2FuIHJlbGVhc2UgdGhlIFVNRU0gaWYgaXQgZmFpbHMuICovXG4rXHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcbiBcdFx0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSk7XG4gXHR9XG4gXG4rXHQvKiBQdWJsaXNoIHNldHVwIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFpbiB0aHJlYWQgZnJvbSB0aGUgYmFycmllci4gKi9cbitcdGlmIChlcnIpXG4rXHRcdHRlc3QtXHUwMDNlZmFpbCA9IHRydWU7XG4rXG4gXHRpZiAodGVzdC1cdTAwM2V1c2VfYmFycmllcilcbiBcdFx0cHRocmVhZF9iYXJyaWVyX3dhaXQoXHUwMDI2YmFycik7XG4gXG4gXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cbiBcdGlmIChlcnIpIHtcbi1cdFx0dGVzdC1cdTAwM2VmYWlsID0gdHJ1ZTtcbiBcdFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIFx0fVxuIFxuQEAgLTE3MDEsMTIgKzE4MDgsNjUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4raW50IHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaylcbiB7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLVx1MDAzZXhzay1cdTAwM2V1bWVtO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSB4c2stXHUwMDNldW1lbTtcbitcbitcdGlmICghdW1lbSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoeHNrLVx1MDAzZXhzaylcbitcdFx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuK1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbitcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4rXHRpZiAoIXhzay1cdTAwM2V1bWVtX3JlZikge1xuK1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKSkge1xuK1x0XHRpZiAodW1lbS1cdTAwM2V1bWVtKSB7XG4rXHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbitcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcInhza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXG5cIixcbitcdFx0XHRcdFx0ICAgICAgIGVycik7XG4rXHRcdFx0XHQvKiBLZWVwIG93bmVyc2hpcCBleHBsaWNpdCBzbyBhIGxhdGVyIGNsZWFudXAgcGFzcyBjYW4gcmV0cnlcbitcdFx0XHRcdCAqIGRlbGV0ZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuK1x0XHRcdFx0eHNrLVx1MDAzZXVtZW1fcmVmID0gdHJ1ZTtcbitcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0fVxuK1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0aWYgKHVtZW0tXHUwMDNlYnVmZmVyIFx1MDAyNlx1MDAyNiB1bWVtLVx1MDAzZW1tYXBfc2l6ZSkge1xuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbitcdFx0XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG4rXHRcdH1cbitcdH1cbitcbitcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuK1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbit7XG4rXHR1MzIgaTtcbitcbitcdGlmICghaWZvYmopXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEEgVU1FTSB0aGF0IGNvdWxkIG5vdCBiZSBkZWxldGVkIHN0YXlzIG1hcHBlZCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0cyxcbitcdCAqIHNvIHJlY29yZCBpdCByYXRoZXIgdGhhbiBsZXR0aW5nIHRlYXJkb3duIGRyb3AgdGhlIGVycm9yLlxuK1x0ICovXG4rXHRmb3IgKGkgPSB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkgXHUwMDNlIDA7IGktLSlcbitcdFx0aWYgKHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqLVx1MDAzZXhza19hcnJbaSAtIDFdKSlcbitcdFx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OCwyNyArMTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQwLDEzICsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXG4gXHRcdGlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveShcdTAwMjZiYXJyKSkge1xuIFx0XHRcdHRlc3QtXHUwMDNldXNlX2JhcnJpZXIgPSBmYWxzZTtcbiBcdFx0XHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xuLVx0XHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbi1cdFx0XHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgTlVMTCk7XG4rXHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpZm9iajIpIHtcbitcdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICF0ZXN0LVx1MDAzZWZhaWwpIHtcbiBcdFx0LypTcGF3biBUWCB0aHJlYWQgKi9cbiBcdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dDEsIE5VTEwsIGlmb2JqMi1cdTAwM2VmdW5jX3B0ciwgdGVzdCk7XG4gXHRcdHB0aHJlYWRfam9pbih0MSwgTlVMTCk7XG5AQCAtMTg1NSw5ICsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdH1cbiBcbiBcdGlmICh0ZXN0LVx1MDAzZWZhaWwpXG5AQCAtMTk2Niw5ICsyMTAzLDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuQEAgLTIyMjYsNiArMjM2MiwxMDEgQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbitcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG5iX3NvY2tldHMgXHUwMDNlIE1BWF9TT0NLRVRTKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXG5cIiwgX19mdW5jX18sIG5iX3NvY2tldHMpO1xuK1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4rXHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuK1xuK1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbitcbitcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbitcbitcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbitcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuK1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4rXHRcdFx0XHQgICAgXHUwMDI2bGVuX2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbitcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuK1x0XHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4rXHRcdFx0XHQgICAgXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXG4rXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XG4rfVxuK1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjUwNiw5ICsyNzM3LDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjk0Yzc3NTc0ZjRhOGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL2tzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbkBAIC03Niw5ICs3NywxMyBAQCBlbnVtIHRlc3RfbW9kZSB7XG4gXG4gc3RydWN0IGlmb2JqZWN0O1xuIHN0cnVjdCB0ZXN0X3NwZWM7XG4rc3RydWN0IHBrdF9zdHJlYW07XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9zZXFfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCk7XG4rdHlwZWRlZiB2b2lkICgqcGt0X3N0cmVhbV9kaW1zX2ZuKShzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHRcdCAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTkzLDYgKzk4LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XG4gXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcbiBcdHU4IHNyY19tYWNbRVRIX0FMRU5dO1xuIFx0Ym9vbCBjaGVja19jb25zdW1lcjtcbitcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xuIH07XG4gXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbkBAIC0xMDQsNiArMTEwLDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbitcdHJlZmNvdW50X3QgdXNlcnM7XG4gXHR1MzIgbnVtX2ZyYW1lcztcbiBcdHUzMiBmcmFtZV9oZWFkcm9vbTtcbiBcdHZvaWQgKmJ1ZmZlcjtcbkBAIC0xNTksNyArMTY2LDcgQEAgaW50IGluaXRfaWZhY2Uoc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgdGhyZWFkX2Z1bmNfdCBmdW5jX3B0cik7XG4gaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7XG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXG4gXHRcdFx0IHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIGJvb2wgc2hhcmVkKTtcbi1cbitpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgKzE4NiwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XG4gXHRib29sIHZlcmJhdGltO1xuIH07XG4gXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xuK1x0dTMyIHNob3J0X2xlbjtcbitcdHUzMiBsb25nX2xlbjtcbit9O1xuK1xuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xuK1x0dTMyIHRvdGFsX3BrdHM7XG4rXHR1MzIgcGt0X2xlbjtcbit9O1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxuIHtcbiBcdHJldHVybiBvcHRpb25zIFx1MDAyNiBYRFBfUEtUX0NPTlREO1xuQEAgLTI2OCw2ICsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XG5AQCAtMjkxLDYgKzMxMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xuIFx0ey5uYW1lID0gXCJYRFBfUFJPR19DTEVBTlVQXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxuIFx0ey5uYW1lID0gXCJYRFBfRFJPUF9IQUxGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwiWERQX1NIQVJFRF9VTUVNXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1wiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkFMSUdORURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG5AQCAtMTAsNyArMTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcbiBcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XG4gfSB4c2sgU0VDKFwiLm1hcHNcIik7XG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuK1NFQyhcInhkcFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbitcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XG4rXG4rXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4rXHRpZiAocGt0X2xlbiBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xuK31cbitcbiBTRUMoXCJ4ZHAuZnJhZ3NcIikgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgKzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLjVkOGEyOWU3MjI0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcbiBcbiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbitzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzEsMjYgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4tXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbitcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4rXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4rXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuK1xuK1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4rXHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4rXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xuK1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCBcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbitcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4rXHRyZXQgPSB4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZ4c2spO1xuK1x0aWYgKHJldClcbitcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuK1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjEzOjU5LjIzMDgzNjE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY1Nzc3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIGFsbCBjb25maW5lZCB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMgZGlyZWN0b3J5LlwiIEl0J3MgdG91Y2hpbmcgYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gQWxsIGNvbnRhaW5lZCBuZWF0bHkgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIHN1Z2dlc3RzIGl0J3MgKmp1c3QqIGFkZGluZyBuZXcgdGVzdHMsIHNwZWNpZmljYWxseSBhcm91bmQgc2hhcmVkIFVNRU0gZm9yIEFGX1hEUC4gR3JlYXQsIG1vcmUgdGVzdHMgYXJlIGFsd2F5cyBnb29kLCBidXQgdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz9cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgbm8uIEl0J3MgdXNlci1zcGFjZSB0ZXN0aW5nIGNvZGUuIEl0J3Mgbm90IG1vZGlmeWluZyBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEl0J3Mgbm90IGluIGBuZXQveGRwL2AsIGBuZXQvY29yZS9gLCBvciBga2VybmVsL2JwZi9gLCB3aGljaCB3b3VsZCBiZSB0aGUgcmVkIGZsYWdzIEknbSBsb29raW5nIGZvci4gU28sIGltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkJ1dCwgYXMgYWx3YXlzLCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIExldCdzIGRvdWJsZS1jaGVjay4gSSdsbCBzY2FuIHRoZSBkaWZmIGFnYWluIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBzbmVha3kga2VybmVsIHNvdXJjZSBmaWxlLiBOb3BlLiBTYW1lIGZpbGVzIGFzIGJlZm9yZSwgYWxsIHdpdGhpbiB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnkuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIGd1aWRlbGluZXMuIFRoZSBydWxlIGlzIHByZXR0eSBjbGVhcjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMsXCIgYW5kIHRoaW5ncyB0aGF0IGFyZSBiYXNpY2FsbHkgaGFybWxlc3MuIEl0IGRvZXNuJ3QgKmV4cGxpY2l0bHkqIGxpc3QgXCJzZWxmdGVzdHNcIiBidXQgaXQgZ29lcyBvbiB0byBzYXksIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TaW5jZSB0aGlzICpkb2Vzbid0KiB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgaXQncyBwcmV0dHkgY2xlYXIuIFNlbGZ0ZXN0cyBhcmUgdGhlcmUgdG8gdGVzdCB0aGUga2VybmVsLCBidXQgdGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoZW1zZWx2ZXMuIFRoZXkncmUgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBydW50aW1lIG9yIGV4ZWN1dGlvbiBwYXRoLiBTbywgdGhpcyBmYWxscyB1bmRlciBcIm1vZGlmaWNhdGlvbnMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuXG5cblNvLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIHdpbGwgYmU6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiIERvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTQwLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTQ6MTEuMTk2NjE2NzIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTQ6MTEuMTk2NjQwMTMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowklftd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 02:56:05 +0000 UTC FinishedAt: 2026-08-19 03:14:12 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2VyLXNwYWNlIHRlc3QgY29kZSkgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTI3ZTIxZTgyMDVhYTcyZGYzNjllODc3NzA0ZjkzNDk5YjAxNjZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjEzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NTQ5MzU4Y2M4YzIxLi41ZDRlYjQ3Y2JmZWU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuIFx0aWYgKGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtIFx1MDAyNlx1MDAyNiBpZm9iai1cdTAwM2VyeF9vbikge1xuIFx0XHR1bWVtLVx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcbiBcdFx0dW1lbS1cdTAwM2VuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyAmIzQzOzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFxuIFx0dHhyID0gaWZvYmplY3QtXHUwMDNldHhfb24gPyBcdTAwMjZ4c2stXHUwMDNldHggOiBOVUxMO1xuIFx0cnhyID0gaWZvYmplY3QtXHUwMDNlcnhfb24gPyBcdTAwMjZ4c2stXHUwMDNlcnggOiBOVUxMO1xuLVx0cmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGb3Igc2hhcmVkIHNvY2tldHMgcmVmY291bnRfaW5jIGhhc24mIzM5O3QgcnVuIHlldCwgc28gY2xlYXIgdW1lbSB0byBtYXJrIHRoaXMgc2xvdFxuJiM0MztcdFx0ICogYXMgaGF2aW5nIG5vIHJlZmVyZW5jZS4gRm9yIHRoZSBvd25lciAobm9uLXNoYXJlZCkgdGhlIHJlZmVyZW5jZSB3YXMgdGFrZW4gYnlcbiYjNDM7XHRcdCAqIHhza19jb25maWd1cmVfdW1lbTsgbGVhdmUgdW1lbSBzZXQgc28gdGhlIGNhbGxlciYjMzk7cyByb2xsYmFjayBwYXRoIGNhbiByZWxlYXNlIGl0XG4mIzQzO1x0XHQgKiB2aWEgdW1lbV9yZWYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQpIHtcbiYjNDM7XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKTtcbiYjNDM7XHRcdHhzay1cdTAwM2V1bWVtX3JlZiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiAmIzQzOzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4gc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcbiB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4mIzQzO1x0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxuJiM0MztcdCAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cdTAwM2VpZmluZGV4ID09IGlmb2JqX3J4LVx1MDAzZWlmaW5kZXg7XG4gXHR1MzIgaSwgajtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykge1xuQEAgLTIxNCw2ICYjNDM7MjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRpZm9iai1cdTAwM2V1c2VfZmlsbF9yaW5nID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XG4mIzQzO1x0XHRpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xuIFx0XHRpZm9iai1cdTAwM2V1c2VfbWV0YWRhdGEgPSBmYWxzZTtcbiBcbiBcdFx0aWYgKGkgPT0gMCkge1xuQEAgLTU3MiwyOCAmIzQzOzYwMCw5NSBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzOy8qXG4mIzQzOyAqIFJlZ2VuZXJhdGUgZXZlcnkgcGVyLXNvY2tldCBzdHJlYW0sIHB1Ymxpc2hpbmcgaW50byB4c2tfYXJyW11cbiYjNDM7ICogb25seSBvbmNlIGFsbCBhbGxvY2F0aW9ucyBoYXZlIHN1Y2NlZWRlZC4gQGRpbXMgc3VwcGxpZXMgdGhlXG4mIzQzOyAqIHBlci1zb2NrZXQgcGFja2V0IGNvdW50IGFuZCBsZW5ndGgsIGRlcml2ZWQgZnJvbSB0aGUgc3RyZWFtXG4mIzQzOyAqIGN1cnJlbnRseSBpbnN0YWxsZWQgaW4gdGhlIHNsb3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXBsYWNlZCBzdHJlYW1zIGFyZSB0aGUgZGVmYXVsdHMgb3duZWQgYnkgdGVzdF9zcGVjLCB3aGljaFxuJiM0MzsgKiBldmVyeSBzbG90IGFsaWFzZXMsIHNvIHRoZXkgbXVzdCBub3QgYmUgZnJlZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZXBsYWNlX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBwa3Rfc3RyZWFtX2RpbXNfZm4gZGltcyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmN0eClcbiB7XG4tXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbi1cdHUzMiBpO1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHUzMiBpLCBuYl9wa3RzLCBwa3RfbGVuO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4mIzQzO1x0XHRkaW1zKHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsIFx1MDAyNm5iX3BrdHMsIFx1MDAyNnBrdF9sZW4pO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZGltcyh0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcdTAwMjZuYl9wa3RzLCBcdTAwMjZwa3RfbGVuKTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiBcbi1cdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHQgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuJiM0MztcdCpwa3RfbGVuID0gb3JpZy1cdTAwM2Vwa3RzWzBdLmxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVuX2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDtcbiYjNDM7XG4mIzQzO1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuJiM0MztcdCpwa3RfbGVuID0gc29ja19pZCA/IGNmZy1cdTAwM2Vsb25nX2xlbiA6IGNmZy1cdTAwM2VzaG9ydF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHVuZXZlbl9kaXN0X2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXG4mIzQzO1x0XHRcdCAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1x0dTMyIHBrdHNfc29jazAgPSBjZmctXHUwMDNldG90YWxfcGt0cyAvIDQ7XG4mIzQzO1xuJiM0MztcdCpuYl9wa3RzID0gc29ja19pZCA/IGNmZy1cdTAwM2V0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCA6IHBrdHNfc29jazA7XG4mIzQzO1x0KnBrdF9sZW4gPSBjZmctXHUwMDNlcGt0X2xlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCBldmVuX29kZF9kaW1zLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX2xlbl9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2MgMiB8fCBjZmctXHUwMDNldG90YWxfcGt0cyBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTUwOCw4ICYjNDM7MTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY1xuIFx0fVxuIFxuIFx0dW1lbV9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FyclswXS51bWVtO1xuJiM0MztcdC8qIE5vbi1vd25pbmcgdmlldyB1c2VkIG9ubHkgZm9yIFRYIGJ1ZmZlciBhcml0aG1ldGljOyB0aGUgc29ja2V0cyBiZWxvdyBiaW5kIHRvXG4mIzQzO1x0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cbiYjNDM7XHQgKi9cbiBcdHVtZW1fdHggPSBpZm9iamVjdC1cdTAwM2V4c2tfYXJyWzBdLnVtZW1fcmVhbDtcbi1cdG1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTtcbiYjNDM7XHR1bWVtX3R4LVx1MDAzZW51bV9mcmFtZXMgPSB1bWVtX3J4LVx1MDAzZW51bV9mcmFtZXM7XG4mIzQzO1x0dW1lbV90eC1cdTAwM2VmcmFtZV9oZWFkcm9vbSA9IHVtZW1fcngtXHUwMDNlZnJhbWVfaGVhZHJvb207XG4mIzQzO1x0dW1lbV90eC1cdTAwM2VidWZmZXIgPSB1bWVtX3J4LVx1MDAzZWJ1ZmZlcjtcbiYjNDM7XHR1bWVtX3R4LVx1MDAzZWZyYW1lX3NpemUgPSB1bWVtX3J4LVx1MDAzZWZyYW1lX3NpemU7XG4mIzQzO1x0dW1lbV90eC1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHVtZW1fcngtXHUwMDNldW5hbGlnbmVkX21vZGU7XG4gXHR1bWVtX3R4LVx1MDAzZWJhc2VfYWRkciA9IDA7XG4gXHR1bWVtX3R4LVx1MDAzZW5leHRfYnVmZmVyID0gMDtcbiBcbkBAIC0xNTk5LDYgJiM0MzsxNzAxLDggQEAgc3RhdGljIGludCB0aHJlYWRfY29tbW9uX29wcyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cbiYjNDM7XHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICYjNDM7MTc3MywxNSBAQCB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpXG4gXHRcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVycikpO1xuIFx0fVxuIFxuJiM0MztcdC8qIFB1Ymxpc2ggc2V0dXAgZmFpbHVyZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYWluIHRocmVhZCBmcm9tIHRoZSBiYXJyaWVyLiAqL1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuJiM0MztcbiBcdGlmICh0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyKVxuIFx0XHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZiYXJyKTtcbiBcbiBcdC8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqL1xuIFx0aWYgKGVycikge1xuLVx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIFx0XHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4gXHR9XG4gXG5AQCAtMTcwMSwxMiAmIzQzOzE4MDgsNjUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXG4ge1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cdTAwM2V4c2stXHUwMDNldW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoIXVtZW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbiYjNDM7XHQvKiBTa2lwIHNsb3RzIHRoYXQgbmV2ZXIgYWNxdWlyZWQgYSBVTUVNIHJlZmVyZW5jZSAocHJlLWluaXRpYWxpemVkIGJ1dCB1bmNvbmZpZ3VyZWQpLiAqL1xuJiM0MztcdGlmICgheHNrLVx1MDAzZXVtZW1fcmVmKSB7XG4mIzQzO1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZXVtZW0pIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdFx0LyogS2VlcCBvd25lcnNoaXAgZXhwbGljaXQgc28gYSBsYXRlciBjbGVhbnVwIHBhc3MgY2FuIHJldHJ5XG4mIzQzO1x0XHRcdFx0ICogZGVsZXRlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiYjNDM7XHRcdFx0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW1lbS1cdTAwM2VidWZmZXIgXHUwMDI2XHUwMDI2IHVtZW0tXHUwMDNlbW1hcF9zaXplKSB7XG4mIzQzO1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuJiM0MztcdFx0XHR1bWVtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4mIzQzO1x0XHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuJiM0MztcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmopXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgVU1FTSB0aGF0IGNvdWxkIG5vdCBiZSBkZWxldGVkIHN0YXlzIG1hcHBlZCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0cyxcbiYjNDM7XHQgKiBzbyByZWNvcmQgaXQgcmF0aGVyIHRoYW4gbGV0dGluZyB0ZWFyZG93biBkcm9wIHRoZSBlcnJvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkgXHUwMDNlIDA7IGktLSlcbiYjNDM7XHRcdGlmICh4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iai1cdTAwM2V4c2tfYXJyW2kgLSAxXSkpXG4mIzQzO1x0XHRcdHRlc3QtXHUwMDNlZmFpbCA9IHRydWU7XG4gfVxuIFxuIHN0YXRpYyBib29sIHhkcF9wcm9nX2NoYW5nZWRfcngoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbkBAIC0xNzY4LDI3ICYjNDM7MTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KVxuLVx0XHR4c2tfc29ja2V0X19kZWxldGUoaWZvYmotXHUwMDNleHNrX2FycltpXS54c2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBjbGVhbl91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMilcbi17XG4tXHRpZiAoIWlmb2JqMSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajEpO1xuLVx0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIWlmb2JqMi1cdTAwM2VzaGFyZWRfdW1lbSlcbi1cdFx0dGVzdGFwcF9jbGVhbl94c2tfdW1lbShpZm9iajIpO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4ge1xuQEAgLTE4NDAsMTMgJiM0MzsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXG4gXHRcdGlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveShcdTAwMjZiYXJyKSkge1xuIFx0XHRcdHRlc3QtXHUwMDNldXNlX2JhcnJpZXIgPSBmYWxzZTtcbiBcdFx0XHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xuLVx0XHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbi1cdFx0XHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgTlVMTCk7XG4mIzQzO1x0XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaWZvYmoyKSB7XG4mIzQzO1x0aWYgKGlmb2JqMiBcdTAwMjZcdTAwMjYgIXRlc3QtXHUwMDNlZmFpbCkge1xuIFx0XHQvKlNwYXduIFRYIHRocmVhZCAqL1xuIFx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVx1MDAzZWZ1bmNfcHRyLCB0ZXN0KTtcbiBcdFx0cHRocmVhZF9qb2luKHQxLCBOVUxMKTtcbkBAIC0xODU1LDkgJiM0MzsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY2LDkgJiM0MzsyMTAzLDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNiw2ICYjNDM7MjM2MiwxMDEgQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbiYjNDM7XHRcdFx0XHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobmJfc29ja2V0cyBcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0VSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7XG4mIzQzO1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4mIzQzO1x0dGVzdC1cdTAwM2VuYl9zb2NrZXRzID0gbmJfc29ja2V0cztcbiYjNDM7XG4mIzQzO1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbiYjNDM7XHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0XHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZsZW5fY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbiYjNDM7XHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbiYjNDM7XHRcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XG4mIzQzO1x0dGVzdF9zcGVjX3NldF91bmFsaWduZWQodGVzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGVzdGFwcF9wb2xsX3R4cV90bW91dChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbiBcdGJvb2wgc2hhcmVkX3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXNoYXJlZF91bWVtO1xuQEAgLTI1MDYsOSAmIzQzOzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0aWYgKHBrdF9zdHJlYW1fcmVwbGFjZSh0ZXN0LCBtYXhfZGVzY3MsIE1JTl9QS1RfU0laRSkpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4KTtcbi1cdFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3J4LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4mIzQzO1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5pbmRleCAwMzc1M2RkYzVkY2RhLi45NGM3NzU3NGY0YThiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3hkcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9rc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hzay5oXCYjMzQ7XG5AQCAtNzYsOSAmIzQzOzc3LDEzIEBAIGVudW0gdGVzdF9tb2RlIHtcbiBcbiBzdHJ1Y3QgaWZvYmplY3Q7XG4gc3RydWN0IHRlc3Rfc3BlYztcbiYjNDM7c3RydWN0IHBrdF9zdHJlYW07XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuJiM0Mzt0eXBlZGVmIHZvaWQgKCpwa3Rfc3RyZWFtX2RpbXNfZm4pKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTkzLDYgJiM0Mzs5OCw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xuIFx0dTggZHN0X21hY1tFVEhfQUxFTl07XG4gXHR1OCBzcmNfbWFjW0VUSF9BTEVOXTtcbiBcdGJvb2wgY2hlY2tfY29uc3VtZXI7XG4mIzQzO1x0Ym9vbCB1bWVtX3JlZjsgLyogdHJ1ZSBpZiB0aGlzIHNsb3QgaG9sZHMgYSBjb3VudGVkIFVNRU0gcmVmZXJlbmNlICovXG4gfTtcbiBcbiBpbnQga2lja19yeChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spO1xuQEAgLTEwNCw2ICYjNDM7MTEwLDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbiYjNDM7XHRyZWZjb3VudF90IHVzZXJzO1xuIFx0dTMyIG51bV9mcmFtZXM7XG4gXHR1MzIgZnJhbWVfaGVhZHJvb207XG4gXHR2b2lkICpidWZmZXI7XG5AQCAtMTU5LDcgJiM0MzsxNjYsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuLVxuJiM0MztpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgJiM0MzsxODYsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzEyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uOGJhYjJiY2Y1MmFiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4mIzQzO1x0aWYgKHBrdF9sZW4gXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDEsIFhEUF9EUk9QKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4mIzQzOyNkZWZpbmUgTUFYX1NPQ0tFVFMgNFxuJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLjVkOGEyOWU3MjI0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICYjNDM7MTE3LDEyIEBAIHN0YXRpYyB2b2lkIF9fZXhpdF93aXRoX2Vycm9yKGludCBlcnJvciwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuYywgaW50XG4gXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxuIFxuLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4mIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvIHVtZW0gPSB7fTtcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMSwyNiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbi1cdHVtZW0tXHUwMDNlZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuJiM0MztcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbiYjNDM7XHR1bWVtLmZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuJiM0MztcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXHUwMDI2dW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbiYjNDM7XHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZm9iai1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbiYjNDM7XHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4mIzQzO1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldChcdTAwMjZ4c2ssIFx1MDAyNnVtZW0sIGlmb2JqLCBmYWxzZSk7XG4gXHRpZiAoIXJldClcbiBcdFx0emNfYXZhaWwgPSB0cnVlO1xuIFxuLVx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuLVx0ZnJlZSh4c2spO1xuLW91dDpcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRmcmVlKHVtZW0pO1xuJiM0MztcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4mIzQzO1x0cmV0ID0geHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuJiM0MztcbiBcdHJldHVybiB6Y19hdmFpbDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyN2UyMWU4MjA1YWE3MmRmMzY5ZTg3NzcwNGY5MzQ5OWIwMTY2ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzoxMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCmluZGV4IDQ1NDkzNThjYzhjMjEuLjVkNGViNDdjYmZlZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwpAQCAtMTAxLDYgJiM0MzsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkCiAJCXJldHVybiByZXQ7CiAKIAl1bWVtLSZndDtidWZmZXIgPSBidWZmZXI7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3VtZW0tJmd0O3VzZXJzLCAxKTsKIAlpZiAoaWZvYmotJmd0O3NoYXJlZF91bWVtICZhbXA7JmFtcDsgaWZvYmotJmd0O3J4X29uKSB7CiAJCXVtZW0tJmd0O2Jhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTsKIAkJdW1lbS0mZ3Q7bmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7CkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAJc3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9OwogCXN0cnVjdCB4c2tfcmluZ19jb25zICpyeHI7CiAJc3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjsKJiM0MzsJaW50IHJldDsKIAogCXhzay0mZ3Q7dW1lbSA9IHVtZW07CiAJY2ZnLnJ4X3NpemUgPSB4c2stJmd0O3J4cXNpemU7CkBAIC0xNzAsNyAmIzQzOzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbQogCiAJdHhyID0gaWZvYmplY3QtJmd0O3R4X29uID8gJmFtcDt4c2stJmd0O3R4IDogTlVMTDsKIAlyeHIgPSBpZm9iamVjdC0mZ3Q7cnhfb24gPyAmYW1wO3hzay0mZ3Q7cnggOiBOVUxMOwotCXJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoJmFtcDt4c2stJmd0O3hzaywgaWZvYmplY3QtJmd0O2lmaW5kZXgsIDAsIHVtZW0tJmd0O3VtZW0sIHJ4ciwgdHhyLCAmYW1wO2NmZyk7CiYjNDM7CXJldCA9IHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBzaGFyZWQgc29ja2V0cyByZWZjb3VudF9pbmMgaGFzbiYjMzk7dCBydW4geWV0LCBzbyBjbGVhciB1bWVtIHRvIG1hcmsgdGhpcyBzbG90CiYjNDM7CQkgKiBhcyBoYXZpbmcgbm8gcmVmZXJlbmNlLiBGb3IgdGhlIG93bmVyIChub24tc2hhcmVkKSB0aGUgcmVmZXJlbmNlIHdhcyB0YWtlbiBieQomIzQzOwkJICogeHNrX2NvbmZpZ3VyZV91bWVtOyBsZWF2ZSB1bWVtIHNldCBzbyB0aGUgY2FsbGVyJiMzOTtzIHJvbGxiYWNrIHBhdGggY2FuIHJlbGVhc2UgaXQKJiM0MzsJCSAqIHZpYSB1bWVtX3JlZi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNoYXJlZCkKJiM0MzsJCQl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwkJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hhcmVkKSB7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDt1bWVtLSZndDt1c2Vycyk7CiYjNDM7CQl4c2stJmd0O3VtZW1fcmVmID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKQEAgLTIwMyw2ICYjNDM7MjI0LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJCSAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeCkKIHsKJiM0MzsJLyoKJiM0MzsJICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LAomIzQzOwkgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsCiYjNDM7CSAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LSZndDtpZmluZGV4ID09IGlmb2JqX3J4LSZndDtpZmluZGV4OwogCXUzMiBpLCBqOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykgewpAQCAtMjE0LDYgJiM0MzsyNDEsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsCiAJCWlmb2JqLSZndDt1c2VfZmlsbF9yaW5nID0gdHJ1ZTsKIAkJaWZvYmotJmd0O3JlbGVhc2VfcnggPSB0cnVlOwogCQlpZm9iai0mZ3Q7dmFsaWRhdGlvbl9mdW5jID0gTlVMTDsKJiM0MzsJCWlmb2JqLSZndDtzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0OwogCQlpZm9iai0mZ3Q7dXNlX21ldGFkYXRhID0gZmFsc2U7CiAKIAkJaWYgKGkgPT0gMCkgewpAQCAtNTcyLDI4ICYjNDM7NjAwLDk1IEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7LyoKJiM0MzsgKiBSZWdlbmVyYXRlIGV2ZXJ5IHBlci1zb2NrZXQgc3RyZWFtLCBwdWJsaXNoaW5nIGludG8geHNrX2FycltdCiYjNDM7ICogb25seSBvbmNlIGFsbCBhbGxvY2F0aW9ucyBoYXZlIHN1Y2NlZWRlZC4gQGRpbXMgc3VwcGxpZXMgdGhlCiYjNDM7ICogcGVyLXNvY2tldCBwYWNrZXQgY291bnQgYW5kIGxlbmd0aCwgZGVyaXZlZCBmcm9tIHRoZSBzdHJlYW0KJiM0MzsgKiBjdXJyZW50bHkgaW5zdGFsbGVkIGluIHRoZSBzbG90LgomIzQzOyAqCiYjNDM7ICogVGhlIHJlcGxhY2VkIHN0cmVhbXMgYXJlIHRoZSBkZWZhdWx0cyBvd25lZCBieSB0ZXN0X3NwZWMsIHdoaWNoCiYjNDM7ICogZXZlcnkgc2xvdCBhbGlhc2VzLCBzbyB0aGV5IG11c3Qgbm90IGJlIGZyZWVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHBrdF9zdHJlYW1fZGltc19mbiBkaW1zLAomIzQzOwkJCQkgIGNvbnN0IHZvaWQgKmN0eCkKIHsKLQlzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTsKLQl1MzIgaTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgbmJfcGt0cywgcGt0X2xlbjsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewotCQlwa3Rfc3RyZWFtID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbTsKLQkJcGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwKLQkJCQkJCSAgIHBrdF9zdHJlYW0tJmd0O3BrdHNbMF0ubGVuLCBpLCAyKTsKLQkJaWYgKCFwa3Rfc3RyZWFtKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtOwomIzQzOwkJZGltcyh0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsICZhbXA7bmJfcGt0cywgJmFtcDtwa3RfbGVuKTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlkaW1zKHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0sIGksIGN0eCwgJmFtcDtuYl9wa3RzLCAmYW1wO3BrdF9sZW4pOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQogCi0JCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07CiYjNDM7CQl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHR4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7CiYjNDM7CQlpZiAocnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXZlbl9vZGRfZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCwKJiM0MzsJCQkgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKQomIzQzO3sKJiM0MzsJKm5iX3BrdHMgPSBvcmlnLSZndDtuYl9wa3RzIC8gMjsKJiM0MzsJKnBrdF9sZW4gPSBvcmlnLSZndDtwa3RzWzBdLmxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbGVuX2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsCiYjNDM7CQkgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJKm5iX3BrdHMgPSBvcmlnLSZndDtuYl9wa3RzIC8gMjsKJiM0MzsJKnBrdF9sZW4gPSBzb2NrX2lkID8gY2ZnLSZndDtsb25nX2xlbiA6IGNmZy0mZ3Q7c2hvcnRfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1bmV2ZW5fZGlzdF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LAomIzQzOwkJCSAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7CiYjNDM7CXUzMiBwa3RzX3NvY2swID0gY2ZnLSZndDt0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJKm5iX3BrdHMgPSBzb2NrX2lkID8gY2ZnLSZndDt0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCA6IHBrdHNfc29jazA7CiYjNDM7CSpwa3RfbGVuID0gY2ZnLSZndDtwa3RfbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEodGVzdCwgbGVuX2RpbXMsIGNmZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV91bmV2ZW5fZGlzdF9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnKQomIzQzO3sKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IGNmZy0mZ3Q7dG90YWxfcGt0cyAmbHQ7IDQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEodGVzdCwgdW5ldmVuX2Rpc3RfZGltcywgY2ZnKTsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQpAQCAtMTUwOCw4ICYjNDM7MTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplYwogCX0KIAogCXVtZW1fcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclswXS51bWVtOwomIzQzOwkvKiBOb24tb3duaW5nIHZpZXcgdXNlZCBvbmx5IGZvciBUWCBidWZmZXIgYXJpdGhtZXRpYzsgdGhlIHNvY2tldHMgYmVsb3cgYmluZCB0bwomIzQzOwkgKiB0aGUgUlgtb3duZWQgVU1FTSwgc28gdGhlIGhhbmRsZSwgY3EgYW5kIHJlZmNvdW50IHN0YXkgaW4gb25lIHBsYWNlLgomIzQzOwkgKi8KIAl1bWVtX3R4ID0gaWZvYmplY3QtJmd0O3hza19hcnJbMF0udW1lbV9yZWFsOwotCW1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTsKJiM0MzsJdW1lbV90eC0mZ3Q7bnVtX2ZyYW1lcyA9IHVtZW1fcngtJmd0O251bV9mcmFtZXM7CiYjNDM7CXVtZW1fdHgtJmd0O2ZyYW1lX2hlYWRyb29tID0gdW1lbV9yeC0mZ3Q7ZnJhbWVfaGVhZHJvb207CiYjNDM7CXVtZW1fdHgtJmd0O2J1ZmZlciA9IHVtZW1fcngtJmd0O2J1ZmZlcjsKJiM0MzsJdW1lbV90eC0mZ3Q7ZnJhbWVfc2l6ZSA9IHVtZW1fcngtJmd0O2ZyYW1lX3NpemU7CiYjNDM7CXVtZW1fdHgtJmd0O3VuYWxpZ25lZF9tb2RlID0gdW1lbV9yeC0mZ3Q7dW5hbGlnbmVkX21vZGU7CiAJdW1lbV90eC0mZ3Q7YmFzZV9hZGRyID0gMDsKIAl1bWVtX3R4LSZndDtuZXh0X2J1ZmZlciA9IDA7CiAKQEAgLTE1OTksNiAmIzQzOzE3MDEsOCBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwkvKiBNYXJrIGJlZm9yZSB4c2tfY29uZmlndXJlIHNvIHJvbGxiYWNrIGNhbiByZWxlYXNlIHRoZSBVTUVNIGlmIGl0IGZhaWxzLiAqLwomIzQzOwlpZm9iamVjdC0mZ3Q7eHNrLSZndDt1bWVtX3JlZiA9IHRydWU7CiAKIAlyZXQgPSB4c2tfY29uZmlndXJlKHRlc3QsIGlmb2JqZWN0LCB1bWVtLCBmYWxzZSk7CiAJaWYgKHJldCkKQEAgLTE2NjksMTIgJiM0MzsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAkJCQkgICAgICAgc3RyZXJyb3IoLWVycikpOwogCX0KIAomIzQzOwkvKiBQdWJsaXNoIHNldHVwIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFpbiB0aHJlYWQgZnJvbSB0aGUgYmFycmllci4gKi8KJiM0MzsJaWYgKGVycikKJiM0MzsJCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwomIzQzOwogCWlmICh0ZXN0LSZndDt1c2VfYmFycmllcikKIAkJcHRocmVhZF9iYXJyaWVyX3dhaXQoJmFtcDtiYXJyKTsKIAogCS8qIFdlIGxlYXZlIG9ubHkgbm93IGluIGNhc2Ugb2YgZXJyb3IgdG8gYXZvaWQgZ2V0dGluZyBzdHVjayBpbiB0aGUgYmFycmllciAqLwogCWlmIChlcnIpIHsKLQkJdGVzdC0mZ3Q7ZmFpbCA9IHRydWU7CiAJCXB0aHJlYWRfZXhpdChOVUxMKTsKIAl9CiAKQEAgLTE3MDEsMTIgJiM0MzsxODA4LDY1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAlwdGhyZWFkX2V4aXQoTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0MztpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKQogewotCXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotJmd0O3hzay0mZ3Q7dW1lbTsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoeHNrLSZndDt4c2spCiYjNDM7CQl4c2tfc29ja2V0X19kZWxldGUoeHNrLSZndDt4c2spOwomIzQzOwl4c2stJmd0O3hzayA9IE5VTEw7CiAKLQl4c2tfdW1lbV9fZGVsZXRlKHVtZW0tJmd0O3VtZW0pOwotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CS8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovCiYjNDM7CWlmICgheHNrLSZndDt1bWVtX3JlZikgewomIzQzOwkJeHNrLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDt1bWVtLSZndDt1c2VycykpIHsKJiM0MzsJCWlmICh1bWVtLSZndDt1bWVtKSB7CiYjNDM7CQkJaW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7CiYjNDM7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIGVycik7CiYjNDM7CQkJCS8qIEtlZXAgb3duZXJzaGlwIGV4cGxpY2l0IHNvIGEgbGF0ZXIgY2xlYW51cCBwYXNzIGNhbiByZXRyeQomIzQzOwkJCQkgKiBkZWxldGUuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZWZjb3VudF9zZXQoJmFtcDt1bWVtLSZndDt1c2VycywgMSk7CiYjNDM7CQkJCXhzay0mZ3Q7dW1lbV9yZWYgPSB0cnVlOwomIzQzOwkJCQl4c2stJmd0O3VtZW0gPSB1bWVtOwomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCX0KJiM0MzsJCQl1bWVtLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJCWlmICh1bWVtLSZndDtidWZmZXIgJmFtcDsmYW1wOyB1bWVtLSZndDttbWFwX3NpemUpIHsKJiM0MzsJCQltdW5tYXAodW1lbS0mZ3Q7YnVmZmVyLCB1bWVtLSZndDttbWFwX3NpemUpOwomIzQzOwkJCXVtZW0tJmd0O2J1ZmZlciA9IE5VTEw7CiYjNDM7CQkJdW1lbS0mZ3Q7bW1hcF9zaXplID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwl4c2stJmd0O3VtZW1fcmVmID0gZmFsc2U7CiYjNDM7CXhzay0mZ3Q7dW1lbSA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiYjNDM7ewomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWYgKCFpZm9iaikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQSBVTUVNIHRoYXQgY291bGQgbm90IGJlIGRlbGV0ZWQgc3RheXMgbWFwcGVkIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzLAomIzQzOwkgKiBzbyByZWNvcmQgaXQgcmF0aGVyIHRoYW4gbGV0dGluZyB0ZWFyZG93biBkcm9wIHRoZSBlcnJvci4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IHRlc3QtJmd0O25iX3NvY2tldHM7IGkgJmd0OyAwOyBpLS0pCiYjNDM7CQlpZiAoeHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDtpZm9iai0mZ3Q7eHNrX2FycltpIC0gMV0pKQomIzQzOwkJCXRlc3QtJmd0O2ZhaWwgPSB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCkBAIC0xNzY4LDI3ICYjNDM7MTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKQotewotCXUzMiBpOwotCi0JaWYgKCFpZm9iaiB8fCAhdGVzdCkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KQotCQl4c2tfc29ja2V0X19kZWxldGUoaWZvYmotJmd0O3hza19hcnJbaV0ueHNrKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpCi17Ci0JaWYgKCFpZm9iajEpCi0JCXJldHVybjsKLQotCXRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTsKLQlpZiAoaWZvYmoyICZhbXA7JmFtcDsgIWlmb2JqMi0mZ3Q7c2hhcmVkX3VtZW0pCi0JCXRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTsKLX0KLQogc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwKIAkJCQkgICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMikKIHsKQEAgLTE4NDAsMTMgJiM0MzsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppCiAJCWlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveSgmYW1wO2JhcnIpKSB7CiAJCQl0ZXN0LSZndDt1c2VfYmFycmllciA9IGZhbHNlOwogCQkJcHRocmVhZF9qb2luKHQwLCBOVUxMKTsKLQkJCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJCWNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTsKJiM0MzsJCQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7CiAJCQlyZXR1cm4gVEVTVF9GQUlMVVJFOwogCQl9CiAJfQogCi0JaWYgKGlmb2JqMikgewomIzQzOwlpZiAoaWZvYmoyICZhbXA7JmFtcDsgIXRlc3QtJmd0O2ZhaWwpIHsKIAkJLypTcGF3biBUWCB0aHJlYWQgKi8KIAkJcHRocmVhZF9jcmVhdGUoJmFtcDt0MSwgTlVMTCwgaWZvYmoyLSZndDtmdW5jX3B0ciwgdGVzdCk7CiAJCXB0aHJlYWRfam9pbih0MSwgTlVMTCk7CkBAIC0xODU1LDkgJiM0MzsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwogCiAJaWYgKHRlc3QtJmd0O3RvdGFsX3N0ZXBzID09IHRlc3QtJmd0O2N1cnJlbnRfc3RlcCB8fCB0ZXN0LSZndDtmYWlsKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpOwotCQljbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAl9CiAKIAlpZiAodGVzdC0mZ3Q7ZmFpbCkKQEAgLTE5NjYsOSAmIzQzOzIxMDMsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKIAlpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKQEAgLTIyMjYsNiAmIzQzOzIzNjIsMTAxIEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfbGVuKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY3R4KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCwKJiM0MzsJCQkJc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ190eCwgc3RydWN0IGJwZl9tYXAgKnhza21hcF9yeCwKJiM0MzsJCQkJc3RydWN0IGJwZl9tYXAgKnhza21hcF90eCwgdTMyIG5iX3NvY2tldHMsCiYjNDM7CQkJCXNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChuYl9zb2NrZXRzICZndDsgTUFYX1NPQ0tFVFMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7CiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRlc3QtJmd0O3RvdGFsX3N0ZXBzID0gMTsKJiM0MzsJdGVzdC0mZ3Q7bmJfc29ja2V0cyA9IG5iX3NvY2tldHM7CiYjNDM7CiYjNDM7CXRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7CiYjNDM7CiYjNDM7CXJldCA9IHNlcV9mbih0ZXN0LCBjdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHRlc3QpOwomIzQzOwomIzQzOwlyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7CiYjNDM7CQkuc2hvcnRfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwkJLmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsCiYjNDM7CQkJCSAgICBza2VsX3J4LSZndDttYXBzLnhzaywgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sCiYjNDM7CQkJCSAgICAmYW1wO2xlbl9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0gewomIzQzOwkJLnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LAomIzQzOwkJLnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDttYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LAomIzQzOwkJCQkgICAgJmFtcDt1bmV2ZW5fZGlzdF9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwpOwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI1MDYsOSAmIzQzOzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLjk0Yzc3NTc0ZjRhOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03Niw5ICYjNDM7NzcsMTMgQEAgZW51bSB0ZXN0X21vZGUgewogCiBzdHJ1Y3QgaWZvYmplY3Q7CiBzdHJ1Y3QgdGVzdF9zcGVjOwomIzQzO3N0cnVjdCBwa3Rfc3RyZWFtOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgdm9pZCAoKnBrdF9zdHJlYW1fZGltc19mbikoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsCiYjNDM7CQkJCSAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTsKIAogc3RydWN0IHhza19zb2NrZXRfaW5mbyB7CiAJc3RydWN0IHhza19yaW5nX2NvbnMgcng7CkBAIC05Myw2ICYjNDM7OTgsNyBAQCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHsKIAl1OCBkc3RfbWFjW0VUSF9BTEVOXTsKIAl1OCBzcmNfbWFjW0VUSF9BTEVOXTsKIAlib29sIGNoZWNrX2NvbnN1bWVyOwomIzQzOwlib29sIHVtZW1fcmVmOyAvKiB0cnVlIGlmIHRoaXMgc2xvdCBob2xkcyBhIGNvdW50ZWQgVU1FTSByZWZlcmVuY2UgKi8KIH07CiAKIGludCBraWNrX3J4KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7CkBAIC0xMDQsNiAmIzQzOzExMCw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHsKIAlzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07CiAJdTY0IG5leHRfYnVmZmVyOwogCXU2NCBtbWFwX3NpemU7CiYjNDM7CXJlZmNvdW50X3QgdXNlcnM7CiAJdTMyIG51bV9mcmFtZXM7CiAJdTMyIGZyYW1lX2hlYWRyb29tOwogCXZvaWQgKmJ1ZmZlcjsKQEAgLTE1OSw3ICYjNDM7MTY2LDcgQEAgaW50IGluaXRfaWZhY2Uoc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgdGhyZWFkX2Z1bmNfdCBmdW5jX3B0cik7CiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTsKIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLAogCQkJIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIGJvb2wgc2hhcmVkKTsKLQomIzQzO2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwogCiBzdHJ1Y3QgcGt0IHsKIAlpbnQgb2Zmc2V0OwpAQCAtMTc5LDYgJiM0MzsxODYsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0gewogCWJvb2wgdmVyYmF0aW07CiB9OwogCiYjNDM7c3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggewomIzQzOwl1MzIgc2hvcnRfbGVuOwomIzQzOwl1MzIgbG9uZ19sZW47CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHsKJiM0MzsJdTMyIHRvdGFsX3BrdHM7CiYjNDM7CXUzMiBwa3RfbGVuOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucykKIHsKIAlyZXR1cm4gb3B0aW9ucyAmYW1wOyBYRFBfUEtUX0NPTlREOwpAQCAtMjY4LDYgJiM0MzsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIAogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTsKIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7CkBAIC0yOTEsNiAmIzQzOzMxMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0gewogCXsubmFtZSA9ICYjMzQ7WERQX1BST0dfQ0xFQU5VUCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9EUk9QX0hBTEYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LAogCXsubmFtZSA9ICYjMzQ7WERQX1NIQVJFRF9VTUVNJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fNF9TT0NLRVRTJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5FVkVOX0RJU1QmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LAomIzQzOwl7Lm5hbWUgPSAmIzM0O1NIQVJFRF9VTUVNX1VOQUxJR05FRCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFkmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSwKIAl7Lm5hbWUgPSAmIzM0O0FMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7CiAJX191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTsKIH0geHNrIFNFQygmIzM0Oy5tYXBzJiMzNDspOwpAQCAtNzUsNiAmIzQzOzc1LDE5IEBAIFNFQygmIzM0O3hkcCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApCiAJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIGlkeCwgWERQX0RST1ApOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGFfZW5kOwomIzQzOwlfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhOwomIzQzOwomIzQzOwkvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovCiYjNDM7CWlmIChwa3RfbGVuICZsdDs9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCkKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3RfbWFwKCZhbXA7eHNrLCAwLCBYRFBfRFJPUCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3RfbWFwKCZhbXA7eHNrLCAxLCBYRFBfRFJPUCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIHsKIAlfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmgKQEAgLTMsNyAmIzQzOzMsOCBAQAogI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IXwogI2RlZmluZSBYU0tfWERQX0NPTU1PTl9IXwogCi0jZGVmaW5lIE1BWF9TT0NLRVRTIDIKJiM0MzsjZGVmaW5lIE1BWF9TT0NLRVRTIDQKJiM0MzsjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NAogI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MzsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovCiAKIHN0cnVjdCB4ZHBfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwppbmRleCA3ZGFkODU1NmE3MjJlLi41ZDhhMjllNzIyNGUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKQEAgLTExNywxMiAmIzQzOzExNywxMiBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludAogCiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pCiAKLXN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiYjNDM7c3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHsKIAlzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKIAlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7Ci0Jc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrOwotCXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtOwomIzQzOwlzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9OwomIzQzOwlzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtID0ge307CiAJYm9vbCB6Y19hdmFpbCA9IGZhbHNlOwogCXZvaWQgKmJ1ZnM7CiAJaW50IHJldDsKQEAgLTEzMSwzMiAmIzQzOzEzMSwyNiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCWlmIChidWZzID09IE1BUF9GQUlMRUQpCiAJCWV4aXRfd2l0aF9lcnJvcihlcnJubyk7CiAKLQl1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpOwotCWlmICghdW1lbSkgewotCQltdW5tYXAoYnVmcywgdW1lbV9zeik7Ci0JCWV4aXRfd2l0aF9lcnJvcihFTk9NRU0pOwotCX0KLQl1bWVtLSZndDtmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwomIzQzOwl1bWVtLm1tYXBfc2l6ZSA9IHVtZW1fc3o7CiYjNDM7CXVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7CiYjNDM7CXJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgJmFtcDt1bWVtLCBidWZzLCB1bWVtX3N6KTsKIAlpZiAocmV0KQogCQlleGl0X3dpdGhfZXJyb3IoLXJldCk7CiAKLQl4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTsKLQlpZiAoIXhzaykKLQkJZ290byBvdXQ7Ci0JaWZvYmplY3QtJmd0O2JpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZOwotCWlmb2JqZWN0LSZndDtyeF9vbiA9IHRydWU7Ci0JeHNrLSZndDtyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7Ci0JcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpOwomIzQzOwl4c2sudW1lbV9yZWYgPSB0cnVlOwomIzQzOwomIzQzOwlpZm9iai0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7CiYjNDM7CWlmb2JqLSZndDtyeF9vbiA9IHRydWU7CiYjNDM7CXhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7CiYjNDM7CXJldCA9IHhza19jb25maWd1cmVfc29ja2V0KCZhbXA7eHNrLCAmYW1wO3VtZW0sIGlmb2JqLCBmYWxzZSk7CiAJaWYgKCFyZXQpCiAJCXpjX2F2YWlsID0gdHJ1ZTsKIAotCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7Ci0JZnJlZSh4c2spOwotb3V0OgotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW1fc3opOwotCXhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7Ci0JZnJlZSh1bWVtKTsKJiM0MzsJLyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi8KJiM0MzsJcmV0ID0geHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDt4c2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZXhpdF93aXRoX2Vycm9yKC1yZXQpOwomIzQzOwogCXJldHVybiB6Y19hdmFpbDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIGFsbCBjb25maW5lZCB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMgZGlyZWN0b3J5LiYjMzQ7IEl0JiMzOTtzIHRvdWNoaW5nIGB0ZXN0X3hzay5jYCwgYHRlc3RfeHNrLmhgLCBgeHNrX3hkcF9wcm9ncy5jYCwgYHhza194ZHBfY29tbW9uLmhgLCBhbmQgYHhza3hjZWl2ZXIuY2AuIEFsbCBjb250YWluZWQgbmVhdGx5IHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyAqanVzdCogYWRkaW5nIG5ldyB0ZXN0cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBzaGFyZWQgVU1FTSBmb3IgQUZfWERQLiBHcmVhdCwgbW9yZSB0ZXN0cyBhcmUgYWx3YXlzIGdvb2QsIGJ1dCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPwoKTXkgZmlyc3QgaW5zdGluY3QgaXMgbm8uIEl0JiMzOTtzIHVzZXItc3BhY2UgdGVzdGluZyBjb2RlLiBJdCYjMzk7cyBub3QgbW9kaWZ5aW5nIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZS4gSXQmIzM5O3Mgbm90IGluIGBuZXQveGRwL2AsIGBuZXQvY29yZS9gLCBvciBga2VybmVsL2JwZi9gLCB3aGljaCB3b3VsZCBiZSB0aGUgcmVkIGZsYWdzIEkmIzM5O20gbG9va2luZyBmb3IuIFNvLCBpbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkJ1dCwgYXMgYWx3YXlzLCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkb3VibGUtY2hlY2suIEkmIzM5O2xsIHNjYW4gdGhlIGRpZmYgYWdhaW4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBzbmVha3kga2VybmVsIHNvdXJjZSBmaWxlLiBOb3BlLiBTYW1lIGZpbGVzIGFzIGJlZm9yZSwgYWxsIHdpdGhpbiB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnkuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLgoKT2theSwgbGV0JiMzOTtzIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gVGhlIHJ1bGUgaXMgcHJldHR5IGNsZWFyOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cywmIzM0OyBhbmQgdGhpbmdzIHRoYXQgYXJlIGJhc2ljYWxseSBoYXJtbGVzcy4gSXQgZG9lc24mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3QgJiMzNDtzZWxmdGVzdHMmIzM0OyBidXQgaXQgZ29lcyBvbiB0byBzYXksICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKU2luY2UgdGhpcyAqZG9lc24mIzM5O3QqIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIuIFNlbGZ0ZXN0cyBhcmUgdGhlcmUgdG8gdGVzdCB0aGUga2VybmVsLCBidXQgdGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoZW1zZWx2ZXMuIFRoZXkmIzM5O3JlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgcnVudGltZSBvciBleGVjdXRpb24gcGF0aC4gU28sIHRoaXMgZmFsbHMgdW5kZXIgJiMzNDttb2RpZmljYXRpb25zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7IERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTM6NTguNzY3NDcwMzQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjkxNzk1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjEzOjU4Ljc2NzQ3OTA3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNTY4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTI3ZTIxZTgyMDVhYTcyZGYzNjllODc3NzA0ZjkzNDk5YjAxNjZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzoxMzo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbmluZGV4IDQ1NDkzNThjYzhjMjEuLjVkNGViNDdjYmZlZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5AQCAtMTAxLDYgKzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWRcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHVtZW0tXFx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2VycywgMSk7XFxuIFxcdGlmIChpZm9iai1cXHUwMDNlc2hhcmVkX3VtZW0gXFx1MDAyNlxcdTAwMjYgaWZvYmotXFx1MDAzZXJ4X29uKSB7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcXG4gXFx0XFx0dW1lbS1cXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XFxuQEAgLTE1NCw2ICsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxcbiBcXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zICpyeHI7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR4c2stXFx1MDAzZXVtZW0gPSB1bWVtO1xcbiBcXHRjZmcucnhfc2l6ZSA9IHhzay1cXHUwMDNlcnhxc2l6ZTtcXG5AQCAtMTcwLDcgKzE3MiwyNiBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxcbiBcXG4gXFx0dHhyID0gaWZvYmplY3QtXFx1MDAzZXR4X29uID8gXFx1MDAyNnhzay1cXHUwMDNldHggOiBOVUxMO1xcbiBcXHRyeHIgPSBpZm9iamVjdC1cXHUwMDNlcnhfb24gPyBcXHUwMDI2eHNrLVxcdTAwM2VyeCA6IE5VTEw7XFxuLVxcdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXFx1MDAyNnhzay1cXHUwMDNleHNrLCBpZm9iamVjdC1cXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cXHUwMDNldW1lbSwgcnhyLCB0eHIsIFxcdTAwMjZjZmcpO1xcbitcXHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXFx1MDAyNnhzay1cXHUwMDNleHNrLCBpZm9iamVjdC1cXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cXHUwMDNldW1lbSwgcnhyLCB0eHIsIFxcdTAwMjZjZmcpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvciBzaGFyZWQgc29ja2V0cyByZWZjb3VudF9pbmMgaGFzbid0IHJ1biB5ZXQsIHNvIGNsZWFyIHVtZW0gdG8gbWFyayB0aGlzIHNsb3RcXG4rXFx0XFx0ICogYXMgaGF2aW5nIG5vIHJlZmVyZW5jZS4gRm9yIHRoZSBvd25lciAobm9uLXNoYXJlZCkgdGhlIHJlZmVyZW5jZSB3YXMgdGFrZW4gYnlcXG4rXFx0XFx0ICogeHNrX2NvbmZpZ3VyZV91bWVtOyBsZWF2ZSB1bWVtIHNldCBzbyB0aGUgY2FsbGVyJ3Mgcm9sbGJhY2sgcGF0aCBjYW4gcmVsZWFzZSBpdFxcbitcXHRcXHQgKiB2aWEgdW1lbV9yZWYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2hhcmVkKVxcbitcXHRcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHR4c2stXFx1MDAzZXhzayA9IE5VTEw7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzaGFyZWQpIHtcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2Vycyk7XFxuK1xcdFxcdHhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG5AQCAtMjAzLDYgKzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcXG4rXFx0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxcbitcXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cXHUwMDNlaWZpbmRleDtcXG4gXFx0dTMyIGksIGo7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xcbkBAIC0yMTQsNiArMjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XFxuK1xcdFxcdGlmb2JqLVxcdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRpZiAoaSA9PSAwKSB7XFxuQEAgLTU3MiwyOCArNjAwLDk1IEBAIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZWNlaXZlX2hhbGYoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbisvKlxcbisgKiBSZWdlbmVyYXRlIGV2ZXJ5IHBlci1zb2NrZXQgc3RyZWFtLCBwdWJsaXNoaW5nIGludG8geHNrX2FycltdXFxuKyAqIG9ubHkgb25jZSBhbGwgYWxsb2NhdGlvbnMgaGF2ZSBzdWNjZWVkZWQuIEBkaW1zIHN1cHBsaWVzIHRoZVxcbisgKiBwZXItc29ja2V0IHBhY2tldCBjb3VudCBhbmQgbGVuZ3RoLCBkZXJpdmVkIGZyb20gdGhlIHN0cmVhbVxcbisgKiBjdXJyZW50bHkgaW5zdGFsbGVkIGluIHRoZSBzbG90LlxcbisgKlxcbisgKiBUaGUgcmVwbGFjZWQgc3RyZWFtcyBhcmUgdGhlIGRlZmF1bHRzIG93bmVkIGJ5IHRlc3Rfc3BlYywgd2hpY2hcXG4rICogZXZlcnkgc2xvdCBhbGlhc2VzLCBzbyB0aGV5IG11c3Qgbm90IGJlIGZyZWVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVwbGFjZV9zZXEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgcGt0X3N0cmVhbV9kaW1zX2ZuIGRpbXMsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuLVxcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbi1cXHR1MzIgaTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHR1MzIgaSwgbmJfcGt0cywgcGt0X2xlbjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4tXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdGRpbXModGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcXHUwMDI2bmJfcGt0cywgXFx1MDAyNnBrdF9sZW4pO1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0ZGltcyh0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtLCBpLCBjdHgsIFxcdTAwMjZuYl9wa3RzLCBcXHUwMDI2cGt0X2xlbik7XFxuK1xcdFxcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbi1cXHRcXHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuLVxcdFxcdGlmICghcGt0X3N0cmVhbSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xcbitcXHRcXHRpZiAocnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHRcXHQgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxcbit7XFxuK1xcdCpuYl9wa3RzID0gb3JpZy1cXHUwMDNlbmJfcGt0cyAvIDI7XFxuK1xcdCpwa3RfbGVuID0gb3JpZy1cXHUwMDNlcGt0c1swXS5sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGxlbl9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxcbitcXHRcXHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XFxuK1xcbitcXHQqbmJfcGt0cyA9IG9yaWctXFx1MDAzZW5iX3BrdHMgLyAyO1xcbitcXHQqcGt0X2xlbiA9IHNvY2tfaWQgPyBjZmctXFx1MDAzZWxvbmdfbGVuIDogY2ZnLVxcdTAwM2VzaG9ydF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHVuZXZlbl9kaXN0X2RpbXMoc3RydWN0IHBrdF9zdHJlYW0gKm9yaWcsIHUzMiBzb2NrX2lkLCBjb25zdCB2b2lkICpjdHgsXFxuK1xcdFxcdFxcdCAgICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xcbitcXHR1MzIgcGt0c19zb2NrMCA9IGNmZy1cXHUwMDNldG90YWxfcGt0cyAvIDQ7XFxuK1xcbitcXHQqbmJfcGt0cyA9IHNvY2tfaWQgPyBjZmctXFx1MDAzZXRvdGFsX3BrdHMgLSBwa3RzX3NvY2swIDogcGt0c19zb2NrMDtcXG4rXFx0KnBrdF9sZW4gPSBjZmctXFx1MDAzZXBrdF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZylcXG4re1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNjIDIgfHwgY2ZnLVxcdTAwM2V0b3RhbF9wa3RzIFxcdTAwM2MgNClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuQEAgLTE1MDgsOCArMTYwMywxNSBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzX3R4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY1xcbiBcXHR9XFxuIFxcbiBcXHR1bWVtX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbMF0udW1lbTtcXG4rXFx0LyogTm9uLW93bmluZyB2aWV3IHVzZWQgb25seSBmb3IgVFggYnVmZmVyIGFyaXRobWV0aWM7IHRoZSBzb2NrZXRzIGJlbG93IGJpbmQgdG9cXG4rXFx0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cXG4rXFx0ICovXFxuIFxcdHVtZW1fdHggPSBpZm9iamVjdC1cXHUwMDNleHNrX2FyclswXS51bWVtX3JlYWw7XFxuLVxcdG1lbWNweSh1bWVtX3R4LCB1bWVtX3J4LCBzaXplb2YoKnVtZW1fdHgpKTtcXG4rXFx0dW1lbV90eC1cXHUwMDNlbnVtX2ZyYW1lcyA9IHVtZW1fcngtXFx1MDAzZW51bV9mcmFtZXM7XFxuK1xcdHVtZW1fdHgtXFx1MDAzZWZyYW1lX2hlYWRyb29tID0gdW1lbV9yeC1cXHUwMDNlZnJhbWVfaGVhZHJvb207XFxuK1xcdHVtZW1fdHgtXFx1MDAzZWJ1ZmZlciA9IHVtZW1fcngtXFx1MDAzZWJ1ZmZlcjtcXG4rXFx0dW1lbV90eC1cXHUwMDNlZnJhbWVfc2l6ZSA9IHVtZW1fcngtXFx1MDAzZWZyYW1lX3NpemU7XFxuK1xcdHVtZW1fdHgtXFx1MDAzZXVuYWxpZ25lZF9tb2RlID0gdW1lbV9yeC1cXHUwMDNldW5hbGlnbmVkX21vZGU7XFxuIFxcdHVtZW1fdHgtXFx1MDAzZWJhc2VfYWRkciA9IDA7XFxuIFxcdHVtZW1fdHgtXFx1MDAzZW5leHRfYnVmZmVyID0gMDtcXG4gXFxuQEAgLTE1OTksNiArMTcwMSw4IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogTWFyayBiZWZvcmUgeHNrX2NvbmZpZ3VyZSBzbyByb2xsYmFjayBjYW4gcmVsZWFzZSB0aGUgVU1FTSBpZiBpdCBmYWlscy4gKi9cXG4rXFx0aWZvYmplY3QtXFx1MDAzZXhzay1cXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xcbiBcXG4gXFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xNjY5LDEyICsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogUHVibGlzaCBzZXR1cCBmYWlsdXJlIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1haW4gdGhyZWFkIGZyb20gdGhlIGJhcnJpZXIuICovXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHRlc3QtXFx1MDAzZWZhaWwgPSB0cnVlO1xcbitcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyKVxcbiBcXHRcXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcXHUwMDI2YmFycik7XFxuIFxcbiBcXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gXFx0XFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzAxLDEyICsxODA4LDY1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcXG4gXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK2ludCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXFxuIHtcXG4tXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cXHUwMDNleHNrLVxcdTAwM2V1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFxuK1xcdGlmICghdW1lbSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoeHNrLVxcdTAwM2V4c2spXFxuK1xcdFxcdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXFx1MDAzZXhzayk7XFxuK1xcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4gXFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSk7XFxuK1xcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXFxuK1xcdGlmICgheHNrLVxcdTAwM2V1bWVtX3JlZikge1xcbitcXHRcXHR4c2stXFx1MDAzZXVtZW0gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpKSB7XFxuK1xcdFxcdGlmICh1bWVtLVxcdTAwM2V1bWVtKSB7XFxuK1xcdFxcdFxcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXFx1MDAzZXVtZW0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwieHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdFxcdFxcdC8qIEtlZXAgb3duZXJzaGlwIGV4cGxpY2l0IHNvIGEgbGF0ZXIgY2xlYW51cCBwYXNzIGNhbiByZXRyeVxcbitcXHRcXHRcXHRcXHQgKiBkZWxldGUuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzLCAxKTtcXG4rXFx0XFx0XFx0XFx0eHNrLVxcdTAwM2V1bWVtX3JlZiA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHhzay1cXHUwMDNldW1lbSA9IHVtZW07XFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHVtZW0tXFx1MDAzZWJ1ZmZlciBcXHUwMDI2XFx1MDAyNiB1bWVtLVxcdTAwM2VtbWFwX3NpemUpIHtcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG4rXFx0XFx0XFx0dW1lbS1cXHUwMDNlbW1hcF9zaXplID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHR4c2stXFx1MDAzZXVtZW1fcmVmID0gZmFsc2U7XFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuK3tcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZiAoIWlmb2JqKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBIFVNRU0gdGhhdCBjb3VsZCBub3QgYmUgZGVsZXRlZCBzdGF5cyBtYXBwZWQgdW50aWwgdGhlIHByb2Nlc3MgZXhpdHMsXFxuK1xcdCAqIHNvIHJlY29yZCBpdCByYXRoZXIgdGhhbiBsZXR0aW5nIHRlYXJkb3duIGRyb3AgdGhlIGVycm9yLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSBcXHUwMDNlIDA7IGktLSlcXG4rXFx0XFx0aWYgKHhza19kZWxldGVfc29ja2V0KFxcdTAwMjZpZm9iai1cXHUwMDNleHNrX2FycltpIC0gMV0pKVxcbitcXHRcXHRcXHR0ZXN0LVxcdTAwM2VmYWlsID0gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNzY4LDI3ICsxOTI4LDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbi17XFxuLVxcdHUzMiBpO1xcbi1cXG4tXFx0aWYgKCFpZm9iaiB8fCAhdGVzdClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKylcXG4tXFx0XFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVxcdTAwM2V4c2tfYXJyW2ldLnhzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbi17XFxuLVxcdGlmICghaWZvYmoxKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XFxuLVxcdGlmIChpZm9iajIgXFx1MDAyNlxcdTAwMjYgIWlmb2JqMi1cXHUwMDNlc2hhcmVkX3VtZW0pXFxuLVxcdFxcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXFxuIHtcXG5AQCAtMTg0MCwxMyArMTk3OSwxMiBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxcbiBcXHRcXHRpZiAocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koXFx1MDAyNmJhcnIpKSB7XFxuIFxcdFxcdFxcdHRlc3QtXFx1MDAzZXVzZV9iYXJyaWVyID0gZmFsc2U7XFxuIFxcdFxcdFxcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XFxuLVxcdFxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4tXFx0XFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpO1xcbitcXHRcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuIFxcdFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGlmb2JqMikge1xcbitcXHRpZiAoaWZvYmoyIFxcdTAwMjZcXHUwMDI2ICF0ZXN0LVxcdTAwM2VmYWlsKSB7XFxuIFxcdFxcdC8qU3Bhd24gVFggdGhyZWFkICovXFxuIFxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0MSwgTlVMTCwgaWZvYmoyLVxcdTAwM2VmdW5jX3B0ciwgdGVzdCk7XFxuIFxcdFxcdHB0aHJlYWRfam9pbih0MSwgTlVMTCk7XFxuQEAgLTE4NTUsOSArMTk5Myw4IEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXFxuIFxcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XFxuIFxcbiBcXHRpZiAodGVzdC1cXHUwMDNldG90YWxfc3RlcHMgPT0gdGVzdC1cXHUwMDNlY3VycmVudF9zdGVwIHx8IHRlc3QtXFx1MDAzZWZhaWwpIHtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRlc3QtXFx1MDAzZWZhaWwpXFxuQEAgLTE5NjYsOSArMjEwMyw4IEBAIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFxuIFxcdGlmIChzd2FwX3hza19yZXNvdXJjZXModGVzdCkpIHtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFx0fVxcbiBcXG5AQCAtMjIyNiw2ICsyMzYyLDEwMSBAQCBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY3R4KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3VuZXZlbl9kaXN0X3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxcbitcXHRcXHRcXHRcXHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChuYl9zb2NrZXRzIFxcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVSUk9SOiBbJXNdIGludmFsaWQgc29ja2V0IGNvdW50ICV1XFxcXG5cXFwiLCBfX2Z1bmNfXywgbmJfc29ja2V0cyk7XFxuK1xcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcdH1cXG4rXFxuK1xcdHRlc3QtXFx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcXG4rXFx0dGVzdC1cXHUwMDNlbmJfc29ja2V0cyA9IG5iX3NvY2tldHM7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xcbitcXG4rXFx0cmV0ID0gc2VxX2ZuKHRlc3QsIGN0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuK1xcbitcXHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcbitcXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0ge1xcbitcXHRcXHQuc2hvcnRfbGVuID0gTUlOX1BLVF9TSVpFLFxcbitcXHRcXHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3J4LVxcdTAwM2VtYXBzLnhzaywgc2tlbF90eC1cXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2bGVuX2N0eCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggdW5ldmVuX2Rpc3RfY3R4ID0ge1xcbitcXHRcXHQudG90YWxfcGt0cyA9IERFRkFVTFRfUEtUX0NOVCAqIDQsXFxuK1xcdFxcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcXG4rfVxcbitcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuK3tcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMKTtcXG4rfVxcbitcXG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbiBcXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXNoYXJlZF91bWVtO1xcbkBAIC0yNTA2LDkgKzI3MzcsOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uOTRjNzc1NzRmNGE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3hkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbkBAIC03Niw5ICs3NywxMyBAQCBlbnVtIHRlc3RfbW9kZSB7XFxuIFxcbiBzdHJ1Y3QgaWZvYmplY3Q7XFxuIHN0cnVjdCB0ZXN0X3NwZWM7XFxuK3N0cnVjdCBwa3Rfc3RyZWFtO1xcbiB0eXBlZGVmIGludCAoKnZhbGlkYXRpb25fZnVuY190KShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKTtcXG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XFxuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcXG4rdHlwZWRlZiB2b2lkICgqcGt0X3N0cmVhbV9kaW1zX2ZuKShzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pO1xcbiBcXG4gc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xcbkBAIC05Myw2ICs5OCw3IEBAIHN0cnVjdCB4c2tfc29ja2V0X2luZm8ge1xcbiBcXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcXG4gXFx0dTggc3JjX21hY1tFVEhfQUxFTl07XFxuIFxcdGJvb2wgY2hlY2tfY29uc3VtZXI7XFxuK1xcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xcbiB9O1xcbiBcXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG5AQCAtMTA0LDYgKzExMCw3IEBAIHN0cnVjdCB4c2tfdW1lbV9pbmZvIHtcXG4gXFx0c3RydWN0IHhza191bWVtICp1bWVtO1xcbiBcXHR1NjQgbmV4dF9idWZmZXI7XFxuIFxcdHU2NCBtbWFwX3NpemU7XFxuK1xcdHJlZmNvdW50X3QgdXNlcnM7XFxuIFxcdHUzMiBudW1fZnJhbWVzO1xcbiBcXHR1MzIgZnJhbWVfaGVhZHJvb207XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG5AQCAtMTU5LDcgKzE2Niw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpO1xcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcXG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7XFxuLVxcbitpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcXG4gXFxuIHN0cnVjdCBwa3Qge1xcbiBcXHRpbnQgb2Zmc2V0O1xcbkBAIC0xNzksNiArMTg2LDE2IEBAIHN0cnVjdCBwa3Rfc3RyZWFtIHtcXG4gXFx0Ym9vbCB2ZXJiYXRpbTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IHtcXG4rXFx0dTMyIHNob3J0X2xlbjtcXG4rXFx0dTMyIGxvbmdfbGVuO1xcbit9O1xcbitcXG4rc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB7XFxuK1xcdHUzMiB0b3RhbF9wa3RzO1xcbitcXHR1MzIgcGt0X2xlbjtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxcbiB7XFxuIFxcdHJldHVybiBvcHRpb25zIFxcdTAwMjYgWERQX1BLVF9DT05URDtcXG5AQCAtMjY4LDYgKzI4NSwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gXFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZyk7XFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XFxuQEAgLTI5MSw2ICszMTIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0X3NwZWMgdGVzdHNbXSA9IHtcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9QUk9HX0NMRUFOVVBcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9EUk9QX0hBTEZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfZHJvcH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfU0hBUkVEX1VNRU1cXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW19LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fNF9TT0NLRVRTXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX0xFTkdUSF9CQVNFRFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV9VTkVWRU5fRElTVFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0fSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX1VOQUxJR05FRFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZH0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfTUVUQURBVEFfQ09QWVxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXFxuIFxcdHsubmFtZSA9IFxcXCJYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSxcXG4gXFx0ey5uYW1lID0gXFxcIkFMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX2FsaWduZWRfaW52X2Rlc2NfbWJ9LFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcXG5AQCAtMTAsNyArMTAsNyBAQFxcbiBcXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbi1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTtcXG4gXFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XFxuIFxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XFxuIH0geHNrIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFxcXCJ4ZHBcXFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ4c2ssIGlkeCwgWERQX0RST1ApO1xcbiB9XFxuIFxcbitTRUMoXFxcInhkcFxcXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpeGRwLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0X191MzIgcGt0X2xlbiA9IGRhdGFfZW5kIC0gZGF0YTtcXG4rXFxuK1xcdC8qIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aC4gKi9cXG4rXFx0aWYgKHBrdF9sZW4gXFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxcbitcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcC5mcmFnc1xcXCIpIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4ge1xcbiBcXHRfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbkBAIC0zLDcgKzMsOCBAQFxcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXFxuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cXG4gXFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcXG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcXG4gI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cXG4gXFxuIHN0cnVjdCB4ZHBfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuaW5kZXggN2RhZDg1NTZhNzIyZS4uNWQ4YTI5ZTcyMjRlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbkBAIC0xMTcsMTIgKzExNywxMiBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxcbiBcXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4rc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4ge1xcbiBcXHRzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4gXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xcbi1cXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtID0ge307XFxuIFxcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcXG4gXFx0dm9pZCAqYnVmcztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTMxLDMyICsxMzEsMjYgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4gXFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcXG4gXFxuLVxcdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XFxuLVxcdGlmICghdW1lbSkge1xcbi1cXHRcXHRtdW5tYXAoYnVmcywgdW1lbV9zeik7XFxuLVxcdFxcdGV4aXRfd2l0aF9lcnJvcihFTk9NRU0pO1xcbi1cXHR9XFxuLVxcdHVtZW0tXFx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xcbi1cXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xcbitcXHR1bWVtLm1tYXBfc2l6ZSA9IHVtZW1fc3o7XFxuK1xcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgXFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XFxuIFxcbi1cXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcXG4tXFx0aWYgKCF4c2spXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuLVxcdGlmb2JqZWN0LVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuLVxcdHhzay1cXHUwMDNlcnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xcbi1cXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XFxuK1xcdHhzay51bWVtX3JlZiA9IHRydWU7XFxuK1xcbitcXHRpZm9iai1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuK1xcdGlmb2JqLVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuK1xcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFxcdTAwMjZ4c2ssIFxcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0emNfYXZhaWwgPSB0cnVlO1xcbiBcXG4tXFx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cXHUwMDNleHNrKTtcXG4tXFx0ZnJlZSh4c2spO1xcbi1vdXQ6XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW1fc3opO1xcbi1cXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXFx1MDAzZXVtZW0pO1xcbi1cXHRmcmVlKHVtZW0pO1xcbitcXHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xcbitcXHRyZXQgPSB4c2tfZGVsZXRlX3NvY2tldChcXHUwMDI2eHNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbitcXG4gXFx0cmV0dXJuIHpjX2F2YWlsO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzoxMzo1OS4yMzA4MzM3MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTk2NTgwNDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2VyLXNwYWNlIHRlc3QgY29kZSkgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMjdlMjFlODIwNWFhNzJkZjM2OWU4Nzc3MDRmOTM0OTliMDE2NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6MTM6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDU0OTM1OGNjOGMyMS4uNWQ0ZWI0N2NiZmVlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC0xMDEsNiArMTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2dW1lbS1cdTAwM2V1c2VycywgMSk7XG4gXHRpZiAoaWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gXHUwMDI2XHUwMDI2IGlmb2JqLVx1MDAzZXJ4X29uKSB7XG4gXHRcdHVtZW0tXHUwMDNlYmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pO1xuIFx0XHR1bWVtLVx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xuQEAgLTE1NCw2ICsxNTUsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xuIFx0c3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjtcbiBcdHN0cnVjdCB4c2tfcmluZ19wcm9kICp0eHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyArMTcyLDI2IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXG4gXHR0eHIgPSBpZm9iamVjdC1cdTAwM2V0eF9vbiA/IFx1MDAyNnhzay1cdTAwM2V0eCA6IE5VTEw7XG4gXHRyeHIgPSBpZm9iamVjdC1cdTAwM2VyeF9vbiA/IFx1MDAyNnhzay1cdTAwM2VyeCA6IE5VTEw7XG4tXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFx1MDAyNnhzay1cdTAwM2V4c2ssIGlmb2JqZWN0LVx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXHUwMDNldW1lbSwgcnhyLCB0eHIsIFx1MDAyNmNmZyk7XG4rXHRyZXQgPSB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdGlmIChyZXQpIHtcbitcdFx0LypcbitcdFx0ICogRm9yIHNoYXJlZCBzb2NrZXRzIHJlZmNvdW50X2luYyBoYXNuJ3QgcnVuIHlldCwgc28gY2xlYXIgdW1lbSB0byBtYXJrIHRoaXMgc2xvdFxuK1x0XHQgKiBhcyBoYXZpbmcgbm8gcmVmZXJlbmNlLiBGb3IgdGhlIG93bmVyIChub24tc2hhcmVkKSB0aGUgcmVmZXJlbmNlIHdhcyB0YWtlbiBieVxuK1x0XHQgKiB4c2tfY29uZmlndXJlX3VtZW07IGxlYXZlIHVtZW0gc2V0IHNvIHRoZSBjYWxsZXIncyByb2xsYmFjayBwYXRoIGNhbiByZWxlYXNlIGl0XG4rXHRcdCAqIHZpYSB1bWVtX3JlZi5cbitcdFx0ICovXG4rXHRcdGlmIChzaGFyZWQpXG4rXHRcdFx0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0XHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmIChzaGFyZWQpIHtcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNnVtZW0tXHUwMDNldXNlcnMpO1xuK1x0XHR4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBzZXRfcmluZ19zaXplKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG5AQCAtMjAzLDYgKzIyNCwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4gc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRcdCAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeClcbiB7XG4rXHQvKlxuK1x0ICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LFxuK1x0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxuK1x0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXG4rXHQgKi9cbitcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cdTAwM2VpZmluZGV4ID09IGlmb2JqX3J4LVx1MDAzZWlmaW5kZXg7XG4gXHR1MzIgaSwgajtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9JTlRFUkZBQ0VTOyBpKyspIHtcbkBAIC0yMTQsNiArMjQxLDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxuIFx0XHRpZm9iai1cdTAwM2V1c2VfZmlsbF9yaW5nID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNlcmVsZWFzZV9yeCA9IHRydWU7XG4gXHRcdGlmb2JqLVx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XG4rXHRcdGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7XG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoaSA9PSAwKSB7XG5AQCAtNTcyLDI4ICs2MDAsOTUgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuKy8qXG4rICogUmVnZW5lcmF0ZSBldmVyeSBwZXItc29ja2V0IHN0cmVhbSwgcHVibGlzaGluZyBpbnRvIHhza19hcnJbXVxuKyAqIG9ubHkgb25jZSBhbGwgYWxsb2NhdGlvbnMgaGF2ZSBzdWNjZWVkZWQuIEBkaW1zIHN1cHBsaWVzIHRoZVxuKyAqIHBlci1zb2NrZXQgcGFja2V0IGNvdW50IGFuZCBsZW5ndGgsIGRlcml2ZWQgZnJvbSB0aGUgc3RyZWFtXG4rICogY3VycmVudGx5IGluc3RhbGxlZCBpbiB0aGUgc2xvdC5cbisgKlxuKyAqIFRoZSByZXBsYWNlZCBzdHJlYW1zIGFyZSB0aGUgZGVmYXVsdHMgb3duZWQgYnkgdGVzdF9zcGVjLCB3aGljaFxuKyAqIGV2ZXJ5IHNsb3QgYWxpYXNlcywgc28gdGhleSBtdXN0IG5vdCBiZSBmcmVlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9yZXBsYWNlX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBwa3Rfc3RyZWFtX2RpbXNfZm4gZGltcyxcbitcdFx0XHRcdCAgY29uc3Qgdm9pZCAqY3R4KVxuIHtcbi1cdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xuLVx0dTMyIGk7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0dTMyIGksIG5iX3BrdHMsIHBrdF9sZW47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRcdGRpbXModGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0sIGksIGN0eCwgXHUwMDI2bmJfcGt0cywgXHUwMDI2cGt0X2xlbik7XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0ZGltcyh0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSwgaSwgY3R4LCBcdTAwMjZuYl9wa3RzLCBcdTAwMjZwa3RfbGVuKTtcbitcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbitcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuIFxuLVx0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4tXHRcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbi1cdFx0XHRcdFx0XHQgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbi1cdFx0aWYgKCFwa3Rfc3RyZWFtKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBldmVuX29kZF9kaW1zKHN0cnVjdCBwa3Rfc3RyZWFtICpvcmlnLCB1MzIgc29ja19pZCwgY29uc3Qgdm9pZCAqY3R4LFxuK1x0XHRcdCAgdTMyICpuYl9wa3RzLCB1MzIgKnBrdF9sZW4pXG4re1xuK1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuK1x0KnBrdF9sZW4gPSBvcmlnLVx1MDAzZXBrdHNbMF0ubGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBsZW5fZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0ICAgICB1MzIgKm5iX3BrdHMsIHUzMiAqcGt0X2xlbilcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnID0gY3R4O1xuK1xuK1x0Km5iX3BrdHMgPSBvcmlnLVx1MDAzZW5iX3BrdHMgLyAyO1xuK1x0KnBrdF9sZW4gPSBzb2NrX2lkID8gY2ZnLVx1MDAzZWxvbmdfbGVuIDogY2ZnLVx1MDAzZXNob3J0X2xlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdW5ldmVuX2Rpc3RfZGltcyhzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHQgICAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcbitcdHUzMiBwa3RzX3NvY2swID0gY2ZnLVx1MDAzZXRvdGFsX3BrdHMgLyA0O1xuK1xuK1x0Km5iX3BrdHMgPSBzb2NrX2lkID8gY2ZnLVx1MDAzZXRvdGFsX3BrdHMgLSBwa3RzX3NvY2swIDogcGt0c19zb2NrMDtcbitcdCpwa3RfbGVuID0gY2ZnLVx1MDAzZXBrdF9sZW47XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGV2ZW5fb2RkX2RpbXMsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fbGVuX3NlcShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCAqY2ZnKVxuK3tcbitcdHJldHVybiBwa3Rfc3RyZWFtX3JlcGxhY2Vfc2VxKHRlc3QsIGxlbl9kaW1zLCBjZmcpO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcpXG4re1xuK1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2MgMiB8fCBjZmctXHUwMDNldG90YWxfcGt0cyBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV9yZXBsYWNlX3NlcSh0ZXN0LCB1bmV2ZW5fZGlzdF9kaW1zLCBjZmcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTUwOCw4ICsxNjAzLDE1IEBAIHN0YXRpYyBpbnQgdGhyZWFkX2NvbW1vbl9vcHNfdHgoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjXG4gXHR9XG4gXG4gXHR1bWVtX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzBdLnVtZW07XG4rXHQvKiBOb24tb3duaW5nIHZpZXcgdXNlZCBvbmx5IGZvciBUWCBidWZmZXIgYXJpdGhtZXRpYzsgdGhlIHNvY2tldHMgYmVsb3cgYmluZCB0b1xuK1x0ICogdGhlIFJYLW93bmVkIFVNRU0sIHNvIHRoZSBoYW5kbGUsIGNxIGFuZCByZWZjb3VudCBzdGF5IGluIG9uZSBwbGFjZS5cbitcdCAqL1xuIFx0dW1lbV90eCA9IGlmb2JqZWN0LVx1MDAzZXhza19hcnJbMF0udW1lbV9yZWFsO1xuLVx0bWVtY3B5KHVtZW1fdHgsIHVtZW1fcngsIHNpemVvZigqdW1lbV90eCkpO1xuK1x0dW1lbV90eC1cdTAwM2VudW1fZnJhbWVzID0gdW1lbV9yeC1cdTAwM2VudW1fZnJhbWVzO1xuK1x0dW1lbV90eC1cdTAwM2VmcmFtZV9oZWFkcm9vbSA9IHVtZW1fcngtXHUwMDNlZnJhbWVfaGVhZHJvb207XG4rXHR1bWVtX3R4LVx1MDAzZWJ1ZmZlciA9IHVtZW1fcngtXHUwMDNlYnVmZmVyO1xuK1x0dW1lbV90eC1cdTAwM2VmcmFtZV9zaXplID0gdW1lbV9yeC1cdTAwM2VmcmFtZV9zaXplO1xuK1x0dW1lbV90eC1cdTAwM2V1bmFsaWduZWRfbW9kZSA9IHVtZW1fcngtXHUwMDNldW5hbGlnbmVkX21vZGU7XG4gXHR1bWVtX3R4LVx1MDAzZWJhc2VfYWRkciA9IDA7XG4gXHR1bWVtX3R4LVx1MDAzZW5leHRfYnVmZmVyID0gMDtcbiBcbkBAIC0xNTk5LDYgKzE3MDEsOCBAQCBzdGF0aWMgaW50IHRocmVhZF9jb21tb25fb3BzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdC8qIE1hcmsgYmVmb3JlIHhza19jb25maWd1cmUgc28gcm9sbGJhY2sgY2FuIHJlbGVhc2UgdGhlIFVNRU0gaWYgaXQgZmFpbHMuICovXG4rXHRpZm9iamVjdC1cdTAwM2V4c2stXHUwMDNldW1lbV9yZWYgPSB0cnVlO1xuIFxuIFx0cmV0ID0geHNrX2NvbmZpZ3VyZSh0ZXN0LCBpZm9iamVjdCwgdW1lbSwgZmFsc2UpO1xuIFx0aWYgKHJldClcbkBAIC0xNjY5LDEyICsxNzczLDE1IEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcbiBcdFx0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSk7XG4gXHR9XG4gXG4rXHQvKiBQdWJsaXNoIHNldHVwIGZhaWx1cmUgYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFpbiB0aHJlYWQgZnJvbSB0aGUgYmFycmllci4gKi9cbitcdGlmIChlcnIpXG4rXHRcdHRlc3QtXHUwMDNlZmFpbCA9IHRydWU7XG4rXG4gXHRpZiAodGVzdC1cdTAwM2V1c2VfYmFycmllcilcbiBcdFx0cHRocmVhZF9iYXJyaWVyX3dhaXQoXHUwMDI2YmFycik7XG4gXG4gXHQvKiBXZSBsZWF2ZSBvbmx5IG5vdyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIGdldHRpbmcgc3R1Y2sgaW4gdGhlIGJhcnJpZXIgKi9cbiBcdGlmIChlcnIpIHtcbi1cdFx0dGVzdC1cdTAwM2VmYWlsID0gdHJ1ZTtcbiBcdFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIFx0fVxuIFxuQEAgLTE3MDEsMTIgKzE4MDgsNjUgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4raW50IHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaylcbiB7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLVx1MDAzZXhzay1cdTAwM2V1bWVtO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSB4c2stXHUwMDNldW1lbTtcbitcbitcdGlmICghdW1lbSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoeHNrLVx1MDAzZXhzaylcbitcdFx0eHNrX3NvY2tldF9fZGVsZXRlKHhzay1cdTAwM2V4c2spO1xuK1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbitcdC8qIFNraXAgc2xvdHMgdGhhdCBuZXZlciBhY3F1aXJlZCBhIFVNRU0gcmVmZXJlbmNlIChwcmUtaW5pdGlhbGl6ZWQgYnV0IHVuY29uZmlndXJlZCkuICovXG4rXHRpZiAoIXhzay1cdTAwM2V1bWVtX3JlZikge1xuK1x0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKSkge1xuK1x0XHRpZiAodW1lbS1cdTAwM2V1bWVtKSB7XG4rXHRcdFx0aW50IGVyciA9IHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbitcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcInhza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXG5cIixcbitcdFx0XHRcdFx0ICAgICAgIGVycik7XG4rXHRcdFx0XHQvKiBLZWVwIG93bmVyc2hpcCBleHBsaWNpdCBzbyBhIGxhdGVyIGNsZWFudXAgcGFzcyBjYW4gcmV0cnlcbitcdFx0XHRcdCAqIGRlbGV0ZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuK1x0XHRcdFx0eHNrLVx1MDAzZXVtZW1fcmVmID0gdHJ1ZTtcbitcdFx0XHRcdHhzay1cdTAwM2V1bWVtID0gdW1lbTtcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0fVxuK1x0XHRcdHVtZW0tXHUwMDNldW1lbSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0aWYgKHVtZW0tXHUwMDNlYnVmZmVyIFx1MDAyNlx1MDAyNiB1bWVtLVx1MDAzZW1tYXBfc2l6ZSkge1xuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbitcdFx0XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IDA7XG4rXHRcdH1cbitcdH1cbitcbitcdHhzay1cdTAwM2V1bWVtX3JlZiA9IGZhbHNlO1xuK1x0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbit7XG4rXHR1MzIgaTtcbitcbitcdGlmICghaWZvYmopXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEEgVU1FTSB0aGF0IGNvdWxkIG5vdCBiZSBkZWxldGVkIHN0YXlzIG1hcHBlZCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0cyxcbitcdCAqIHNvIHJlY29yZCBpdCByYXRoZXIgdGhhbiBsZXR0aW5nIHRlYXJkb3duIGRyb3AgdGhlIGVycm9yLlxuK1x0ICovXG4rXHRmb3IgKGkgPSB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkgXHUwMDNlIDA7IGktLSlcbitcdFx0aWYgKHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqLVx1MDAzZXhza19hcnJbaSAtIDFdKSlcbitcdFx0XHR0ZXN0LVx1MDAzZWZhaWwgPSB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OCwyNyArMTkyOCw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQwLDEzICsxOTc5LDEyIEBAIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppXG4gXHRcdGlmIChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveShcdTAwMjZiYXJyKSkge1xuIFx0XHRcdHRlc3QtXHUwMDNldXNlX2JhcnJpZXIgPSBmYWxzZTtcbiBcdFx0XHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xuLVx0XHRcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbi1cdFx0XHRjbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgTlVMTCk7XG4rXHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpZm9iajIpIHtcbitcdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICF0ZXN0LVx1MDAzZWZhaWwpIHtcbiBcdFx0LypTcGF3biBUWCB0aHJlYWQgKi9cbiBcdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dDEsIE5VTEwsIGlmb2JqMi1cdTAwM2VmdW5jX3B0ciwgdGVzdCk7XG4gXHRcdHB0aHJlYWRfam9pbih0MSwgTlVMTCk7XG5AQCAtMTg1NSw5ICsxOTkzLDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdH1cbiBcbiBcdGlmICh0ZXN0LVx1MDAzZWZhaWwpXG5AQCAtMTk2Niw5ICsyMTAzLDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuQEAgLTIyMjYsNiArMjM2MiwxMDEgQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2UodGVzdCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX2xlbihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjdHgpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHBrdF9zdHJlYW1fdW5ldmVuX2Rpc3Rfc2VxKHRlc3QsIGN0eCkgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbitcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKG5iX3NvY2tldHMgXHUwMDNlIE1BWF9TT0NLRVRTKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXG5cIiwgX19mdW5jX18sIG5iX3NvY2tldHMpO1xuK1x0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuK1x0fVxuK1xuK1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4rXHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuK1xuK1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbitcbitcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbitcbitcdHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2UodGVzdCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDQsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbitcdFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuK1x0XHRcdFx0ICAgIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9sZW4sXG4rXHRcdFx0XHQgICAgXHUwMDI2bGVuX2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbitcdFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxuK1x0XHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcbitcdH07XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3QsXG4rXHRcdFx0XHQgICAgXHUwMDI2dW5ldmVuX2Rpc3RfY3R4KTtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXG4rXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcbitcbitcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlbWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZCwgTlVMTCk7XG4rfVxuK1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjUwNiw5ICsyNzM3LDggQEAgaW50IHRlc3RhcHBfaHdfc3dfbWF4X3Jpbmdfc2l6ZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2ViYXRjaF9zaXplID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2VyaW5nLnR4X21heF9wZW5kaW5nIC0gODtcbiBcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4tXHRcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial90eCk7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLjk0Yzc3NTc0ZjRhOGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl94ZHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL2tzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbkBAIC03Niw5ICs3NywxMyBAQCBlbnVtIHRlc3RfbW9kZSB7XG4gXG4gc3RydWN0IGlmb2JqZWN0O1xuIHN0cnVjdCB0ZXN0X3NwZWM7XG4rc3RydWN0IHBrdF9zdHJlYW07XG4gdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7XG4gdHlwZWRlZiB2b2lkICooKnRocmVhZF9mdW5jX3QpKHZvaWQgKmFyZyk7XG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4rdHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9zZXFfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCk7XG4rdHlwZWRlZiB2b2lkICgqcGt0X3N0cmVhbV9kaW1zX2ZuKShzdHJ1Y3QgcGt0X3N0cmVhbSAqb3JpZywgdTMyIHNvY2tfaWQsIGNvbnN0IHZvaWQgKmN0eCxcbitcdFx0XHRcdCAgIHUzMiAqbmJfcGt0cywgdTMyICpwa3RfbGVuKTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTkzLDYgKzk4LDcgQEAgc3RydWN0IHhza19zb2NrZXRfaW5mbyB7XG4gXHR1OCBkc3RfbWFjW0VUSF9BTEVOXTtcbiBcdHU4IHNyY19tYWNbRVRIX0FMRU5dO1xuIFx0Ym9vbCBjaGVja19jb25zdW1lcjtcbitcdGJvb2wgdW1lbV9yZWY7IC8qIHRydWUgaWYgdGhpcyBzbG90IGhvbGRzIGEgY291bnRlZCBVTUVNIHJlZmVyZW5jZSAqL1xuIH07XG4gXG4gaW50IGtpY2tfcngoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbkBAIC0xMDQsNiArMTEwLDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbitcdHJlZmNvdW50X3QgdXNlcnM7XG4gXHR1MzIgbnVtX2ZyYW1lcztcbiBcdHUzMiBmcmFtZV9oZWFkcm9vbTtcbiBcdHZvaWQgKmJ1ZmZlcjtcbkBAIC0xNTksNyArMTY2LDcgQEAgaW50IGluaXRfaWZhY2Uoc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgdGhyZWFkX2Z1bmNfdCBmdW5jX3B0cik7XG4gaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7XG4gaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sXG4gXHRcdFx0IHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIGJvb2wgc2hhcmVkKTtcbi1cbitpbnQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBzdHJ1Y3QgcGt0IHtcbiBcdGludCBvZmZzZXQ7XG5AQCAtMTc5LDYgKzE4NiwxNiBAQCBzdHJ1Y3QgcGt0X3N0cmVhbSB7XG4gXHRib29sIHZlcmJhdGltO1xuIH07XG4gXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xuK1x0dTMyIHNob3J0X2xlbjtcbitcdHUzMiBsb25nX2xlbjtcbit9O1xuK1xuK3N0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHgge1xuK1x0dTMyIHRvdGFsX3BrdHM7XG4rXHR1MzIgcGt0X2xlbjtcbit9O1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwa3RfY29udGludWVzKHUzMiBvcHRpb25zKVxuIHtcbiBcdHJldHVybiBvcHRpb25zIFx1MDAyNiBYRFBfUEtUX0NPTlREO1xuQEAgLTI2OCw2ICsyODUsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV9yeCh2b2lkICphcmcpO1xuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7XG5AQCAtMjkxLDYgKzMxMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xuIFx0ey5uYW1lID0gXCJYRFBfUFJPR19DTEVBTlVQXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxuIFx0ey5uYW1lID0gXCJYRFBfRFJPUF9IQUxGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwiWERQX1NIQVJFRF9VTUVNXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNXzRfU09DS0VUU1wiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9MRU5HVEhfQkFTRURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fVU5FVkVOX0RJU1RcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkFMSUdORURcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcbiBcdHsubmFtZSA9IFwiWERQX01FVEFEQVRBX0NPUFlfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCJBTElHTkVEX0lOVl9ERVNDX01VTFRJX0JVRkZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbmluZGV4IDAyM2Q4YmVmZDRjYWIuLjhiYWIyYmNmNTJhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXG5AQCAtMTAsNyArMTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcbiBcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2YoaW50KSk7XG4gfSB4c2sgU0VDKFwiLm1hcHNcIik7XG5AQCAtNzUsNiArNzUsMTkgQEAgU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuK1NFQyhcInhkcFwiKSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbitcdF9fdTMyIHBrdF9sZW4gPSBkYXRhX2VuZCAtIGRhdGE7XG4rXG4rXHQvKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGguICovXG4rXHRpZiAocGt0X2xlbiBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVClcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xuK31cbitcbiBTRUMoXCJ4ZHAuZnJhZ3NcIikgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgKzMsOCBAQFxuICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF9cbiAjZGVmaW5lIFhTS19YRFBfQ09NTU9OX0hfXG4gXG4tI2RlZmluZSBNQVhfU09DS0VUUyAyXG4rI2RlZmluZSBNQVhfU09DS0VUUyA0XG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqL1xuIFxuIHN0cnVjdCB4ZHBfaW5mbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbmluZGV4IDdkYWQ4NTU2YTcyMmUuLjVkOGEyOWU3MjI0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5AQCAtMTE3LDEyICsxMTcsMTIgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnRcbiBcbiAjZGVmaW5lIGV4aXRfd2l0aF9lcnJvcihlcnJvcikgX19leGl0X3dpdGhfZXJyb3IoZXJyb3IsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbitzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4rXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gdW1lbSA9IHt9O1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzEsMjYgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4tXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHVtZW0ubW1hcF9zaXplID0gdW1lbV9zejtcbitcdHVtZW0uZnJhbWVfc2l6ZSA9IFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4rXHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIFx1MDAyNnVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4rXHR4c2sudW1lbV9yZWYgPSB0cnVlO1xuK1xuK1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4rXHRpZm9iai1cdTAwM2VyeF9vbiA9IHRydWU7XG4rXHR4c2sucnhxc2l6ZSA9IFhTS19SSU5HX0NPTlNfX0RFRkFVTFRfTlVNX0RFU0NTO1xuK1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCBcdTAwMjZ1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbitcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXG4rXHRyZXQgPSB4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZ4c2spO1xuK1x0aWYgKHJldClcbitcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuK1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjEzOjU5LjIzMDgzNjE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY1Nzc3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIGFsbCBjb25maW5lZCB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMgZGlyZWN0b3J5LlwiIEl0J3MgdG91Y2hpbmcgYHRlc3RfeHNrLmNgLCBgdGVzdF94c2suaGAsIGB4c2tfeGRwX3Byb2dzLmNgLCBgeHNrX3hkcF9jb21tb24uaGAsIGFuZCBgeHNreGNlaXZlci5jYC4gQWxsIGNvbnRhaW5lZCBuZWF0bHkgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIHN1Z2dlc3RzIGl0J3MgKmp1c3QqIGFkZGluZyBuZXcgdGVzdHMsIHNwZWNpZmljYWxseSBhcm91bmQgc2hhcmVkIFVNRU0gZm9yIEFGX1hEUC4gR3JlYXQsIG1vcmUgdGVzdHMgYXJlIGFsd2F5cyBnb29kLCBidXQgdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz9cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgbm8uIEl0J3MgdXNlci1zcGFjZSB0ZXN0aW5nIGNvZGUuIEl0J3Mgbm90IG1vZGlmeWluZyBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEl0J3Mgbm90IGluIGBuZXQveGRwL2AsIGBuZXQvY29yZS9gLCBvciBga2VybmVsL2JwZi9gLCB3aGljaCB3b3VsZCBiZSB0aGUgcmVkIGZsYWdzIEknbSBsb29raW5nIGZvci4gU28sIGltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkJ1dCwgYXMgYWx3YXlzLCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIExldCdzIGRvdWJsZS1jaGVjay4gSSdsbCBzY2FuIHRoZSBkaWZmIGFnYWluIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBzbmVha3kga2VybmVsIHNvdXJjZSBmaWxlLiBOb3BlLiBTYW1lIGZpbGVzIGFzIGJlZm9yZSwgYWxsIHdpdGhpbiB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnkuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIGd1aWRlbGluZXMuIFRoZSBydWxlIGlzIHByZXR0eSBjbGVhcjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMsXCIgYW5kIHRoaW5ncyB0aGF0IGFyZSBiYXNpY2FsbHkgaGFybWxlc3MuIEl0IGRvZXNuJ3QgKmV4cGxpY2l0bHkqIGxpc3QgXCJzZWxmdGVzdHNcIiBidXQgaXQgZ29lcyBvbiB0byBzYXksIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TaW5jZSB0aGlzICpkb2Vzbid0KiB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgaXQncyBwcmV0dHkgY2xlYXIuIFNlbGZ0ZXN0cyBhcmUgdGhlcmUgdG8gdGVzdCB0aGUga2VybmVsLCBidXQgdGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoZW1zZWx2ZXMuIFRoZXkncmUgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBydW50aW1lIG9yIGV4ZWN1dGlvbiBwYXRoLiBTbywgdGhpcyBmYWxscyB1bmRlciBcIm1vZGlmaWNhdGlvbnMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuXG5cblNvLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIHdpbGwgYmU6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiIERvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTQwLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTQ6MTEuMTk2NjE2NzIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXItc3BhY2UgdGVzdCBjb2RlKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlci1zcGFjZSB0ZXN0IGNvZGUpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MTQ6MTEuMTk2NjQwMTMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowklftd[1] Phase: Running StartedAt: 2026-08-19 03:14:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowklftd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 03:14:36 +0000 UTC FinishedAt: 2026-08-19 03:14:41 +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,}